StackTrading Docs

SRS: UC_8.2.13 — Flow 1.5: Founding Mentor Initialization

FieldValue
UC_IDUC_8.2.13
Versionv2.9
Last Updated2026-11-04
BA PiClinh.nguyen34
CategorySTAGE 6: CAREER PATH & PROFESSIONALIZATION
ModulePod System
FunctionFlow 1.5 — Founding Mentor Initialization
Document ReferencesZapier Integration V7.pdf (§Flow 1.5: Founding Mentor Initialization lines 1007–1025) · RFQ_ Stack Trading Prop Tech V7.pdf (§Task: Founding Mentor Defense Bypass lines 3141–3145; §Global Entity & Duplicate Check lines 888–889) · Client confirmation 2026-09-18 (Veriff session mechanism; Google Workspace Admin Directory API spec + security implementation) · Client confirmation 2026-09-20 (Signwell replaces Rippling as trigger; any nationality eligible; Dots for payment setup; public checkout via 100% coupon; email collision rule) · CHR-78 (Flow 1.5 Steps 1–8) · CHR-145 (Step 9 Typeform profile sync + checkout Asset Class / EVAL_L1 check)

1. UC Index

UC_IDFunctionDescription
UC_8.2.13Flow 1.5 — Founding Mentor InitializationTriggered when a Founding Pod Leader signs the Founding Pod Leader Agreement in Signwell. Eligible mentors may be from any country. Follows same sequential KYC → Dots sequence as Stage 3 Live Onboarding: Veriff KYC dispatched first; after identity_status = 'Approved', Dots payout setup link dispatched (smart-gated: each step skipped if already approved). Provisioning gate waits for BOTH statuses 'Approved' before provisioning @stacktrading.com Google Workspace, generating 100% Amplify coupon (EVAL_L1 only), and sending Pod_Founding_Leader_Welcome email.

UC_8.2.13 — Flow 1.5: Founding Mentor Initialization

FieldValue
Use CaseFounding Mentor Initialization
DescriptionOnboarding flow for Founding Pod Leaders of any nationality. Triggered by a Signwell webhook when the Founding Pod Leader Agreement is signed. Middleware upserts the user record (Role_Flag = 'Founding_Mentor', is_pod_leader = TRUE, contract_pod_leader = 'Signed'), then dispatches Veriff KYC link first (smart-gated: skipped if identity_status = 'Approved'); after identity_status = 'Approved', dispatches Dots payout setup link (smart-gated: skipped if payout_status = 'Approved'). Sequential KYC → Payouts — same as Stage 3 Live Onboarding — NOT concurrent. A provisioning gate waits for BOTH statuses to be 'Approved' before provisioning the @stacktrading.com Google Workspace account (with changePasswordAtNextLogin: true and OU-level MFA), generating a 100% Amplify coupon (EVAL_L1 only), and sending the Pod_Founding_Leader_Welcome email.
Zapier FlowFlow 1.5 (Founding Mentor Initialization)
3rd PartySignwell (webhook source — contract execution) · Veriff API (smart-gated) · Dots (payout setup — smart-gated) · Google Workspace Admin Directory API · AWS SES

2. Trigger

Event: Webhook received from Signwell — event type: Document Signed (Founding Pod Leader Agreement).

Rippling is not used as the contract execution platform for this flow. Signwell replaces Rippling for the purpose of contract signing and webhook trigger. Founding Mentors may be from any country — nationality is not a constraint for eligibility.

(Source: Zapier Integration V7.pdf §Flow 1.5 lines 1009–1010; Client confirmation 2026-09-20 — "We are replacing Rippling with Signwell for contract execution")


3. Pre-conditions

IDPre-condition
P1Founding Pod Leader has signed the Founding Pod Leader Agreement document in Signwell
P2Signwell fires webhook to Zapier with signer's user_email in payload
P3Middleware has valid credentials for Veriff API, Google Workspace Admin Directory API, Dots API
P4HMAC-SHA256 signature on Signwell webhook validated before any processing begins

4. Post-conditions

#Post-condition
1Global_User_ID upserted with Role_Flag = 'Founding_Mentor', is_pod_leader = TRUE, contract_pod_leader = 'Signed'
2Veriff KYC session created and initiation email dispatched (or bypassed if identity_status = 'Approved')
3Dots payout setup link dispatched (or bypassed if payout_status = 'Approved')
4(After provisioning gate) Both identity_status = 'Approved' AND payout_status = 'Approved' — gate may resolve async (via webhooks) or synchronously (if both already Approved at trigger time)
5(After provisioning gate) @stacktrading.com Google Workspace account provisioned; changePasswordAtNextLogin: true; OU-level MFA enforced
6(After provisioning gate) 100% Amplify coupon generated (EVAL_L1 only)
7(After provisioning gate) Pod_Founding_Leader_Welcome email sent with coupon + Workspace activation link + Typeform profile link
8Asset_Class and Trading_Style written to Pod_Leader_Registry (Table E) after Typeform submission (Step 9); Founding Mentor becomes available in Flow 10 Matching Engine
9Role_Flag = 'Founding_Mentor' activates system-level Drawdown Defense bypass (continuous, server-side)
10(After provisioning gate) Private Discord text and voice channel created via POST /create-pod-channel (slug per BR_8.2.10.2, e.g. pod-john-doe-a7b2); channel_url written to the Founding Mentor's SQL user record; Pod Leader Discord role assigned via POST /manage-discord-role — or, if discord_user_id IS NULL, role and channel access deferred to /link (BR_8.2.13.27)
11(After provisioning gate) discord_link_token present (generated or reused) and included in Pod_Founding_Leader_Welcome, unless discord_user_id already exists

5. Basic Flow

Step 1. Receive Signwell Webhook [CHR-78]

  • Zapier catches the Signwell webhook: document_completed — Founding Pod Leader Agreement.
  • Payload contains: user_email of the signer.
  • Middleware validates HMAC-SHA256 signature before any processing (BR_8.2.13.10).

(Source: Zapier Integration V7.pdf §Flow 1.5 lines 1009–1010; Client confirmation 2026-09-20)

Step 2. Upsert Global_User_ID [CHR-78]

  • Query PostgreSQL for existing record by user_email.
  • If no record exists: generate new Global_User_ID.
  • Upsert the record with:
    • Role_Flag = 'Founding_Mentor'
    • is_pod_leader = TRUE
    • contract_pod_leader = 'Signed'
  • All existing fields (trade history, challenge status, etc.) are preserved — no duplicate row is ever created.

(Source: Zapier Integration V7.pdf §Flow 1.5 Action 2 lines 1013–1015; Client confirmation 2026-09-21)

Step 3. Smart Gating — KYC Dispatch [CHR-78]

  • Check identity_status on the upserted record:
    • Brand new user OR identity_status != 'Approved': Call Veriff API POST /v1/sessions → get { "sessionId": "string", "verification_url": "URL" }. Send KYC initiation email with verification_url. Set identity_status = 'Pending'.
    • Existing trader with identity_status = 'Approved': Skip Veriff entirely — KYC already verified (smart gate bypass).

(Source: Zapier Integration V7.pdf §Flow 1.5 Action 1 line 1012; Client confirmation 2026-09-22 — same KYC→Payouts sequence as Stage 3)

Step 4. Smart Gating — Dots Payout Dispatch [CHR-78]

  • Check payout_status on the upserted record:
    • payout_status != 'Approved' AND dots_payee_id IS NULL: Dispatch Dots payout setup link to user_email for banking + W-9/W-8BEN registration.
    • payout_status = 'Approved' OR dots_payee_id IS NOT NULL: Skip Dots — payout profile already configured (smart gate bypass).
  • Steps 3 and 4 are independent — partial bypass is valid (e.g., bypass KYC only, or bypass Dots only).

(Source: Client confirmation 2026-09-22 — Flow 1.5 uses KYC→Payouts sequence identical to Stage 3 Live Onboarding)

