Private beta readiness

Safe-to-show packet for Docs Pools.

One page for Ryan, counsel, and known beta commissioners: what is live, what can be shown, what remains private-beta only, and what is explicitly blocked before broader selling.

Current launch posture

Known commissioners only

Docs Pools may be shown as private-beta sports-pool software. Do not run paid ads, public paid contests, open signup, buy-ins, stakes, wagers, prize wallets, payouts, escrow, or Docs Pools prize-money custody.

Last updated: May 20, 2026

Safe to show now

Live proof and private-beta surfaces

Click cards to open the relevant live route. Admin surfaces still require the proper signed session.

Proof gates

What has been proven

Quality gates

Ready to show

Latest local proof includes tests, lint, and production build passing before deploy.

Production smoke

Ready to show

Custom domain root, PGA demo, leaderboard, share kit, Terms, and admin gate have returned 200 on production smoke checks.

Backend proof

Ready to show

Supabase-backed submissions, duplicate prevention, deadline/open-state locking, score-aware leaderboard, CSV export, service-role admin writes, and live `public.pool_options` custom-option storage/read proof have been proven.

Protected surface proof language

Private beta only

Unauthenticated smoke only proves the gate; inner admin content is claimed live only when safely authenticated, otherwise covered by local tests/build.

Not ready / blocked

Do not overclaim these yet

Pilot qualification checklist

Should this known commissioner get a private-beta setup?

A phone-readable gate before Ryan creates a setup path: accept simple trusted pilots, pause for Ralph on proof or format risk, and decline out-of-bounds asks.

Accept

Known, reachable commissioner

Ryan already trusts the person, they can answer setup questions quickly, and they agree to keep the trial inside a small invited group.

Accept

Simple format fit

The pool can use the current picker, leaderboard, share kit, export, and setup-link flow without custom engineering during the event.

Needs Ralph

Non-golf choices or unusual scoring

Bring Ralph in before setup if the pool depends on custom option rows, manual scoring changes, or a format Ryan has not already tested end to end.

Needs Ralph

Deadline or proof uncertainty

Pause for Ralph if the entry window, first-entry proof, hidden test rows, leaderboard link, or share-kit link cannot be verified on the exact pool.

Decline

Out-of-bounds operating ask

Do not onboard pilots who need Docs Pools to handle funds, settle disputes, run broad acquisition, or promise unproven custom-option behavior.

Pilot intake packet

Questions before setup

Use this on the phone with one known commissioner before Ryan creates a setup path. Docs Pools is software only; all money, eligibility, rules, disputes, taxes, and records stay outside the product.

Commissioner / contact

Who is the commissioner, what is the best phone or email, and who has authority to confirm the pool rules?

Sport / format

What sport and format is this for: PGA-style picks, football slate, bracket/playoff pool, or another simple office-pool format?

Event / deadline

What event is the pool tied to, and what exact entry deadline should players see before picks close?

Pick count / option needs

How many picks should each player make, and can the pool use current default choices or does it need custom option rows verified for this exact pool?

First tester / proof readiness

Who is the first trusted tester, and can they submit one non-test entry before the commissioner invites the full group?

Off-platform / no-cash boundary

Can the commissioner confirm all payments, eligibility, rules, disputes, taxes, and records stay off-platform, with no Docs Pools buy-ins, wagers, payouts, escrow, or prize-money custody?

Copy intake request

Send before creating a path

Pilot intake request for Docs Pools private beta: Can you answer these before we create a setup path? 1. Commissioner/contact: name, phone/email, and rule owner. 2. Sport/format: PGA-style picks, football slate, bracket/playoff, or another simple office-pool format. 3. Event/deadline: event name and exact pick-close deadline. 4. Pick count/options: how many picks and whether default choices work. Custom options are live-capable now, but exact choices still need pool-by-pool setup verification before sharing. 5. First tester/proof: who can submit one non-test entry before wider sharing? 6. Boundary: Docs Pools is software only. Payments, eligibility, rules, disputes, taxes, and records stay off-platform; Docs Pools does not handle buy-ins, wagers, payouts, escrow, or prize-money custody. Reference packet: https://playdocspools.com/beta-readiness

Pilot decision memo

Turn intake answers into a safe call

Copy one decision after the intake packet. This memo does not create setup links or change setup-token behavior; it only tells Ryan whether the pilot is safe to accept, needs Ralph, or should be declined.

Accept

Private-beta setup fit

Use only when the commissioner is known and reachable, the event is invite-only, the format works with the current picker/leaderboard/share/export flow, and one trusted tester can prove a real non-test entry before group sharing.

Pilot decision: ACCEPT for private-beta setup review. Reason: known commissioner, simple format, clear event/deadline, current Docs Pools flow is enough, and one trusted first tester can prove the exact pool before wider sharing. Boundary: Docs Pools is software only. No Docs Pools buy-ins, wagers, payouts, escrow, prize custody, paid ads, public signup, or live non-golf custom-option proof claims. Next action: Ryan can prepare the setup path only after the boundary is confirmed in writing and the pool remains closed until first-entry proof passes.

Needs Ralph

Pause before setup

Use when the intake is directionally good but depends on custom non-golf choices, unusual scoring, unclear deadline/open state, uncertain proof links, hidden test-row cleanup, or any setup detail Ryan cannot verify from the packet.

Pilot decision: NEEDS RALPH before any setup path. Reason: the intake has a format, proof, deadline, option, or verification risk that should be checked before a commissioner gets a setup path. Boundary: do not claim live non-golf custom-option proof, and do not move forward if they need Docs Pools to handle buy-ins, wagers, payouts, escrow, or prize custody. Next action: Ralph verifies the exact pool plan, first-entry proof path, leaderboard/share-kit expectations, and whether this pool needs custom option rows configured before sharing.

Decline

Not a safe pilot

Use when the commissioner needs Docs Pools to collect or hold money, run a public paid contest, advertise broadly, settle prize disputes, support minors with money/prizes, or launch around unproven custom-option behavior.

Pilot decision: DECLINE for Docs Pools private beta. Reason: the request is outside the current software-only private-beta boundary or depends on behavior that is not proven for launch. Boundary: Docs Pools does not handle buy-ins, wagers, prize deposits, payouts, escrow, prize custody, paid ads, public signup, or live non-golf custom-option claims. Next action: do not create a setup path. Ryan can offer to revisit after attorney approval, exact custom-option setup proof, and launch boundaries are verified.

Setup path prep checklist

Before creating a setup path

Use this only after the pilot decision is ACCEPT. Do not send until proof is ready: the pool stays closed, the exact player form, leaderboard, and share-kit links are verified, and no money, prize, custody, custom-option, auth, payment, schema, or admin-control boundary has been crossed.

Prep item 1

Confirm accepted decision in writing

Owner: Ryan

Before creating a setup path, save the ACCEPT decision plus the private-beta boundary in writing: known invited group, software-only tooling, no Docs Pools buy-ins, wagers, payouts, escrow, prize custody, or money handling.

Stop if: The commissioner will not confirm the no-cash/no-custody boundary or wants Docs Pools to manage eligibility, disputes, taxes, records, or prize handling.

Prep item 2

Choose the existing setup route

Owner: Ryan

Use only an existing checkout success setup-token path or Ryan-assisted protected admin setup path. A buyer setup token may configure that provisioned pool, but it must not expose Ryan admin controls.

Stop if: The request requires new links, new tokens, auth changes, payment changes, schema changes, or exposing admin-only controls to the buyer.

Prep item 3

Keep the pool closed before proof

Owner: Ryan

Create or prepare the pool as closed to the group until one active non-test first-entry proof exists and hidden smoke/test rows remain separate.

Prep item 4

Verify exact links after setup

Owner: Ryan

After setup, verify the exact player form, leaderboard, and share-kit links for that pool before sending anything beyond the first trusted tester.

Stop if: Any link points to the wrong slug, wrong leaderboard, wrong share kit, or an unproven public route.

Prep item 5

Route custom or money risks to Ralph

Owner: Ralph

Stop and route to Ralph if custom non-golf options are not configured/verified for the exact pool, or if money, prizes, wagers, payouts, escrow, or prize custody appear.

Stop if: The commissioner expects unverified custom non-golf options or asks Docs Pools to touch funds.

Ralph setup request packet

Copy to Ralph before creating a setup path

Fill this after an ACCEPT decision and before Ralph/operator creates or verifies the setup path. It is a handoff note only: no admin controls, automatic token creation, auth changes, payment changes, migrations, or database writes.

Ralph setup request packet
Copy to Ralph before creating a setup path.

Commissioner/contact: [commissioner name, phone/email, and rule owner]
Sport/format: [PGA-style picks, football slate, bracket/playoff, or simple office-pool format]
Event/deadline: [event name and exact pick-close deadline players should see]
Setup route choice: [existing checkout success setup-token path or Ryan-assisted protected admin setup path]

Exact public links to verify after setup:
Player form: https://playdocspools.com/pools/[pool-slug]
Leaderboard: https://playdocspools.com/pools/[pool-slug]/leaderboard
Share kit: https://playdocspools.com/pools/[pool-slug]/share

First tester proof: [first trusted tester name and plan for one active non-test entry before group sharing]

Boundaries for this request:
- Docs Pools is software only: no Docs Pools buy-ins, wagers, payouts, escrow, prize deposits, prize custody, or money handling.
- Do not expose Ryan admin controls, admin sessions, admin exports, admin score tools, service-role actions, payment controls, secrets, or setup-token validation internals to the commissioner.
- Do not auto-create setup tokens, auto-create setup links, change auth/session behavior, change payments, write migrations, or perform DB writes from this packet.
- If non-golf custom options are required, treat exact per-pool option setup as needing Ralph verification before sharing.
- Keep the pool closed to the group until one active non-test first-entry proof exists and hidden smoke/test rows remain separate.

After setup path is created

Verification before sending beyond one tester

Use this only after a buyer setup token or Ryan-assisted admin setup path already exists. It verifies exact links, first-entry proof, hidden test separation, option readiness, and software-only boundaries; it does not create tokens, expose admin controls, weaken gates, perform DB writes, or claim live custom-option proof unless the exact pool's custom option rows have been verified.

Verify 1

Setup URL

Open the exact buyer setup URL that was already created for this pool. Confirm it is the intended commissioner and pool, and keep the URL private to that commissioner/Ryan/Ralph.

Stop if: The setup URL is missing, expired, for the wrong pool, asks for Ryan admin access, or requires creating a new token from this packet.

Verify 2

Player form

