SRS: UC_8.2.13 — Flow 1.5: Founding Mentor Initialization
| Field | Value |
|---|---|
| UC_ID | UC_8.2.13 |
| Version | v2.9 |
| Last Updated | 2026-11-04 |
| BA PiC | linh.nguyen34 |
| Category | STAGE 6: CAREER PATH & PROFESSIONALIZATION |
| Module | Pod System |
| Function | Flow 1.5 — Founding Mentor Initialization |
| Document References | Zapier 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_ID | Function | Description |
|---|---|---|
| UC_8.2.13 | Flow 1.5 — Founding Mentor Initialization | Triggered 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
| Field | Value |
|---|---|
| Use Case | Founding Mentor Initialization |
| Description | Onboarding 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 Flow | Flow 1.5 (Founding Mentor Initialization) |
| 3rd Party | Signwell (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
| ID | Pre-condition |
|---|---|
| P1 | Founding Pod Leader has signed the Founding Pod Leader Agreement document in Signwell |
| P2 | Signwell fires webhook to Zapier with signer's user_email in payload |
| P3 | Middleware has valid credentials for Veriff API, Google Workspace Admin Directory API, Dots API |
| P4 | HMAC-SHA256 signature on Signwell webhook validated before any processing begins |
4. Post-conditions
| # | Post-condition |
|---|---|
| 1 | Global_User_ID upserted with Role_Flag = 'Founding_Mentor', is_pod_leader = TRUE, contract_pod_leader = 'Signed' |
| 2 | Veriff KYC session created and initiation email dispatched (or bypassed if identity_status = 'Approved') |
| 3 | Dots 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 |
| 8 | Asset_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 |
| 9 | Role_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_emailof 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 = TRUEcontract_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_statuson the upserted record:- Brand new user OR
identity_status != 'Approved': Call Veriff APIPOST /v1/sessions→ get{ "sessionId": "string", "verification_url": "URL" }. Send KYC initiation email withverification_url. Setidentity_status = 'Pending'. - Existing trader with
identity_status = 'Approved': Skip Veriff entirely — KYC already verified (smart gate bypass).
- Brand new user OR
(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_statuson the upserted record:payout_status != 'Approved'ANDdots_payee_id IS NULL: Dispatch Dots payout setup link touser_emailfor banking + W-9/W-8BEN registration.payout_status = 'Approved'ORdots_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'ANDpayout_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)
- Endpoint:
- 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-channelwith:user_id: Founding Mentor'sGlobal_User_IDleader_name: extracted fromgoogle_workspace_email— strip@stacktrading.comsuffix (e.g.john.doe@stacktrading.com→john.doe). Writeleader_name = 'john.doe'toPod_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).
- Convert to lowercase; replace spaces and
- 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. IFdiscord_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 sharedPod Leaderrole. - Returns JSON:
{ "channel_id": "string", "channel_url": "URL_string" }. Zapier waits for the response containingchannel_url. leader_nameMUST be derived from the Workspace handle, NOT from Verifflegal_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_urlfrom 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-rolewithuser_id,add_role = 'Pod Leader'. - If
discord_user_id IS NULL→ endpoint returns200 OKand 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 Submittedwebhook from the Typeform linked in Step 8 — async, fires independently after mentor completes the profile form. - Founding Mentor declares:
Asset_Class—FuturesorForex(required; Founding Mentors may be external hires without an existingUsers.asset_classrecord)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_Registryrow becomes visible to the Mentee Matching Engine only after this step writes a non-nullAsset_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'ANDIs_Profile_Complete = TRUE), Middleware triggers ZapFlow 11: Waitlist Processorfor thisLeader_IDso open slots (Current_Count < Max_Capacity) are filled fromPod_Waitlist(FIFO, sameAsset_Class). Fires once per Typeform submission; a re-submission that does not changeIs_Profile_CompletefromFALSEtoTRUEdoes 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_Classbecomes the required asset class when the Founding Mentor checks out with the 100% coupon. At checkout Step 5 (emailonBlur), the cartasset_classmust matchPod_Leader_Registry.Asset_Classand the cartproduct_idmust beEVAL_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:
| Resource | During On_Leave | Note |
|---|---|---|
Google Workspace @stacktrading.com | Active — preserved | Google Admin API suspend/delete MUST NOT be called |
Pod mentee list (pod_id links) | Preserved — pod not dissolved | No mentee re-assignment triggered |
Discord channel pod-[leader_name] | Active — not archived | Channel status remains unchanged |
Discord Role Pod Leader | Assigned — not revoked | No POST /manage-discord-role removal |
Pod_Leader_Registry.Pending_Carry_Balance | Accruing / vesting — unchanged | Flow 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 thisuser_email→ HTTP 200 No-Op; warning logged. No duplicate upsert, KYC dispatch, or provisioning.
Exc-1 — Veriff session creation fails (Step 3):
POST /v1/sessionsreturns 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
emailand applies the upsert:Role_Flag = 'Founding_Mentor',is_pod_leader = TRUE,contract_pod_leader = 'Signed'. All other fields are preserved on the sameGlobal_User_ID— no new row is created. - Sub-case A — existing account is
Active_ChallengeorActive_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
FailedorTerminated: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 touser_account_history, resets metrics, and provisions a new SIM challenge under the sameGlobal_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_Welcomeemail to personal email). LogWORKSPACE_PROVISIONING_FAILEDerror + send SEV-2 alert to#ops-itfor 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_Welcomeemail; do not send without the coupon. Alert#ops-itto 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-channelreturns non-200 or connection timeout.channel_urlnot 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_Registryrecord. Middleware retriesPOST /create-pod-channel3 times with exponential backoff. If all retries fail → logDISCORD_CHANNEL_CREATION_FAILEDwithuser_idandleader_name+ SEV-1 Slack alert to#ops-it; Ops creates the channel manually and updateschannel_urlin DB (BR_8.2.13.29). - Steps 7, 7.5 and 8 proceed regardless. Do NOT hold the welcome email.
8. Business Rules
| BR_ID | Rule Description |
|---|---|
| BR_8.2.13.1 | Veriff 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.2 | Workspace 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.3 | MFA 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.4 | Role_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.5 | Welcome 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.6 | Workspace 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.7 | Dots 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.8 | Trading 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.9 | contract_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.10 | Signwell 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.11 | Provisioning 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.12 | Downstream 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.13 | Founding 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.14 | Coupon 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.15 | Google 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.16 | Amplify 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.17 | leader_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.18 | Guest 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.19 | Promo 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.22 | QuickBooks — 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.23 | No 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.24 | Veriff 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.25 | Checkout — 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.26 | Checkout — 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.27 | Late-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.28 | Founding 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.29 | Discord 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)
| Field | Type | Description |
|---|---|---|
Role_Flag | VARCHAR | Set to 'Founding_Mentor' by this flow. Activates Defense bypass (BR_8.2.13.4). |
is_pod_leader | BOOLEAN | Set to TRUE by this flow. |
contract_pod_leader | ENUM('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_email | VARCHAR(255) | The provisioned @stacktrading.com address assigned by Step 6. Stored for reference and offboarding (UC_8.2.11 Step 5). |
channel_url | VARCHAR | Discord pod channel URL returned by POST /create-pod-channel. Written at Step 6.6. |
discord_link_token | UUID | Generated 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
| Field | Value at Insert | Update Timing |
|---|---|---|
Leader_ID | user_id | Set at Step 6 (Workspace provision) — Table E insert triggered after provisioning gate passes |
Leader_Name | Handle 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.com | Set at Step 6 |
Status | 'Active' | Set at Step 9 (Typeform sync) |
Asset_Class | From Typeform — 'Futures' | 'Forex' | Set at Step 9 |
Trading_Style | From Typeform — multi-select | Set at Step 9 |
Max_Capacity | 7 | Set at Step 6 insert |
Current_Count | 0 | Set at Step 6 insert |
Pending_Carry_Balance | $0.00 | Set at Step 6 insert |
10. API Reference
| Endpoint | Method | Input | Output | Server | Description |
|---|---|---|---|---|---|
POST /v1/sessions | POST | user_email + standard Veriff session params | { "sessionId": "string", "verification_url": "URL" } | Veriff API | Creates session-based identity verification. Returns hosted verification page URL unique to this session. |
POST /admin/directory/v1/users | POST | primaryEmail, changePasswordAtNextLogin: true, OU assignment | 200 OK + user object | Google Workspace Admin Directory API | Provisions @stacktrading.com Workspace account. OU policy enforces MFA at first login. |
POST /admin/directory/v1/users/{userKey}/sendWelcomeEmail | POST | userKey | 200 OK | Google Workspace Admin Directory API | Triggers Google Standard Invite Flow — sends activation link to user's personal email; no password transmitted. |
POST /create-pod-channel | POST | user_id, leader_name | { "channel_id": "string", "channel_url": "URL_string" } | Middleware / Discord Bot | Creates 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-role | POST | user_id, add_role = 'Pod Leader' | 200 OK | Middleware / Discord Bot | Assigns 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 Key | Trigger | Recipient | Content |
|---|---|---|---|
| KYC initiation email | Step 2 — after Veriff session created | Founding Mentor | verification_url (Veriff Hosted Verification Page) |
Pod_Founding_Leader_Welcome | Step 8 — after Workspace provisioned + coupon generated | Founding Mentor | 100% 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_ID | Flow | Given | Then | Type |
|---|---|---|---|---|
| AC-8.2.13-01 | Happy path | SignWell 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 link | Integration |
| AC-8.2.13-02 | Veriff session | Step 2 executes | Each Founding Mentor receives a unique, session-scoped verification_url — no static link reused across users | Integration |
| AC-8.2.13-03 | Password security | Step 6 executes | Workspace account created with changePasswordAtNextLogin: true; no password appears in any email; user sets password via Google invite flow | Integration |
| AC-8.2.13-04 | MFA enforcement | Founding Mentor clicks activation link | Google prompts MFA enrollment before Workspace access is granted; OU policy enforces Google Authenticator | Integration |
| AC-8.2.13-05 | Defense bypass | Role_Flag = 'Founding_Mentor' set | User exempt from automated Drawdown Defense suspension triggers impacting mentorship status | Integration |
| AC-8.2.13-06 | Welcome email content | Pod_Founding_Leader_Welcome sent | Email contains coupon code + activation link + Typeform link (+ Discord block if not linked); Veriff KYC link NOT present; no plaintext password | Integration |
| AC-8.2.13-07 | Existing user | user_email already has a Global_User_ID | Record modified (not duplicated); Role_Flag updated to 'Founding_Mentor' | Integration |
| AC-8.2.13-08 | Email collision | john.doe@stacktrading.com already exists when provisioning new Founding Mentor | john.doe1@stacktrading.com provisioned; sequential index incremented until unique address found | Integration |
| AC-8.2.13-09 | Coupon usage | Pod_Founding_Leader_Welcome email sent with 100% coupon | Mentor uses coupon on public website checkout; account created at Level 0 SIM with standard starting capital; no BPS Admin manual provisioning | Integration |
| AC-8.2.13-10 | Exc-2 Sub-case A | user_email already has an Active_Challenge or Active_DMA account; Signwell webhook received | Role_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-11 | Exc-2 Sub-case B | user_email has a Failed or Terminated account; Signwell webhook received; mentor later uses 100% coupon at public checkout | Role_Flag = 'Founding_Mentor' applied; previous account history archived to user_account_history; new SIM challenge provisioned under the same Global_User_ID | Integration |
| AC-8.2.13-12 | Smart gate — KYC bypass | Signwell 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 check | Integration |
| AC-8.2.13-13 | Smart 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 check | Integration |
| AC-8.2.13-13b | Smart 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 check | Integration |
| AC-8.2.13-14 | Provisioning gate | identity_status = 'Approved' but payout_status = 'Pending' | Google Workspace NOT provisioned; coupon NOT generated; Pod_Founding_Leader_Welcome NOT sent — gate not passed | Integration |
| AC-8.2.13-15 | Provisioning gate — pass (async) | Both identity_status = 'Approved' AND payout_status = 'Approved' received via webhooks | Workspace provisioned; 100% coupon generated (EVAL_L1 only); Pod_Founding_Leader_Welcome sent | Integration |
| AC-8.2.13-16 | Provisioning 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 sent | Integration |
| AC-8.2.13-17 | Typeform profile sync [CHR-145] | Founding Mentor submits Step 9 Typeform | Pod_Leader_Registry.Asset_Class and Trading_Style written; Founding Mentor becomes visible to Flow 10 Matching Engine | Integration |
| AC-8.2.13-18 | Asset_Class required [CHR-145] | Founding Mentor submits Typeform without selecting Asset_Class | Form validation rejects — Founding Mentor must explicitly declare asset class (cannot inherit from Users — may not have existing trading record) | Integration |
| AC-8.2.13-19 | Exc-3: Workspace non-blocking | Google Workspace provisioning fails at Step 6 | Flow 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 activation | Integration |
| AC-8.2.13-20 | Exc-4: Hold email on coupon fail | Amplify coupon generation fails at Step 7 | Pod_Founding_Leader_Welcome email NOT sent; #ops-it alerted; email sent once coupon is manually generated and ready | Integration |
| AC-8.2.13-21 | Coupon non-transferable | Founding Mentor coupon applied by a different user email | System rejects application; coupon tied to Founding Mentor's registered email only | Integration |
| AC-8.2.13-22 | Coupon EVAL_L1 only | Founding Mentor attempts to use coupon on Advanced Track ($10,000) | System rejects application; coupon valid for Associate Track ($650) only | Integration |
| AC-8.2.13-23 | Discord channel — happy path | Step 6 succeeds; POST /create-pod-channel called at Step 6.5 for john.doe@stacktrading.com | Private 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 proceed | Integration |
| AC-8.2.13-24 | Exc-5: Discord channel retry | POST /create-pod-channel fails all 3 retries | Pod_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_url | Integration |
| AC-8.2.13-25 | No SIM lockout | Existing 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 available | UI / Integration |
| AC-8.2.13-27 | Overlay after SIM pass | Founding Mentor reaches Passed_Challenge → Flow 3A Branch C | Hard-lock onboarding overlay shown as normal until Live onboarding completes | UI / Integration |
| AC-8.2.13-28 | Checkout — Typeform not submitted [CHR-145] | Role_Flag = 'Founding_Mentor'; Pod_Leader_Registry.Asset_Class IS NULL; mentor enters email at checkout Step 5 | HTTP 409; [Next] disabled; BN-20 shown; no Users row written | Integration |
| AC-8.2.13-29 | Checkout — 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-select | Integration |
| AC-8.2.13-30 | Checkout — 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 Track | Integration |
| AC-8.2.13-26 | Link delivery | Flow 1.5 dispatches Veriff KYC and Dots setup links | Links delivered by email only; no Flow 1.5 banner rendered on the dashboard | UI / Integration |
| AC-8.2.13-31 | Discord token — new mentor | Brand-new Founding Mentor, provisioning gate passed | UUID written to discord_link_token; welcome email contains Discord invite + /link [token] | Integration |
| AC-8.2.13-32 | Discord 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.7 | Integration |
| AC-8.2.13-33 | Late-linking | Mentor runs /link [token] after Steps 6.5–6.7 ran while unlinked | discord_user_id written; Pod Leader role assigned; mentor can open own pod-... channel; cannot see other pods | Integration |
| AC-8.2.13-34 | Token not overwritten at checkout | Mentor later checks out with the 100% coupon | discord_link_token from Step 7.5 unchanged; emailed token still valid | Integration |
| AC-8.2.13-35 | Flow 11 on profile completion | Founding Mentor submits Step 9 Typeform; Pod_Waitlist has traders with the same Asset_Class | Flow 11 triggered for this Leader_ID; oldest matching waitlisted trader invited (Pod_Spot_Available_Confirm) | Integration |
13. Changelog
| Date | Version | Change | Previous | After | Source |
|---|---|---|---|---|---|
| 2026-11-04 | v2.8 → v2.9 | §6.1 cross-reference; §6.1.1 carry row, paragraph, source | Table: 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 QnA | Client sheet 2026-11-04 [POD-XF-18]; client 2026-10-30 [POD-XF-15] |
| 2026-10-30 | v2.7 → v2.8 | Step 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 unchanged | UC_8.2.8 BR_8.2.8.1 #2; BA decision 2026-10-30; CHR-145 |
| 2026-10-30 | v2.6 → v2.7 | Discord 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 added | Slug .→- 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 checkout | Slug 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 edited | BA 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-30 | v2.5 → v2.6 | Founding 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 added | No CHR tags on Flow 1.5; Step 9 had no checkout impact | CHR-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 edited | CHR-78; CHR-145 (BA 2026-10-30) |
| 2026-10-30 | v2.4 → v2.5 | BR_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 added | BR_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.5 | BR_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 banner | Client confirmation 2026-10-30; CHR-139 (QuickBooks logging) |
| 2026-10-28 | v2.3 → v2.4 | §6.1.2 Acting Cover Mechanism removed | BPS 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 status | Source audit 2026-10-28 |
| 2026-10-20 | v2.1 → v2.2 | Step 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 8 | Step 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_Registry | Client supplement 2026-10-20 |
| 2026-09-18 | — → v1.0 | Initial document | — | Flow 1.5 full spec; all BRs; ACs | Zapier Integration V7.pdf §Flow 1.5; RFQ_ Stack Trading Prop Tech V7.pdf §Founding Mentor Defense Bypass; Client confirmation 2026-09-18 |
| 2026-09-20 | v1.0 → v1.1 | Trigger: Rippling → Signwell; eligibility: any country; payment: Dots (not Rippling); trading account: public checkout (not BPS manual); email collision rule added | Trigger: Rippling webhook; US-only assumption implied; payment via Rippling; BPS manual provisioning assumed | Trigger: 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-22 | v1.1 → v1.2 | Exc-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-22 | v1.3 → v1.4 | Wording clarification: UC Index description and Overview Description updated to make sequential KYC → Dots explicit | UC Index + Overview Description: "+" / "and" wording implied concurrent dispatch | UC Index + Overview Description: explicit sequential language KYC → Payouts | Client confirmation 2026-09-22 ("Không gửi cùng lúc, KYC => DOTs như ở stage 3") |
| 2026-09-22 | v1.4 → v1.5 | Align 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ộp | Basic Flow: 8 steps; gate Case A/B; Workspace aligned; AC-16 covers synchronous immediate-fire | Client confirmation 2026-09-22 |
| 2026-09-22 | v1.5 → v1.6 | BR_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-reference | BR_8.2.13.12 added | Client confirmation 2026-09-22 (Q19) |
| 2026-09-28 | v1.6 → v1.7 | Step 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 added | Step 8: no Typeform link; Table E: no Asset_Class/Trading_Style | Step 8.1: Founding Mentor declares Asset_Class + Trading_Style; visible to Flow 10 only after sync | Client confirmation 2026-09-28 |
| 2026-09-30 | v1.7 → v1.8 | Step 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-01 | v1.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_Cover | RFQ_ Stack Trading Prop Tech V7.pdf §Time-Off & Hiatus Management Engine |
| 2026-10-19 | v2.0 → v2.1 | Step 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 added | No Discord channel creation step; leader_name source undocumented | POST /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 failure | Client supplement 2026-10-19 |
| 2026-10-07 | v1.9 → v2.0 | Exc-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 |