Step 5. Provisioning Gate [CHR-78]

  • Middleware checks: identity_status = 'Approved' AND payout_status = 'Approved'.
  • Case A — One or both statuses still Pending (async): Middleware registers as an async webhook listener. Gate opens when BOTH Veriff callback (identity_status = 'Approved') AND Dots callback (payout_status = 'Approved') are received. Steps 6–8 do not execute until both are received.
  • Case B — Both statuses already Approved (synchronous): Gate evaluates to TRUE immediately after Steps 3 and 4 complete (both smart gate bypasses fired). Middleware does NOT wait for any webhook — fires Steps 6–8 immediately.
  • Either condition alone does not trigger provisioning.

(Source: Client confirmation 2026-09-22)

Step 6. Provision Google Workspace Account [CHR-78]

  • Call Google Workspace Admin Directory API:
    • Endpoint: POST /admin/directory/v1/users
    • Key fields: primaryEmail = [firstname].[lastname]@stacktrading.com, orgUnitPath: /Founding Mentors, changePasswordAtNextLogin: true
    • OU-level MFA enforced (Google Authenticator required before Workspace access)
  • Email collision handling (atomic loop): WHILE GET /users/{handle}@stacktrading.com → 200: append .1, .2, .3, ... until unique.
  • Initiate Google Standard Invite Flow → activation link sent to personal email; no password generated or stored by Middleware.
  • UPDATE Users SET google_workspace_email = '{handle}@stacktrading.com'

(Source: Zapier Integration V7.pdf §Flow 1.5 Action 3 lines 1016–1025; Client confirmation 2026-09-18/20)

Step 6.5. Create Discord Pod Channel [CHR-78]

  • Call Middleware endpoint POST /create-pod-channel with:
    • user_id: Founding Mentor's Global_User_ID
    • leader_name: extracted from google_workspace_email — strip @stacktrading.com suffix (e.g. john.doe@stacktrading.com → john.doe). Write leader_name = 'john.doe' to Pod_Leader_Registry.Leader_Name (Table E).
  • Middleware slugifies the channel name before calling Discord Bot — same rule as Flow 15B (BR_8.2.10.2):
    • Convert to lowercase; replace spaces and . with hyphens; strip all accents and special characters.
    • Append the first 4 characters of leader_id (e.g. john.doe → pod-john-doe-a7b2).
  • Discord Bot creates a private text and voice channel with the slugified name and sets permissions to assigned pod members.
  • Leader channel access (per-user permission): IF discord_user_id IS NOT NULL → Bot grants the Founding Mentor access to the channel at creation. IF discord_user_id IS NULL → channel is still created; leader access is granted when the mentor runs /link (BR_8.2.13.27). Access is never granted via the shared Pod Leader role.
  • Returns JSON: { "channel_id": "string", "channel_url": "URL_string" }. Zapier waits for the response containing channel_url.
  • leader_name MUST be derived from the Workspace handle, NOT from Veriff legal_name (see BR_8.2.13.17).
  • This step executes immediately after Step 6 (Workspace provisioning) and before Step 7 (Amplify coupon generation).
  • On failure: Retry 3× with exponential backoff; no rollback of Pod_Leader_Registry; SEV-1 alert if all retries fail. Steps 7 and 8 proceed regardless. See Exc-5.

(Source: Client supplement 2026-10-19 — leader_name source; RFQ_ Stack Trading Prop Tech V7.pdf §Create Pod Channel; BA decision 2026-10-29 — align slug, response and failure handling with Flow 15B / UC_8.2.10; BA decision 2026-10-30 — leader channel access granted at link time)

Step 6.6. Write channel_url to User Profile

  • Update SQL user record: write channel_url from Step 6.5 response to the Founding Mentor's profile.

(Source: Zapier Integration V7.pdf §Flow 15B line 2046 — applied to Flow 1.5 per BA decision 2026-10-29)

Step 6.7. Assign Discord Role

  • Call POST /manage-discord-role with user_id, add_role = 'Pod Leader'.
  • If discord_user_id IS NULL → endpoint returns 200 OK and drops the action (BR_8.2.10.4). Flow continues.
  • The skipped role and channel access are applied when the mentor later runs /link (BR_8.2.13.27).

(Source: Zapier Integration V7.pdf §Flow 15B lines 2049–2050 — applied to Flow 1.5 per BA decision 2026-10-29)

Step 7. Generate Amplify 100% coupon (EVAL_L1 only) [CHR-78]

  • Generate 100% discount Amplify coupon restricted to EVAL_L1 (Associate Track, $650 — cannot apply to Reset, Accelerated, Advanced, or Live fees).

(Source: Zapier Integration V7.pdf §Flow 1.5 Action 4 lines 1017–1020; Client confirmation 2026-09-20)

Step 7.5. Discord Link Token

  • IF discord_user_id IS NOT NULL → skip; no token needed (already linked).
  • ELSE IF discord_link_token IS NOT NULL (existing trader, not yet linked) → reuse the existing token. Do NOT regenerate.
  • ELSE → generate UUID, UPDATE Users SET discord_link_token = '{uuid}'.
  • Runs after the provisioning gate, before Step 8. Not blocked by a Step 6.5 failure.
  • The token is never overwritten by later steps, including checkout [CHR-91] when the mentor uses the coupon (BR_8.2.13.28).

(Source: BA decision 2026-10-30 — Founding Mentor receives Discord token in welcome email; QnA [DL-EP-02] single-use, no regeneration; QnA [DL-BIZ-04] skip token when already linked)

Step 8. Send Pod_Founding_Leader_Welcome email [CHR-78]

  • To: user_email (personal email — NOT @stacktrading.com)
  • Contains:
    • The 100% Amplify coupon code.
    • The Google Workspace activation link (from Step 6).
    • Onboarding instructions.
    • A Typeform link for profile setup (see Step 9): https://form.stacktrading.com/mentor-profile-setup?leader_id={{user_id}}&email={{user_email}} (Hidden Fields auto-injected).
    • Discord block (only when discord_user_id IS NULL): Discord invite URL + instruction "Join the server and type /link [discord_link_token] in #verify" with the token from Step 7.5.
    • Not included: Veriff KYC link (sent separately in Step 3), any Workspace password.
  • Mentor uses coupon on public checkout ($0.00) → Level 0 SIM, standard starting capital. No BPS Admin manual provisioning.

(Source: Zapier Integration V7.pdf §Flow 1.5 Action 4 lines 1017–1020; Client confirmation 2026-09-28)

Step 9. Table E Profile Sync — Asset_Class & Trading_Style (Typeform Webhook) [CHR-145]

  • Trigger: New Entry Submitted webhook from the Typeform linked in Step 8 — async, fires independently after mentor completes the profile form.
  • Founding Mentor declares:
    • Asset_Class — Futures or Forex (required; Founding Mentors may be external hires without an existing Users.asset_class record)
    • Trading_Style — multi-select: Scalping, Day Trading, Swing Trading, Algorithmic Trading
  • Webhook fires from Typeform → Middleware (Zapier Flow 1.5.1):
    UPDATE Pod_Leader_Registry
    SET
        Asset_Class         = '{{typeform.asset_class}}',
        Trading_Style       = '{{typeform.trading_style}}',
        Is_Profile_Complete = TRUE,
        Status              = 'Active',
        Updated_At          = NOW()
    WHERE Leader_ID = '{{typeform.leader_id}}';
  • Effect on Flow 10: Pod_Leader_Registry row becomes visible to the Mentee Matching Engine only after this step writes a non-null Asset_Class. Until Step 9 completes, the Founding Mentor is not available to receive mentee assignments.
  • Trigger Flow 11 (Waitlist Processor): immediately after the profile write succeeds (Status = 'Active' AND Is_Profile_Complete = TRUE), Middleware triggers Zap Flow 11: Waitlist Processor for this Leader_ID so open slots (Current_Count < Max_Capacity) are filled from Pod_Waitlist (FIFO, same Asset_Class). Fires once per Typeform submission; a re-submission that does not change Is_Profile_Complete from FALSE to TRUE does not re-trigger. This is the "new leader" event of UC_8.2.8 BR_8.2.8.1 #2 for Founding Mentors.
  • Effect on Checkout [CHR-145]: Pod_Leader_Registry.Asset_Class becomes the required asset class when the Founding Mentor checks out with the 100% coupon. At checkout Step 5 (email onBlur), the cart asset_class must match Pod_Leader_Registry.Asset_Class and the cart product_id must be EVAL_L1; otherwise checkout is blocked and the mentor must re-select. If Step 9 has not been completed (Asset_Class IS NULL), checkout is blocked until the Typeform is submitted. See BR_8.2.13.25 / BR_8.2.13.26 (banners BN-18/19/20).