Open the exact pool player form and confirm the pool name, event/deadline, pick count, option labels, review-confirm flow, and software-only boundary are readable on a phone.

Stop if: The form points to the wrong slug, shows stale setup copy, accepts the wrong number of picks, hides the no-cash/no-custody boundary, or depends on unproven custom-option storage.

Verify 3

Leaderboard

Open the exact pool leaderboard and confirm it matches the player form slug, shows pending/scored states clearly, and does not mix hidden smoke/test rows into launch proof.

Stop if: The leaderboard route is wrong, empty in a confusing way after proof, or presents smoke/test rows as real player proof.

Verify 4

Share kit

Open the exact pool share kit and confirm it links to the same player form and leaderboard, includes only the known invited group posture, and keeps money/custody language out of bounds.

Stop if: The share kit points to a generic demo, wrong slug, public acquisition language, buy-in/prize handling language, or unproven custom-option claims.

Verify 5

Open or closed state

Confirm the pool stays closed while setup is being checked, then only opens for the first trusted tester when Ryan/Ralph intentionally approve that proof step.

Stop if: The pool is open to the whole group before exact links, option readiness, and first-entry proof status are verified.

Verify 6

First-entry proof

After the first trusted tester submits, confirm there is at least one active non-test entry for this exact pool before sending beyond one tester.

Stop if: There is no active non-test entry proof, proof belongs to another pool, or the only proof is hidden smoke/test data.

Verify 7

Hidden smoke/test separation

Confirm smoke/test/simulation rows remain hidden from active launch counts, leaderboard confidence, share claims, and commissioner proof language.

Stop if: Smoke/test rows are mixed into active proof, player-facing standings, export confidence, or launch copy.

Verify 8

Option readiness

For PGA/default flows, confirm current options are enough. For non-golf custom choices, treat exact per-pool option setup as needing Ralph verification before sharing.

Stop if: The pool needs custom non-golf options before exact rows are configured/verified, or anyone wants to claim custom-option proof publicly without checking the pool.

Verify 9

No-cash/no-custody boundary

Confirm the commissioner understands Docs Pools is software only: payments, eligibility, rules, disputes, taxes, records, and any prizes stay off-platform.

Stop if: The commissioner asks Docs Pools to handle buy-ins, wagers, payouts, escrow, prize deposits, prize custody, eligibility, disputes, taxes, or money records.

Copy verification packet

Fill with the exact setup URL and pool slug

After setup path is created verification packet
Use this after a buyer setup token/admin setup path already exists, before sending beyond one trusted tester.

Exact setup URL to verify: [exact already-created /setup/[token] URL or Ryan-assisted protected setup path]
Player form: https://playdocspools.com/pools/[pool-slug]
Leaderboard: https://playdocspools.com/pools/[pool-slug]/leaderboard
Share kit: https://playdocspools.com/pools/[pool-slug]/share
Open/closed state: closed
First-entry proof status: [none yet / one active non-test entry confirmed / blocked]
Hidden smoke/test separation: [hidden smoke/test count separate from active proof]
Option readiness: [ready with current defaults / custom rows verified / needs Ralph]

Send beyond one tester only after:
- Exact setup URL, player form, leaderboard, and share kit all point to the intended pool.
- Pool state is intentionally closed for setup or intentionally opened only for the first trusted tester.
- At least one active non-test first-entry proof exists for this exact pool.
- Hidden smoke/test rows remain separate from launch proof and player-facing confidence.
- Options are ready for the current flow; do not claim live custom non-golf option proof unless exact custom option rows are verified for that pool.
- Commissioner accepts software-only boundaries: no Docs Pools buy-ins, wagers, payouts, escrow, prize deposits, prize custody, or money handling.

This packet must not:
- Create setup tokens or setup links.
- Expose Ryan admin controls, admin sessions, service-role tools, payment controls, secrets, exports, or score/admin write tools.
- Weaken setup-token validation, auth/session checks, payment gates, schema gates, or no-cash/no-custody gates.
- Perform database writes, migrations, payment changes, or protected admin actions.
- Claim a specific pool's custom-option proof before exact rows are configured and verified.

First tester smoke log

One-tester proof packet after setup exists

Use this when Ryan/Ralph already have a setup path and need one trusted tester to submit. It captures tester name, proof status, visible confirmation ID, leaderboard check, hidden smoke/test separation, exact slug links, and stop-if blockers without creating tokens, changing auth, touching protected data, or performing writes.

Stop-if blockers

The setup path does not already exist or points to the wrong pool.

The player form, leaderboard, or share kit URL does not match this slug.

The tester cannot see a visible confirmation ID after submitting.

The leaderboard check is missing, confusing, or shows the wrong pool.

The only proof is hidden smoke/test data instead of one active non-test tester entry.

The pool needs custom non-golf options before exact rows are configured and verified.

Anyone asks Docs Pools to handle funds, payouts, escrow, prize deposits, prize custody, eligibility, disputes, taxes, or records.

Copy smoke log

Fill with the pool slug and tester proof

First tester smoke log packet
Use this only after a setup path already exists and one trusted tester is being asked to submit.

Tester name: [first tester name]
Proof status: not-started
Visible confirmation ID: [confirmation ID visible to tester after submit]
Leaderboard check: [not checked / pending visible / entry visible for exact pool / blocked]
Hidden smoke/test separation: [hidden smoke/test rows are separate from this active non-test proof]

Exact links for this tester:
Player form: https://playdocspools.com/pools/[pool-slug]
Leaderboard: https://playdocspools.com/pools/[pool-slug]/leaderboard
Share kit: https://playdocspools.com/pools/[pool-slug]/share

Ask the tester to do this:
1. Open the player form above on a phone.
2. Submit one real non-test entry for this exact pool.
3. Send Ryan/Ralph the visible confirmation ID from the success screen.
4. Open the leaderboard above and confirm the pool/entry state makes sense.
5. Do not use the share kit beyond this one-tester check until Ryan/Ralph confirm proof.

Stop if blockers:
- The setup path does not already exist or points to the wrong pool.
- The player form, leaderboard, or share kit URL does not match this slug.
- The tester cannot see a visible confirmation ID after submitting.
- The leaderboard check is missing, confusing, or shows the wrong pool.
- The only proof is hidden smoke/test data instead of one active non-test tester entry.
- The pool needs custom non-golf options before exact rows are configured and verified.
- Anyone asks Docs Pools to handle funds, payouts, escrow, prize deposits, prize custody, eligibility, disputes, taxes, or records.

This smoke log must not create setup tokens, expose admin controls, weaken auth/setup/payment/schema gates, perform database writes, or claim live custom-option proof unless exact custom option rows are verified for that pool.
Docs Pools is software only; any payments, eligibility, rules, disputes, taxes, records, and prizes stay off-platform.

Evidence capture after first submit

Copyable packet for Ryan/Ralph before wider sharing

Use this only after the first trusted tester submits. It records screenshots, exact links, active proof count, hidden smoke/test count, option readiness, and the software-only no-cash/no-custody boundary without creating tokens, exposing admin controls, writing data, changing gates, or claiming live custom-option proof unless the exact pool's custom option rows have been verified.

Evidence item 1

Confirmation evidence

Save the visible confirmation ID screenshot or file note from the first tester's success screen for the exact pool.

Stop if: There is no visible confirmation ID, the screenshot belongs to a different pool, or the proof is only an admin/internal note.

Evidence item 2

Leaderboard evidence

Save a leaderboard screenshot or written check showing the exact pool route and the first tester's expected pending/scored state.

Stop if: The leaderboard is the wrong slug, confusing after submission, missing the tester when expected, or mixing hidden smoke/test rows into proof.

Evidence item 3

Exact link packet

Record the already-created setup URL plus the exact player form, leaderboard, and share-kit links for this pool.

Stop if: Any link is missing, points to the demo/wrong slug, requires admin access, or implies this packet creates setup tokens or setup links.

Evidence item 4

Proof counts

Record the active non-test proof count separately from the hidden smoke/test count before sending beyond the first tester.

Stop if: Active proof is zero, only smoke/test rows exist, or hidden rows are being used as launch proof.

Evidence item 5

Option readiness

Record whether current defaults are enough or whether non-golf custom choices still need exact public.pool_options rows configured and verified for this pool.

Stop if: Anyone wants to claim live custom non-golf option proof before exact per-pool option setup is verified for sharing.

Evidence item 6

No-cash/no-custody boundary

Record the commissioner confirmation that Docs Pools is software only and will not handle payments, eligibility, disputes, records, prizes, or funds.

Stop if: The commissioner asks Docs Pools to handle buy-ins, wagers, payouts, escrow, prize deposits, prize custody, eligibility, disputes, taxes, or money records.

Copy evidence packet

Fill after first tester submits

Post-first-tester evidence capture packet
Use this after the first trusted tester submits, before Ryan/Ralph send the pool beyond that tester.

Screenshots / evidence to save:
Visible confirmation ID screenshot or file note: [screenshot filename/link or file note with visible confirmation ID]
Leaderboard screenshot or check note: [screenshot filename/link or check note after first tester submits]

Exact links:
Setup URL: [exact already-created /setup/[token] URL or protected Ryan/Ralph setup reference]
Player form: https://playdocspools.com/pools/[pool-slug]
Leaderboard: https://playdocspools.com/pools/[pool-slug]/leaderboard
Share kit: https://playdocspools.com/pools/[pool-slug]/share

Counts and readiness:
Active non-test proof count: [active non-test count for this exact pool]
Hidden smoke/test count: [hidden smoke/test count kept separate from launch proof]
Option readiness state: [ready with current defaults / custom rows verified / needs Ralph]
No-cash/no-custody boundary confirmation: [commissioner confirmed software-only, no Docs Pools cash/prize custody]

Ryan/Ralph checklist before broader sharing:
- Confirmation evidence and leaderboard evidence are saved for the exact pool.
- Setup URL, player form, leaderboard, and share kit all match the intended slug.
- Active non-test proof count is at least one and hidden smoke/test rows remain separate.
- Option readiness is accurate; do not claim live custom non-golf option proof unless exact custom option rows are verified for that pool.
- Commissioner confirms Docs Pools is software only: no Docs Pools buy-ins, wagers, payouts, escrow, prize deposits, prize custody, or money handling.

This packet is read-only. It must not create setup tokens, expose admin controls, weaken auth/setup/payment/schema gates, perform database writes, change payments, run migrations, or claim live custom-option proof before exact custom option rows are verified for that pool.

Post-evidence release decision

Release, hold for Ralph, or stop

