CHG-SPEC-001 — Affiliate, Ambassador & Creator Partner Platform
Status: Draft v1.1 — not yet frozen (v1.1 adds content submission tracking and follow-up reminders to §10, surfaced by Diamond Legend's Outreach Center requirement — see DL-SPEC-020) Governed by: CHG-PLATFORM-ARCHITECTURE.md Supersedes (in ownership, not in existence — see §0.2): LS-SPEC-001's referral tracking, reward engine, campaign management, marketing asset library, training, communications, and fraud detection. LS-SPEC-001 remains the correct home for anything genuinely Legend-Studios/gaming-specific that doesn't generalize across Cobalt Horizon Group — see LS-SPEC-001's own updated header. Depends on: an external Authentication system (consumed, not owned), an external Payment/Payout provider (consumed, not owned — same boundary as every prior spec in this series), CHG-PLATFORM-ARCHITECTURE.md.
Owns: The complete affiliate, ambassador, and creator partner system for every Cobalt Horizon Group company — programs, applications, member dashboards, referral link generation, the commission engine, payout scheduling, the marketing/asset center, missions and gamification, the creator CRM, program analytics, notifications, fraud/security, and administration.
Explicitly does not own: Payment processing execution (§7.4 — this spec computes what's owed and schedules payouts; it never moves money). Any brand's actual product, service, or gameplay logic (Diamond Legend's simulation, PipeDesk's product, a coffee subscription's fulfillment — none of it). A dedicated cross-brand content/publishing system beyond this spec's own program pages (§2 defines only what this spec needs; a general CHG-wide CMS is flagged, not built, in §18.1). A dedicated cross-brand notification delivery service (§12 builds a self-contained notification module for practical necessity now, while flagging the future consolidation risk explicitly in §18.2). Cross-brand business analytics unrelated to the affiliate/ambassador/creator programs themselves (§11 scopes analytics to program performance, not e.g. PipeDesk's SaaS metrics or Samson Grind Coffee's sales — a future CHG-wide operations platform, generalizing LS-SPEC-004, is flagged in §18.3, not built here).
Consumed by: Legend Studios (on behalf of Diamond Legend and future titles), PipeDesk, SkyLinkStarLink, Keystone Acquisitions Group, Samson Grind Coffee, future Cobalt Horizon Group companies — each through its own Brand Adapter (§0.4).
Exposes: Program API, Application API, Member Dashboard API, Referral Link API, Commission Engine API, Payment Center API, Marketing/Asset API, Missions/Gamification API, Creator CRM API (admin-facing), Analytics API, Notification API, Security/Fraud API, Administration API.
Governing principle: One partner platform, every brand. An affiliate, ambassador, or creator who works with one Cobalt Horizon Group company should be recognizable — one identity, one commission ledger, one dashboard — if they ever work with another, the same way a Legend Studios player's community identity now follows them across games. No brand forks this system to get a feature; the system grows to serve every brand instead.
0. Foundational Architecture Decisions
0.1 Brand, Not Game
Every entity in this spec carries a brand_id, not a game_id — the direct generalization of the pattern LS-SPEC-001 established (LS-SPEC-001 §11) and DL-SPEC-019/LS-SPEC-002/003/004 continued. A "brand" is any Cobalt Horizon Group company: Legend Studios (which may further sub-tag by game internally, in its own Brand Adapter, for its own reporting — this spec doesn't need to know about individual games, only about Legend Studios as one brand among several), PipeDesk, SkyLinkStarLink, Keystone Acquisitions Group, Samson Grind Coffee, and future companies.
0.2 Relationship to LS-SPEC-001 — Explicit, Not Implied
This spec does not delete LS-SPEC-001 or declare it void. It removes LS-SPEC-001's ownership of the capabilities listed in this document's header, because those capabilities are not gaming-specific and duplicating them at two tiers would violate the exact "no duplicated business logic, no duplicated schemas, no duplicated APIs" principle this whole series has followed. LS-SPEC-001's own header has been updated to reflect this (see that document). What plausibly remains at the LS tier — beta tester tracking tied to game builds — is not redefined by this spec; that determination belongs to whoever next revises LS-SPEC-001.
0.3 Three Programs, One Underlying Model
Affiliate, Ambassador, and Creator are modeled as three program types sharing one member/application/commission schema, not three parallel systems. This is a direct application of the "no duplicated schemas" instruction: an Affiliate and a Creator are both fundamentally "a person with a referral relationship to a brand, receiving some mix of commission and non-monetary reward" — they differ in which grants and requirements apply (§1), not in the underlying data model.
programs (config table)
id (pk)
brand_id (nullable — a studio-wide/CHG-wide program is possible)
program_type (affiliate / ambassador / creator)
name
requirements (jsonb)
benefits (jsonb)
0.4 Brand Adapter Interface
Each consuming brand implements a Brand Adapter responsible for exactly (mirroring CHG-PLATFORM-ARCHITECTURE.md §4):
- Authenticating the user
- Reading program member status and entitlements
- Reporting referral conversions
- Reporting campaign/mission participation
- Reporting analytics events
The adapter must never duplicate this platform's logic — the same hard rule stated in LS-PLATFORM-ARCHITECTURE.md §4.2, restated here because it is exactly as important one tier up. A brand that finds itself recomputing commission amounts or re-deriving fraud signals locally has found a gap in this spec's API surface (§19), not a justification to build its own copy.
0.5 Authentication
Consumed, not owned — same boundary as every other spec in this series (originally LS-SPEC-001 §0.3).
1. Programs
1.1 Program Types and Their Distinguishing Grants
| Program | Purpose | Distinguishing benefits (via programs.benefits, §0.3) |
|---|---|---|
| Affiliate | Generate paying subscribers/customers | Referral dashboard, commission tracking, monthly payouts, marketing assets |
| Ambassador | Grow the community | Founder badge, Discord role, early builds/access, community missions, recognition |
| Creator | Support content creators | Review keys/product samples, creator assets, press kit, livestream overlays, brand media |
All three share: a members record (§3.2), a referral link (§5), a commission relationship (§6, even if some Ambassador benefits are non-monetary), and a dashboard (§4). A member may hold more than one program membership simultaneously (an Affiliate who is also a Creator) — program_memberships (§3.2) is many-to-many between members and programs, not a single-program-per-member constraint.
1.2 Brand-Specific Configuration, Not Brand-Specific Code
"Review keys" for Diamond Legend means a game key; for Samson Grind Coffee it might mean a product sample credit; for PipeDesk it might mean an extended trial license. This spec's benefits field (§0.3) stores this as brand-configured data ({"type": "product_sample", "fulfillment": "brand_adapter_handled"} vs. {"type": "review_key", "fulfillment": "brand_adapter_handled"}) — fulfillment of a brand-specific benefit is always the consuming brand's Brand Adapter's job, per §0.4; this spec tracks that the benefit was earned and its abstract type, never the brand-specific fulfillment mechanics.
2. Public Program Pages
2.1 Scope
Each program gets a public page (/affiliate, /ambassador, /creator, per-brand) built from: Hero, Benefits, Requirements, FAQ, Application Form, Terms, Privacy, Contact.
program_pages
program_id (fk)
hero (jsonb — headline, media_ref)
benefits_copy (jsonb)
requirements_copy (jsonb)
faq (jsonb array)
terms_ref / privacy_ref (external legal doc references, not owned here)
contact_info (jsonb)
2.2 Scoped Ownership — Not a CMS
This spec owns only enough content structure to render its own program pages. It is explicitly not a general-purpose publishing system — if a future need arises for Cobalt Horizon Group-wide news, blogs, or documentation across brands (the CHG-tier generalization of LS-SPEC-003), that is a separate future spec, flagged in §18.1, not built here. terms_ref/privacy_ref point to externally-managed legal documents this spec does not author.
3. Applications and Membership
3.1 Application Data
applications
id (pk)
brand_id
program_id (fk)
name / email / country / discord_handle
social_platforms (jsonb — youtube, twitch, tiktok, instagram, website)
audience_size
favorite_product (brand-configured label — "favorite baseball game" for Legend Studios, brand-specific elsewhere)
motivation_text ("why do you want to join")
referral_source ("how did you hear about us")
status (see §3.3)
submitted_at
3.2 Membership, Post-Approval
members
id (pk)
user_id (fk → external auth identity)
application_id (fk, nullable — a member may also be manually admin-added)
internal_rating
reputation_score
created_at
program_memberships
member_id (fk)
program_id (fk)
status (see §3.3, tracked per-membership since a member can be Active in one program and Suspended in another)
joined_at
3.3 Application/Membership State Machine — Corrected From a Linear List
The originally requested flow (Applied → Pending Review → Approved → Rejected → Waitlist → Suspended → Archived) cannot be a single sequential chain — Approved cannot lead to Rejected. This spec models it as an actual state machine, the same correction pattern LS-SPEC-001 §3 applied to its own ambassador lifecycle:
Applied
↓ (automatic)
Pending Review
↓ (admin decision)
├──→ Approved ──→ (program_memberships created, status: Active)
├──→ Rejected [terminal]
└──→ Waitlist ──→ (re-reviewed later) ──→ Approved / Rejected
Active (a program_membership status, not an application status)
↓ (policy violation or fraud finding, §13)
Suspended
↓ (resolved) ↓ (unresolved / repeat)
Active Archived [terminal for that membership]
Active
↓ (self-requested or admin-initiated, no violation)
Archived [terminal]
Every transition is logged (§13.5 audit logs), matching the "nothing is silent" discipline established since DL-SPEC-013 §3.2.
4. Member Dashboard
Read-model contract, not a new source of truth (same pattern as LS-SPEC-001 §10, DL-SPEC-019 §10 wherever dashboards appear in this series): profile, referral links (§5), clicks/signups/subscribers/recurring revenue (§5.3), pending/paid/lifetime commissions (§6), marketing assets (§8), announcements (§12), downloads (§8), leaderboard (§9.4), achievements (§9), support contact (points to CHG-tier or brand-tier support — this spec does not itself own a support ticketing system; if LS-SPEC-004-style Studio Operations generalizes to CHG tier in the future, that is where this would resolve to, per §18.3), settings.
5. Referral Link System
5.1 Link Types
referral_links
id (pk)
member_id (fk)
brand_id
link_type (affiliate / creator / ambassador / campaign / landing_page / pricing / store / closed_alpha)
code (unique)
url (generated)
campaign_id (fk, nullable — see §14.6)
created_at
active (bool)
closed_alpha as a link_type is the direct integration point for DL-SPEC-019 §0.4's alpha invitation flow — that flow already assumed an LS-SPEC-001 referral/campaign mechanism; it now resolves against this spec instead, with no change to DL-SPEC-019's own logic, only to which platform tier it calls.
5.2 Tracked Events
referral_events
id (pk)
referral_link_id (fk)
event_type (click / signup / subscribe / renew / cancel / purchase)
brand_id
external_user_id
occurred_at
revenue_amount (nullable — sourced from the consuming brand's own billing system via its Brand Adapter, never computed here — same non-duplication boundary LS-SPEC-001 §5.3 held toward DL-SPEC-017)
Immutable, append-only — same discipline as every prior spec in this series.
5.3 Derived Metrics
Clicks, signups, subscribers, recurring revenue, lifetime value, conversion rate, active/inactive referrals, cancelled subscribers — all computed from referral_events, never stored redundantly, identical in spirit to LS-SPEC-001 §5.3, generalized across brands.
6. Commission Engine
6.1 Commission Rules
commission_rules (config table)
id (pk)
brand_id (nullable — a CHG-wide default rule is possible)
program_id (fk)
trigger_type (referral_conversion / milestone / campaign_goal / manual)
structure (recurring / one_time)
calculation (percentage / flat_fee)
value
active (bool)
6.2 Commission Ledger
commissions
id (pk)
member_id (fk)
commission_rule_id (fk, nullable for manual/bonus grants)
referral_event_id (fk, nullable — not every commission traces to a single referral event, e.g. seasonal bonuses)
type (recurring / one_time / bonus / seasonal / manual_adjustment)
amount
status (pending / approved / paid / reversed)
created_at
reversed_at (nullable)
reversal_reason (nullable — chargeback / refund / fraud_finding / admin_correction)
6.3 Chargeback and Refund Handling
When a brand's Brand Adapter reports a chargeback or refund against a referral_events row that already generated a commission, this spec does not delete the original commissions row — it creates a new commissions row of type reflecting the reversal, linked to the original via referral_event_id, and sets the original's status = reversed. This preserves a complete, auditable ledger (append-only, per the pattern used throughout this entire series) rather than editing history to make the books look clean.
6.4 Bonus and Seasonal Commissions
Modeled as commission_rules with trigger_type = campaign_goal or a manual commissions insert with type = bonus/seasonal — no separate bonus engine, since a bonus is structurally just a commission with a different trigger, consistent with §0.3's "one underlying model" decision applied to commissions specifically.
7. Payment Center
7.1 Scope
This section owns payout scheduling and eligibility logic — not payment execution (§7.4).
payout_schedule
member_id (fk)
minimum_threshold (brand-configurable, defaults to a CHG-wide default)
next_scheduled_payout
preferred_method (paypal / wise / stripe_connect — enum, extensible without engine change)
payouts
id (pk)
member_id (fk)
commission_ids (array — which commissions this payout settles)
amount
status (scheduled / processing / paid / failed)
method
paid_at (nullable)
7.2 Minimum Payout Threshold
A commission only becomes payout-eligible once a member's unpaid commissions (status approved) sum past their minimum_threshold. This is evaluated at scheduling time, not commission-creation time, so a commissions row can sit in approved status for a while before being swept into a payouts batch — normal and expected behavior, not a bug state.
7.3 Tax Forms
tax_forms
member_id (fk)
form_type (e.g., W-9, W-8BEN)
status (not_submitted / submitted / verified)
submitted_at
This spec tracks tax form status as a payout-eligibility gate (a member with not_submitted status past a brand-configured deadline is excluded from payout_schedule eligibility) — it does not generate, validate, or file tax forms itself; that is external tax-compliance infrastructure, consumed the same way payment processing is.
7.4 Explicit Non-Ownership of Payment Execution
Identical boundary to every prior spec: this spec computes what is owed (§6) and when it becomes eligible for payout (§7.1–7.2). It does not integrate with PayPal, Wise, or Stripe Connect directly, does not store payment credentials, and does not execute a transfer. payouts.status = 'paid' is set by an external process confirming payment occurred, read back as a status update — the same non-ownership stated in LS-SPEC-001 §7.4 and DL-SPEC-017 §1.4, restated a third time because it remains exactly as important.
8. Marketing and Asset Center
Directly generalizes LS-SPEC-001 §12 to brand_id:
marketing_assets
id (pk)
brand_id
type (logo / screenshot / video / gif / feature_graphic / press_kit / email_template / social_caption / launch_announcement / brand_guideline)
current_version_id (fk → asset_versions)
asset_versions
id (pk)
asset_id (fk)
version_number
file_ref
created_at
asset_downloads
asset_version_id (fk)
member_id (fk)
downloaded_at
No structural change from LS-SPEC-001's original design — only the ownership tier and the game_id → brand_id rename.
9. Missions and Gamification
9.1 Missions
missions
id (pk)
brand_id (nullable)
program_id (fk, nullable — a mission may be program-specific or open to all)
title / description
mission_type (recruit_referrals / create_video / create_stream / write_review / social_post / discord_invite / survey / testing_participation)
reward_rule_id (fk → §9.3's underlying reward mechanism)
active (bool)
mission_completions
mission_id (fk)
member_id (fk)
completed_at
verification_status (auto_verified / pending_review / verified / rejected)
Verification is deliberately not always automatic — "create a YouTube video" needs human or at least link-validation confirmation before a reward fires, unlike "recruit five players," which can auto-verify against referral_events (§5.2).
9.2 Levels, XP, and Badges
member_levels (config table)
level_key
program_id (fk, nullable — level ladders can be program-specific)
xp_required
benefits (jsonb)
member_xp
member_id (fk)
xp_total
current_level_key (derived, cached for read performance, recomputed on every XP-earning event)
badges (config table)
badge_key
name / icon_ref
member_badges
member_id (fk)
badge_key (fk)
earned_at
This is the direct generalization of LS-SPEC-001 §6's Bronze-through-Legend ladder, with XP added as the accumulation mechanism driving level-up (LS-SPEC-001's original design triggered level-up directly off referral/activity events; this version adds an explicit XP layer in between, since Missions §9.1 now need a currency to reward that isn't always a direct commission).
9.3 Reward Rules — Reusing the Commission Engine's Shape
reward_rules (config table)
id (pk)
trigger_type (mission_completion / level_up / campaign_goal / manual)
reward_type (xp / badge / commission_bonus / founder_status / discord_role / early_access / cosmetic_ref)
value (jsonb)
Reward types that resolve to money (commission_bonus) flow into §6's commission ledger; reward types that don't (xp, badge, discord_role) update the relevant table directly. This mirrors LS-SPEC-001 §7.1's reward-type table, generalized, with the same non-ownership boundary for anything resolving through a brand's own systems (cosmetic_ref still resolves through that brand's own cosmetic catalog — for Legend Studios, that remains DL-SPEC-017 §3, unchanged).
9.4 Founder Status and Hall of Fame — Flagged, Not Resolved Here
Per CHG-PLATFORM-ARCHITECTURE.md §6, "Founder" now has two plausible meanings — a Cobalt Horizon Group-wide founder recognition, or a brand-specific one (Diamond Legend's Founder Tier, DL-SPEC-017 §1.6). This spec's reward_rules.reward_type = founder_status is written generically enough to support either interpretation, but does not decide which one is correct — that's a product decision for Cobalt Horizon Group leadership, not an architectural inference. Hall of Fame and leaderboards (monthly and lifetime) are read views over member_xp/commissions, scoped by brand_id or CHG-wide depending on which leaderboard is being displayed — both are supported by the schema without a structural choice needing to be made now.
10. Creator CRM
Admin-facing, not member-facing:
crm_notes
member_id (fk)
author_id (admin user)
note_text
created_at
crm_tags
member_id (fk)
tag
contact_history
member_id (fk)
channel (email / discord / in_app)
direction (outbound / inbound)
content_ref
status (nullable — e.g., sent / opened / bounced / replied, populated when channel = email and the sending system reports delivery status; not meaningful for every channel)
occurred_at
crm_followups
id (pk)
member_id (fk)
due_at
note
status (pending / completed / dismissed)
created_by (admin user)
completed_at (nullable)
10.1 Content Submission Tracking (v1.1 addition)
The original draft referenced "content created, streams run" as derivable performance data without an owning table — that was an oversight, not a deliberate omission. Content submissions are exactly as generic across brands as everything else in this spec (a video about Diamond Legend and a video about a PipeDesk feature are the same shape of record), so this spec now owns them directly rather than leaving a gap a brand-native module would be tempted to fill locally:
content_submissions
id (pk)
member_id (fk)
brand_id
platform (youtube / twitch / tiktok / kick / instagram / x / blog / podcast)
url
content_type (video / stream / post / review)
metrics (jsonb — views, engagement; refreshed periodically from the platform, not owned by this spec)
submitted_at
approval_status (pending / approved / rejected)
Search/filter over members by tag, program, performance (referrals generated, revenue generated per §6, content submitted and its approval status per §10.1, follow-ups due per the crm_followups table above) is a query surface over data this spec already owns — no additional source-of-truth table is needed beyond what's listed in this section.
11. Analytics
11.1 Scope — Program Performance, Not General Business Analytics
Applications, approval rate, retention, active members, conversions, revenue (attributed, sourced from §5.2's brand-reported revenue_amount, never independently computed), top performers, top countries, top platforms, top campaigns, creator/ambassador/affiliate performance breakdowns — all derived from data this spec already owns (§3, §5, §6, §9, §10).
11.2 Explicitly Out of Scope
A brand's total business performance unrelated to its affiliate/ambassador/creator program (PipeDesk's overall SaaS metrics, Samson Grind Coffee's total sales) is not this spec's concern — see §18.3 for where that would eventually live.
12. Notifications
12.1 Channels and Categories
Email, Discord, in-app, admin alerts. Categories: payment reminders, approval notifications, mission notifications, announcements.
notifications
id (pk)
member_id (fk, nullable for broadcast/admin-alert types)
channel (email / discord / in_app / admin_alert)
category (payment_reminder / approval / mission / announcement)
payload (jsonb)
sent_at
read_at (nullable)
12.2 A Deliberate, Flagged Trade-off
This spec builds a self-contained notification module rather than waiting on a hypothetical CHG-wide notification service (the CHG-tier generalization of LS-SPEC-002 §4), because this platform needs working notifications now and no such CHG-wide service currently exists. If and when Cobalt Horizon Group builds a CHG-wide Community/Social or Operations platform with its own delivery infrastructure, this module should be consolidated into it rather than left as a permanent parallel system — flagged explicitly in §18.2 as a known, accepted duplication risk, not an oversight.
13. Security
13.1 Fraud Detection
Extends the exact pattern established in LS-SPEC-001 §17.2, generalized across brands: anomalous click-to-signup ratios, correlated device/IP signup velocity, and commission accrual rates inconsistent with a member's historical pattern.
13.2 Duplicate Account Detection
Cross-references members.user_id against the external Authentication system's own account-uniqueness guarantees, plus device/fingerprint correlation across applications and referral_events — a member cannot hold two active accounts to double-dip on referral/mission rewards.
13.3 Self-Referral and Referral Abuse Prevention
Same inline-check discipline as LS-SPEC-001 §17.3: a referred external_user_id must not resolve to the referring member's own account, checked at referral_events ingestion time, not as a post-hoc audit only.
13.4 Commission Abuse and Manual Review
commissions.status cannot transition to approved while a related referral_events row has an open fraud flag — the same hard gate LS-SPEC-001 §17.4 established, applied here to a generalized commission ledger instead of an ambassador-specific reward grant.
13.5 Audit Logs
Every state transition (§3.3), every commission created/reversed (§6.2), every admin action (§14), and every fraud finding is logged immutably — no exceptions, consistent with every spec in this entire series.
14. Administration
14.1 Member Actions
Approve, reject, suspend, ban — these are program_memberships.status transitions (§3.3), performed by an admin role, always logged (§13.5).
14.2 Commission Adjustments
Manual commissions inserts (§6.2, type = manual_adjustment), never a direct edit to an existing commission's amount — adjustments are new ledger entries, preserving the append-only history.
14.3 Bulk Operations
CSV export, bulk email, bulk messaging (via §12's notification module) — operational tooling over existing data, no new source-of-truth entities required.
14.4 Announcements
A notifications broadcast (§12.1, member_id = null), not a separate announcement system.
14.5 Mission and Reward Creation
Admin-facing CRUD over missions (§9.1) and reward_rules (§9.3) — config, not code, consistent with the data-driven discipline this entire series has followed since DL-SPEC-016 §4.
14.6 Campaign Creation
campaigns
id (pk)
brand_id (nullable)
name
start_date / end_date
goals (jsonb)
linked_missions (array, fk → missions)
linked_commission_rules (array, fk → commission_rules)
Campaign performance is a rollup over referral_events/mission_completions/commissions scoped by campaign_id and date range — the same non-duplicated-metrics pattern LS-SPEC-001 §13 originally established.
15. Multi-Brand Architecture
Onboarding a new Cobalt Horizon Group company requires exactly (mirroring CHG-PLATFORM-ARCHITECTURE.md §4 and the LS-tier's own §6/§11 patterns already established twice in this series):
- Registering a new
brand_id. - Implementing a Brand Adapter (§0.4).
- Configuring that brand's programs (§1), commission rules (§6.1), and benefit fulfillment mapping (§1.2).
No schema redesign. This directly satisfies the request's Future Expansion section — Diamond Legend, PipeDesk, SkyLinkStarLink, Keystone Acquisitions Group, and Samson Grind Coffee are five rows in a brands config table and five Brand Adapter implementations, not five forks of this system.
16. Mobile and PWA
This spec's APIs (§19) are the entire contract a responsive web client, native mobile client, or PWA needs — this document does not additionally specify client-side rendering, since "fully responsive, PWA-compatible" is a presentation-layer requirement of whatever consumes these APIs, not a backend architecture concern. No API in this spec is designed in a way that would block a mobile-first or PWA client from consuming it.
17. Treat This as a Core Product: The PipeDesk Reuse Case
Per the explicit direction to treat this as reusable infrastructure rather than a marketing page: nothing in §0–§16 contains Legend Studios-specific or Diamond-Legend-specific logic. A hypothetical PipeDesk integration would: register brand_id = "pipedesk", define its own programs (perhaps only Affiliate, no Ambassador/Creator, if PipeDesk has no community/content-creator angle), define its own commission_rules, and implement a Brand Adapter reporting PipeDesk's own signup/subscription events. Nothing about §5's referral links, §6's commission engine, §7's payout logic, §9's missions/gamification, §10's CRM, §11's analytics, §13's fraud detection, or §14's admin tooling assumes gaming at any point — this was a deliberate constraint applied throughout, not a retrofit.
18. Flagged Gaps — Not Built Here, Named for the Record
Consistent with this series' established discipline of naming a gap rather than silently absorbing it into the wrong spec:
18.1 CHG-Wide Content/Publishing Platform
If Cobalt Horizon Group needs cross-brand news, blogs, or documentation beyond this spec's own program pages (§2), that is the CHG-tier generalization of LS-SPEC-003 — not built here, not needed yet.
18.2 CHG-Wide Notification/Community Platform
§12's self-contained notification module is a deliberate, flagged duplication risk against a hypothetical CHG-tier generalization of LS-SPEC-002. Consolidate when that platform exists; don't block this spec on it existing first.
18.3 CHG-Wide Operations Platform
General business analytics, support ticketing, and health/telemetry monitoring across brands (the CHG-tier generalization of LS-SPEC-004) is out of scope here. §4's "support" dashboard entry and §11's analytics scope both explicitly point to this gap rather than pretending it's covered.
18.4 Founder Status Ambiguity
§9.4 — whether "Founder" means a Cobalt Horizon Group-wide status or remains brand-specific (as it currently is in DL-SPEC-017 §1.6) is unresolved and flagged for a product decision, not inferred here.
19. APIs
| API | Purpose |
|---|---|
| Program API | Program/benefit configuration CRUD |
| Application API | Application submission, review, status transitions |
| Member Dashboard API | Read-model aggregation across all sections below |
| Referral Link API | Link generation, event ingestion |
| Commission Engine API | Rule configuration, ledger reads, reversal handling |
| Payment Center API | Payout scheduling, threshold/tax-status reads |
| Marketing/Asset API | Asset CRUD, versioning, download tracking |
| Missions/Gamification API | Mission CRUD, completion submission/verification, XP/level/badge reads |
| Creator CRM API | Admin-facing search/filter/notes/tags/contact history |
| Analytics API | Program performance dashboards |
| Notification API | Delivery, read-state, preferences |
| Security/Fraud API | Flag creation/review, duplicate-account checks |
| Administration API | Bulk operations, campaign/mission/reward creation, member actions |
20. Cross-Spec Consistency Notes
- LS-SPEC-001's header must be (and has been, see that document) updated to reflect the ownership transfer in this spec's header — a stale LS-SPEC-001 claiming ownership of referral tracking or the reward engine would directly contradict this document.
- DL-SPEC-019 §0.4, §1.2–§1.8, and §4.4 all currently reference LS-SPEC-001's Ambassador Profile API, Communication API, and Reward Engine API. Those references now resolve to this spec's Application/Member/Reward APIs instead — DL-SPEC-019 itself does not need logic changes, only a pointer update, flagged here rather than performed silently across a document not currently open for edit in this pass.
- DL-SPEC-017 §1.6's Founder Tier and DL-SPEC-019 §1.6's founder-status aggregation remain valid and unchanged — this spec's §9.4 flags a future ambiguity about whether Founder should also exist at the CHG tier, not a present contradiction.
- DL-DEPENDENCY-MAP.md should be updated with a new top tier reflecting this spec's position — see that document's own update alongside this one.
21. Recommended Next Steps
- Update LS-SPEC-001's own body (not just its header) to formally remove the sections this spec now owns, converting it into either a thin deprecation notice or a narrowly-scoped spec covering only what remains legitimately Legend-Studios-specific — this document's companion edit begins that process; a full rewrite is the next step, not yet performed.
- Resolve §9.4's Founder status ambiguity as an explicit product decision.
- Decide the priority order for §18's three flagged gaps, if any of them are needed before this spec's initial build — none of them block CHG-SPEC-001 itself from being implementation-ready as written.
- Update DL-SPEC-019's API references per §20 once this spec is reviewed and accepted.
- Confirm the Brand Adapter contract (§0.4) with a second real brand (not just Legend Studios) before freezing — the PipeDesk reuse case (§17) is currently a design argument, not a validated integration.