(Source: Client confirmation 2026-09-28 — Flow 1.5 Step 8, Table E Sync; client supplement 2026-10-20)


6. System-Level: Founding Mentor Defense Bypass (Continuous)

This is not a Zapier flow step — it is a continuous server-side protection rule activated by Role_Flag = 'Founding_Mentor'.

Logic: Any Global_User_ID with Role_Flag = 'Founding_Mentor' is protected via a system variable from automated suspension triggers (e.g., Drawdown Defense) that would otherwise impact their mentorship status.

This protection persists as long as Role_Flag = 'Founding_Mentor' is set on the record.

Carry balance during suspension: This scenario does not apply to Founding Mentors. Because the Defense Bypass rule exempts Founding Mentors from automated suspension triggers, their Pending_Carry_Balance is never automatically frozen by Drawdown Defense or DTO/Hiatus events. (Note: For standard Pod Leaders, Pending_Carry_Balance is temporarily frozen on hold until they return from suspension.)

(Source: RFQ_ Stack Trading Prop Tech V7.pdf §Task: Founding Mentor Defense Bypass lines 3141–3145; Client confirmation 2026-09-30 — carry balance freeze N/A for Founding Mentors)


6.1 Hiatus & Leave Governance (Flow 13 Integration)

Cross-reference: UC_9.2 — Flow 13 (Time-Off Management) governs the full leave processing pipeline. This section captures the Founding Mentor-specific rules that apply when Flow 13 is invoked for a Founding Mentor.

6.1.1 Absolute Role Preservation Principle

Temporary leave (DTO or Hiatus via Flow 13) MUST NOT be treated as role abandonment for a Founding Mentor. All administrative privileges and resources below are preserved 100% for the duration of On_Leave state:

ResourceDuring On_LeaveNote
Google Workspace @stacktrading.comActive — preservedGoogle Admin API suspend/delete MUST NOT be called
Pod mentee list (pod_id links)Preserved — pod not dissolvedNo mentee re-assignment triggered
Discord channel pod-[leader_name]Active — not archivedChannel status remains unchanged
Discord Role Pod LeaderAssigned — not revokedNo POST /manage-discord-role removal
Pod_Leader_Registry.Pending_Carry_BalanceAccruing / vesting — unchangedFlow 17 vests normally; not forfeited

Carry during leave is the same for Founding Mentors and standard Pod Leaders: no Pod Leader's Pending_Carry_Balance is frozen during approved leave — it keeps vesting via Flow 17. (Supersedes the earlier wording where the table said "Frozen" and this paragraph said "exempted entirely".)

(Source: QnA_STAGE6_POD_SYSTEM_FLOW10_11.md [POD-XF-15] client confirmed 2026-10-30; [POD-XF-18] client sheet 2026-11-04; RFQ_ Stack Trading Prop Tech V7.pdf §Founding Mentor Defense Bypass)


7. Exceptional Flows

Exc-0 — Duplicate document_id webhook received (Step 1):

  • Idempotency check: if contract_pod_leader = 'Signed' already exists for this user_email → HTTP 200 No-Op; warning logged. No duplicate upsert, KYC dispatch, or provisioning.

Exc-1 — Veriff session creation fails (Step 3):

  • POST /v1/sessions returns non-200.
  • 3 retries with exponential backoff (30s → 5min → 15min); after all fail: HALT — provisioning deferred. SEV-2 → #dev_ops.

Exc-2 — Global_User_ID already exists with a different Role_Flag (Step 3):

  • Middleware matches by email and applies the upsert: Role_Flag = 'Founding_Mentor', is_pod_leader = TRUE, contract_pod_leader = 'Signed'. All other fields are preserved on the same Global_User_ID — no new row is created.
  • Sub-case A — existing account is Active_Challenge or Active_DMA: Role_Flag = 'Founding_Mentor' is applied immediately; the existing trading account continues normally. If the mentor attempts to use the 100% Amplify coupon to purchase an additional account at checkout, the system blocks the purchase and returns: "You already have an active account."
  • Sub-case B — existing account is Failed or Terminated: Role_Flag = 'Founding_Mentor' is applied. When the mentor uses the 100% coupon at the public checkout with their registered email, the system archives the previous failed/terminated account history to user_account_history, resets metrics, and provisions a new SIM challenge under the same Global_User_ID.

Exc-3 — Google Workspace provisioning fails (Step 6):

  • Confirmed behavior (Option A — Proceed): Allow the flow to continue with Steps 7 and 8 (Amplify coupon generation and Pod_Founding_Leader_Welcome email to personal email). Log WORKSPACE_PROVISIONING_FAILED error + send SEV-2 alert to #ops-it for Ops to manually provision/re-sync the Google Workspace account later.
  • After Ops manually provisions the Workspace account, a log entry is sufficient — Middleware does not send a secondary email. Ops triggers the native Google Workspace welcome email directly from the Google Admin console.
  • (Source: Client confirmation 2026-10-07)

Exc-4 — Amplify coupon generation fails (Step 7):

  • Confirmed behavior (Option A — Hold email): Hold the Pod_Founding_Leader_Welcome email; do not send without the coupon. Alert #ops-it to generate the coupon manually; resend email once coupon is ready.
  • Rationale: the primary value of the welcome email is delivering the 100% coupon — sending without it generates immediate support tickets.
  • Note: Founding Mentor Amplify coupons have no hard TTL/expiry (Retention coupons from Flow 7B have 10-day expiry, but not these).
  • (Source: Client confirmation 2026-10-07)

Exc-5 — Discord pod channel creation fails (Step 6.5):

  • POST /create-pod-channel returns non-200 or connection timeout.
  • channel_url not returned → Step 6.6 (DB write) and Step 6.7 (Discord role) cannot proceed.
  • Behavior (same as UC_8.2.10 Exc-1): Do NOT roll back the Pod_Leader_Registry record. Middleware retries POST /create-pod-channel 3 times with exponential backoff. If all retries fail → log DISCORD_CHANNEL_CREATION_FAILED with user_id and leader_name + SEV-1 Slack alert to #ops-it; Ops creates the channel manually and updates channel_url in DB (BR_8.2.13.29).
  • Steps 7, 7.5 and 8 proceed regardless. Do NOT hold the welcome email.

8. Business Rules