Use this only after first-tester evidence capture. It turns the saved proof into a read-only decision for the known invited group, without creating setup tokens, exposing admin controls, writing data, changing auth/payment/schema gates, or claiming live custom-option proof unless the exact pool's custom option rows have been verified.

RELEASE

Release to known invited group

Decide when
Use only when evidence capture is complete, the exact pool links match, active non-test proof is at least one, hidden smoke/test rows remain separate, options are ready without unproven custom claims, and the commissioner has confirmed the software-only boundary.
Next action
Send the pool-specific share kit to the known invited group only. Keep all payments, eligibility, rules, disputes, taxes, records, and prizes off-platform.

HOLD FOR RALPH

Hold for Ralph

Decide when
Use when proof exists but Ryan/Ralph still need to verify confusing leaderboard evidence, link mismatch risk, option readiness, hidden smoke/test separation, deadline/open-state risk, or any custom non-golf option dependency.
Next action
Do not share beyond the first tester. Ralph reviews the exact setup URL, player form, leaderboard, share kit, evidence, proof counts, and whether exact custom option rows still need per-pool verification.

STOP DECLINE

Stop or decline

Decide when
Use when active non-test proof is missing, evidence belongs to the wrong pool, hidden smoke/test rows are being treated as proof, the commissioner needs Docs Pools to touch funds, or the pilot depends on unproven custom-option behavior.
Next action
Do not release the share kit and do not create a new setup path from this packet. Decline or restart only after the blocker is resolved and the software-only boundary is confirmed.

Copy decision packet

Fill after evidence capture

Post-evidence pilot release decision packet
Use this after first-tester evidence capture to decide RELEASE, HOLD_FOR_RALPH, or STOP_DECLINE before sending beyond the first tester.

Decision: HOLD_FOR_RALPH
Decision meaning: Hold for Ralph
Decision rule: Use when proof exists but Ryan/Ralph still need to verify confusing leaderboard evidence, link mismatch risk, option readiness, hidden smoke/test separation, deadline/open-state risk, or any custom non-golf option dependency.
Next action: Do not share beyond the first tester. Ralph reviews the exact setup URL, player form, leaderboard, share kit, evidence, proof counts, and whether exact custom option rows still need per-pool verification.

Exact links:
Setup URL: [exact already-created /setup/[token] URL or protected Ryan/Ralph setup reference]
Player form: https://playdocspools.com/pools/[pool-slug]
Leaderboard: https://playdocspools.com/pools/[pool-slug]/leaderboard
Share kit: https://playdocspools.com/pools/[pool-slug]/share

Evidence and counts:
Evidence status: [confirmation screenshot/file note saved / missing / needs Ralph]
Leaderboard status: [leaderboard screenshot/check saved / confusing / needs Ralph]
Active non-test proof count: [active non-test count for this exact pool]
Hidden smoke/test count: [hidden smoke/test count kept separate from launch proof]
Option readiness state: [ready with current defaults / custom rows verified / needs Ralph]
Boundary confirmation: [commissioner confirmed no Docs Pools cash, custody, paid ads, public signup, or public paid contest]

Release only if all are true:
- Evidence capture is saved for the exact pool and the leaderboard check matches the same slug.
- Active non-test proof count is at least one, and hidden smoke/test rows remain separate from launch proof.
- Option readiness is accurate; do not claim live custom non-golf option proof unless exact custom option rows are verified for that pool.
- Commissioner confirms Docs Pools is software only: no Docs Pools buy-ins, wagers, payouts, escrow, prize deposits, prize custody, or money handling.
- The group remains known and invited only: no paid ads, no public signup, no broad public acquisition, and no public paid contests.

HOLD_FOR_RALPH if any proof, link, deadline/open-state, option, or hidden-row detail is unclear.
STOP_DECLINE if the pilot needs Docs Pools funds/custody, public acquisition, unproven custom-option behavior, or release without active non-test proof.

This decision packet is read-only. It must not create setup tokens, expose admin controls, perform database writes, change auth/session/setup-token/payment/schema gates, run migrations, create admin controls, or claim live custom-option proof before exact custom option rows are verified for that pool.

Invited group launch monitor

24-hour checklist after RELEASE

Use this only after Ryan/Ralph choose RELEASE for one known invited group. It keeps the first day limited to exact setup, player, leaderboard, and share links; active proof counts; option-readiness state; stop/rollback triggers; and no-cash/no-custody/no-admin/no-write/no-token/no-migration/no-paid-ads/no-public-signup/no-custom-option-overclaim boundaries.

Before share

Verify RELEASE is explicit

Ryan/Ralph have chosen RELEASE for one known invited group, exact setup/player/leaderboard/share links match the slug, active non-test proof is present, hidden smoke/test rows are separate, and option readiness does not overclaim custom non-golf proof.

Before share

Send only the pool-specific share kit

Share the pool-specific share kit with the known invited group only. Do not post public signup links, run paid ads, or broaden beyond the approved group during the first 24 hours.

First hour

Player form and confirmations

Confirm at least one invited player can open the exact player form, submit through review-confirm, see a confirmation ID, and understand the software-only/no-cash/no-custody boundary.

First hour

Leaderboard and proof counts

Refresh the exact leaderboard after real submissions, compare active non-test proof count with hidden smoke/test count, and make sure hidden rows are not presented as launch proof.

First day

Commissioner support check

Ask the known commissioner whether links, deadline/open state, picks/options, and leaderboard status are clear. Route option uncertainty or unusual scoring to Ralph before further sharing.

Stop / rollback

Stop sharing and close the pool if needed

Stop or roll back to closed/private if links are wrong, confirmations fail, leaderboard is confusing, active proof disappears, hidden smoke/test rows leak into proof, option readiness is overstated, or anyone asks Docs Pools to handle funds/custody/admin actions.

Copy launch monitor packet

Fill after RELEASE for one invited group

Invited group launch monitor packet
Use this only after Ryan/Ralph choose RELEASE for one known invited group. Monitor the first 24 hours before any broader sharing.

Exact links:
Setup URL: [exact already-created /setup/[token] URL or protected Ryan/Ralph setup reference]
Player form: https://playdocspools.com/pools/[pool-slug]
Leaderboard: https://playdocspools.com/pools/[pool-slug]/leaderboard
Share kit: https://playdocspools.com/pools/[pool-slug]/share

Release scope and proof:
Invited group scope: [known invited group name and approximate player count; no public signup]
RELEASE decision by: [Ryan/Ralph name and timestamp after RELEASE decision]
Active non-test proof count: [active non-test count for this exact pool before group share]
Hidden smoke/test count: [hidden smoke/test count kept separate from launch proof]
Option readiness state: [ready with current defaults / custom rows verified / needs Ralph]
First-day check owner: [Ryan/Ralph/commissioner owner for first-hour and first-day checks]

24-hour launch monitor checklist:
- Before share: Verify RELEASE is explicit - Ryan/Ralph have chosen RELEASE for one known invited group, exact setup/player/leaderboard/share links match the slug, active non-test proof is present, hidden smoke/test rows are separate, and option readiness does not overclaim custom non-golf proof.
- Before share: Send only the pool-specific share kit - Share the pool-specific share kit with the known invited group only. Do not post public signup links, run paid ads, or broaden beyond the approved group during the first 24 hours.
- First hour: Player form and confirmations - Confirm at least one invited player can open the exact player form, submit through review-confirm, see a confirmation ID, and understand the software-only/no-cash/no-custody boundary.
- First hour: Leaderboard and proof counts - Refresh the exact leaderboard after real submissions, compare active non-test proof count with hidden smoke/test count, and make sure hidden rows are not presented as launch proof.
- First day: Commissioner support check - Ask the known commissioner whether links, deadline/open state, picks/options, and leaderboard status are clear. Route option uncertainty or unusual scoring to Ralph before further sharing.
- Stop / rollback: Stop sharing and close the pool if needed - Stop or roll back to closed/private if links are wrong, confirmations fail, leaderboard is confusing, active proof disappears, hidden smoke/test rows leak into proof, option readiness is overstated, or anyone asks Docs Pools to handle funds/custody/admin actions.

First-day checks:
- Player form loads on phone for the exact slug and shows the correct pool/event/deadline.
- New invited players can submit, see confirmation IDs, and are counted as active non-test proof only when they are real launch entries.
- Leaderboard matches the same slug and keeps pending/scored states understandable.
- Share kit links point to the same player form and leaderboard, and the commissioner does not forward beyond the approved invited group.
- Option readiness remains accurate: current defaults are OK only when sufficient; do not claim live custom non-golf option proof unless exact custom option rows are verified for that pool.

Stop / rollback triggers:
- Wrong setup, player, leaderboard, or share link.
- Missing confirmation IDs, failed submissions, confusing leaderboard state, or proof count mismatch.
- Hidden smoke/test rows appear in active launch proof or player-facing confidence.
- Pool needs custom non-golf options before exact rows are configured and verified.
- Commissioner or players ask Docs Pools to handle buy-ins, wagers, payouts, escrow, prize deposits, prize custody, eligibility, disputes, taxes, money records, admin access, or protected operations.
- Sharing expands beyond the known invited group, paid ads, public signup, or public paid contests.

Boundaries:
- No cash: no Docs Pools buy-ins, stakes, wagers, or money collection.
- No custody: no Docs Pools prize deposits, payouts, escrow, wallets, or prize-money custody.
- No admin exposure: do not expose Ryan admin controls, admin sessions, service-role tools, exports, score tools, payment controls, secrets, or setup-token internals.
- No write / no token / no migration: this packet must not perform DB writes, create setup tokens, create setup links, change auth/session/setup-token/payment/schema gates, or run migrations.
- No paid ads / no public signup: keep this to the approved known invited group only.
- No custom-option overclaim: do not claim live custom non-golf option proof unless exact custom option rows are verified for that pool.

Post-launch support triage

After the first 24 hours: monitor, fix, or stop

Use this after the known invited-group pilot has run for 24 hours. It turns proof counts, support issue counts, exact links, leaderboard state, option readiness, and boundary status into a read-only decision: keep monitoring, fix with Ralph, or close/stop.

KEEP MONITORING

Keep monitoring

Decide when
Use when the first 24 hours have clean active non-test proof, exact links still match, support issues are zero or minor/resolved, option readiness is accurate, and the no-cash/no-custody boundary is intact.
Next action
Keep the same known invited-group scope, assign the next support check owner, and continue watching proof counts, support issues, leaderboard clarity, and boundary drift before any broader sharing.

FIX WITH RALPH

Fix with Ralph