BR_IDRule Description
BR_8.2.13.1Veriff Uses Session-Based Links, Not Static URLs: Flow 1.5 creates a fresh Veriff session via POST /v1/sessions for each Founding Mentor. The verification_url is unique per session and scoped to that sessionId. A static or reused link must never be sent — this is a system-level Veriff constraint, consistent with Flow 3A (Live Onboarding). (Source: Zapier Integration V7.pdf §Flow 1.5 Action 1 line 1012; Client confirmation 2026-09-18)
BR_8.2.13.2Workspace Password Must Never Be Emailed: When provisioning the Google Workspace account (Step 6), changePasswordAtNextLogin: true must be set. Middleware must not generate, store, or transmit the password. The user sets their own password via Google's Standard Invite Flow on first login. This rule applies to the Pod_Founding_Leader_Welcome email and any future communication. (Source: Zapier Integration V7.pdf §Flow 1.5 Security requirement lines 1022–1025; Client confirmation 2026-09-18)
BR_8.2.13.3MFA Enforced by OU Policy, Not by Application Code: SSO/MFA enforcement is not implemented in Middleware application logic. It is enforced by the @stacktrading.com Google Workspace Organizational Unit (OU) policy, which mandates Google Authenticator / MFA activation before any Workspace access is granted. Application code only ensures the user is created in the correct OU. (Source: Zapier Integration V7.pdf §Flow 1.5 Security requirement line 1023; Client confirmation 2026-09-18)
BR_8.2.13.4Role_Flag = 'Founding_Mentor' Activates Permanent Defense Bypass: Setting Role_Flag = 'Founding_Mentor' on the Global_User_ID record (Step 3) is not cosmetic — it triggers a continuous, server-side protection that exempts the user from all automated suspension triggers affecting mentorship status (e.g., Drawdown Defense). This protection is system-level and persists for the lifetime of the record. (Source: RFQ_ Stack Trading Prop Tech V7.pdf §Task: Founding Mentor Defense Bypass lines 3141–3145)
BR_8.2.13.5Welcome Email Contains Coupon + Activation Link Only: The Pod_Founding_Leader_Welcome email must contain exactly: the 100% Amplify coupon code for the Associate Track, the Google Workspace activation link, onboarding instructions, the profile Typeform link, and — when discord_user_id IS NULL — the Discord invite URL with the /link [discord_link_token] instruction. It must NOT contain: any Workspace password, any Veriff KYC link (the KYC link is sent in a separate email from the Veriff session step). (Source: Zapier Integration V7.pdf §Flow 1.5 Action 4 lines 1017–1020; BA decision 2026-10-30 — Discord token)
BR_8.2.13.6Workspace Email Collision — Sequential Numerical Index: If the derived Workspace address [firstname].[lastname]@stacktrading.com already exists, Middleware must append a sequential numerical index (e.g. john.doe1, john.doe2) until a unique address is found. Do NOT use user_id suffix or other patterns. (Source: Client confirmation 2026-09-20)
BR_8.2.13.7Dots Payout Setup Dispatched by Middleware — Same Sequence as Stage 3: Flow 1.5 uses the same KYC → Payouts sequence as Stage 3 Live Onboarding. After the Signwell webhook is received, Middleware dispatches a Dots payout setup link to the Founding Mentor (Step 4 — smart-gated: skipped if payout_status = 'Approved'). The mentor is not expected to self-onboard to Dots independently — the dispatch is system-initiated. Rippling is not used at any point in this flow. (Source: Client confirmation 2026-09-22)
BR_8.2.13.8Trading Account Provisioning via Public Checkout, Not BPS Admin: Founding Mentors are not provisioned with a trading account manually via BPS Admin. They must use the 100% discount Amplify coupon generated in Step 7 to purchase the Associate Track through the public website. They start at Level 0 in the SIM environment with the standard starting capital for their selected tier. No special provisioning path exists for Founding Mentors' trading accounts. (Source: Client confirmation 2026-09-20)
BR_8.2.13.9contract_pod_leader ≠ contract_status — Two Separate State Machines: contract_pod_leader tracks the Founding Pod Leader Agreement (this flow) and the Standard Pod Leader opt-in agreement (Flow 15B). contract_status is reserved exclusively for the Trader ICA signed during Flow 3E (Live Onboarding). These are independent fields on the Users table and must never be merged or aliased. (Source: Client confirmation 2026-09-21)
BR_8.2.13.10Signwell Webhook Must Be HMAC-SHA256 Validated: Middleware must validate the HMAC-SHA256 signature on every inbound Signwell webhook before any processing begins (Step 1). Requests that fail signature validation must be rejected with HTTP 400 and must not trigger any upsert, KYC dispatch, or provisioning action. (Source: UC_5.1-F1.5 BR_5.1-F1.5.1; Client confirmation 2026-09-22)
BR_8.2.13.11Provisioning Gate — Both KYC and Payout Must Be Approved Before Workspace + Coupon: Google Workspace provisioning (Step 6) and Amplify coupon generation + welcome email (Steps 7 and 8) must not execute until BOTH identity_status = 'Approved' AND payout_status = 'Approved'. Case A (async): Middleware registers as async webhook listener; either status alone does not trigger provisioning. Case B (synchronous): if both already 'Approved' at Steps 3 and 4, gate fires immediately without waiting for webhooks. (Source: Client confirmation 2026-09-22)
BR_8.2.13.12Downstream Path After SIM — Flow 3A Branch C (UC_5.1): After the Founding Mentor uses the 100% coupon to enter the SIM environment, the path upon SIM evaluation pass is Flow 3A Branch C — Returning Trader. Both identity_status = 'Approved' and payout_status = 'Approved' are already set; Flow 3A bypasses KYC and Dots dispatch steps natively. Middleware must not add an additional KYC or Dots check for Founding Mentor SIM pass events. (Source: Client confirmation 2026-09-22)
BR_8.2.13.13Founding Mentor Coupon — Non-Transferable, No Expiry, EVAL_L1 Only: Non-transferable — tied to Founding Mentor's registered email, cannot be gifted. No hard TTL/expiry — does not expire (contrast: Flow 7B Retention coupons have a 10-day expiry). EVAL_L1 only — applies exclusively to the Associate Track ($650 fee); does not apply to Reset, Accelerated, Advanced, or Live track fees. (Source: Client confirmation 2026-10-07)
BR_8.2.13.14Coupon Delivery Via Email Only — No Dashboard UI Module: The Founding Mentor discount code is delivered via the Pod_Founding_Leader_Welcome email only. No custom discount code UI module is built on the dashboard for Day 1. If the coupon is sent separately (e.g., after Exc-4 recovery), it is also delivered via email. The Everflow "Viral Reward" code (Flow 32/33) is a separate transferable code and is not the same as the Founding Mentor coupon. (Source: Client confirmation 2026-10-07)
BR_8.2.13.15Google Workspace Failure — Non-Blocking; Cascade Continues to Steps 7 and 8: If Google Workspace provisioning fails at Step 6, Steps 7 and 8 MUST proceed. Ops is notified via SEV-2 alert to #ops-it and provisions the Workspace account manually. After Ops provision, Ops triggers the native Google Workspace welcome email from the Google Admin console — Middleware does not send a secondary email. (Source: Client confirmation 2026-10-07)
BR_8.2.13.16Amplify Coupon Failure — Hold Welcome Email; Do Not Send Without Coupon: If Amplify coupon generation fails at Step 7, the Pod_Founding_Leader_Welcome email MUST NOT be sent without the coupon. Hold the email; alert #ops-it to generate the coupon manually; send the email once the coupon is ready. Sending without the coupon generates immediate support tickets. (Source: Client confirmation 2026-10-07)
BR_8.2.13.17leader_name MUST Be Derived from Workspace Handle — NOT from Veriff legal_name: Extract leader_name from google_workspace_email by stripping @stacktrading.com (e.g. john.doe@stacktrading.com → john.doe). Do NOT use Veriff legal_name. Reasons: (1) Discord API requires lowercase ASCII/digits/hyphens only — Veriff names often contain diacritics/spaces causing HTTP 400; (2) Workspace collision loop guarantees handle uniqueness, inherited automatically by leader_name in Table E and Discord; (3) Legal identity (KYC/tax) kept separate from business identity (Discord/Workspace). Discord channel slug follows BR_8.2.10.2 (lowercase, ./spaces → -, strip accents/special characters, append first 4 characters of leader_id — e.g. pod-john-doe-a7b2). (Source: Client supplement 2026-10-19; BA decision 2026-10-29 — slug aligned with Flow 15B)
BR_8.2.13.18Guest Cleanup Cron MUST Exclude Founding Mentors [CHR-145]: The 30-day Guest auto-deletion cron job must include AND role_flag != 'Founding_Mentor' (or equivalently AND role_flag IS NULL) in its WHERE clause. Founding Mentor records must never be auto-deleted by the Guest cleanup cron regardless of inactivity duration. Rationale: Founding Mentors use the Amplify coupon on public checkout as a Guest/anonymous user before their Role_Flag is fully propagated — without this exclusion the cron could delete valid Founding Mentor records in the window between Signwell trigger and checkout completion. (Source: Client confirmation 2026-10-22)
BR_8.2.13.19Promo Code — Phase 1: EVAL_L1 Only, No Special Logic: In Phase 1, the existing 1-to-1 EVAL_L1 promo code validation is kept as-is for all Founding Mentors — including returning Founding Mentors (Exc-2 Sub-case B). No special or custom promo code logic is written for this flow. Multi-product applicability, reset-eligible coupons, and any other promo flexibility are deferred to Phase 2 (Day 2) to protect the launch schedule. This confirms the existing BR_8.2.13.13 scope — EVAL_L1 only, non-transferable, no expiry — without adding special promo handling logic. (Source: Client confirmation 2026-10-22)
BR_8.2.13.20$0.00 Tax Rule — Skip Quaderno API When Final Amount Is Zero: Tax is always calculated on the net post-discount amount. When Final_Amount == 0 (i.e., the 100% coupon fully covers the checkout price): (1) Set Tax = $0.00 automatically; (2) Do NOT call the Quaderno tax calculation API — skip the API call entirely. No Quaderno request should be made for $0.00 orders. (Source: Client confirmation 2026-10-22)
BR_8.2.13.21$0.00 Checkout — Bypass All Payment Gateways; Record Internally; Generate S3 PDF Receipt: When the checkout Final_Amount == 0 after applying the 100% Founding Mentor coupon: (1) Do NOT submit the transaction to any payment processor (NMI, ForumPay, T365, Dusupay, PayRetailers, or any other gateway); (2) Record the $0.00 transaction internally in the system database; (3) Generate a $0.00 S3 receipt PDF and deliver it to the Founding Mentor; (4) Route directly to Flow 1 Account Activation without any payment-processor confirmation step. A $0.00 checkout is not an error state — it is a valid, expected outcome for Founding Mentors using the 100% Amplify coupon. (Source: Client confirmation 2026-10-22)
BR_8.2.13.22QuickBooks — Exclude $0.00 Orders from Journal Entry: Do NOT send $0.00 orders to QuickBooks. The QuickBooks journal entry API must only be triggered when total_amount > 0. When total_amount == 0 (i.e., $0.00 Founding Mentor checkout), skip the QuickBooks integration entirely — no journal entry created, no QBO API call made. (Source: Client confirmation 2026-10-22; CHR-139 — QuickBooks logging)
BR_8.2.13.23No Dashboard Hard-Lock During SIM: The hard-locked onboarding overlay (UC_5.1 BR_5.1.3 / BR_5.1.8) applies only to Flow 3 (SIM-to-Live transition after Passed_Challenge) and Flow 6 (Level 6 transition). When an existing SIM trader at Level 0 is enrolled into Flow 1.5 and identity_status = 'Pending' / payout_status = 'Pending' are set, the dashboard MUST NOT display the hard-blocking overlay. The trader continues trading the SIM account without interruption. Gate: the overlay is suppressed when Role_Flag = 'Founding_Mentor' and the trader is still in SIM (this initial KYC + Dots step). After the Founding Mentor passes SIM (Passed_Challenge → Flow 3A Branch C, BR_8.2.13.12), the overlay is shown as normal. (Source: Client confirmation 2026-10-30; UC_5.1 BR_5.1-F1.5.8)
BR_8.2.13.24Veriff KYC and Dots Setup Links — Email Only, No Dashboard Banner: The Veriff KYC link (Step 2) and Dots payout setup link (Step 4) are delivered only via the Flow 1.5 onboarding emails. No new dashboard banner or in-app prompt is built for Flow 1.5. (Source: Client confirmation 2026-10-30)
BR_8.2.13.25Checkout — Founding Mentor Profile & Asset Class Check [CHR-145]: At checkout Step 5 (email onBlur, Duplicate Account Check — UC_2.6.2), when the Users record matched by email has Role_Flag = 'Founding_Mentor', this check runs before the standard status branches: (1) If Pod_Leader_Registry.Asset_Class IS NULL (Step 9 Typeform not yet submitted) → HTTP 409 from POST /capture-lead; no Users row written; [Next] disabled; banner BN-20. (2) If cart asset_class (Step 1) ≠ Pod_Leader_Registry.Asset_Class declared in the Step 9 Typeform → HTTP 409; no Users row written; [Next] disabled; banner BN-18. The mentor must re-select the matching asset class. (3) Match → proceeds to BR_8.2.13.26. Modeled on UC_2.6.2 BR_2.6.2.11 (BN-16). (Source: CHR-145)
BR_8.2.13.26Checkout — Founding Mentor Package Must Be EVAL_L1 [CHR-145]: Evaluated immediately after BR_8.2.13.25 passes. Cart product_id (Step 2) must be EVAL_L1 (Associate Track — the only product the Founding Mentor coupon covers, BR_8.2.13.13). Otherwise → HTTP 409 from POST /capture-lead; no Users row written; [Next] disabled; banner BN-19. The mentor must re-select the Associate Track. Match → continues to the standard status branches of the Duplicate Account Check. Modeled on UC_2.6.2 BR_2.6.2.12 (BN-17). ⚠️ UC_2.6.2 (checkout doc, BA owner Huyen Dinh) not yet updated with this branch. (Source: CHR-145)
BR_8.2.13.27Late-Linking — Pod Leader Role + Own Channel Access on /link: When a user runs /link and Pod_Leader_Registry has a row with Leader_ID = user_id AND Status NOT IN ('Terminated', 'Permanently_Ineligible'), the bot MUST (1) assign the Pod Leader role and (2) grant that user per-user access to their own pod channel (Users.channel_url). Applies to both Founding Mentors (Flow 1.5) and regular Pod Leaders (Flow 15B — BR_8.2.10.11). Runs together with level-title sync (UC_8.1.1) and Pod Member sync (UC_8.2.1 A-04). ⚠️ UC_8.1.1 (/link handler, BA owner Huyen Dinh) not yet updated with this branch. (Source: QnA_Level_Promotion §3.3 late-linking principle, 2026-09-30; BA decision 2026-10-30 — channel access granted at link time)
BR_8.2.13.28Founding Mentor Discord Token — Generated in Flow 1.5, Never Overwritten: The token from Step 7.5 is the one the mentor holds in their welcome email. Any later token step (e.g. checkout [CHR-91] when the mentor uses the coupon) MUST NOT overwrite an existing discord_link_token. Otherwise the emailed token becomes invalid. ⚠️ UC_2.7-2.8 (checkout [CHR-91], BA owner Huyen Dinh) not yet updated with this guard. (Source: BA decision 2026-10-30; QnA [DL-EP-02])
BR_8.2.13.29Discord Channel Failure — No DB Rollback; Retry 3× Then SEV-1: Same rule as BR_8.2.10.9. If POST /create-pod-channel fails or times out, the Pod_Leader_Registry record MUST NOT be rolled back. Middleware retries with exponential backoff (3 attempts); if all fail, fire SEV-1 alert to #ops-it for Ops to create the channel manually and update channel_url in DB. Steps 7, 7.5 and 8 are not blocked. (Source: BA decision 2026-10-29 — align with Flow 15B)

Users Table (relevant fields added/updated by this flow)

FieldTypeDescription
Role_FlagVARCHARSet to 'Founding_Mentor' by this flow. Activates Defense bypass (BR_8.2.13.4).
is_pod_leaderBOOLEANSet to TRUE by this flow.
contract_pod_leaderENUM('Pending', 'Signed', 'Expired')Tracks signing status of the Founding Pod Leader Agreement (this flow). Distinct from contract_status (Trader ICA — set by Flow 3E). Used by both Founding Mentors (Flow 1.5) and Standard Pod Leaders L7+ (Flow 15B). Set to 'Signed' when Signwell webhook is received.
google_workspace_emailVARCHAR(255)The provisioned @stacktrading.com address assigned by Step 6. Stored for reference and offboarding (UC_8.2.11 Step 5).
channel_urlVARCHARDiscord pod channel URL returned by POST /create-pod-channel. Written at Step 6.6.
discord_link_tokenUUIDGenerated or reused at Step 7.5 when not linked (BR_8.2.13.28). Deleted by the bot on /link.

(Source: Client confirmation 2026-09-21 — contract_pod_leader field confirmed; distinct from contract_status which is reserved for Trader ICA in Flow 3E)

Pod_Leader_Registry Table E — fields written by this flow

FieldValue at InsertUpdate Timing
Leader_IDuser_idSet at Step 6 (Workspace provision) — Table E insert triggered after provisioning gate passes
Leader_NameHandle from google_workspace_email (e.g. john.doe)Set at Step 6.5 — derived by stripping @stacktrading.com suffix; used as Discord channel name source
google_workspace_email{handle}@stacktrading.comSet at Step 6
Status'Active'Set at Step 9 (Typeform sync)
Asset_ClassFrom Typeform — 'Futures' | 'Forex'Set at Step 9
Trading_StyleFrom Typeform — multi-selectSet at Step 9
Max_Capacity7Set at Step 6 insert
Current_Count0Set at Step 6 insert
Pending_Carry_Balance$0.00Set at Step 6 insert