Decide when
Use when the pilot is still viable but Ryan/Ralph need to resolve confusing leaderboard state, support issue patterns, link/deadline/open-state confusion, option/format uncertainty, or hidden-row proof questions.
Next action
Pause further sharing, keep the group private, have Ralph review the exact setup/player/leaderboard/share links plus issue list, then rerun the 24-hour monitor after the fix is verified.

CLOSE STOP

Close or stop

Decide when
Use when active proof is missing or untrustworthy, the wrong pool was shared, hidden smoke/test rows are treated as proof, support issues show broken core flow, or anyone asks for Docs Pools cash/custody/admin/public-launch behavior.
Next action
Close the pool or stop sharing, do not create new setup tokens, do not expose admin controls, and restart only after Ryan/Ralph have resolved the blocker inside the software-only private-beta boundary.

Usage proof

After the first 24 hours, compare active non-test proof count with the expected invited-group response and keep hidden smoke/test rows separate.

Decision signal: Keep monitoring if real entries are arriving and proof is clean; close/stop if proof is missing or only smoke/test data exists.

Support issues

Count commissioner/player support issues from the first 24 hours, grouping them as link/access, confirmation, leaderboard, deadline/open-state, option/format, or boundary/money asks.

Decision signal: Keep monitoring for zero or minor resolved issues; fix with Ralph for repeat/confusing product issues; close/stop for money/custody/admin or unsafe launch asks.

Links / leaderboard

Reopen the exact setup URL, player form, leaderboard, and share kit. Confirm they still point to the intended slug and the leaderboard state is understandable.

Decision signal: Fix with Ralph if links, confirmations, or leaderboard states are unclear; close/stop if the wrong pool was shared or proof cannot be trusted.

Options / format

Confirm current defaults still match the pool. For non-golf custom choices, verify exact public.pool_options rows for this pool before sharing.

Decision signal: Fix with Ralph if options or scoring need cleanup; close/stop if the pilot depends on unproven live custom-option behavior.

Boundaries

Confirm the commissioner and players stayed inside the software-only boundary: no Docs Pools buy-ins, wagers, payouts, escrow, prize custody, admin access, public signup, or paid ads.

Decision signal: Close/stop immediately if anyone asks Docs Pools to handle cash/custody, expose admin controls, broaden publicly, or weaken auth/payment/schema gates.

Copy triage packet

Fill after the first 24 hours

Post-launch support triage packet
Use this after the first 24 hours of a known invited-group pilot to decide KEEP_MONITORING, FIX_WITH_RALPH, or CLOSE_STOP.

Decision: FIX_WITH_RALPH
Decision meaning: Fix with Ralph
Decision rule: Use when the pilot is still viable but Ryan/Ralph need to resolve confusing leaderboard state, support issue patterns, link/deadline/open-state confusion, option/format uncertainty, or hidden-row proof questions.
Next action: Pause further sharing, keep the group private, have Ralph review the exact setup/player/leaderboard/share links plus issue list, then rerun the 24-hour monitor after the fix is verified.

Exact links:
Setup URL: [exact already-created /setup/[token] URL or protected Ryan/Ralph setup reference]
Player form: https://playdocspools.com/pools/[pool-slug]
Leaderboard: https://playdocspools.com/pools/[pool-slug]/leaderboard
Share kit: https://playdocspools.com/pools/[pool-slug]/share

First-24-hour evidence:
Invited group scope: [known invited group name and approximate player count; no public signup]
Active non-test proof count: [active non-test count after first 24 hours]
Hidden smoke/test count: [hidden smoke/test count kept separate from launch proof]
Support issue count: [0 / minor resolved count / unresolved count with categories]
First 24-hour summary: [what happened in the first 24 hours of invited-group use]
Leaderboard status: [clear / confusing / wrong slug / needs Ralph]
Option readiness state: [ready with current defaults / custom rows verified / needs Ralph]
Boundary status: [software-only boundary intact / money-admin-public-launch risk appeared]
Next support check owner: [Ryan/Ralph/commissioner owner and next check time]

Triage checklist:
- Usage proof: After the first 24 hours, compare active non-test proof count with the expected invited-group response and keep hidden smoke/test rows separate. Signal: Keep monitoring if real entries are arriving and proof is clean; close/stop if proof is missing or only smoke/test data exists.
- Support issues: Count commissioner/player support issues from the first 24 hours, grouping them as link/access, confirmation, leaderboard, deadline/open-state, option/format, or boundary/money asks. Signal: Keep monitoring for zero or minor resolved issues; fix with Ralph for repeat/confusing product issues; close/stop for money/custody/admin or unsafe launch asks.
- Links / leaderboard: Reopen the exact setup URL, player form, leaderboard, and share kit. Confirm they still point to the intended slug and the leaderboard state is understandable. Signal: Fix with Ralph if links, confirmations, or leaderboard states are unclear; close/stop if the wrong pool was shared or proof cannot be trusted.
- Options / format: Confirm current defaults still match the pool. For non-golf custom choices, verify exact public.pool_options rows for this pool before sharing. Signal: Fix with Ralph if options or scoring need cleanup; close/stop if the pilot depends on unproven live custom-option behavior.
- Boundaries: Confirm the commissioner and players stayed inside the software-only boundary: no Docs Pools buy-ins, wagers, payouts, escrow, prize custody, admin access, public signup, or paid ads. Signal: Close/stop immediately if anyone asks Docs Pools to handle cash/custody, expose admin controls, broaden publicly, or weaken auth/payment/schema gates.

Decision guide:
- KEEP_MONITORING only if proof, links, support issue count, leaderboard state, option readiness, and no-cash/no-custody boundaries are clean enough for the same invited group.
- FIX_WITH_RALPH if the first-day signal is promising but support issues, link confusion, leaderboard clarity, option readiness, hidden-row separation, or deadline/open-state need operator review.
- CLOSE_STOP if proof is missing, support issues show a broken core flow, the wrong pool was shared, custom-option behavior is overclaimed, or anyone asks Docs Pools to handle funds/custody/admin/public-launch actions.

Boundaries:
- Read-only: this packet must not perform DB writes, mutate support records, create setup tokens, create setup links, run migrations, or change auth/session/setup-token/payment/schema gates.
- No admin exposure: do not expose Ryan admin controls, admin sessions, service-role tools, exports, score tools, payment controls, secrets, or setup-token internals.
- No cash/custody: no Docs Pools buy-ins, stakes, wagers, money collection, prize deposits, payouts, escrow, wallets, or prize-money custody.
- No broad launch: no paid ads, public signup, broad public acquisition, or public paid contests from this triage packet.
- No custom-option overclaim: do not claim live custom non-golf option proof unless exact custom option rows are verified for that pool.

Pilot retrospective and next cohort decision

After the first invited pilot: iterate, invite one, or pause

Use this after post-launch support triage to summarize the first invited pilot and choose the next move: iterate with the same commissioner, invite one more known commissioner, or pause for Ralph/counsel. It is read-only and does not create setup tokens, expose admin controls, write data, change gates, run migrations, broaden launch, touch cash/custody, or overclaim live custom-option proof.

ITERATE WITH SAME COMMISSIONER

Iterate with same commissioner

Decide when
Use when the pilot produced useful active non-test proof, stayed inside boundaries, and revealed focused setup/support/leaderboard issues that are best fixed with the same commissioner before expanding.
Next action
Keep the same invited scope, assign Ryan/Ralph a fix or follow-up date, rerun the relevant proof packet, and do not invite a second commissioner yet.

INVITE ONE MORE KNOWN COMMISSIONER

Invite one more known commissioner

Decide when
Use when proof is clean, support themes are minor or resolved, leaderboard status is understandable, option readiness is accurate, and the software-only/no-cash/no-custody boundary stayed intact.
Next action
Invite exactly one more trusted known commissioner through the same intake and setup path process. Keep it private-beta and do not broaden to public signup or paid ads.

PAUSE FOR RALPH OR COUNSEL

Pause for Ralph or counsel

Decide when
Use when proof is unclear, support themes point to format/leaderboard/custom-option risk, boundary wording is uncertain, or anyone asks for Docs Pools money handling, admin access, public acquisition, or legal/compliance exceptions.
Next action
Pause new invites, preserve the written retrospective, route product issues to Ralph and legal/compliance questions to counsel, and restart only after the blocker is resolved.

Outcome summary

Summarize what happened after the first invited pilot: setup friction, player submissions, commissioner confidence, and whether the pool stayed within the approved invited scope.

Decision signal: Iterate with the same commissioner if learning is specific and fixable; invite one more known commissioner only if the pilot is clean enough to repeat.

Proof quality

Record active non-test proof count separately from hidden smoke/test count, and confirm proof belongs to the exact pilot pool.

Decision signal: Pause if proof is missing, only smoke/test data exists, or proof cannot be tied to the exact setup/player/leaderboard/share links.

Support themes

Group support notes into setup, access/link, confirmation, leaderboard, deadline/open-state, option/format, and boundary/legal themes.

Decision signal: Iterate with the same commissioner for focused product fixes; pause for Ralph or counsel if support themes include legal, money, custody, admin, or unproven option risk.

Leaderboard / options

Confirm leaderboard status is understandable and option readiness is accurately described without claiming live custom non-golf option proof unless exact custom option rows are verified for that pool.

Decision signal: Invite one more known commissioner only when leaderboard and option readiness can be explained cleanly for the next pilot.

Boundaries

Confirm the pilot stayed software-only: no Docs Pools buy-ins, wagers, payouts, escrow, prize custody, admin exposure, paid ads, public signup, setup-token creation from this packet, DB writes, migrations, or gate changes.

Decision signal: Pause for Ralph or counsel if any boundary drift appears, especially cash/custody, public acquisition, admin exposure, or legal wording risk.

Next owner

Assign one owner and date for the next move: same-commissioner iteration, one more known-commissioner invite, or Ralph/counsel pause.

Decision signal: Do not continue without a named owner/date and a written decision.

Copy retrospective packet

Fill after the first invited pilot

Pilot retrospective and next cohort decision packet
Use this after the first invited pilot and post-launch support triage to choose ITERATE_WITH_SAME_COMMISSIONER, INVITE_ONE_MORE_KNOWN_COMMISSIONER, or PAUSE_FOR_RALPH_OR_COUNSEL.

Decision: ITERATE_WITH_SAME_COMMISSIONER
Decision meaning: Iterate with same commissioner
Decision rule: Use when the pilot produced useful active non-test proof, stayed inside boundaries, and revealed focused setup/support/leaderboard issues that are best fixed with the same commissioner before expanding.
Next action: Keep the same invited scope, assign Ryan/Ralph a fix or follow-up date, rerun the relevant proof packet, and do not invite a second commissioner yet.

Exact links:
Setup URL: [exact already-created /setup/[token] URL or protected Ryan/Ralph setup reference]
Player form: https://playdocspools.com/pools/[pool-slug]
Leaderboard: https://playdocspools.com/pools/[pool-slug]/leaderboard
Share kit: https://playdocspools.com/pools/[pool-slug]/share

Retrospective evidence:
Pilot outcome summary: [what happened after the first invited pilot; include setup/player/support highlights]
Active non-test proof count: [active non-test count after the invited pilot]
Hidden smoke/test count: [hidden smoke/test count kept separate from launch proof]
Support themes: [setup/access/confirmation/leaderboard/deadline/options/boundary themes]
Leaderboard status: [clear / confusing / wrong slug / needs Ralph]
Option readiness state: [ready with current defaults / custom rows verified / needs Ralph]
Boundary status: [software-only boundary intact / money-admin-public-launch-legal risk appeared]
Next owner/date: [Ryan/Ralph/counsel owner and date for the next decision]

Decision guide:
- ITERATE_WITH_SAME_COMMISSIONER if the first pilot taught clear, fixable product or support lessons and should be tightened before another invite.
- INVITE_ONE_MORE_KNOWN_COMMISSIONER only if proof is clean, support themes are minor/resolved, leaderboard status is clear, option readiness is accurate, and boundaries stayed intact.
- PAUSE_FOR_RALPH_OR_COUNSEL if proof, leaderboard, options, legal wording, money/custody, admin exposure, public signup, paid ads, setup-token, write, schema, or migration risk appears.

Boundaries:
- Read-only: this packet must not perform DB writes, mutate support records, create setup tokens, create setup links, run migrations, or change auth/session/setup-token/payment/schema gates.
- No admin exposure: do not expose Ryan admin controls, admin sessions, service-role tools, exports, score tools, payment controls, secrets, or setup-token internals.
- No cash/custody: no Docs Pools buy-ins, stakes, wagers, money collection, prize deposits, payouts, escrow, wallets, or prize-money custody.
- No broad launch: no paid ads, public signup, broad public acquisition, public paid contests, or second-cohort invites beyond one known commissioner from this packet.
- No custom-option overclaim: do not claim live custom non-golf option proof unless exact custom option rows are verified for that pool.

Second known commissioner invite

Only after INVITE ONE MORE KNOWN COMMISSIONER

Use this read-only packet only after the retrospective decision is `INVITE_ONE_MORE_KNOWN_COMMISSIONER`. It carries forward the first pilot learning, exact setup/player/leaderboard/share placeholders, acceptance filters, first-tester proof, option-readiness blockers, and software-only boundaries without creating tokens, exposing admin controls, writing data, changing gates, launching publicly, touching cash/custody, or claiming live custom-option proof.

Retrospective gate

Use this only when the completed pilot retrospective decision is INVITE_ONE_MORE_KNOWN_COMMISSIONER and Ryan/Ralph have a written owner/date for the next invite.

Stop if: The retrospective decision is ITERATE_WITH_SAME_COMMISSIONER, PAUSE_FOR_RALPH_OR_COUNSEL, missing, or not written down.

Acceptance filters

The next commissioner is known, reachable, owns the rules, accepts a small invited group, and can use the current setup/player/leaderboard/share flow without new product work.

Stop if: The invite depends on public signup, paid ads, broad acquisition, public paid contests, new auth/payment/schema behavior, new tokens from this packet, or Ryan admin exposure.

Prior learning

Send the prior pilot learning summary before setup: what worked, what confused players, leaderboard state, support themes, and the boundary language that stayed intact.

Stop if: The first pilot's learning is unclear, active proof is not tied to the exact pool, support themes are unresolved, or hidden smoke/test rows are being used as success proof.

First-tester proof

Name the first tester before wider sharing and require one active non-test entry, visible confirmation proof, exact leaderboard check, and hidden smoke/test separation for this new pool.

Stop if: There is no first tester, no confirmation proof plan, no leaderboard check plan, or the commissioner wants to invite the group before first-tester proof.

Options / boundaries

Confirm current options are enough, or verify exact non-golf custom option rows before sharing. Keep Docs Pools software-only with no cash or custody role.

Stop if: The pool requires custom non-golf options before exact rows are verified, or anyone asks Docs Pools to handle buy-ins, wagers, payouts, escrow, prize custody, eligibility, disputes, taxes, money records, admin access, or protected operations.

Copy invite packet

Fill before contacting the second known commissioner

Second known commissioner invite packet
Use only after the pilot retrospective decision is INVITE_ONE_MORE_KNOWN_COMMISSIONER.
Purpose: invite exactly one more known commissioner without broad launch, token creation, admin exposure, writes, cash handling, or custom-option overclaim.

Invite target:
Commissioner/contact: [second known commissioner name, phone/email, and rule owner]
Sport/format: [PGA-style picks, football slate, bracket/playoff, or simple office-pool format]
Event/deadline: [event name and exact pick-close deadline players should see]

Exact placeholders to verify before any group sharing:
Setup URL: [exact already-created /setup/[token] URL after Ryan/Ralph create or verify it outside this packet]
Player form: https://playdocspools.com/pools/[new-pool-slug]
Leaderboard: https://playdocspools.com/pools/[new-pool-slug]/leaderboard
Share kit: https://playdocspools.com/pools/[new-pool-slug]/share

Prior pilot learning summary:
[what the first pilot proved, what support themes appeared, what changed, and what not to overclaim]

Acceptance filters:
[known/reachable commissioner, small invited group, current flow is enough, first tester named, no money/admin/public-launch/custom-option dependency]

First-tester proof requirement:
[first tester name; one active non-test entry; visible confirmation ID; exact leaderboard check; hidden smoke/test rows separate before share kit goes wider]

Option readiness / blocker:
[ready with current defaults / custom rows verified / needs Ralph before invite]
If non-golf custom choices are needed, public.pool_options migration proof is complete, but exact custom option rows must still be configured and verified for this pool before sharing.

Boundary confirmation: [commissioner confirmed Docs Pools is software only: no Docs Pools cash, custody, paid ads, public signup, or public paid contest]
Next owner/date: [Ryan/Ralph owner and date for intake, setup verification, and first-tester proof]

Stop-if blockers:
- Retrospective gate: The retrospective decision is ITERATE_WITH_SAME_COMMISSIONER, PAUSE_FOR_RALPH_OR_COUNSEL, missing, or not written down.
- Acceptance filters: The invite depends on public signup, paid ads, broad acquisition, public paid contests, new auth/payment/schema behavior, new tokens from this packet, or Ryan admin exposure.
- Prior learning: The first pilot's learning is unclear, active proof is not tied to the exact pool, support themes are unresolved, or hidden smoke/test rows are being used as success proof.
- First-tester proof: There is no first tester, no confirmation proof plan, no leaderboard check plan, or the commissioner wants to invite the group before first-tester proof.
- Options / boundaries: The pool requires custom non-golf options before exact rows are verified, or anyone asks Docs Pools to handle buy-ins, wagers, payouts, escrow, prize custody, eligibility, disputes, taxes, money records, admin access, or protected operations.

Hard boundaries:
- Read-only: this packet must not perform DB writes, mutate support records, create setup tokens, create setup links, run migrations, or change auth/session/setup-token/payment/schema gates.
- No admin exposure: do not expose Ryan admin controls, admin sessions, service-role tools, exports, score tools, payment controls, secrets, or setup-token internals.
- No cash/custody: no Docs Pools buy-ins, stakes, wagers, money collection, prize deposits, payouts, escrow, wallets, or prize-money custody.
- No broad launch: invite exactly one known commissioner only; no paid ads, public signup, broad public acquisition, or public paid contests.
- No custom-option overclaim: do not claim live custom non-golf option proof unless exact custom option rows are verified for that pool.

Second commissioner response triage

Classify the response before any setup path exists

Use this read-only packet after the second-known-commissioner invite response. Classify the reply as `ACCEPT_FOR_SETUP_REVIEW`, `NEEDS_RALPH`, or `DECLINE` before any setup token, Ryan-assisted admin setup path, pool shell, open-pool step, or share handoff is created. It keeps exact placeholder links, first-tester proof, per-pool custom option verification, and no-token/no-admin/no-write/no-migration/no-paid-ads/no-public-signup/no-cash/no-custody/no-custom-option-overclaim boundaries in one place.

ACCEPT FOR SETUP REVIEW

Accept for setup review

Classify when
Use only when the second commissioner is known and reachable, confirms a small invited group, accepts the software-only boundary, names a first tester, and can use the current setup/player/leaderboard/share flow without new product work.
Next action
Ryan/Ralph may move to setup-path review, but this triage does not create a setup token, expose admin controls, open the pool, or send anything beyond the first-tester proof sequence.

NEEDS RALPH

Needs Ralph before setup

Classify when
Use when the response is promising but has unclear deadline/open state, custom option rows, unusual scoring, proof readiness, hidden smoke/test separation, link expectations, or any boundary wording Ryan cannot verify.
Next action
Ralph reviews the exact response, first-tester proof plan, option readiness, and link placeholders before any setup token or admin setup path is created.

DECLINE

Decline before setup

Classify when
Use when the commissioner needs Docs Pools to handle money/prizes, wants public signup or paid ads, cannot provide first-tester proof, needs unverified custom-option behavior, wants admin access, or will not keep the trial invite-only.
Next action
Do not create a setup token, admin setup path, pool shell, public signup path, or share kit handoff. Ryan can revisit only after the request fits the private-beta software-only boundary.

Copy response triage packet

Fill before setup review

Second commissioner response triage packet
Use after the second-known-commissioner invite response and before any setup token, admin setup path, pool-opening step, or share-kit handoff is created.

Classification: NEEDS_RALPH
Classification meaning: Needs Ralph before setup

Commissioner/contact: [second commissioner name, phone/email, and rule owner]
Response summary: [what they said yes/no/maybe to after the invite]
Sport/format: [PGA-style picks, football slate, bracket/playoff, or simple office-pool format]
Event/deadline: [event name and exact pick-close deadline players should see]

Exact placeholder links for review only:
Setup path: [not created yet: no /setup/[token] URL and no Ryan-assisted admin setup path until this response is accepted for setup review]
Player form placeholder: https://playdocspools.com/pools/[new-pool-slug]
Leaderboard placeholder: https://playdocspools.com/pools/[new-pool-slug]/leaderboard
Share kit placeholder: https://playdocspools.com/pools/[new-pool-slug]/share