10. API Reference

EndpointMethodInputOutputServerDescription
POST /v1/sessionsPOSTuser_email + standard Veriff session params{ "sessionId": "string", "verification_url": "URL" }Veriff APICreates session-based identity verification. Returns hosted verification page URL unique to this session.
POST /admin/directory/v1/usersPOSTprimaryEmail, changePasswordAtNextLogin: true, OU assignment200 OK + user objectGoogle Workspace Admin Directory APIProvisions @stacktrading.com Workspace account. OU policy enforces MFA at first login.
POST /admin/directory/v1/users/{userKey}/sendWelcomeEmailPOSTuserKey200 OKGoogle Workspace Admin Directory APITriggers Google Standard Invite Flow — sends activation link to user's personal email; no password transmitted.
POST /create-pod-channelPOSTuser_id, leader_name{ "channel_id": "string", "channel_url": "URL_string" }Middleware / Discord BotCreates private Discord text + voice channel (slug per BR_8.2.10.2). Grants leader access only if discord_user_id exists. Returns channel URL. Called at Step 6.5. Retry 3× then SEV-1 on failure.
POST /manage-discord-rolePOSTuser_id, add_role = 'Pod Leader'200 OKMiddleware / Discord BotAssigns Pod Leader Discord role. Returns 200 OK and drops action if discord_user_id IS NULL. Called at Step 6.7.

(Source: Client confirmation 2026-09-18; Zapier Integration V7.pdf §Flow 1.5)


11. Email Templates

Template KeyTriggerRecipientContent
KYC initiation emailStep 2 — after Veriff session createdFounding Mentorverification_url (Veriff Hosted Verification Page)
Pod_Founding_Leader_WelcomeStep 8 — after Workspace provisioned + coupon generatedFounding Mentor100% Amplify coupon code + Google Workspace activation link + Typeform profile setup link + onboarding instructions + (if not linked) Discord invite URL and /link [discord_link_token] instruction

(Source: Zapier Integration V7.pdf §Flow 1.5 lines 1017–1020)


12. Acceptance Criteria

AC_IDFlowGivenThenType
AC-8.2.13-01Happy pathSignWell fires document_completed webhook (Founding Pod Leader Agreement signed)Veriff session created; KYC email with verification_url sent; Global_User_ID in PostgreSQL with Role_Flag = 'Founding_Mentor', is_pod_leader = TRUE, contract_pod_leader = 'Signed'; Workspace provisioned; Pod_Founding_Leader_Welcome email sent with coupon + activation linkIntegration
AC-8.2.13-02Veriff sessionStep 2 executesEach Founding Mentor receives a unique, session-scoped verification_url — no static link reused across usersIntegration
AC-8.2.13-03Password securityStep 6 executesWorkspace account created with changePasswordAtNextLogin: true; no password appears in any email; user sets password via Google invite flowIntegration
AC-8.2.13-04MFA enforcementFounding Mentor clicks activation linkGoogle prompts MFA enrollment before Workspace access is granted; OU policy enforces Google AuthenticatorIntegration
AC-8.2.13-05Defense bypassRole_Flag = 'Founding_Mentor' setUser exempt from automated Drawdown Defense suspension triggers impacting mentorship statusIntegration
AC-8.2.13-06Welcome email contentPod_Founding_Leader_Welcome sentEmail contains coupon code + activation link + Typeform link (+ Discord block if not linked); Veriff KYC link NOT present; no plaintext passwordIntegration
AC-8.2.13-07Existing useruser_email already has a Global_User_IDRecord modified (not duplicated); Role_Flag updated to 'Founding_Mentor'Integration
AC-8.2.13-08Email collisionjohn.doe@stacktrading.com already exists when provisioning new Founding Mentorjohn.doe1@stacktrading.com provisioned; sequential index incremented until unique address foundIntegration
AC-8.2.13-09Coupon usagePod_Founding_Leader_Welcome email sent with 100% couponMentor uses coupon on public website checkout; account created at Level 0 SIM with standard starting capital; no BPS Admin manual provisioningIntegration
AC-8.2.13-10Exc-2 Sub-case Auser_email already has an Active_Challenge or Active_DMA account; Signwell webhook receivedRole_Flag updated to 'Founding_Mentor', is_pod_leader = TRUE, contract_pod_leader = 'Signed' on existing record; existing trading account continues; if mentor attempts to use 100% coupon to purchase another account, system blocks and returns "You already have an active account."Integration
AC-8.2.13-11Exc-2 Sub-case Buser_email has a Failed or Terminated account; Signwell webhook received; mentor later uses 100% coupon at public checkoutRole_Flag = 'Founding_Mentor' applied; previous account history archived to user_account_history; new SIM challenge provisioned under the same Global_User_IDIntegration
AC-8.2.13-12Smart gate — KYC bypassSignwell webhook received for user with identity_status = 'Approved'Veriff POST /v1/sessions NOT called; KYC email NOT sent; flow proceeds directly to Dots smart gate checkIntegration
AC-8.2.13-13Smart gate — Dots bypass (payout_status)Signwell webhook received for user with payout_status = 'Approved'Dots setup link NOT dispatched; flow proceeds directly to provisioning gate checkIntegration
AC-8.2.13-13bSmart gate — Dots bypass (dots_payee_id)Signwell webhook received for user with dots_payee_id IS NOT NULL (payout profile exists)Dots setup link NOT dispatched; flow proceeds directly to provisioning gate checkIntegration
AC-8.2.13-14Provisioning gateidentity_status = 'Approved' but payout_status = 'Pending'Google Workspace NOT provisioned; coupon NOT generated; Pod_Founding_Leader_Welcome NOT sent — gate not passedIntegration
AC-8.2.13-15Provisioning gate — pass (async)Both identity_status = 'Approved' AND payout_status = 'Approved' received via webhooksWorkspace provisioned; 100% coupon generated (EVAL_L1 only); Pod_Founding_Leader_Welcome sentIntegration
AC-8.2.13-16Provisioning gate — immediate (synchronous)Signwell webhook received for existing user who already has both identity_status = 'Approved' AND payout_status = 'Approved' (both smart gate bypasses fire in Steps 3 and 4)Gate evaluates to TRUE immediately; Workspace provisioned, coupon generated, Pod_Founding_Leader_Welcome sent without waiting for any webhook; no onboarding action-required email sentIntegration
AC-8.2.13-17Typeform profile sync [CHR-145]Founding Mentor submits Step 9 TypeformPod_Leader_Registry.Asset_Class and Trading_Style written; Founding Mentor becomes visible to Flow 10 Matching EngineIntegration
AC-8.2.13-18Asset_Class required [CHR-145]Founding Mentor submits Typeform without selecting Asset_ClassForm validation rejects — Founding Mentor must explicitly declare asset class (cannot inherit from Users — may not have existing trading record)Integration
AC-8.2.13-19Exc-3: Workspace non-blockingGoogle Workspace provisioning fails at Step 6Flow continues to Steps 7–8; WORKSPACE_PROVISIONING_FAILED logged; SEV-2 alert to #ops-it; coupon generated; Pod_Founding_Leader_Welcome email sent with coupon + placeholder note about Workspace activationIntegration
AC-8.2.13-20Exc-4: Hold email on coupon failAmplify coupon generation fails at Step 7Pod_Founding_Leader_Welcome email NOT sent; #ops-it alerted; email sent once coupon is manually generated and readyIntegration
AC-8.2.13-21Coupon non-transferableFounding Mentor coupon applied by a different user emailSystem rejects application; coupon tied to Founding Mentor's registered email onlyIntegration
AC-8.2.13-22Coupon EVAL_L1 onlyFounding Mentor attempts to use coupon on Advanced Track ($10,000)System rejects application; coupon valid for Associate Track ($650) onlyIntegration
AC-8.2.13-23Discord channel — happy pathStep 6 succeeds; POST /create-pod-channel called at Step 6.5 for john.doe@stacktrading.comPrivate text + voice channel pod-john-doe-[first 4 of leader_id] created; channel_url written to user record; POST /manage-discord-role assigns Pod Leader (or drops if not linked); Steps 7–8 proceedIntegration
AC-8.2.13-24Exc-5: Discord channel retryPOST /create-pod-channel fails all 3 retriesPod_Leader_Registry NOT rolled back; DISCORD_CHANNEL_CREATION_FAILED logged; SEV-1 alert to #ops-it; Steps 7–8 proceed; Ops creates channel manually and updates channel_urlIntegration
AC-8.2.13-25No SIM lockoutExisting SIM trader at Level 0 is enrolled into Flow 1.5; identity_status = 'Pending' and payout_status = 'Pending'Dashboard does NOT show the hard-lock onboarding overlay (Role_Flag = 'Founding_Mentor' gate); sidebar, settings and SIM trading remain availableUI / Integration
AC-8.2.13-27Overlay after SIM passFounding Mentor reaches Passed_Challenge → Flow 3A Branch CHard-lock onboarding overlay shown as normal until Live onboarding completesUI / Integration
AC-8.2.13-28Checkout — Typeform not submitted [CHR-145]Role_Flag = 'Founding_Mentor'; Pod_Leader_Registry.Asset_Class IS NULL; mentor enters email at checkout Step 5HTTP 409; [Next] disabled; BN-20 shown; no Users row writtenIntegration
AC-8.2.13-29Checkout — asset class mismatch [CHR-145]Typeform Asset_Class = 'Futures'; cart asset_class = 'Forex'HTTP 409; [Next] disabled; BN-18 shown with "Futures"; mentor must re-selectIntegration
AC-8.2.13-30Checkout — package not EVAL_L1 [CHR-145]Asset class matches; cart product_id = 'EVAL_L2'HTTP 409; [Next] disabled; BN-19 shown; mentor must select Associate TrackIntegration
AC-8.2.13-26Link deliveryFlow 1.5 dispatches Veriff KYC and Dots setup linksLinks delivered by email only; no Flow 1.5 banner rendered on the dashboardUI / Integration
AC-8.2.13-31Discord token — new mentorBrand-new Founding Mentor, provisioning gate passedUUID written to discord_link_token; welcome email contains Discord invite + /link [token]Integration
AC-8.2.13-32Discord token — reuse / skip(a) existing token, not linked; (b) discord_user_id already set(a) same token reused, not regenerated; (b) no token, no Discord block in email; role + channel access applied at Step 6.5/6.7Integration
AC-8.2.13-33Late-linkingMentor runs /link [token] after Steps 6.5–6.7 ran while unlinkeddiscord_user_id written; Pod Leader role assigned; mentor can open own pod-... channel; cannot see other podsIntegration
AC-8.2.13-34Token not overwritten at checkoutMentor later checks out with the 100% coupondiscord_link_token from Step 7.5 unchanged; emailed token still validIntegration
AC-8.2.13-35Flow 11 on profile completionFounding Mentor submits Step 9 Typeform; Pod_Waitlist has traders with the same Asset_ClassFlow 11 triggered for this Leader_ID; oldest matching waitlisted trader invited (Pod_Spot_Available_Confirm)Integration

13. Changelog