First-tester proof requirement:
[named first tester / proof plan missing / blocked]
Accept only if one named trusted tester can submit one active non-test entry, capture a visible confirmation ID, verify the exact leaderboard, and keep hidden smoke/test rows separate before group sharing.

Per-pool custom option verification:
[ready with current defaults / exact custom rows verified for this pool / needs Ralph before setup review]
The public.pool_options migration proof is complete, but do not claim this pool's custom choices are ready until exact custom option rows are configured and verified for this pool.

Boundary confirmation: [confirmed software-only, no Docs Pools cash/custody/admin/public-launch role / not confirmed]
Ralph review reason: [none if ACCEPT_FOR_SETUP_REVIEW / exact option, proof, deadline, link, scoring, boundary, or legal concern]
Next owner/date: [Ryan/Ralph owner and date for classification follow-up]

Outcome guide:
- ACCEPT_FOR_SETUP_REVIEW: Use only when the second commissioner is known and reachable, confirms a small invited group, accepts the software-only boundary, names a first tester, and can use the current setup/player/leaderboard/share flow without new product work. Next: Ryan/Ralph may move to setup-path review, but this triage does not create a setup token, expose admin controls, open the pool, or send anything beyond the first-tester proof sequence.
- NEEDS_RALPH: Use when the response is promising but has unclear deadline/open state, custom option rows, unusual scoring, proof readiness, hidden smoke/test separation, link expectations, or any boundary wording Ryan cannot verify. Next: Ralph reviews the exact response, first-tester proof plan, option readiness, and link placeholders before any setup token or admin setup path is created.
- DECLINE: Use when the commissioner needs Docs Pools to handle money/prizes, wants public signup or paid ads, cannot provide first-tester proof, needs unverified custom-option behavior, wants admin access, or will not keep the trial invite-only. Next: Do not create a setup token, admin setup path, pool shell, public signup path, or share kit handoff. Ryan can revisit only after the request fits the private-beta software-only boundary.

Hard boundaries:
- Read-only: this triage packet must not perform DB writes, mutate support records, run migrations, create setup tokens, create setup links, create pool shells, open pools, or change auth/session/setup-token/payment/schema gates.
- No admin exposure: do not expose Ryan admin controls, admin sessions, service-role tools, exports, score tools, payment controls, secrets, setup-token internals, or protected operations.
- No cash/custody: no Docs Pools buy-ins, stakes, wagers, money collection, prize deposits, payouts, escrow, wallets, or prize-money custody.
- No broad launch: no paid ads, public signup, broad public acquisition, public paid contests, or sharing beyond one known commissioner response review.
- No custom-option overclaim: do not claim live custom non-golf option proof unless exact custom option rows are verified for that pool.

Second commissioner setup review

Only after ACCEPT FOR SETUP REVIEW

Use this read-only packet only when the second commissioner response triage is `ACCEPT_FOR_SETUP_REVIEW`. It gives Ryan/Ralph one place to review exact commissioner/contact, sport/format, event/deadline, intended slug/link placeholders, setup route choice, first-tester proof plan, option readiness, per-pool custom row verification, and no-cash/no-custody/no-admin/no-token/no-write/no-migration/no-paid-ads/no-public-signup/no-custom-option-overclaim boundaries before any setup token or admin setup path exists.

Copy setup review packet

Fill before creating any setup token or setup path

Second commissioner setup review packet
Use only after the second commissioner response triage is ACCEPT_FOR_SETUP_REVIEW and before Ryan/Ralph create any setup token, admin setup path, pool shell, open-pool step, or share handoff.

Triage outcome: ACCEPT_FOR_SETUP_REVIEW
Commissioner/contact: [second commissioner name, phone/email, and rule owner]
Sport/format: [PGA-style picks, football slate, bracket/playoff, or simple office-pool format]
Event/deadline: [event name and exact pick-close deadline players should see]

Intended slug and link placeholders:
Pool slug: [new-pool-slug]
Setup path placeholder: [not created here: no /setup/[token] URL and no Ryan-assisted admin setup path yet]
Player form placeholder: https://playdocspools.com/pools/[new-pool-slug]
Leaderboard placeholder: https://playdocspools.com/pools/[new-pool-slug]/leaderboard
Share kit placeholder: https://playdocspools.com/pools/[new-pool-slug]/share

Setup route choice: [existing buyer setup-token route or existing protected Ryan/Ralph admin setup route; no token created from this packet]
Route choice must be an existing buyer setup-token route or existing protected Ryan/Ralph admin setup route; this packet does not create or validate a token.

First-tester proof plan:
[first tester name; one active non-test entry; visible confirmation ID; exact leaderboard check; hidden smoke/test rows separate before share kit goes wider]
Review requires one named trusted tester, one active non-test entry for this exact pool, a visible confirmation ID, exact leaderboard check, and hidden smoke/test rows kept separate before group sharing.

Option readiness / per-pool custom row verification:
Option readiness: [ready with current defaults / exact custom rows verified for this pool / needs Ralph before setup path creation]
Per-pool custom row verification: [PGA/default rows sufficient / public.pool_options rows configured and verified for this exact pool / blocked until Ralph verifies rows]
public.pool_options migration proof is complete, but do not claim this pool's custom options are ready unless exact option rows are configured and verified for this pool.

Boundary confirmation: [commissioner confirmed software-only: no Docs Pools cash, custody, admin access, paid ads, public signup, or public paid contest]
Next owner/date: [Ryan/Ralph owner and date for setup review decision]

Ryan/Ralph setup review checklist:
- Exact commissioner/contact and rule owner are written down.
- Sport/format, event name, and pick-close deadline are written exactly as players should see them.
- Intended slug, player form, leaderboard, and share-kit placeholders all match the same pool.
- Setup route choice is explicit and uses only existing setup-token/admin setup patterns.
- First-tester proof can happen before any group sharing.
- Option readiness is accurate; non-golf custom choices need exact per-pool custom row verification before sharing.
- Boundary confirmation is written before any setup path is created.

Hard boundaries:
- No cash/custody: no Docs Pools buy-ins, stakes, wagers, money collection, prize deposits, payouts, escrow, wallets, or prize-money custody.
- No admin exposure: do not expose Ryan admin controls, admin sessions, service-role tools, exports, score tools, payment controls, secrets, setup-token internals, or protected operations.
- No token: this packet must not create setup tokens, create setup links, validate tokens, or promise a setup URL exists.
- No write/no migration: this packet must not perform DB writes, create pool shells, open pools, mutate records, run migrations, or change auth/session/setup-token/payment/schema gates.
- No broad launch: no paid ads, public signup, broad public acquisition, public paid contests, or sharing beyond setup review.
- No custom-option overclaim: do not claim live custom non-golf option proof unless exact custom option rows are verified for that pool.

Second commissioner setup authorization decision

Create setup path, needs info, or decline

Use this read-only packet after the second commissioner setup review and before any setup token, admin setup path, pool shell, open-pool step, or share handoff is created. It helps Ryan/Ralph choose `CREATE_SETUP_PATH`, `NEEDS_INFO`, or `DECLINE` while preserving no-token/no-admin/no-write/no-migration/no-paid-ads/no-public-signup/no-cash/no-custody/no-custom-option-overclaim boundaries.

CREATE SETUP PATH

Authorize setup path creation

Decide when
Use only after Ryan/Ralph have completed the setup review, the commissioner is known and reachable, the event/deadline and intended slug are exact, the setup route choice uses an existing setup-token/admin setup pattern, first-tester proof is named, options are ready or explicitly verified for this pool, and the software-only boundary is confirmed in writing.
Next action
Ryan/Ralph may create or verify the setup path outside this packet, then return to the after-setup verification packet before sending anything beyond one trusted tester.

NEEDS INFO

Hold for missing setup facts

Decide when
Use when the review is promising but any commissioner/contact, rule owner, event/deadline, slug, route choice, first-tester proof, hidden smoke/test separation, option readiness, or boundary confirmation detail is missing or unclear.
Next action
Do not create a setup token or admin setup path. Get the missing facts, update the setup review packet, and choose again only after Ryan/Ralph can verify the exact pool plan.

DECLINE

Decline before setup path

Decide when
Use when the setup review reveals money/prize/custody asks, public signup or paid ads, admin-access expectations, missing first-tester proof, unverified custom-option dependency, legal/compliance concern, or a commissioner who will not accept the private-beta software-only boundary.
Next action
Do not create a setup token, admin setup path, pool shell, open-pool step, share handoff, paid acquisition path, or custom-option claim. Revisit only if the request fits the current private-beta boundary.

Copy authorization decision packet

Fill before creating any setup path

Second commissioner setup authorization decision packet
Use only after the second commissioner setup review packet and before Ryan/Ralph create any setup token, admin setup path, pool shell, open-pool step, or share handoff.

Decision: NEEDS_INFO
Decision meaning: Hold for missing setup facts
Decision rule: Use when the review is promising but any commissioner/contact, rule owner, event/deadline, slug, route choice, first-tester proof, hidden smoke/test separation, option readiness, or boundary confirmation detail is missing or unclear.
Next action: Do not create a setup token or admin setup path. Get the missing facts, update the setup review packet, and choose again only after Ryan/Ralph can verify the exact pool plan.

Reviewed setup facts:
Commissioner/contact: [second commissioner name, phone/email, and rule owner]
Setup review summary: [what Ryan/Ralph reviewed from the setup review packet]
Sport/format: [PGA-style picks, football slate, bracket/playoff, or simple office-pool format]
Event/deadline: [event name and exact pick-close deadline players should see]
Pool slug: [new-pool-slug]
Setup route choice: [existing buyer setup-token route or existing protected Ryan/Ralph admin setup route; no token created from this packet]

Exact placeholder links to verify after setup path creation:
Setup path placeholder: [not created here: no /setup/[token] URL and no Ryan-assisted admin setup path until CREATE_SETUP_PATH is chosen and executed outside this packet]
Player form placeholder: https://playdocspools.com/pools/[new-pool-slug]
Leaderboard placeholder: https://playdocspools.com/pools/[new-pool-slug]/leaderboard
Share kit placeholder: https://playdocspools.com/pools/[new-pool-slug]/share