DateVersionChangePreviousAfterSource
2026-11-04v2.8 → v2.9§6.1 cross-reference; §6.1.1 carry row, paragraph, sourceTable: carry "Frozen — preserved 100%"; paragraph: Founding Mentor "exempted entirely" (self-contradictory); cross-ref UC_9.13; source "RFQ V7 §Time-Off & Hiatus Management Engine" (does not exist)Carry keeps vesting during leave for all Pod Leaders incl. Founding Mentor; cross-ref UC_9.2; sources → client QnAClient sheet 2026-11-04 [POD-XF-18]; client 2026-10-30 [POD-XF-15]
2026-10-30v2.7 → v2.8Step 9: Flow 11 trigger added; AC-8.2.13-35 added; BR_8.2.13.18 tagged [CHR-145]Step 9 only made the mentor visible to Flow 10 — nothing filled the new pod from the waitlist. BR_8.2.13.18 counted under CHR-78 scope (changelog v2.6)After the profile write, Middleware triggers Flow 11 for this leader to fill open slots from Pod_Waitlist. BR_8.2.13.18 belongs to CHR-145; rule content unchangedUC_8.2.8 BR_8.2.8.1 #2; BA decision 2026-10-30; CHR-145
2026-10-30v2.6 → v2.7Discord pod channel aligned with Flow 15B (UC_8.2.10) + Discord late-linking + Founding Mentor Discord token: Post-conditions 10/11; Step 6.5 rewritten; Steps 6.6, 6.7, 7.5 added; Step 8 Discord block; Exc-5; BR_8.2.13.5, BR_8.2.13.17 updated; BR_8.2.13.27/28/29 added; Users data model (channel_url, discord_link_token); API ref; Email Templates; AC-8.2.13-06/23/24 updated; AC-8.2.13-31–34 addedSlug .→- with no leader_id suffix; /create-pod-channel also assigned the role and returned channel_name; no channel_url write; failure non-blocking SEV-2, no retry; no rule for an unlinked mentor; mentor had no Discord token until checkoutSlug per BR_8.2.10.2 (pod-john-doe-a7b2); response channel_id + channel_url; channel_url written (Step 6.6); role via /manage-discord-role (Step 6.7); retry 3× → SEV-1, no rollback; leader channel access per user, granted at creation if linked, else on /link (BR_8.2.13.27); token generated/reused at Step 7.5, sent in welcome email, never overwritten at checkout (BR_8.2.13.28). UC_8.1.1 and UC_2.7-2.8 (Huyen Dinh) not editedBA decision 2026-10-29 (align with 15B); BA decision 2026-10-30 (channel access at link time; Flow 1.5 generates token); Zapier Integration V7.pdf §Flow 15B; RFQ_ Stack Trading Prop Tech V7.pdf §Create Pod Channel
2026-10-30v2.5 → v2.6Founding Mentor change requirement split into 2 CHRs: Document References; Step 1–8 headings tagged [CHR-78]; Step 9 heading + AC-8.2.13-17/18 tagged [CHR-145]; Step 9 "Effect on Checkout" bullet added; BR_8.2.13.25/26 + AC-8.2.13-28/29/30 addedNo CHR tags on Flow 1.5; Step 9 had no checkout impactCHR-78 = Steps 1–8 (and BR_8.2.13.1–24; BR_8.2.13.22 also CHR-139). CHR-145 = Step 9 + checkout check: cart asset_class = Pod_Leader_Registry.Asset_Class, product_id = EVAL_L1, Typeform must be completed (BR_8.2.13.25/26; BN-18/19/20). UC_2.6.2 checkout doc not editedCHR-78; CHR-145 (BA 2026-10-30)
2026-10-30v2.4 → v2.5BR_8.2.13.19 reworded; BR_8.2.13.22 source tagged CHR-139; BR_8.2.13.23–24 added; AC-8.2.13-25/26/27 addedBR_8.2.13.19: generic "EVAL_L1 only path" wording. No rule on dashboard overlay or link delivery for SIM traders enrolled into Flow 1.5BR_8.2.13.19: 1-to-1 EVAL_L1 validation kept for all (incl. returning) Founding Mentors, no custom logic, flexibility deferred to Phase 2 (Day 2). BR_8.2.13.23: no hard-lock overlay during SIM, gated by Role_Flag = 'Founding_Mentor'; overlay shown as normal after SIM pass (Flow 3A Branch C). BR_8.2.13.24: Veriff + Dots links via email only, no new bannerClient confirmation 2026-10-30; CHR-139 (QuickBooks logging)
2026-10-28v2.3 → v2.4§6.1.2 Acting Cover Mechanism removedBPS Admin may designate a temporary Acting_Cover Pod Leader with read-only access to the mentee's reports during the Founding Mentor's leave (source "RFQ V7 §Time-Off & Hiatus Management Engine")Removed — cited section does not exist in RFQ V7; Acting_Cover in V7 exists only as a Flow 15A statusSource audit 2026-10-28
2026-10-20v2.1 → v2.2Step 8.1 promoted to Step 9 (async Typeform webhook — independent trigger, not a sub-step); all references updated (Post-condition 8, Step 8 Typeform link, Table E data model, AC-8.2.13-17, changelog rows)Step 8.1 was a sub-step under Step 8Step 9 is a standalone async step triggered by Typeform New Entry Submitted webhook; saves Asset_Class, Trading_Style, Is_Profile_Complete, Status to Pod_Leader_RegistryClient supplement 2026-10-20
2026-09-18— → v1.0Initial document—Flow 1.5 full spec; all BRs; ACsZapier Integration V7.pdf §Flow 1.5; RFQ_ Stack Trading Prop Tech V7.pdf §Founding Mentor Defense Bypass; Client confirmation 2026-09-18
2026-09-20v1.0 → v1.1Trigger: Rippling → Signwell; eligibility: any country; payment: Dots (not Rippling); trading account: public checkout (not BPS manual); email collision rule addedTrigger: Rippling webhook; US-only assumption implied; payment via Rippling; BPS manual provisioning assumedTrigger: Signwell webhook. Any nationality eligible. Founding Mentors use Dots. Trading account via public checkout with 100% coupon (Level 0 SIM). Workspace email collision: sequential numerical index. Added BR_8.2.13.6–8, AC-8.2.13-08–09.Client confirmation 2026-09-20
2026-09-22v1.1 → v1.2Exc-2 confirmed sub-cases. Step 3 expanded to 3 upserted fields. §9 Data Model added. BR_8.2.13.9 added. AC-8.2.13-01 corrected. AC-8.2.13-10/11 added.Exc-2: BA assumption. Step 3: Role_Flag only. No Data Model. AC-01: stale "Rippling fires webhook".Exc-2 two confirmed sub-cases. Step 3: three fields. §9 Data Model. BR_8.2.13.9. AC-01 corrected. AC-10/11 added.Client confirmation 2026-09-21
2026-09-22v1.3 → v1.4Wording clarification: UC Index description and Overview Description updated to make sequential KYC → Dots explicitUC Index + Overview Description: "+" / "and" wording implied concurrent dispatchUC Index + Overview Description: explicit sequential language KYC → PayoutsClient confirmation 2026-09-22 ("Không gửi cùng lúc, KYC => DOTs như ở stage 3")
2026-09-22v1.4 → v1.5Align Basic Flow with UC_5.1-F1.5: Steps 3/4 split, provisioning gate Case A/B, Workspace orgUnitPath, atomic collision loop, coupon/email split into separate steps, all step references renumbered. AC-8.2.13-16 added.Basic Flow: Step 3 gộp KYC+Dots; purely async gate; Workspace missing orgUnitPath; coupon+email gộpBasic Flow: 8 steps; gate Case A/B; Workspace aligned; AC-16 covers synchronous immediate-fireClient confirmation 2026-09-22
2026-09-22v1.5 → v1.6BR_8.2.13.12 added: cross-reference to Flow 3A Branch C (UC_5.1) as downstream path after Founding Mentor passes SIM§8: no downstream cross-referenceBR_8.2.13.12 addedClient confirmation 2026-09-22 (Q19)
2026-09-28v1.6 → v1.7Step 8.1 Typeform Table E sync added; Step 8 email includes Typeform link; Post-condition 8 added; Table E Data Model extended; AC-8.2.13-17/18 addedStep 8: no Typeform link; Table E: no Asset_Class/Trading_StyleStep 8.1: Founding Mentor declares Asset_Class + Trading_Style; visible to Flow 10 only after syncClient confirmation 2026-09-28
2026-09-30v1.7 → v1.8Step 8.1 SQL: Is_Profile_Complete = TRUE added. §6 carry balance confirmed N/A for Founding Mentors. Exc-3: BA option A vs B documented (pending Adrian).Step 8.1 SQL: missing Is_Profile_Complete. §6: no carry balance clause. Exc-3: BA assumption only.Is_Profile_Complete in Step 8.1 SQL; carry exempt confirmed; Exc-3 options documented.Client confirmation 2026-09-25; Exc-3 options BA-proposed 2026-09-30
2026-10-01v1.8 → v1.9§6.1 Hiatus & Leave Governance added: Founding Mentor resource preservation table, carry balance exemption, Acting_Cover mechanism§6: no leave governance section§6.1 added: resource matrix; carry exempt; Acting_CoverRFQ_ Stack Trading Prop Tech V7.pdf §Time-Off & Hiatus Management Engine
2026-10-19v2.0 → v2.1Step 6.5 (POST /create-pod-channel) added after Workspace provisioning; leader_name source defined as Workspace handle (not legal_name); Discord slug rule (. → -); Post-condition 10 added; Exc-5 (Discord failure, non-blocking) added; BR_8.2.13.17 (leader_name source + Discord slug + collision + identity separation) added; Pod_Leader_Registry.Leader_Name field added to Table E; API ref row added; AC-8.2.13-23/24 addedNo Discord channel creation step; leader_name source undocumentedPOST /create-pod-channel at Step 6.5; leader_name from google_workspace_email handle; Discord channel = pod-[handle_with_dots_as_hyphens]; non-blocking on failureClient supplement 2026-10-19
2026-10-07v1.9 → v2.0Exc-3: confirmed Option A (cascade proceeds, Ops provision manually, Google Admin triggers welcome email — no Middleware secondary email). Exc-4: confirmed Option A (hold email; no expiry on Founding Mentor coupon). Post-condition row 8 duplicate renumbered to 9. BR_8.2.13.13–16 added (coupon non-transferable/no expiry/EVAL_L1 only; no dashboard UI; Workspace non-blocking; coupon fail hold). AC-8.2.13-19–22 added.Exc-3: pending Adrian (Option A assumed). Exc-4: BA assumption (hold email). Post-conditions: two rows numbered 8.Exc-3/4 confirmed. Post-condition 9 renumbered. 4 new BRs. 4 new ACs.Client confirmation 2026-10-07

On this page