Proof, options, and boundary:
First-tester proof plan: [first tester name; one active non-test entry; visible confirmation ID; exact leaderboard check; hidden smoke/test rows separate before group sharing]
Option readiness state: [ready with current defaults / exact custom rows verified for this pool / needs Ralph before setup path creation]
Boundary confirmation: [commissioner confirmed software-only: no Docs Pools cash, custody, admin access, paid ads, public signup, or public paid contest]
Missing info or decline reason: [missing fact to collect / none if CREATE_SETUP_PATH / decline reason if out of bounds]
Next owner/date: [Ryan/Ralph owner and date for CREATE_SETUP_PATH / NEEDS_INFO / DECLINE follow-up]

Decision guide:
- CREATE_SETUP_PATH: Use only after Ryan/Ralph have completed the setup review, the commissioner is known and reachable, the event/deadline and intended slug are exact, the setup route choice uses an existing setup-token/admin setup pattern, first-tester proof is named, options are ready or explicitly verified for this pool, and the software-only boundary is confirmed in writing. Next: Ryan/Ralph may create or verify the setup path outside this packet, then return to the after-setup verification packet before sending anything beyond one trusted tester.
- NEEDS_INFO: Use when the review is promising but any commissioner/contact, rule owner, event/deadline, slug, route choice, first-tester proof, hidden smoke/test separation, option readiness, or boundary confirmation detail is missing or unclear. Next: Do not create a setup token or admin setup path. Get the missing facts, update the setup review packet, and choose again only after Ryan/Ralph can verify the exact pool plan.
- DECLINE: Use when the setup review reveals money/prize/custody asks, public signup or paid ads, admin-access expectations, missing first-tester proof, unverified custom-option dependency, legal/compliance concern, or a commissioner who will not accept the private-beta software-only boundary. Next: Do not create a setup token, admin setup path, pool shell, open-pool step, share handoff, paid acquisition path, or custom-option claim. Revisit only if the request fits the current private-beta boundary.

CREATE_SETUP_PATH only means Ryan/Ralph may create or verify a setup path outside this packet; it does not create a token, expose admin controls, open a pool, write data, or send links by itself.
NEEDS_INFO keeps the setup path uncreated until missing facts are resolved.
DECLINE stops setup path creation for this request.

Hard boundaries:
- Read-only: this authorization packet must not perform DB writes, mutate support records, create setup tokens, create setup links, create pool shells, open pools, run migrations, or change auth/session/setup-token/payment/schema gates.
- No admin exposure: do not expose Ryan admin controls, admin sessions, service-role tools, exports, score tools, payment controls, secrets, setup-token internals, or protected operations.
- No cash/custody: no Docs Pools buy-ins, stakes, wagers, money collection, prize deposits, payouts, escrow, wallets, or prize-money custody.
- No broad launch: no paid ads, public signup, broad public acquisition, public paid contests, or sharing beyond the approved private-beta setup path decision.
- No custom-option overclaim: do not claim live custom non-golf option proof unless exact custom option rows are verified for that pool.

Phase 3 custom option verification

After setup authorization, before non-golf sharing

Use this read-only packet only after Ryan/Ralph authorize setup and a setup path already exists. It verifies exact public.pool_options rows, required groups, phone-visible player-form options, first-entry proof, hidden smoke/test separation, exact setup/player/leaderboard/share links, and software-only boundaries before any non-golf share kit goes beyond one trusted tester.

VERIFY_OPTIONS

Verify options before share

NEEDS_RALPH

Needs Ralph

DO_NOT_SHARE

Do not share

Verify 1

Exact setup and slug

Open the already-created setup URL and verify it belongs to the exact non-golf pool slug Ryan/Ralph authorized after setup review.

Stop if: The setup URL is missing, wrong, expired, asks for Ryan admin access, or requires creating a new setup token from this packet.

Verify 2

Required option groups

Write down the exact groups players must see, such as Week 1 Games, Tiebreaker, Bracket Round 1, or Commissioner Custom Group 1.

Stop if: Required groups are vague, incomplete, different from the commissioner's rules, or not tied to this exact pool.

Verify 3

public.pool_options row proof

Ryan/Ralph verify exact public.pool_options rows for this pool: group labels, option labels, order, active state, and no leaked test choices.

Stop if: Rows are missing, stale, for another slug, in the wrong order, include test options, or cannot be verified without protected admin work.

Verify 4

Public form option check

Open the player form on a phone and confirm the visible options match the verified rows and required groups before sharing the share kit.

Stop if: The public form shows placeholders, PGA defaults, wrong groups, wrong option count, stale labels, or any option mismatch.

Verify 5

Hidden smoke/test rows

Keep first-entry proof and hidden smoke/test rows separate; hidden rows cannot be used as public option proof or launch proof.

Stop if: Active non-test proof is missing, hidden smoke/test rows are mixed into confidence, or test rows appear in the public form/leaderboard story.

Verify 6

Software-only boundary

Confirm the commissioner accepts that Docs Pools is software only and will not handle payments, buy-ins, wagers, payouts, escrow, prize custody, eligibility, disputes, taxes, or records.

Stop if: The commissioner asks Docs Pools to touch funds/custody or wants admin exposure, broad launch, paid ads, public signup, auth/payment/schema changes, writes, or migrations.

Copy option verification packet

Fill before sharing a non-golf pool

Phase 3 custom option verification packet
Use after setup authorization and setup path creation, but before sharing a non-golf pool beyond one trusted tester.

Decision: VERIFY_OPTIONS
Decision meaning: Verify options before share

Exact links:
Setup URL: [exact already-created /setup/[token] URL or protected Ryan/Ralph setup reference]
Player form: https://playdocspools.com/pools/[non-golf-pool-slug]
Leaderboard: https://playdocspools.com/pools/[non-golf-pool-slug]/leaderboard
Share kit: https://playdocspools.com/pools/[non-golf-pool-slug]/share

Pool and option facts:
Pool slug: [non-golf-pool-slug]
Sport/format: [football slate / bracket pool / playoff picks / other non-golf format]
Required groups: [exact group names and counts players must see]
Custom row proof status: [public.pool_options rows verified / rows missing / order mismatch / needs Ralph]
Public form option check: [not checked / phone form matches rows / mismatch found]

Proof and separation:
First-entry proof status: [none yet / one active non-test entry confirmed / blocked]
Hidden smoke/test separation: [hidden smoke/test count separate from active proof and public form confidence]
Boundary confirmation: [commissioner confirmed software-only, no Docs Pools cash/custody/admin/public-launch role]
Next owner/date: [Ryan/Ralph owner and date for VERIFY_OPTIONS / NEEDS_RALPH / DO_NOT_SHARE follow-up]

Decision guide:
- VERIFY_OPTIONS means Ryan/Ralph are still checking exact public.pool_options rows and public form output; do not share the non-golf pool yet.
- NEEDS_RALPH means row proof, public form options, first-entry proof, hidden-row separation, or boundary language is unclear; Ralph reviews before any share.
- DO_NOT_SHARE means the pool must not be shared because exact options are wrong/missing, proof is missing, hidden rows are mixed in, or a hard boundary is crossed.

Verification checklist:
- Exact setup and slug: Open the already-created setup URL and verify it belongs to the exact non-golf pool slug Ryan/Ralph authorized after setup review. Stop if: The setup URL is missing, wrong, expired, asks for Ryan admin access, or requires creating a new setup token from this packet.
- Required option groups: Write down the exact groups players must see, such as Week 1 Games, Tiebreaker, Bracket Round 1, or Commissioner Custom Group 1. Stop if: Required groups are vague, incomplete, different from the commissioner's rules, or not tied to this exact pool.
- public.pool_options row proof: Ryan/Ralph verify exact public.pool_options rows for this pool: group labels, option labels, order, active state, and no leaked test choices. Stop if: Rows are missing, stale, for another slug, in the wrong order, include test options, or cannot be verified without protected admin work.
- Public form option check: Open the player form on a phone and confirm the visible options match the verified rows and required groups before sharing the share kit. Stop if: The public form shows placeholders, PGA defaults, wrong groups, wrong option count, stale labels, or any option mismatch.
- Hidden smoke/test rows: Keep first-entry proof and hidden smoke/test rows separate; hidden rows cannot be used as public option proof or launch proof. Stop if: Active non-test proof is missing, hidden smoke/test rows are mixed into confidence, or test rows appear in the public form/leaderboard story.
- Software-only boundary: Confirm the commissioner accepts that Docs Pools is software only and will not handle payments, buy-ins, wagers, payouts, escrow, prize custody, eligibility, disputes, taxes, or records. Stop if: The commissioner asks Docs Pools to touch funds/custody or wants admin exposure, broad launch, paid ads, public signup, auth/payment/schema changes, writes, or migrations.

Hard boundaries:
- Read-only: this packet must not create setup tokens, create setup links, create pool shells, open pools, perform DB writes, run migrations, mutate public.pool_options rows, or change auth/session/setup-token/payment/schema gates.
- No admin exposure: do not expose Ryan admin controls, admin sessions, service-role tools, exports, score tools, payment controls, secrets, setup-token internals, or protected operations.
- No public launch: no paid ads, public signup, broad public acquisition, public paid contests, or sharing beyond the known invited group after verification.
- No cash/custody: no Docs Pools buy-ins, stakes, wagers, money collection, prize deposits, payouts, escrow, wallets, or prize-money custody.
- No custom-option overclaim: public.pool_options storage exists, but this exact pool is not share-ready until exact rows and the public form options match.

Custom option evidence capture

After row/form match, before one trusted tester

Use this read-only packet after Ryan/Ralph compare exact public.pool_options rows with the public player form on a phone. It records links, sport/format, required groups, expected counts, screenshot/file notes, first-entry proof still pending, hidden smoke/test separation, next owner/date, and software-only boundaries before anyone asks one trusted tester.

OPTIONS_MATCHED

Rows and public form match; one-tester request may be prepared next

NEEDS_FIX

Needs fix before any tester request

DO_NOT_TEST_YET

Do not test yet

Capture 1

Exact links

Record the already-created setup URL plus the exact player form, leaderboard, and share-kit URLs for the verified pool slug.

Stop if: Any link is missing, points to the wrong slug, requires admin access, opens a public signup flow, or implies this packet creates a token/setup path.

Capture 2

Rows and counts

Record required option groups, expected option counts, and the public.pool_options row proof status for this exact pool.

Stop if: Rows are missing, stale, for the wrong pool, in the wrong order, thin for a required group, or different from the expected counts.

Capture 3

Phone-visible public form

Open the public player form on a phone and record whether visible groups/options match the verified public.pool_options rows.

Stop if: The form shows placeholders, PGA defaults, wrong groups, wrong counts, stale labels, or any mismatch with verified rows.

Capture 4

Evidence files

Save a screenshot/file note for the option rows and a screenshot/file note for the public player-form output.

Stop if: Evidence is missing, belongs to a different slug, hides option counts, or cannot prove both the row source and public form output.

Capture 5

Before first tester

Confirm first-entry proof is still pending/not yet requested until OPTIONS_MATCHED is true for both rows and the public form.

Stop if: A tester has been asked before row proof and phone-visible public-form options match, or hidden smoke/test rows are used as proof.

Capture 6

Boundary confirmation

Record next owner/date plus software-only confirmation: no Docs Pools cash, custody, admin exposure, writes, migrations, paid ads, or public signup.

Stop if: Anyone asks for buy-ins, stakes, wagers, prize wallets, payouts, escrow, prize-money custody, DB writes, admin controls, setup-token creation, auth changes, payment changes, schema changes, paid ads, or public signup.

Copy evidence capture packet

Fill only after rows and public form are checked

Phase 3 custom option evidence capture packet
Use after Ryan/Ralph verify exact per-pool options against the public player form, before asking one trusted tester.

Status: DO_NOT_TEST_YET
Status meaning: Do not test yet

Exact links:
Setup URL: [exact already-created /setup/[token] URL or protected Ryan/Ralph setup reference]
Pool slug: [non-golf-pool-slug]
Player form URL: https://playdocspools.com/pools/[non-golf-pool-slug]
Leaderboard URL: https://playdocspools.com/pools/[non-golf-pool-slug]/leaderboard
Share-kit URL: https://playdocspools.com/pools/[non-golf-pool-slug]/share

Option facts:
Sport/format: [football slate / bracket pool / playoff picks / other non-golf format]
Required option groups: [exact group names players must see]
Expected option counts: [expected option count per group, e.g. Group 1=2, Group 2=2, Tiebreaker=4]
public.pool_options row proof status: [verified for this slug / missing rows / order mismatch / needs fix]
Phone-visible player-form option match status: [not checked / OPTIONS_MATCHED / mismatch found / needs fix]

Screenshot / file notes:
Option rows screenshot/file note: [screenshot filename/link or file note proving rows, order, active state, and counts]
Public form output screenshot/file note: [phone screenshot filename/link or file note proving public form output]

Before one trusted tester:
First-entry proof status: pending/not yet requested
Hidden smoke/test separation: [hidden smoke/test rows separate from option proof and first-entry proof]
Next owner/date: [Ryan/Ralph owner and date for OPTIONS_MATCHED / NEEDS_FIX / DO_NOT_TEST_YET follow-up]
Boundary confirmation: [software-only confirmed: no Docs Pools cash/custody/admin/write/token/migration/paid-ads/public-signup role]

Decision labels:
- OPTIONS_MATCHED only when public.pool_options rows are verified for this exact pool and the phone-visible public player form shows the same groups, labels, order, and expected counts.
- NEEDS_FIX when row proof exists but any public form group, label, order, count, screenshot, or file note needs correction before a tester is asked.
- DO_NOT_TEST_YET when rows are missing/unverified, the public form has not been checked on a phone, first-entry proof was requested too early, hidden smoke/test rows are mixed in, or any hard boundary is unclear.

Tester gate:
- Do not ask the first trusted tester until Status is OPTIONS_MATCHED.
- If Status is NEEDS_FIX or DO_NOT_TEST_YET, keep the share kit private and fix/reverify rows and public form output first.
- First-entry proof should remain pending/not yet requested at this stage.
- Hidden smoke/test rows remain separate from option proof, first-entry proof, leaderboard confidence, and share language.

Evidence checklist:
- Exact links: Record the already-created setup URL plus the exact player form, leaderboard, and share-kit URLs for the verified pool slug. Stop if: Any link is missing, points to the wrong slug, requires admin access, opens a public signup flow, or implies this packet creates a token/setup path.
- Rows and counts: Record required option groups, expected option counts, and the public.pool_options row proof status for this exact pool. Stop if: Rows are missing, stale, for the wrong pool, in the wrong order, thin for a required group, or different from the expected counts.
- Phone-visible public form: Open the public player form on a phone and record whether visible groups/options match the verified public.pool_options rows. Stop if: The form shows placeholders, PGA defaults, wrong groups, wrong counts, stale labels, or any mismatch with verified rows.
- Evidence files: Save a screenshot/file note for the option rows and a screenshot/file note for the public player-form output. Stop if: Evidence is missing, belongs to a different slug, hides option counts, or cannot prove both the row source and public form output.
- Before first tester: Confirm first-entry proof is still pending/not yet requested until OPTIONS_MATCHED is true for both rows and the public form. Stop if: A tester has been asked before row proof and phone-visible public-form options match, or hidden smoke/test rows are used as proof.
- Boundary confirmation: Record next owner/date plus software-only confirmation: no Docs Pools cash, custody, admin exposure, writes, migrations, paid ads, or public signup. Stop if: Anyone asks for buy-ins, stakes, wagers, prize wallets, payouts, escrow, prize-money custody, DB writes, admin controls, setup-token creation, auth changes, payment changes, schema changes, paid ads, or public signup.

Hard boundaries:
- Read-only: this packet must not create setup tokens, create setup links, create pool shells, open pools, perform DB writes, run migrations, mutate public.pool_options rows, or change auth/session/setup-token/payment/schema gates.
- No admin exposure: do not expose Ryan admin controls, admin sessions, service-role tools, exports, score tools, payment controls, secrets, setup-token internals, or protected operations.
- No public launch: no paid ads, public signup, broad public acquisition, public paid contests, or sharing beyond the one trusted tester after OPTIONS_MATCHED.
- No cash/custody: no Docs Pools buy-ins, stakes, wagers, money collection, prize deposits, payouts, escrow, wallets, or prize-money custody.
- No custom-option overclaim: public.pool_options storage exists, but this exact pool is not ready for one trusted tester unless exact rows and the public form options match.

First private-beta pilot

How to use this without overlaunching

A phone-readable checklist for the next known-commissioner conversation: prove usefulness, keep the pool closed until setup is ready, and stop before anything that needs migration or attorney approval.

Pilot step 1

Choose one known commissioner

Owner: Ryan

Use a trusted person who already understands the private-beta/no-cash boundary and can give candid setup feedback.

Pilot step 2

Start from the readiness packet

Owner: Ryan

Send the beta-readiness link first, then walk the PGA demo and commissioner-ops boundaries before discussing a real pool.

Pilot step 3

Configure a closed shell before sharing

Owner: Known commissioner

Use a buyer setup link or Ryan-assisted admin flow to set name, event, deadline, pick count, and option guidance while the pool remains closed.

Pilot step 4

Prove one non-test entry

Owner: Ralph

Before broader group sharing, confirm the setup wizard shows first-entry proof and hidden smoke/test rows stay separate.

Pilot step 5

Stop at software tooling

Owner: Ryan

Do not collect buy-ins, hold prize money, advertise paid contests, or promise a pool's custom options until its exact choices are configured/verified and attorney boundaries are cleared.

Private-beta pilot runbook

After one known commissioner says yes

A small operating sequence for moving from verbal interest to a real private-beta pool without crossing the no-cash, no-custody, no-paid-ads, or unproven custom-option boundaries.

Runbook step 1

Confirm the yes

Owner: Ryan

Trigger
One known commissioner agrees to try Docs Pools in private beta.
Action
Reply with the beta-readiness packet, restate that this is software-only tooling, and confirm the pool will stay invite-only with no Docs Pools buy-ins, prize custody, payouts, escrow, paid ads, or public signup.
Stop if
They need Docs Pools to hold money, collect entries as wagers, advertise the pool publicly, or settle prize disputes.

Runbook step 2

Set up the closed pool shell

Owner: Known commissioner

Trigger
The commissioner accepts the private-beta boundaries.
Action
Use the buyer setup link or Ryan-assisted setup to confirm name, event, deadline, open/closed state, pick count, and choice guidance while the pool remains closed to the group.
Stop if
The event needs non-golf custom option rows before exact public.pool_options choices are configured and verified for that pool.

Runbook step 3

Run one-entry proof

Owner: Ralph

Trigger
The shell is configured and ready for a single trusted tester.
Action
Send only the exact player-form link to one tester, confirm one active non-test entry appears, then verify the leaderboard and share kit before any broader invite.
Stop if
The setup wizard lacks active non-test proof, hidden smoke/test rows are mixed into launch proof, or the leaderboard/share links do not match the intended pool.

Runbook step 4

Release to the known group

Owner: Known commissioner

Trigger
The player form, leaderboard, share kit, option readiness, and first-entry proof all check out.
Action
Share the pool-specific share kit with the known invited group only, keeping payments, eligibility, rules, disputes, taxes, and backup records outside Docs Pools.
Stop if
Anyone asks for paid ads, open public acquisition, Docs Pools prize handling, or custom non-golf option rows before exact rows are verified.

Founder handoff copy

Pasteable private-beta scripts

Use these for known commissioners, counsel, and internal handoff without drifting into paid-contest, prize-custody, or broad-launch claims.

known commissioner

Text a known commissioner

I built a private-beta sports-pool tool called Docs Pools. It gives commissioners a clean pick form, leaderboard, exports, setup links, and off-platform status/cleanup tools. It does not handle buy-ins, prizes, wagers, payouts, escrow, or prize money. Want to look at the live PGA demo and tell me if this would save you spreadsheet work? https://playdocspools.com/beta-readiness

counsel

Send counsel the review packet

Docs Pools is private-beta sports-pool management software. The current review packet separates software/platform fees from pool funds, blocks prize-money custody, and lists launch questions around geography, eligibility, paid acquisition, and customer wording. Counsel review link: https://playdocspools.com/legal-review

internal

Internal next-sprint handoff

Safe to show: homepage, PGA demo, leaderboard/share, beta-readiness packet, legal packet, protected admin/setup surfaces. Do not overclaim: attorney approval, broad paid launch, paid ads, or live non-golf custom option rows. The public.pool_options blocker is cleared; next blocker is attorney approval plus verifying exact custom choices for each non-golf pool before sharing.

Plain-English answer

Can Ryan show or sell this?

Show it to known commissioners as a private-beta sports-pool software demo: yes. Sell broader public access, run paid ads, promise non-golf custom options are live, or touch prize money: no. The live `public.pool_options` migration is applied and smoke-proven for real non-golf option lists; the next product gate is verifying exact commissioner choices per pool, and the next business blocker is attorney approval for launch posture.