{
  "entities": [
    {
      "id": "zaal",
      "name": "Zaal",
      "labels": [
        "Person",
        "Founder"
      ],
      "attributes": {
        "farcaster_id": 19640,
        "farcaster_handle": "@zaal",
        "role": "founder",
        "description": "Engineer, builder, and connector in web3/Farcaster/music ecosystem",
        "team_position": "Ops",
        "farcaster_fid": "19640",
        "responsibility": "Overall festival direction, sponsor pitches, team coordination"
      }
    },
    {
      "id": "zabal",
      "name": "ZABAL",
      "labels": [
        "Organization",
        "Ecosystem"
      ],
      "attributes": {
        "description": "Music + web3 ecosystem",
        "founded_by": "Zaal"
      }
    },
    {
      "id": "bettercallzaal",
      "name": "BetterCallZaal",
      "labels": [
        "Website",
        "Personal Site"
      ],
      "attributes": {
        "domain": "bettercallzaal.com",
        "description": "Personal site and Farcaster Mini App for Zaal",
        "platform": "Farcaster"
      }
    },
    {
      "id": "hermes-coder",
      "name": "Hermes Coder",
      "labels": [
        "Agent"
      ],
      "attributes": {
        "role": "code-generation",
        "model": "claude-opus-4-7",
        "subprocess_of": "Claude Code CLI",
        "spawned_by": "bot/src/hermes/runner.ts",
        "language": "TypeScript",
        "auth_method": "Claude Code Max plan OAuth",
        "github_repo": "bettercallzaal/zaoos",
        "path": "bot/src/hermes/coder.ts",
        "_source": "zabal-dispatch-hermes-20260523"
      }
    },
    {
      "id": "hermes-critic",
      "name": "Hermes Critic",
      "labels": [
        "Agent"
      ],
      "attributes": {
        "role": "code-review",
        "model": "claude-sonnet-4-6",
        "subprocess_of": "Claude Code CLI",
        "spawned_by": "bot/src/hermes/runner.ts",
        "language": "TypeScript",
        "auth_method": "Claude Code Max plan OAuth",
        "github_repo": "bettercallzaal/zaoos",
        "path": "bot/src/hermes/critic.ts",
        "scoring_threshold": 70,
        "_source": "zabal-dispatch-hermes-20260523"
      }
    },
    {
      "id": "hermes-pre-flight-gate",
      "name": "Hermes Pre-Flight Gate",
      "labels": [
        "Module"
      ],
      "attributes": {
        "role": "quality-gate",
        "components": [
          "typecheck (tsc)",
          "biome lint",
          "test runner (vitest)"
        ],
        "runs_between": "Coder-done and Critic-start",
        "language": "TypeScript",
        "github_path": "bot/src/hermes/preflight.ts",
        "cost": "$0 (local, no API calls)",
        "typical_duration_ms": "5000-15000",
        "_source": "zabal-dispatch-hermes-20260523"
      }
    },
    {
      "id": "hermes-runner",
      "name": "Hermes Runner",
      "labels": [
        "Orchestrator"
      ],
      "attributes": {
        "role": "dispatch-loop",
        "entrypoint": "dispatchHermesRun()",
        "phases": [
          "clone-branch",
          "coder-loop",
          "preflight",
          "critic-loop",
          "pr-open",
          "pr-watch"
        ],
        "max_attempts": 3,
        "language": "TypeScript",
        "github_path": "bot/src/hermes/runner.ts",
        "fleet_daily_cap_usd": 20,
        "notional_cost_per_run": "$0.50",
        "auth": "Max plan OAuth (bearer via Claude Code CLI)",
        "_source": "zabal-dispatch-hermes-20260523"
      }
    },
    {
      "id": "hermes-pr-watcher",
      "name": "Hermes PR Watcher",
      "labels": [
        "Monitor"
      ],
      "attributes": {
        "role": "post-pr-alerting",
        "monitors": [
          "mergeable status",
          "CI check rollup"
        ],
        "alert_transport": "Telegram via HermesBot",
        "language": "TypeScript",
        "github_path": "bot/src/hermes/pr-watcher.ts",
        "polling_interval_ms": 30000,
        "max_poll_minutes": 5,
        "alerts_on": [
          "CONFLICTING",
          "CI failure"
        ],
        "_source": "zabal-dispatch-hermes-20260523"
      }
    },
    {
      "id": "zao-devz-bot-zaodevzbot",
      "name": "ZAO Devz Bot (@ZAODevZBot)",
      "labels": [
        "Telegram Bot"
      ],
      "attributes": {
        "role": "command-relay",
        "transport": "Telegram polling",
        "chat_id": "ZAO Devz (private group)",
        "commands": [
          "/fix",
          "/help",
          "/status"
        ],
        "privacy_mode": "OFF (reads all chat)",
        "dispatches_to": "Hermes Runner via dispatchHermesRun()",
        "_source": "zabal-dispatch-hermes-20260523"
      }
    },
    {
      "id": "hermes-narrator-hermeszaodevzbot",
      "name": "Hermes Narrator (@HermesZAOdevzbot)",
      "labels": [
        "Telegram Bot"
      ],
      "attributes": {
        "role": "phase-narrator",
        "transport": "Telegram polling",
        "chat_id": "ZAO Devz (same chat as DevZ)",
        "posts": [
          "Coder started",
          "Coder done",
          "Critic started",
          "Critic done",
          "PR opened",
          "Escalated"
        ],
        "privacy_mode": "OFF (reads all chat)",
        "token_env": "HERMES_BOT_TOKEN",
        "_source": "zabal-dispatch-hermes-20260523"
      }
    },
    {
      "id": "hermes-database",
      "name": "Hermes Database",
      "labels": [
        "Schema"
      ],
      "attributes": {
        "host": "Supabase (postgres)",
        "table": "hermes_runs",
        "fields": [
          "id",
          "triggered_by_telegram_id",
          "issue_text",
          "status",
          "branch",
          "pr_number",
          "fixer_attempts",
          "fixer_model",
          "critic_model",
          "critic_score",
          "total_input_tokens",
          "total_output_tokens",
          "estimated_cost_usd"
        ],
        "github_path": "bot/migrations/hermes_runs.sql",
        "audit_log": "immutable per-run record",
        "_source": "zabal-dispatch-hermes-20260523"
      }
    },
    {
      "id": "claude-code-sdk",
      "name": "Claude Code SDK",
      "labels": [
        "External Runtime"
      ],
      "attributes": {
        "role": "subprocess-spawner",
        "provides": "Coder and Critic as managed subprocesses",
        "auth_mechanism": "OAuth bearer (Max plan)",
        "spawned_by": "bot/src/hermes/claude-cli.ts",
        "model_routing": "Opus for Coder, Sonnet for Critic (hardcoded today)",
        "version_constraint": "v2.0+ (MCP-aligned)",
        "_source": "zabal-dispatch-hermes-20260523"
      }
    },
    {
      "id": "zabal-bonfire-bot",
      "name": "ZABAL Bonfire Bot",
      "labels": [
        "Telegram Bot"
      ],
      "attributes": {
        "role": "knowledge-graph-intake",
        "transport": "Telegram (Bonfire native agent)",
        "chat_id": "ZAO Devz + custom ZABAL",
        "writes_to": "Bonfire knowledge graph",
        "integration_with_hermes": "planned (context reads + event writes)",
        "_source": "zabal-dispatch-hermes-20260523"
      }
    },
    {
      "id": "hermes-http-dispatch",
      "name": "Hermes HTTP Dispatch",
      "labels": [
        "API Endpoint"
      ],
      "attributes": {
        "role": "remote-trigger",
        "port": 3007,
        "endpoint": "POST /hermes-dispatch",
        "auth_header": "x-hermes-secret",
        "body": "{trigger_by, issue_text}",
        "response": "DispatchResult (ready | failed | escalated)",
        "_source": "zabal-dispatch-hermes-20260523"
      }
    },
    {
      "id": "diff-complexity-classifier",
      "name": "Diff Complexity Classifier",
      "labels": [
        "Utility"
      ],
      "attributes": {
        "role": "cost-routing",
        "classifies": "simple (Haiku OK) vs complex (needs Sonnet)",
        "rules": [
          "docs-only = simple",
          "<30 LOC + no code = simple",
          "has risk patterns = complex"
        ],
        "github_path": "bot/src/hermes/types.ts::classifyDiffComplexity()",
        "future_use": "Gap #1 (multi-model routing, Sprint 1)",
        "_source": "zabal-dispatch-hermes-20260523"
      }
    },
    {
      "id": "zao-repository-target",
      "name": "ZAO Repository Target",
      "labels": [
        "Config"
      ],
      "attributes": {
        "profiles": [
          "zaoos (default)",
          "zaostock (standalone)"
        ],
        "extends_for": "per-repo system prompts, forbidden paths",
        "type_definition": "HermesRepoTarget",
        "github_path": "bot/src/hermes/types.ts",
        "_source": "zabal-dispatch-hermes-20260523"
      }
    },
    {
      "id": "poidh",
      "name": "POIDH",
      "labels": [
        "Platform"
      ],
      "attributes": {
        "full_name": "Pics Or It Didn't Happen",
        "url": "https://poidh.xyz",
        "app_url": "https://poidh-app.vercel.app",
        "chains": [
          "Arbitrum",
          "Base",
          "Degen Chain"
        ],
        "launched": "2024-04-24",
        "contract_base": "0xb502c5856f7244dccdd0264a541cc25675353d39",
        "contract_arbitrum": "0x0aa50ce0d724cc28f8f7af4630c32377b4d5c27d",
        "contract_degen": "0x2445BfFc6aB9EEc6C562f8D7EE325CddF1780814",
        "version": "v3",
        "min_bounty_base_arb": "0.001 ETH",
        "min_bounty_degen": "1000 DEGEN",
        "protocol_fee": "2.5%",
        "nft_royalty_suggested": "5%",
        "funding_distributed": "$65,000",
        "token": "NONE",
        "_source": "zabal-dispatch-poidh-20260523",
        "category": "crypto-infra",
        "role": "Bounty + proof-of-contribution",
        "cost": "Onchain fees only",
        "features": [
          "AI image verification",
          "Atomic settlement",
          "Farcaster cast announcements"
        ],
        "use_case": "ZABAL adoptable projects bounties"
      }
    },
    {
      "id": "empire-builder",
      "name": "Empire Builder",
      "labels": [
        "Platform",
        "platform",
        "distribution-platform"
      ],
      "attributes": {
        "url": "https://empirebuilder.world",
        "docs_url": "https://empire-builder.gitbook.io/empire-builder-docs",
        "leaderboard_types": [
          "Token Holders",
          "Stakers",
          "NFT Holders",
          "API-Sourced",
          "CSV Upload"
        ],
        "auth_model": "X-API-Key",
        "chains_supported": [
          "Base",
          "Arbitrum"
        ],
        "purpose": "Add leaderboard + booster + treasury infrastructure to any ERC-20",
        "api_endpoint_base": "https://www.empirebuilder.world/api",
        "supports_apiLeaderboards": true,
        "_source": "zabal-dispatch-poidh-20260523",
        "description": "Farcaster creator toolkit with leaderboards, boosters, tokenization",
        "maintainer": "Jordan (yerbearzerker)",
        "tiers": "Basic (free, tokenless) and Ascended (token-launched)",
        "api_status": "available for integration",
        "leaderboard_capacity": "Basic: 2 leaderboards, Ascended: 10 leaderboards",
        "chain": "Base",
        "year_founded": 2024,
        "founders": [
          "Jordan Oram"
        ],
        "platform": "Gamified token rewards on Base, Farcaster-native",
        "builder": "Adrian (glankerempire)",
        "zabal_empire_url": "empirebuilder.world/empire/0xbB48f19B0494Ff7C1fE5Dc2032aeEE14312f0b07",
        "core_feature": "Community hubs for ERC-20 tokens with leaderboards, airdrops, burns, staking",
        "empireMultiplier_range": "4.0x - 8.6x (booster based on holdings + activity)",
        "distribution_method": "Manual via UI (v1) - top 50 raiders weekly from RaidSharks CSV export",
        "v3_features_coming": [
          "Distribute API",
          "Burn API",
          "Leaderboard query API",
          "Webhooks",
          "Custom branding"
        ],
        "zabal_q1_distributed": "$168 USD equivalent",
        "integration_status": "Live - SongJam leaderboard reads empireMultiplier",
        "category": "crypto-infra",
        "role": "Leaderboard infrastructure",
        "chains": [
          "Base",
          "Arbitrum"
        ],
        "auth": "X-API-Key",
        "cost": "Free (leaderboard service)",
        "features": [
          "Booster system",
          "Treasury infrastructure",
          "Empire Snaps"
        ],
        "use_case": "ZABAL token leaderboards + SongJam leaderboards"
      }
    },
    {
      "id": "zabal-empire",
      "name": "ZABAL Empire",
      "labels": [
        "Instance",
        "Empire",
        "Leaderboard"
      ],
      "attributes": {
        "parent_platform": "Empire Builder",
        "url": "https://songjam.space/zabal",
        "token": "ZABAL",
        "chains": [
          "Base"
        ],
        "guardians": [
          "yerbearserker (Jordan Oram)",
          "Adrian (divifly)"
        ],
        "boost_types": [
          "Token Boosters (ZABAL/SANG/ZORO)",
          "Reputation Boosters (Talent Protocol)"
        ],
        "stake_minimum": "250,000 SANG",
        "stake_multiplier_formula": "1 + sqrt(stakeAmount / 250k SANG min)",
        "leaderboard_7d_24h_alltime": true,
        "_source": "zabal-dispatch-poidh-20260523",
        "token_address": "0xbB48f19B0494Ff7C1fE5Dc2032aeEE14312f0b07",
        "platform": "Empire Builder V3",
        "leaderboards": "tokenHolders",
        "active_boosters": [
          "QUOTIENT",
          "UNKNOWN_others"
        ],
        "ecosystem": "music-web3",
        "tier": "Ascended (token-gated on Base)",
        "tokenAddress": "0xbB48f19B0494Ff7C1fE5Dc2032aeEE14312f0b07",
        "leaderboardSlots": 10,
        "activeLeaderboards": 7,
        "leaderboardList": [
          "Holders",
          "Farcaster-Only",
          "Zabal Voting Miniapp",
          "SongJam Season 1",
          "SongJam Season 2 Ep1",
          "SongJam Season 2 Ep2",
          "POIDH Bounties"
        ],
        "token_underlying": "ZABAL",
        "blockchain": "Base",
        "contract_address": "0xbB48f19B0494Ff7C1fE5Dc2032aeEE14312f0b07",
        "empire_contract": "0xe0faa499d6711870211505bd9ae2105206af1462",
        "co_creators": "yerbearserker (Jordan Oram), Adrian (divifly)",
        "leaderboard_url": "https://songjam.space/zabal",
        "creative_hub_url": "https://zabal.art/",
        "multiplier_system": "staking * empire boosters",
        "governance_anchor": "Respect (pre-funded baseline positions for voters)"
      }
    },
    {
      "id": "poidh-sentinel",
      "name": "poidh-sentinel",
      "labels": [
        "Agent"
      ],
      "attributes": {
        "url": "https://github.com/0x94t3z/poidh-sentinel",
        "author_github": "0x94t3z",
        "author_farcaster": "mr94t3z",
        "deployed": "2026-05-03",
        "stars": 4,
        "language": "TypeScript",
        "stack": [
          "Vercel",
          "Neon Postgres",
          "Neynar webhooks",
          "Free LLM (Cerebras/Groq/OpenRouter)"
        ],
        "capabilities": [
          "Suggest bounties",
          "Create on-chain",
          "Monitor cron 1m",
          "Evaluate claims (AI)",
          "Pick winners",
          "Pay out atomic",
          "Cast announcements",
          "Detect AI images"
        ],
        "cost_monthly": "$0 mandatory (free tiers) + bot ETH float",
        "ai_image_detection_cost": "~$0.007/call optional (gpt-4o)",
        "_source": "zabal-dispatch-poidh-20260523"
      }
    },
    {
      "id": "bountycaster",
      "name": "Bountycaster",
      "labels": [
        "Platform"
      ],
      "attributes": {
        "url": "https://bountycaster.xyz",
        "funding_model": "Off-chain peer-to-peer",
        "trust_model": "Honor system",
        "nft_artifact": false,
        "use_case": "Code/research bounties without on-chain proof required",
        "_source": "zabal-dispatch-poidh-20260523"
      }
    },
    {
      "id": "hats-protocol",
      "name": "Hats Protocol",
      "labels": [
        "Platform",
        "Protocol",
        "Smart Contract Protocol",
        "Tool"
      ],
      "attributes": {
        "url": "https://hatsprotocol.xyz",
        "contract_base": "0x3bc1A0Ad72417f2d411118085256fC53CBdDd137",
        "standard": "ERC-1155",
        "purpose": "On-chain role NFTs (non-transferable)",
        "use_case": "Portable proof of achievement across ecosystems",
        "cost_create_tree": "~$0.25 (Base)",
        "cost_per_mint": "~$0.12 per address (Base)",
        "_source": "zabal-dispatch-poidh-20260523",
        "non_transferable": true,
        "chains": [
          "Ethereum",
          "Optimism",
          "Base",
          "Arbitrum",
          "Polygon",
          "Gnosis",
          "Scroll",
          "Celo"
        ],
        "deterministic_address": "0x3bc1A0Ad72417f2d411118085256fC53CBdDd137",
        "core_concept": "non-upgradeable singleton contract manages tree-hierarchical roles via minting/revoking NFT-like tokens",
        "contract_address": "0x3bc1A0Ad72417f2d411118085256fC53CBdDd137",
        "chain": "Optimism",
        "chain_id": 10,
        "non_upgradeable": true,
        "sdk": "@hatsprotocol/sdk-v1-core",
        "license": "MIT",
        "category": "crypto-infra",
        "role": "Onchain role NFTs",
        "features": [
          "Tree-hierarchical roles",
          "Modules registry",
          "Programmable extensions"
        ]
      }
    },
    {
      "id": "bcz-poidh-leaderboard",
      "name": "BCZ POIDH Leaderboard",
      "labels": [
        "Service"
      ],
      "attributes": {
        "page_url": "https://bettercallzaal.com/poidh.html",
        "feed_url": "https://bettercallzaal.com/poidh-leaderboard.json",
        "feed_format": "[{address, score}]",
        "integration": "Empire Builder apiLeaderboards",
        "status": "Live Phase 1",
        "owned_by": "Zaal (bettercallzaal.com)",
        "_source": "zabal-dispatch-poidh-20260523"
      }
    },
    {
      "id": "zabal-games-adoptable-projects",
      "name": "ZABAL Gamez Adoptable Projects",
      "labels": [
        "Mechanism"
      ],
      "attributes": {
        "count": 9,
        "spec_url": "https://github.com/ZAODEVZ/zabalgames/blob/main/data/adoptable-projects.json",
        "funding_mechanism": "POIDH bounty adoption + Empire Builder distribution",
        "projects_include": [
          "Songjam leaderboard migration",
          "POIDH bounty leaderboard",
          "zlank Empire Snap template",
          "Twitch to Empire feed",
          "ZOE skill extension",
          "ZABAL mini app",
          "COC content pipeline",
          "Streaming auto-clip",
          "WaveWarZ Finals settlement"
        ],
        "_source": "zabal-dispatch-poidh-20260523"
      }
    },
    {
      "id": "poidhv3-contract-events",
      "name": "PoidhV3 Contract Events",
      "labels": [
        "Infrastructure"
      ],
      "attributes": {
        "chains": [
          "Arbitrum",
          "Base",
          "Degen"
        ],
        "data_source": "On-chain events (BountyCreated, ClaimSubmitted, ClaimAccepted)",
        "indexing": "Available via Base RPC or poidh.xyz reverse-engineered API",
        "use_case": "Real-time submitter list without relying on UI scrape",
        "_source": "zabal-dispatch-poidh-20260523"
      }
    },
    {
      "id": "farcaster-snap-protocol",
      "name": "Farcaster Snap Protocol",
      "labels": [
        "Protocol"
      ],
      "attributes": {
        "version": "2.0",
        "launched": "2026-03-27",
        "spec_finalized": "2026-04-08",
        "mime_type": "application/vnd.farcaster.snap+json",
        "current_sdk": "@farcaster/snap@2.0.3",
        "hono_middleware": "@farcaster/snap-hono@2.0.5",
        "description": "Server-driven JSON-UI embedded in Farcaster casts",
        "_source": "zabal-dispatch-snap-20260523"
      }
    },
    {
      "id": "snap-response-v2-0",
      "name": "Snap Response v2.0",
      "labels": [
        "Schema"
      ],
      "attributes": {
        "version": "2.0",
        "required_fields": [
          "version",
          "ui"
        ],
        "optional_fields": [
          "theme",
          "effects"
        ],
        "ui_structure": "{ root: string, elements: Record<string, Element> }",
        "root_constraint": "max 7 direct children",
        "total_elements": "max 64",
        "nesting_depth": "max 4 levels",
        "height_limit": "500px default, 700px with showOverflowWarning",
        "_source": "zabal-dispatch-snap-20260523"
      }
    },
    {
      "id": "content-negotiation-pattern",
      "name": "Content Negotiation Pattern",
      "labels": [
        "Pattern"
      ],
      "attributes": {
        "description": "Single URL serves both Snap and HTML",
        "snap_condition": "Accept: application/vnd.farcaster.snap+json",
        "html_condition": "browser GET or no Accept header",
        "html_includes": "fc:miniapp meta tag for Mini App fallback",
        "required_header": "Vary: Accept",
        "discovery_requirement": "Snap MUST be discoverable on plain GET",
        "_source": "zabal-dispatch-snap-20260523"
      }
    },
    {
      "id": "zlank",
      "name": "zlank",
      "labels": [
        "Platform"
      ],
      "attributes": {
        "url": "zlank.online",
        "status": "live (FarHack 2026)",
        "purpose": "No-code Snap builder",
        "path_pattern": "/s/[uuid]",
        "sdk_version": "@farcaster/snap@2.1.1",
        "hono_version": "@farcaster/snap-hono@2.0.5",
        "snap_ttl": "7 days free",
        "blocks_v1": 7,
        "blocks_total": 14,
        "multipage": true,
        "_source": "zabal-dispatch-snap-20260523"
      }
    },
    {
      "id": "jfs-json-farcaster-signature",
      "name": "JFS (JSON Farcaster Signature)",
      "labels": [
        "Authentication"
      ],
      "attributes": {
        "purpose": "Sign POST payloads on Snap interactions",
        "payload_v2_shape": "{ user: { fid }, surface, inputs, timestamp }",
        "nonce_status": "removed April 2026",
        "verification": "verifyJFSRequestBody from @farcaster/snap",
        "production_requirement": "MUST verify in production, MAY skip in dev/emulator",
        "signature_binding": "JFS header FID must match user.fid",
        "_source": "zabal-dispatch-snap-20260523"
      }
    },
    {
      "id": "snap-element-catalog",
      "name": "Snap Element Catalog",
      "labels": [
        "Components"
      ],
      "attributes": {
        "display_elements": [
          "badge",
          "button",
          "icon",
          "image",
          "item",
          "progress",
          "separator",
          "text"
        ],
        "containers": [
          "item_group",
          "stack"
        ],
        "data_viz": [
          "bar_chart",
          "cell_grid"
        ],
        "form_inputs": [
          "input",
          "slider",
          "switch",
          "toggle_group"
        ],
        "total_components": 16,
        "element_limit_per_snap": 64,
        "direct_children_limit": 7,
        "nested_children_limit": 6,
        "_source": "zabal-dispatch-snap-20260523"
      }
    },
    {
      "id": "snap-actions",
      "name": "Snap Actions",
      "labels": [
        "Interactions"
      ],
      "attributes": {
        "primary": [
          "submit"
        ],
        "navigation": [
          "open_url",
          "open_mini_app",
          "view_cast",
          "view_profile"
        ],
        "composer": [
          "compose_cast"
        ],
        "wallet": [
          "view_token",
          "send_token",
          "swap_token"
        ],
        "total_actions": 9,
        "submit_target": "POST to server with JFS signature",
        "open_url_binding": "HTTPS required, validated at spec-check time",
        "_source": "zabal-dispatch-snap-20260523"
      }
    },
    {
      "id": "fc-frame-button-n-deprecated",
      "name": "fc:frame:button:N (deprecated)",
      "labels": [
        "LegacyProtocol"
      ],
      "attributes": {
        "status": "deprecated as of Snap launch",
        "max_buttons": 4,
        "rendering": "image-only with text buttons",
        "replaced_by": "Farcaster Snap Protocol",
        "reason_deprecated": "Limited UI flexibility, no rich components, 4-button ceiling",
        "mini_app_alternative": "Frames v2 (full-screen, persistent)",
        "_source": "zabal-dispatch-snap-20260523"
      }
    },
    {
      "id": "fc-miniapp-meta-tag",
      "name": "fc:miniapp meta tag",
      "labels": [
        "MetaTag"
      ],
      "attributes": {
        "protocol": "Farcaster Mini Apps (not Snaps)",
        "placement": "HTML head, stringified JSON",
        "structure": "{ version: 1, imageUrl, button: { title, action } }",
        "action_types": [
          "launch_miniapp",
          "launch_frame"
        ],
        "purpose": "Render Mini App embed card in cast feeds",
        "manifest_requirement": "/.well-known/farcaster.json for account association",
        "_source": "zabal-dispatch-snap-20260523"
      }
    },
    {
      "id": "snap-host-whitelist",
      "name": "Snap Host Whitelist",
      "labels": [
        "Infrastructure"
      ],
      "attributes": {
        "known_whitelisted_hosts": [
          "zlank.online",
          "vercel-deployed Farcaster official",
          "Neynar infrastructure"
        ],
        "arbitrary_custom_domain_status": "NOT unfurled as Snap by Farcaster caster",
        "rendering_fallback": "Plain text URL if not whitelisted",
        "why_whitelist": "Prevent spoofing, ensure protocol safety",
        "account_association_mechanism": "/.well-known/farcaster.json with EIP-712 signature",
        "_source": "zabal-dispatch-snap-20260523"
      }
    },
    {
      "id": "farcaster-snap-npm-package",
      "name": "@farcaster/snap npm package",
      "labels": [
        "Library"
      ],
      "attributes": {
        "current_version": "2.6.1",
        "stable_2x_version": "2.0.3",
        "releases_total": 144,
        "first_release": "2026-03-30",
        "exports": [
          "schemas",
          "validation",
          "JFS verification",
          "types"
        ],
        "key_exports": [
          "verifyJFSRequestBody",
          "validateSnapResponse",
          "SnapResponse type"
        ],
        "dependencies": 8,
        "weekly_downloads": 680,
        "_source": "zabal-dispatch-snap-20260523"
      }
    },
    {
      "id": "snap-v2-0-structural-constraints",
      "name": "Snap v2.0 Structural Constraints",
      "labels": [
        "Validation"
      ],
      "attributes": {
        "max_elements": 64,
        "max_root_children": 7,
        "max_nested_children": 6,
        "max_nesting_depth": 4,
        "default_height": "500px",
        "extended_height": "700px with showOverflowWarning",
        "image_url_validation": "HTTPS required, no extension restrict (PR #153)",
        "action_url_validation": "HTTPS required, loopback HTTP dev exception",
        "_source": "zabal-dispatch-snap-20260523"
      }
    },
    {
      "id": "wavewarz-v1-solana",
      "name": "WaveWarZ v1 Solana",
      "labels": [
        "Protocol"
      ],
      "attributes": {
        "chain": "Solana Mainnet",
        "launch_date": "September 2025",
        "github_org": "CandyToyBox",
        "repos": "wavewarz-intelligence, Dashboard_wallet_checker, analytics-wave-warz, homepage-redesign",
        "status": "Live",
        "founder": "Ikechi Nwachukwu (Hurric4n3Ike)",
        "twitter": "@WaveWarZ",
        "program_id": "9TUfEHvk5fN5vogtQyrefgNqzKy2Bqb4nWVhSFUg2fYo",
        "rpc_provider": "Helius (free tier, 1M credits/mo, 10 RPS, 0 cost)",
        "_source": "zabal-dispatch-wavewarz-20260523"
      }
    },
    {
      "id": "wavewarz-base-v2",
      "name": "WaveWarZ-Base v2",
      "labels": [
        "Protocol"
      ],
      "attributes": {
        "chain": "Ethereum Base L2",
        "status": "In build (testnet: Base Sepolia)",
        "builders": "Sam + Arthur",
        "github": "bettercallzaal/wwbase, CandyToyBox/wavewarz-base",
        "contract_address_testnet": "0xe28709DF5c77eD096f386510240A4118848c1098 (Base Sepolia)",
        "contracts": [
          "WaveWarzBase.sol",
          "EphemeralBattleToken.sol",
          "WaveWarzMarketplace.sol",
          "WaveWarzMusicNFT.sol"
        ],
        "bonding_curve": "sqrt integral (2/3)(b^(3/2) - a^(3/2))",
        "payment_token": "WETH (0x4200000000000000000000000000000000000006)",
        "test_status": "8/8 tests passing",
        "agentic": true,
        "target_mainnet_date": "July 2026 (post-audit)",
        "_source": "zabal-dispatch-wavewarz-20260523"
      }
    },
    {
      "id": "zabal-games-season-1-finals",
      "name": "ZABAL Gamez Season 1 Finals",
      "labels": [
        "Event"
      ],
      "attributes": {
        "voting_mechanism": "WaveWarZ-Base (Doc 720)",
        "date": "August 2026",
        "finalists_count": "5-8 (8 adoptable projects, one becomes Finals winners test case)",
        "respect_holder_snapshot": "T-7 days (via Hats Protocol or direct Respect contract read)",
        "prefund_amount_per_voter": "$1-2 USDC equivalent split across N finalists",
        "trade_window_hours": "72 (T+0 to T+72h)",
        "ship_deadline": "T+24h (live URL + repo + 60s demo + cast)",
        "judge_agents": "x402-paid autonomous scorers, read deployed URL + repo + demo video, score against rubric",
        "settlement_triggers": [
          "Build quality",
          "Is it ZAO-native",
          "Would I use this",
          "Shipped in 24h"
        ],
        "artist_cut": "1% of total volume → each builder (ongoing post-Finals)",
        "hats_protocol": "Finisher NFT to all finalists, Champion NFT to top-3",
        "prize_pool_usdc": "500",
        "phase_1_start": "June 2026",
        "_source": "zabal-dispatch-wavewarz-20260523"
      }
    },
    {
      "id": "lui",
      "name": "LUI",
      "labels": [
        "Artist"
      ],
      "attributes": {
        "solana_wallet": "B97zbRCUf2jhPj6Cs2QXc9EGyWdNDvQ6ExUeB7sxrTSA",
        "battles": 71,
        "wins": 49,
        "losses": 22,
        "win_rate": "69%",
        "total_volume_sol": 29.5888,
        "career_earnings_sol": 0.528,
        "biggest_win_song": "Love Languages (2.22 SOL single-song volume)",
        "main_events_record": "9W-1L (90%)",
        "soundcloud": "luijoseph",
        "instagram": "@LuiJoseph__",
        "email": "LUIJOSEPHIII@gmail.com",
        "status": "Recruitment priority (v1 dominant player)",
        "_source": "zabal-dispatch-wavewarz-20260523"
      }
    },
    {
      "id": "aporkalypse",
      "name": "APORKALYPSE",
      "labels": [
        "Artist"
      ],
      "attributes": {
        "solana_wallet": "CUh7ZWej4qG4daKHA44vV7zNNeonyctt45qHZykz9WGN",
        "battles": 30,
        "wins": 22,
        "losses": 8,
        "win_rate": "73%",
        "total_volume_sol": 10.9753,
        "career_earnings_sol": 0.2223,
        "soundcloud": "aporkalypse-now",
        "instagram": "@aporkalypsenownola",
        "apple_music": "1633048308",
        "twitter": "@Aporkalypse504",
        "status": "High-quality performer, volume leader",
        "_source": "zabal-dispatch-wavewarz-20260523"
      }
    },
    {
      "id": "prof-t",
      "name": "PROF!T",
      "labels": [
        "Artist"
      ],
      "attributes": {
        "solana_wallet": "BFM9h9WMxGCYxqexLB5w93iSd5uye9xCyxkjchZirG4X",
        "battles": 7,
        "wins": 5,
        "losses": 2,
        "win_rate": "71%",
        "total_volume_sol": 13.8564,
        "career_earnings_sol": 0.2025,
        "status": "High-stakes performer (volume leader per battle ratio)",
        "_source": "zabal-dispatch-wavewarz-20260523"
      }
    },
    {
      "id": "kata7yst",
      "name": "Kata7yst",
      "labels": [
        "Artist"
      ],
      "attributes": {
        "battles_in_24h": 8,
        "wins_in_24h": 6,
        "losses_in_24h": 2,
        "volume_in_24h_sol": 1.64,
        "status": "Most active recent entrant (Mar 20-21, 2026 window), not in original 43-wallet list yet, primary opponent: BennyJ504",
        "solana_wallet": "UNKNOWN",
        "_source": "zabal-dispatch-wavewarz-20260523"
      }
    },
    {
      "id": "hurric4n3ike",
      "name": "Hurric4n3Ike",
      "labels": [
        "Artist + Founder"
      ],
      "attributes": {
        "real_name": "Ikechi Nwachukwu",
        "founder_role": "Built WaveWarZ v1 Solana + leading v2 Base agentic build (with Sam + Arthur)",
        "wallets": [
          "62g5hYiSTqj185F26c3pT6EPx4Gs1P6gL72kGNzvkbjM (wallet A, 60W-18L, 3.6081 SOL)",
          "4g2wDCUN1WcsMRd2czDSVhxgk5eCLH4CpVLk3thfv5rG (wallet B, 8W-3L, 1.4198 SOL)",
          "9RbUvEftk..."
        ],
        "combined_record": "71W-27L",
        "beatstars": "hurric4n3ike.beatstars.com",
        "spotify": "FireWavez",
        "twitter": "@hurric4n3ike",
        "github": "hurric4n3ike (personal repos: BlinkBattlesimages, zoundz NFT marketplace, rpc-proxy)",
        "contact_priority": "X @WaveWarZ (primary) AND GitHub @hurric4n3ike for API/program ID requests",
        "_source": "zabal-dispatch-wavewarz-20260523"
      }
    },
    {
      "id": "dcoopofficial",
      "name": "DCoopOfficial",
      "labels": [
        "Artist + Label Rep"
      ],
      "attributes": {
        "organization": "Coop Records",
        "farcaster_presence": "Yes (onchain record label)",
        "product": "Sonata (open-source Farcaster music client, MIT license)",
        "github": "github.com/Coop-Records/sonata",
        "status": "Recruitment path via Farcaster-native music community",
        "solana_wallet": "UNKNOWN",
        "_source": "zabal-dispatch-wavewarz-20260523"
      }
    },
    {
      "id": "candytoybox",
      "name": "CandyToyBox",
      "labels": [
        "Organization"
      ],
      "attributes": {
        "github": "github.com/CandyToyBox",
        "repo_count": 16,
        "primary_language": "TypeScript",
        "key_repos": [
          "wavewarz-intelligence (Next.js + Supabase, latest Mar 17 2026)",
          "wavewarz-base (Solidity/Foundry, latest Feb 27 2026)",
          "analytics-wave-warz (Recharts + Supabase, Feb 28 2026)",
          "wavewarz-merch-shop (agentic merch, Feb 20 2026)",
          "Dashboard_wallet_checker (Claim tool, Feb 1 2026)"
        ],
        "status": "Active development org for WaveWarZ ecosystem",
        "_source": "zabal-dispatch-wavewarz-20260523"
      }
    },
    {
      "id": "wavewarz-intelligence",
      "name": "WaveWarZ Intelligence",
      "labels": [
        "Application"
      ],
      "attributes": {
        "url": "wavewarz-intelligence.vercel.app",
        "tech_stack": "Next.js + Supabase (events/calendar tables only, not battle data)",
        "features": [
          "Battle history (647 as of Mar 21, 735 as of May 23)",
          "Artist profiles (43+)",
          "5 leaderboard types",
          "Claim tool (wallet scanner for unclaimed winnings)"
        ],
        "repo": "CandyToyBox/wavewarz-intelligence",
        "last_updated": "Mar 17 2026",
        "artist_profile_url_pattern": "https://wavewarz-intelligence.vercel.app/artist/[WALLET]",
        "supabase_schema": "platform_events (schedule), calendar_events (one-off), platform_stats (Spotify metrics only). Battle data NOT in this Supabase instance.",
        "battle_data_source": "Separate backend (unknown), direct Solana RPC reads, or internal API not exposed",
        "_source": "zabal-dispatch-wavewarz-20260523"
      }
    },
    {
      "id": "wavewarz-analytics",
      "name": "WaveWarZ Analytics",
      "labels": [
        "Application"
      ],
      "attributes": {
        "url": "analytics-wave-warz.vercel.app",
        "tech_stack": "Recharts + Supabase",
        "features": [
          "Volume trends",
          "Platform growth charts",
          "Battle metrics over time"
        ],
        "repo": "CandyToyBox/analytics-wave-warz",
        "last_updated": "Feb 28 2026",
        "data_source": "Client-side only (source unknown)",
        "_source": "zabal-dispatch-wavewarz-20260523"
      }
    },
    {
      "id": "wavewarz-main-app",
      "name": "WaveWarZ Main App",
      "labels": [
        "Application"
      ],
      "attributes": {
        "url": "wavewarz.com",
        "features": [
          "Battle creation",
          "SOL staking",
          "Live voting during X Spaces",
          "Track listening"
        ],
        "tech_stack": "PWA",
        "repo": "CandyToyBox/homepage-redesign",
        "last_updated": "Feb 22 2026",
        "_source": "zabal-dispatch-wavewarz-20260523"
      }
    },
    {
      "id": "wavewarz-live-mobile-alert-spectator-app",
      "name": "WaveWarZ Live Mobile Alert + Spectator App",
      "labels": [
        "Application"
      ],
      "attributes": {
        "repo": "bettercallzaal/wavewarzapp",
        "purpose": "Mobile alerts + spectator mode for Solana music battles",
        "status": "Demo build",
        "last_updated": "May 7 2026",
        "_source": "zabal-dispatch-wavewarz-20260523"
      }
    },
    {
      "id": "wavewarz-brief-wwbase-repo",
      "name": "WaveWarZ Brief (wwbase repo)",
      "labels": [
        "Documentation"
      ],
      "attributes": {
        "repo": "bettercallzaal/wwbase",
        "description": "Public brief for WaveWarZ Base v2, agentic music battles on Base L2. Production-proven on Solana. Seeking technical co-founder.",
        "last_updated": "May 15 2026",
        "audience": "Potential partners / co-founders for Base build",
        "_source": "zabal-dispatch-wavewarz-20260523"
      }
    },
    {
      "id": "polymarket-agent-apis",
      "name": "Polymarket Agent APIs",
      "labels": [
        "Integration Pattern"
      ],
      "attributes": {
        "frameworks": [
          "Polymarket/agent-skills (MCP, 40+ tools)",
          "py-clob-client (Python SDK)",
          "AION Market SDK (Python + REST)"
        ],
        "endpoints": {
          "clob": "https://clob.polymarket.com",
          "gamma": "https://gamma-api.polymarket.com",
          "relayer": "https://relayer-v2.polymarket.com",
          "websocket": "wss://ws-subscriptions-clob.polymarket.com/ws/[market|user|sports]"
        },
        "auth_method": "EIP-712 signing + Builder headers for gasless (Gnosis Safe proxy wallets)",
        "relevance_to_wavewarz": "Reference architecture for autonomous agent trading on prediction markets",
        "_source": "zabal-dispatch-wavewarz-20260523"
      }
    },
    {
      "id": "agora",
      "name": "Agora",
      "labels": [
        "Agentic Platform"
      ],
      "attributes": {
        "what": "AI-native prediction market with 80 agents trading Super Bowl LX predictions",
        "agents": "4 frontier model families (GPT, Claude, Gemini variants)",
        "mechanism": "Constant product AMM (x*y=k), play-money AGP currency",
        "leaderboard": "Brier score evaluation",
        "result": "Agent forecasts match Vegas lines; diversity improves accuracy",
        "date": "Feb 8-11 2026 (Super Bowl LX)",
        "github": "kevins-openclaw-lab/agora (Feb 2026)",
        "relevance_to_wavewarz": "Demonstrates agent forecasting at scale; WaveWarZ could use similar model-diversity patterns for judge agents",
        "_source": "zabal-dispatch-wavewarz-20260523"
      }
    },
    {
      "id": "guessmarket",
      "name": "GuessMarket",
      "labels": [
        "Agentic Platform"
      ],
      "attributes": {
        "what": "Permissionless agent prediction market across 5 chains",
        "blockchains": [
          "Ethereum",
          "Polygon",
          "Base",
          "Arbitrum",
          "Solana"
        ],
        "features": [
          "Agents build unsigned trades",
          "Local signing",
          "On-chain broadcast",
          "75% LP fees to liquidity providers",
          "Agents can CREATE markets autonomously"
        ],
        "mcp_server": "14 tools (list_markets, get_market, build_buy_tx, claim_winnings, etc.)",
        "wallet_encryption": "AgentWallet (server-encrypted signing without key exposure)",
        "url": "guessmarket.com/en/ai-agents",
        "status": "Live 2026-05",
        "relevance_to_wavewarz": "Multi-chain agent architecture; Solana integration; agent-native market creation pattern",
        "_source": "zabal-dispatch-wavewarz-20260523"
      }
    },
    {
      "id": "prediction-arena",
      "name": "Prediction Arena",
      "labels": [
        "Agentic Research"
      ],
      "attributes": {
        "what": "Frontier model (GPT-5.4, Claude 4.6 Opus, Gemini 3.1 Pro) trading on Kalshi + Polymarket",
        "period": "Jan 12 - Mar 9 2026 (57 days live)",
        "cohorts": [
          "Cohort 1: 6 legacy models, real capital",
          "Cohort 2: 4 next-gen models, paper trading from Mar 6"
        ],
        "execution_cycle": "15-45 min trading cycles, web search tools, market discovery, Kelly Criterion sizing",
        "findings": "Frontier beats legacy on Polymarket; smarter agents more profitable; feedback worsens calibration (surprising)",
        "capital": "$10,000 per model account",
        "papers": [
          "arXiv:2604.07355",
          "arXiv:2604.20050 (May 2026)"
        ],
        "relevance_to_wavewarz": "Demonstrates frontier model trading viability; Kelly Criterion sizing pattern for agent position management",
        "_source": "zabal-dispatch-wavewarz-20260523"
      }
    },
    {
      "id": "polyswarm",
      "name": "PolySwarm",
      "labels": [
        "Agentic Framework"
      ],
      "attributes": {
        "what": "50-persona LLM swarm trading Polymarket concurrently",
        "mechanism": "Confidence-weighted Bayesian aggregation, KL divergence misprice detection, quarter-Kelly sizing",
        "innovation": "Latency arbitrage (200ms window on Polygon), agents reason about OTHER agents' knowledge via price observation",
        "finding": "Swarm aggregation > single-model; simple prompting ineffective for complex info",
        "paper": "arXiv:2604.03888 (May 2026)",
        "relevance_to_wavewarz": "Multi-agent reasoning pattern; agent-vs-agent dynamics applicable to agentic battles",
        "_source": "zabal-dispatch-wavewarz-20260523"
      }
    },
    {
      "id": "orca",
      "name": "Orca",
      "labels": [
        "Agentic Platform"
      ],
      "attributes": {
        "what": "Full-stack autonomous agent execution platform (sentiment, routing, risk, execution)",
        "integrations": [
          "Polymarket",
          "Kalshi",
          "Base (Q2 2026)",
          "Arbitrum (Q2 2026)",
          "XRP Ledger"
        ],
        "backend": "OpenClaw automation, Nodepay sentiment, x402 payment protocol on XRP",
        "roadmap": [
          "Q4 2027: official ORCA ecosystem launch",
          "2028: mobile-first + AI-native prediction trading UI"
        ],
        "announcement": "May 16 2026 (TechBullion)",
        "relevance_to_wavewarz": "Continuous autonomous operation pattern; x402 payment integration (same as ZABAL Gamez judge agents); sentiment-driven signal aggregation",
        "_source": "zabal-dispatch-wavewarz-20260523"
      }
    },
    {
      "id": "anansi-ogma-agent-as-judge-pattern",
      "name": "Anansi × Ogma Agent-as-Judge Pattern",
      "labels": [
        "Design Pattern"
      ],
      "attributes": {
        "what": "Economic accountability for evaluation (artist agent + judge agent + x402 payment)",
        "implementation": "Anansi (storyteller) → Ogma (evaluator) → feedback loop → regeneration",
        "blockchain": "Celo Sepolia (USDm/KESm stablecoins)",
        "evaluation_model": "Venice.ai venice-uncensored (cultural authenticity rubric)",
        "payment": "x402 HTTP 402 status → KES/USD → verdict delivery",
        "innovation": "Culture becomes tradeable, compensable asset; judge economically incentivized",
        "source": "nissan/celo-agent-demo (Mar 2026)",
        "relevance_to_wavewarz": "Direct pattern for WaveWarZ judge agents (Doc 720 Decision #7): agent reads build, scores rubric, gets paid in x402",
        "_source": "zabal-dispatch-wavewarz-20260523"
      }
    },
    {
      "id": "golden-codex-ai-art-curation",
      "name": "Golden Codex AI Art Curation",
      "labels": [
        "Design Pattern"
      ],
      "attributes": {
        "what": "Multiple independent judges (Curator vs Maestro) evaluating same art with different criteria",
        "criteria": [
          "Compliance (GCX registration, metadata, C2PA)",
          "Aesthetic (composition, palette, coherence)"
        ],
        "execution": "3 AI artists post autonomously → 2 judges evaluate independently → x402 micropayments (0.009 ETH/decision)",
        "distribution": "Artist gets 95%, judge/platform 5%",
        "full_pipeline": "8-agent flow (intake → enrichment → upscaling → metadata → hash seal → archive → NFT mint → verify)",
        "verification": "C2PA certification, perceptual hash registry, Arweave permanent storage",
        "source": "codex-curator/golden-codex-kite-novel (Mar 2026)",
        "relevance_to_wavewarz": "Parallel-judge-with-different-rubrics pattern; reasoning visibility; x402 integration; battle result appeals (different judges = different outcomes possible)",
        "_source": "zabal-dispatch-wavewarz-20260523"
      }
    },
    {
      "id": "agentarena-task-bounty-auto-judge",
      "name": "AgentArena Task Bounty + Auto-Judge",
      "labels": [
        "Design Pattern"
      ],
      "attributes": {
        "what": "Task bounties with autonomous LLM judging and instant settlement",
        "blockchain": "X-Layer (OKX Layer 2), contract: 0x964441A7f7B7E74291C05e66cb98C462c4599381",
        "flow": "Task poster escrows OKB → AI agents compete → LLM judges on-chain → instant payout to winner",
        "reputation": "On-chain immutable (avgScore / attempted / completed / winRate)",
        "wallet": "OKX OnchainOS Agentic Wallet (TEE-secured self-custodial)",
        "roadmap": [
          "V2: parallel competitions",
          "V3: DeFi strategy auction + stake-weighted judges",
          "V4: reputation staking"
        ],
        "source": "DaviRain-Su/agent-arena (Mar 2026)",
        "relevance_to_wavewarz": "Immediate settlement pattern; reputation scoring for repeated judge agents; stakes-based judging (Respect-holders judge + earn from pool)",
        "_source": "zabal-dispatch-wavewarz-20260523"
      }
    },
    {
      "id": "x-spaces-broadcast-schedule",
      "name": "X Spaces Broadcast Schedule",
      "labels": [
        "Venue"
      ],
      "attributes": {
        "schedule": "Mon-Fri 8:30 PM EST",
        "format": "Live music battles, judge announcements, trader chat, community AMAs",
        "frequency": "11 shows per week",
        "community_presence": "Daily on X, no Discord/Telegram official channels found",
        "twitter_handle": "@WaveWarZ",
        "status": "Confirmed active as of May 2026",
        "_source": "zabal-dispatch-wavewarz-20260523"
      }
    },
    {
      "id": "zabal-games-doc-720",
      "name": "ZABAL Gamez Doc 720",
      "labels": [
        "Specification"
      ],
      "attributes": {
        "title": "WaveWarZ as the ZABAL Gamez Finals Voting Mechanism",
        "status": "Research-complete, decision locked",
        "option_selected": "Option B (Hybrid: WaveWarZ-Base market + Respect-holder baseline allocation)",
        "design_option_a": "Pure market (highest WaveWarZ alignment, lowest Respect weight)",
        "design_option_c": "Parallel signal (WaveWarZ viewer signal only, Respect 1p1v still decides)",
        "last_validated": "2026-05-23",
        "related_docs": [
          "701 (canonical state)",
          "711 (Arthur intro call)",
          "723 (agentic patterns)",
          "180 (integration blueprints)",
          "646 (Clanker promote mechanic)"
        ],
        "_source": "zabal-dispatch-wavewarz-20260523"
      }
    },
    {
      "id": "sam-arthur",
      "name": "Sam + Arthur",
      "labels": [
        "Builders"
      ],
      "attributes": {
        "role": "WaveWarZ-Base agentic build (smart contracts, security review, Base mainnet deployment)",
        "timeline": "June 2026 (contracts locked), July 2026 (mainnet deployment + smoke test), August 2026 (Finals production run)",
        "deliverables": [
          "2 Solidity contracts from testnet to audit-ready",
          "June workshop session (WaveWarZ-Base smart contracts)",
          "airdropPositions call + Respect snapshot mechanism"
        ],
        "payment_model": "x402 micropayments for judge-agent evaluations (Doc 723d)",
        "mentorship": "Arthur is also ZABAL Gamez mentor (locked per Doc 711)",
        "_source": "zabal-dispatch-wavewarz-20260523"
      }
    },
    {
      "id": "zabal-token",
      "name": "$ZABAL Token",
      "labels": [
        "Token"
      ],
      "attributes": {
        "contract": "0xbB48f19B0494Ff7C1fE5Dc2032aeEE14312f0b07",
        "chain": "Base",
        "decimals": 18,
        "maxSupply": "100000000000",
        "holders": 346,
        "launchMethod": "Clanker",
        "launchDate": "2026-01-01",
        "tier": "Ascended (on Empire Builder)",
        "_source": "zabal-dispatch-zabal-empire-20260523",
        "transfer": "Freely tradable (ERC-20)",
        "earning": "Raffle (10 random) + weighted (50-100 by leaderboard score) distributions",
        "distribution_frequency": "Monthly",
        "distribution_amount": "$10-15 USD per drop",
        "booster_integration": "Empire Builder (40+ ERC-20 + 1 QUOTIENT booster stacks)"
      }
    },
    {
      "id": "empire-builder-v3",
      "name": "Empire Builder V3",
      "labels": [
        "Platform"
      ],
      "attributes": {
        "url": "empirebuilder.world",
        "creator": "Jordan/yerbearzerker + Adrian (diviflyy)",
        "launchDate": "2026-05-01",
        "apiBase": "empirebuilder.world/api",
        "readAccess": "public",
        "writeAccess": "permissioned (API key required)",
        "_source": "zabal-dispatch-zabal-empire-20260523",
        "domain": "empirebuilder.world",
        "launch_date": "2026-05-01",
        "description": "Creator community-rewards and token utility platform built on Base and Arbitrum",
        "booster_types_supported": [
          "ERC20",
          "NFT",
          "QUOTIENT"
        ],
        "leaderboard_templates": [
          "tokenHolders",
          "NFTHolders",
          "social_engagement",
          "custom_csv",
          "api_imports"
        ],
        "api_base": "https://empirebuilder.world/api",
        "supported_boosters": [
          "ERC20",
          "NFT",
          "QUOTIENT"
        ],
        "zabal_empire": "0xe0faa499d6711870211505bd9ae2105206af1462",
        "leaderboard_template": "tokenHolders",
        "booster_stacking": "additive (e.g. 2x + 4x = 6x total)",
        "creators": [
          "Jordan (yerbearzerker)",
          "Adrian (diviflyy)"
        ],
        "basic_tier": {
          "leaderboards": 2,
          "boosters": 10,
          "cost": "Free"
        },
        "ascended_tier": {
          "leaderboards": 10,
          "boosters": 40,
          "cost": "Token launch (Clanker)"
        },
        "booster_multipliers": "1-5x per booster",
        "top_empire": "glonkybot (rank 9.34, 17-token stack at 5x each, $4061 distributed)"
      }
    },
    {
      "id": "basic-empire",
      "name": "Basic Empire",
      "labels": [
        "Tier"
      ],
      "attributes": {
        "leaderboards": 2,
        "boosters": 10,
        "rankedSpotsPerLeaderboard": 250,
        "cost": "Free",
        "useCase": "ZABAL Gamez July submissions, community onboarding",
        "_source": "zabal-dispatch-zabal-empire-20260523"
      }
    },
    {
      "id": "ascended-empire",
      "name": "Ascended Empire",
      "labels": [
        "Tier"
      ],
      "attributes": {
        "leaderboards": 10,
        "boosters": 40,
        "rankedSpotsPerLeaderboard": 500,
        "cost": "Token launch via Clanker",
        "unlockTrigger": "ERC-20 token deployment + Empire Builder UI wrap",
        "_source": "zabal-dispatch-zabal-empire-20260523"
      }
    },
    {
      "id": "zabal-empire-leaderboard-holders",
      "name": "ZABAL Empire Leaderboard - Holders",
      "labels": [
        "Leaderboard"
      ],
      "attributes": {
        "uuid": "a0f3b306-169b-4917-a1fa-5e3ea933fa71",
        "empireAddress": "0xe0faa499d6711870211505bd9ae2105206af1462",
        "type": "tokenHolders",
        "rankedSpots": 250,
        "topHolder": "ticweb3 (rank 1, 433M score)",
        "_source": "zabal-dispatch-zabal-empire-20260523"
      }
    },
    {
      "id": "zabal-empire-leaderboard-farcaster-only",
      "name": "ZABAL Empire Leaderboard - Farcaster-Only",
      "labels": [
        "Leaderboard"
      ],
      "attributes": {
        "uuid": "709d1f03",
        "empireAddress": "0xe0faa499d6711870211505bd9ae2105206af1462",
        "type": "farToken",
        "description": "ZABAL holders verified on Farcaster only",
        "_source": "zabal-dispatch-zabal-empire-20260523"
      }
    },
    {
      "id": "zabal-empire-leaderboard-zabal-voting-miniapp",
      "name": "ZABAL Empire Leaderboard - Zabal Voting Miniapp",
      "labels": [
        "Leaderboard"
      ],
      "attributes": {
        "uuid": "5501171d",
        "empireAddress": "0xe0faa499d6711870211505bd9ae2105206af1462",
        "type": "api",
        "description": "Custom API-fed leaderboard for voting participation",
        "_source": "zabal-dispatch-zabal-empire-20260523"
      }
    },
    {
      "id": "quotient-booster",
      "name": "Quotient Booster",
      "labels": [
        "Booster"
      ],
      "attributes": {
        "type": "QUOTIENT",
        "description": "Reputation booster likely tied to Quotient social-graph",
        "usedBy": "$ZABAL",
        "_source": "zabal-dispatch-zabal-empire-20260523",
        "booster_type": "QUOTIENT",
        "platform": "Empire Builder V3",
        "max_multiplier": "UNKNOWN",
        "qualification_metric": "quotientScore (0-1 scale)",
        "quality_threshold": "0.5 (below this, account quality drops significantly)",
        "status": "Active in Empire Builder",
        "uses_in_zabal": true
      }
    },
    {
      "id": "glonkybot-empire",
      "name": "glonkybot Empire",
      "labels": [
        "Empire"
      ],
      "attributes": {
        "symbol": "GLANKER",
        "owner": "diviflyy/Adrian",
        "rank": 9.34,
        "totalDistributed": "$4061 USD",
        "boosterCount": 17,
        "boosterTokens": "MYU, GMYerb, BB, MTDV, CLANKER, CLANKERMON, PUSH, DICKBUTT, RUNNER, PANGEA, ARTBABY, LUM, REAPS, SAUSAGE, SPARTAN, hmbt + 1 NFT",
        "boosterMultiplier": 5,
        "strategy": "Token-stack network effect",
        "_source": "zabal-dispatch-zabal-empire-20260523"
      }
    },
    {
      "id": "clanker-token",
      "name": "CLANKER Token",
      "labels": [
        "Token"
      ],
      "attributes": {
        "chain": "Base",
        "description": "Farcaster-native token launcher",
        "acquiredBy": "Farcaster (Q4 2025)",
        "feeModel": "0.2% WETH",
        "creatorFeeControl": "100% to creator wallet",
        "lpLockDuration": "Until 2100 (90 years)",
        "_source": "zabal-dispatch-zabal-empire-20260523"
      }
    },
    {
      "id": "sang-token",
      "name": "SANG Token",
      "labels": [
        "Token",
        "erc20_token"
      ],
      "attributes": {
        "description": "SongJam native token",
        "boosterUsage": "ZABAL booster (ERC20)",
        "_source": "zabal-dispatch-zabal-empire-20260523",
        "contract_address": "0x4ff4d349caa028bd069bbe85fa05253f96176741",
        "blockchain": "Base (bridged from Solana)",
        "native_blockchain_original": "Solana",
        "creator": "SongJam",
        "standard": "ERC-20",
        "utility": "staking for ZABAL Empire multiplier",
        "minimum_stake": "250000 SANG",
        "chain": "Base",
        "symbol": "SANG",
        "total_supply": "1,000,000,000",
        "decimals": 18,
        "circulating_supply": "830M+",
        "market_cap": "~12800 USD",
        "price_usd": "0.0000155",
        "primary_pair": "SANG/VIRTUAL on Uniswap V2",
        "source_protocol": "Songjam by Virtuals (voice verification network)",
        "liquidity": "Extremely thin",
        "distribution": "SongJam staking rewards, voice node infrastructure",
        "origin": "SongJam (music DAO)",
        "booster_usage": "$ZABAL Empire booster (ERC-20)",
        "integration": "Stacks on ZABAL leaderboards at multiplier UNKNOWN"
      }
    },
    {
      "id": "clanker-airdrop-csv-pattern",
      "name": "Clanker airdrop + CSV pattern",
      "labels": [
        "Pattern"
      ],
      "attributes": {
        "workflow": "Build leaderboard -> Export CSV of contributors -> Launch Clanker token -> Upload CSV to airdrop with vesting -> Token arrives as Ascended Empire",
        "useCase": "ZABAL Gamez finalists tokenizing their contribution lists",
        "_source": "zabal-dispatch-zabal-empire-20260523"
      }
    },
    {
      "id": "zabal-games-season-1",
      "name": "ZABAL Gamez Season 1",
      "labels": [
        "Event"
      ],
      "attributes": {
        "host": "Zaal (FID 19640)",
        "duration": "June (prep) + July (build) + August (Finals)",
        "phase1": "Open build-a-thon (July, ~30 submissions expected)",
        "phase2": "August Finals (8 mentors, 24h build + 24h promote + 24h vote)",
        "prizePool": "$500 USDC (1st $150, 2nd $100, 3rd $75, 4th-8th $35 ea)",
        "empireRequirement": "Every Phase 1 submission creates tokenless Basic Empire",
        "_source": "zabal-dispatch-zabal-empire-20260523",
        "description": "Farcaster builder onboarding event for ZAO ecosystem, 3-month hackathon-style",
        "phases": [
          "June workshops",
          "July build-a-thon",
          "August Finals"
        ],
        "finals_voting": "WaveWarZ Base prediction market settlement (wallets trade on finalist builds)",
        "voter_eligibility": "Respect-holders (pre-funded baseline positions)",
        "prize_pool": "$500 USDC + Hats Protocol role NFT per finisher",
        "empire_requirement": "Every Phase 1 submission creates tokenless Basic Empire (free)",
        "ascension_path": "Phase 2 finalists: launch Clanker token, airdrop to leaderboard CSV contributors, unlock Ascended Empire (40 boosters)"
      }
    },
    {
      "id": "apileaderboards",
      "name": "apiLeaderboards",
      "labels": [
        "APIPattern"
      ],
      "attributes": {
        "endpoint": "/api/leaderboards?tokenAddress=0xbB48f19B...",
        "responseType": "JSON array of leaderboard slot objects",
        "fields": "uuid, name, type (tokenHolders|farToken|api|null), rankedCount",
        "readAuth": "None (public)",
        "writeAuth": "Permissioned API key",
        "_source": "zabal-dispatch-zabal-empire-20260523"
      }
    },
    {
      "id": "bonfires-labs",
      "name": "Bonfires Labs",
      "labels": [
        "Company"
      ],
      "attributes": {
        "founder": "Joshua.eth",
        "github_org": "NERDDAO",
        "website": "https://bonfires.ai",
        "api_base": "https://tnt-v2.api.bonfires.ai",
        "dashboard": "https://app.bonfires.ai/dashboard",
        "stage": "Pre-Series A (SaaS + protocol)",
        "deployments_live": "35+ (as of 2026-05-21)",
        "_source": "zabal-dispatch-bonfire-revenue-20260523"
      }
    },
    {
      "id": "bonfire-knowledge-network",
      "name": "Bonfire Knowledge Network",
      "labels": [
        "Platform/Service"
      ],
      "attributes": {
        "description": "Federated multi-bonfire query network with cross-KG RAG",
        "monetization_model": "x402 micropayments per retrieval",
        "status": "LIVE (April 2026+)",
        "price_range": "$0.001 to $0.25 USDC per query",
        "settlement_chain": "Base L2",
        "settlement_time": "~1 second",
        "network_effect": "Each bonfire is a node; queries can traverse across bonfires",
        "_source": "zabal-dispatch-bonfire-revenue-20260523"
      }
    },
    {
      "id": "x402-payment-protocol",
      "name": "x402 Payment Protocol",
      "labels": [
        "Protocol"
      ],
      "attributes": {
        "creator": "Coinbase",
        "version": "2.0 (HTTP transport v2)",
        "specification": "HTTP 402 status code + standardized payment header flow",
        "status_code": "402 Payment Required",
        "payment_header": "PAYMENT-SIGNATURE (client) / PAYMENT-REQUIRED (server)",
        "settlement_header": "PAYMENT-RESPONSE",
        "supported_schemes": [
          "exact"
        ],
        "default_token": "USDC (EIP-3009 Transfer with Authorization)",
        "supported_networks": [
          "Base",
          "Optimism",
          "Ethereum",
          "Solana",
          "HyperEVM"
        ],
        "facilitators": [
          "Coinbase CDP",
          "Pinion",
          "Custom"
        ],
        "github_repo": "https://github.com/coinbase/x402",
        "protocol_fees": "$0 (zero protocol fees, only network gas)",
        "launch_date": "May 2025",
        "payments_processed_7mo": "100M+ payments, $24M volume",
        "_source": "zabal-dispatch-bonfire-revenue-20260523"
      }
    },
    {
      "id": "hyperblogs",
      "name": "HyperBlogs",
      "labels": [
        "Feature"
      ],
      "attributes": {
        "description": "AI-generated blog posts from knowledge graphs with x402 payment gating",
        "backend": "Graphiti (Neo4j-powered KG traversal)",
        "generation_method": "Hierarchical Task Network (HTN) + LLM synthesis",
        "payment_model": "x402 micropayments per blog mint",
        "mint_price": "0.25 USDC (ETHBoulder trial, 2026-02-28)",
        "url": "https://hyperblogs.bonfires.ai",
        "status": "LIVE (trialed at ETHBoulder 2026)",
        "content_pipeline": "KG node selection -> HTN structure -> Claude 3.5 Sonnet -> Markdown + metadata",
        "blockchain_verification": "x402 settlement on Base L2",
        "use_cases": [
          "Event documentation",
          "Knowledge monetization",
          "Content marketplace"
        ],
        "_source": "zabal-dispatch-bonfire-revenue-20260523"
      }
    },
    {
      "id": "know-token",
      "name": "$KNOW Token",
      "labels": [
        "Token"
      ],
      "attributes": {
        "token_name": "$KNOW",
        "layer": "Knowledge economy (network-level, not per-bonfire)",
        "pre_launch_allocation_method": "Genesis NFT mint ONLY (no other way pre-public-launch)",
        "public_launch_status": "UNKNOWN (not yet announced)",
        "supply_distribution": "UNKNOWN",
        "vesting_schedule": "UNKNOWN",
        "governance_model": "UNKNOWN (if any)",
        "liquidity_plan": "UNKNOWN",
        "earning_mechanics": "UNKNOWN - critical unknown: do contributors earn $KNOW by adding to bonfire or is allocation purely Genesis NFT?",
        "erc_8004_reputation_tracking": "Yes (agents get on-chain reputation scores, e.g., ZABAL agent = #32009)",
        "network_effect_hypothesis": "Cross-bonfire RAG queries rewarded in $KNOW, token becomes utility for accessing premium KG features",
        "_source": "zabal-dispatch-bonfire-revenue-20260523"
      }
    },
    {
      "id": "bonfire-genesis-nft",
      "name": "Bonfire Genesis NFT",
      "labels": [
        "NFT"
      ],
      "attributes": {
        "mint_price": "0.1 ETH per bonfire",
        "mint_url": "https://mint.bonfires.ai",
        "unlock": "Sole way to receive $KNOW token allocation pre-public-launch",
        "blockchain": "Base",
        "quantity": "Unlimited (no supply cap disclosed)",
        "buyer_profile": "Communities, DAOs, projects wanting bonfire + $KNOW allocation",
        "example_holder": "The ZAO (ZABAL bonfire minted ~2026-05-15)",
        "secondary_market": "None (allocation locked to minter, NFT itself not traded)",
        "_source": "zabal-dispatch-bonfire-revenue-20260523"
      }
    },
    {
      "id": "zabal-bonfire",
      "name": "ZABAL Bonfire",
      "labels": [
        "Knowledge Graph Instance"
      ],
      "attributes": {
        "owner": "BCZ Strategies (on behalf of The ZAO ecosystem)",
        "graph_size": "~780 episodes + 31 brands indexed",
        "ingestion_sources": [
          "Telegram (primary)",
          "Audio transcripts",
          "Documents (PDF/Markdown)",
          "Links"
        ],
        "extraction_cadence": "Automated every 20 minutes via LLM",
        "vector_db": "Weaviate (Bonfire-hosted SaaS)",
        "graph_backend": "Neo4j via Graphiti",
        "agents_deployed": [
          "@bonfires Telegram agent",
          "ZOE bot (Phase 1+)",
          "Hermes Coder (Phase 2+)"
        ],
        "monetization_phase": "Phase 1: Memory layer only (no x402 revenue)",
        "future_phases": [
          "Phase 2: bonfire-search.zaoos.com public interface",
          "Phase 3: Multi-bonfire federation + earning mechanics"
        ],
        "public_url": "https://zabal.bonfires.ai (slug to be customized)",
        "_source": "zabal-dispatch-bonfire-revenue-20260523"
      }
    },
    {
      "id": "nerddao-ecosystem",
      "name": "NERDDAO Ecosystem",
      "labels": [
        "GitHub Organization"
      ],
      "attributes": {
        "github_org": "https://github.com/NERDDAO",
        "active_repos": "15+",
        "core_sdk": "bonfires-sdk (Python, pip install bonfires, canon branch)",
        "web_app": "bonfires-webapp (2.3 MB TypeScript, app.bonfires.ai dashboard)",
        "dev_tools": "bonfire-tools (ingest.py, memory-explorer.html, pulse.html, server.py proxy)",
        "integrations": [
          "bonfire-fetch (ASI:One uAgents)",
          "obsidian-kengram (Obsidian export), scaffold-x402-bonfires"
        ],
        "demos": [
          "bonfire-rpg (P2P shared-world game)",
          "memento-mori (MUD with 42 AI agents)",
          "santa-bonfire (seasonal)"
        ],
        "external_customers": [
          "MesoReefDAO/pepo-the-polyp (coral reef AI guide)"
        ],
        "_source": "zabal-dispatch-bonfire-revenue-20260523"
      }
    },
    {
      "id": "kengram",
      "name": "kEngram",
      "labels": [
        "Data Structure"
      ],
      "attributes": {
        "definition": "Verifiable knowledge subgraphs with content-addressed hashing (SHA-256) + merkle roots",
        "types": [
          "session (bounded to conversation/event)",
          "topic (accrues over time)"
        ],
        "storage_format": "Canvas (Obsidian-compatible), OWL (ontology), Markdown (portable)",
        "lifecycle_commands": [
          "bonfire kengram new",
          "bonfire kengram use",
          "bonfire kengram pin",
          "bonfire kengram edge",
          "bonfire kengram batch (automation path)",
          "bonfire kengram export"
        ],
        "export_safety": "Exports to Canvas/OWL/Markdown prevent vendor lock-in",
        "merkle_integrity": "Each kEngram has content-addressed hash + merkle proof",
        "_source": "zabal-dispatch-bonfire-revenue-20260523"
      }
    },
    {
      "id": "ethboulder-boulder-bonfire",
      "name": "ETHBoulder Boulder Bonfire",
      "labels": [
        "Deployment (Reference)"
      ],
      "attributes": {
        "event": "ETHBoulder 2026 (Feb 13-15)",
        "participants": "200+ attendees, 150+ contributors",
        "graph_size": "88,000 nodes / 7 days",
        "ingestion_sources": [
          "Telegram (primary)",
          "Audio transcripts",
          "Twitter search",
          "Link fetcher",
          "Document uploads"
        ],
        "schema": "7D framework (Ecology, Humans, Language, Artifacts, Methodology, Training, Sessions)",
        "access_pattern": "Telegram DMs + group chat + graph.bonfires.ai web explorer",
        "outcome": "Permanent queryable artifact; HyperBlogs minted at 0.25 USDC/mint",
        "lessons": [
          "Low-friction Telegram > signup friction",
          "Real-time ingestion > post-event backfill",
          "Agentic extraction > manual curation",
          "Graph stays live post-event for permanent discovery"
        ],
        "writeup": "https://paragraph.com/@joshuab/ethboulder-lets-make-sense",
        "_source": "zabal-dispatch-bonfire-revenue-20260523"
      }
    },
    {
      "id": "sanctuary-co-living-bonfire-trial",
      "name": "Sanctuary Co-Living Bonfire Trial",
      "labels": [
        "Deployment (Reference)"
      ],
      "attributes": {
        "location": "Noto, Sicily",
        "duration": "11 days (July 23 - Aug 3, 2025)",
        "participants": "5 residents + Josh (founder)",
        "agent_name": "Andrej 3000 (personality-driven)",
        "findings_summary": "Mixed success. Bonfire useful but manual facilitation outperformed at small scale (<10 people)",
        "friction_points": [
          "Onboarding UX unclear",
          "Value prop not obvious at 5-person scale",
          "Personality can't overcome clunky UI"
        ],
        "what_worked": [
          "Privacy transparency + consent → instant trust",
          "Voice transcription well-received",
          "Group reflection sessions useful",
          "Data depersonalization not a concern"
        ],
        "post_trial_improvements": [
          "Upgraded to Claude Sonnet",
          "Improved agent decision-making",
          "Dynamic label management",
          "User-facing agent overview UI",
          "Automated reminders"
        ],
        "_source": "zabal-dispatch-bonfire-revenue-20260523"
      }
    },
    {
      "id": "bonfire-agent-system",
      "name": "Bonfire Agent System",
      "labels": [
        "Software Component"
      ],
      "attributes": {
        "unit": "Persona (LLM-backed, multiple agents per bonfire)",
        "creation": "UI at app.bonfires.ai/dashboard (post-2026-05)",
        "tagging": "@agentname on Telegram/Discord",
        "knowledge_graph_modes": [
          "adaptive (LLM decides if KG query needed)",
          "static (no graph)",
          "regenerate (fresh KG)",
          "append (add to existing)"
        ],
        "semantic_search": "SDK client.agents.chat() with graph_mode parameter",
        "mcp_integration": "Claude Desktop + Cursor (config pattern published; install not yet public)",
        "context_retrieval": "Combines KG results + vector search + recent conversation context",
        "personality_system": "Configurable traits + voice, but only valuable with frictionless UX",
        "_source": "zabal-dispatch-bonfire-revenue-20260523"
      }
    },
    {
      "id": "bcz-strategies",
      "name": "BCZ Strategies",
      "labels": [
        "Organization"
      ],
      "attributes": {
        "entity": "LLC (DBA ZABAL ecosystem brand)",
        "relationship_to_bonfire": "Genesis NFT holder for ZABAL bonfire (0.1 ETH cost)",
        "known_revenue_from_bonfire": "$0 (allocation only, earning mechanics unknown)",
        "use_case": "Internal knowledge graph + ZOE agent memory + onboarding support",
        "speculative_upside": "$KNOW token allocation (amount unknown, value TBD)",
        "_source": "zabal-dispatch-bonfire-revenue-20260523"
      }
    },
    {
      "id": "graphiti-backend",
      "name": "Graphiti Backend",
      "labels": [
        "Technology"
      ],
      "attributes": {
        "database": "Neo4j (graph database)",
        "purpose": "Structured knowledge graph storage + traversal for KGs and HyperBlogs",
        "operation": "Owned by Bonfire Labs (SaaS), not self-hostable by customers",
        "data_format": "Nodes (entities) + edges (relationships) with metadata + timestamps",
        "query_pattern": "Semantic search + graph traversal + entity relationship extraction",
        "_source": "zabal-dispatch-bonfire-revenue-20260523"
      }
    },
    {
      "id": "weaviate-vector-db",
      "name": "Weaviate Vector DB",
      "labels": [
        "Technology"
      ],
      "attributes": {
        "purpose": "Semantic embeddings of KG chunks + labels for vector search",
        "operation": "Bonfire-hosted SaaS (customer data lives with Bonfire)",
        "retrieval": "Semantic similarity search (find content meaning-similar to query)",
        "integration": "Ingested content chunked -> summarized -> labeled -> embedded",
        "vendor_risk": "SaaS-only, no self-host option; kEngram export + local Obsidian vault mitigate",
        "_source": "zabal-dispatch-bonfire-revenue-20260523"
      }
    },
    {
      "id": "coinflow-isv",
      "name": "Coinflow ISV",
      "labels": [
        "Platform Tier"
      ],
      "attributes": {
        "tier_name": "Launchpad ISV Program",
        "setup_cost": "$0",
        "audience": "Integrated Software Vendors, 20-1000 submerchants",
        "pricing_model": "Interchange-plus (custom MSA)",
        "benefits": [
          "$0 setup",
          "interchange-plus pricing",
          "instant settlement",
          "named engineer support",
          "automated KYC/KYB",
          "payment splitting",
          "co-marketing",
          "no equity"
        ],
        "application_status": "ZAO submitted April 2026",
        "kEngram": "coinflow-isv",
        "_source": "zabal-dispatch-coinflow-20260523"
      }
    },
    {
      "id": "coinflow-checkout",
      "name": "Coinflow Checkout",
      "labels": [
        "Payment Gateway"
      ],
      "attributes": {
        "payment_methods": [
          "card",
          "ACH",
          "Apple Pay",
          "Google Pay",
          "PIX",
          "SEPA",
          "crypto"
        ],
        "settlement_types": [
          "wallet",
          "contract",
          "credits",
          "bank"
        ],
        "rate_limit_checkout_attempts": "5 per 10 minutes",
        "supported_countries": "170+",
        "_source": "zabal-dispatch-coinflow-20260523"
      }
    },
    {
      "id": "coinflow-payouts",
      "name": "Coinflow Payouts",
      "labels": [
        "Disbursement Service"
      ],
      "attributes": {
        "use_case": "Crypto-to-fiat payouts, prize distributions, creator withdrawals",
        "settlement_destinations": [
          "bank (US/EU/UK)",
          "Solana wallet (USDC)"
        ],
        "supported_networks": [
          "US RTP",
          "European SEPA",
          "UK Faster Payments",
          "Solana"
        ],
        "kyc_requirement": "All users KYC before first payout",
        "_source": "zabal-dispatch-coinflow-20260523"
      }
    },
    {
      "id": "solana",
      "name": "Solana",
      "labels": [
        "Blockchain"
      ],
      "attributes": {
        "settlement_currency": "USDC",
        "gas_fees": "Coinflow covers 100%",
        "use_case": "WaveWarZ prediction markets, fast finality",
        "chainName": "Solana",
        "_source": "zabal-dispatch-coinflow-20260523"
      }
    },
    {
      "id": "base",
      "name": "Base",
      "labels": [
        "Blockchain"
      ],
      "attributes": {
        "settlement_currency": "USDC",
        "supported_tokens": [
          "ETH",
          "AERO",
          "cbBTC",
          "EURC",
          "GTT",
          "DEGEN",
          "HIGHER",
          "MOXIE",
          "BUILD"
        ],
        "use_case": "ZAO OS memberships, music tips, ZABAL token purchases",
        "chainName": "Base",
        "_source": "zabal-dispatch-coinflow-20260523",
        "layer": "Ethereum L2",
        "zao_contracts": "ZOUNZ DAO, Zora 1155 editions, 0xSplits addresses",
        "native_asset": "ETH",
        "stablecoin": "USDC (for USDC payouts via split swapper)",
        "split_deployment": "all creator fund splits deployed here"
      }
    },
    {
      "id": "coinflow-marketplace",
      "name": "Coinflow Marketplace",
      "labels": [
        "Architecture Pattern"
      ],
      "attributes": {
        "participants": [
          "marketplace (ISV)",
          "sellers",
          "end-users",
          "Coinflow"
        ],
        "seller_onboarding": "KYC/KYB via Persona, auto-verification 30sec",
        "seller_dashboard": "View purchases, withdraw earnings, sales reports",
        "payout_speeds": [
          "instant",
          "same-day",
          "standard"
        ],
        "applicable_to": [
          "COC Concertz",
          "FISHBOWLZ",
          "ZAO Music"
        ],
        "fund_distribution": "Automatic split at transaction time",
        "_source": "zabal-dispatch-coinflow-20260523"
      }
    },
    {
      "id": "zabal-games",
      "name": "ZABAL Gamez",
      "labels": [
        "Application",
        "event"
      ],
      "attributes": {
        "payment_flow": "Prize payouts via Coinflow Payouts API",
        "settlement_method": "Crypto-to-fiat (USDC to bank)",
        "conversion_destination": "USD/EUR/GBP bank deposits",
        "isa_submerchant": true,
        "_source": "zabal-dispatch-coinflow-20260523",
        "timeline": "June prep / July submissions / August finals (2026)",
        "integration": "Empire Builder as submission home for all participants",
        "songjam_requirement": "migrate leaderboard to Empire Builder by June 1 2026"
      }
    },
    {
      "id": "wavewarz",
      "name": "WaveWarZ",
      "labels": [
        "Application"
      ],
      "attributes": {
        "parent_entity": "ZAO OS",
        "merchant_id": "wavestation",
        "blockchain": "Solana",
        "settlement_currency": "USDC",
        "isa_submerchant": true,
        "use_cases": [
          "battle entry fees (credits)",
          "artist tips (wallet)",
          "merch/digital goods"
        ],
        "_source": "zabal-dispatch-coinflow-20260523"
      }
    },
    {
      "id": "zao-os",
      "name": "ZAO OS",
      "labels": [
        "Platform"
      ],
      "attributes": {
        "role": "ISV parent",
        "blockchain": "Base",
        "settlement_currency": "USDC",
        "use_cases": [
          "membership NFT mints",
          "ZAO Stock tickets",
          "music tips",
          "ZABAL token purchases"
        ],
        "submerchants": [
          "WaveWarZ",
          "COC Concertz",
          "FISHBOWLZ"
        ],
        "_source": "zabal-dispatch-coinflow-20260523"
      }
    },
    {
      "id": "coinflow-webhooks",
      "name": "Coinflow Webhooks",
      "labels": [
        "Integration Pattern"
      ],
      "attributes": {
        "event_count": "24+ event types",
        "delivery_model": "At-least-once, retry 36 hours",
        "response_timeout": "5 seconds",
        "deduplication": "Required (idempotency by transaction ID)",
        "event_categories": [
          "Purchase",
          "Subscription",
          "KYC",
          "Withdraw",
          "Marketplace"
        ],
        "key_events": [
          "Settled",
          "Card Payment Authorized",
          "Card Payment Declined",
          "Card Payment Suspected Fraud",
          "ACH Initiated",
          "ACH Batched",
          "ACH Returned",
          "ACH Failed",
          "Subscription Created",
          "Subscription Canceled",
          "Subscription Expired",
          "Card Payment Chargeback Opened",
          "Card Payment Chargeback Won",
          "Card Payment Chargeback Lost",
          "USDC Payment Received",
          "Crypto Overpayment",
          "Crypto Underpayment"
        ],
        "_source": "zabal-dispatch-coinflow-20260523"
      }
    },
    {
      "id": "coinflow-kyc-kyb",
      "name": "Coinflow KYC/KYB",
      "labels": [
        "Compliance Service"
      ],
      "attributes": {
        "kyc_vendor": "Persona",
        "kyc_turnaround_us": "Under 10 seconds (database check)",
        "kyb_turnaround": "30 seconds automatic, 24 hours manual",
        "kyb_approval_rate": "90% first attempt",
        "supported_methods": [
          "Persona (prebuilt)",
          "KYC attestation (reliance)",
          "Sumsub token sharing",
          "external KYC data pass-through"
        ],
        "documentation": "ID upload for international, instant for US",
        "_source": "zabal-dispatch-coinflow-20260523"
      }
    },
    {
      "id": "coinflow-smart-payment-orchestration",
      "name": "Coinflow Smart Payment Orchestration",
      "labels": [
        "Technology"
      ],
      "attributes": {
        "processors_per_transaction": "2.3 average",
        "failover": "Automatic",
        "cost_reduction": "Up to 6 bps",
        "fraud_routing": "Routes around risky processors",
        "_source": "zabal-dispatch-coinflow-20260523"
      }
    },
    {
      "id": "coinflow-series-a",
      "name": "Coinflow Series A",
      "labels": [
        "Funding Round"
      ],
      "attributes": {
        "amount": "$25M",
        "date": "October 2025",
        "lead_investor": "Pantera Capital",
        "other_investors": [
          "Coinbase Ventures",
          "CMT Digital",
          "Jump Capital"
        ],
        "total_funding": "$53.7M",
        "previous_rounds": [
          "Seed $2.2M (May 2024)",
          "Pre-Seed $1.4M (April 2023)"
        ],
        "_source": "zabal-dispatch-coinflow-20260523"
      }
    },
    {
      "id": "coinflow-pricing-model",
      "name": "Coinflow Pricing Model",
      "labels": [
        "Economics"
      ],
      "attributes": {
        "setup_fee": "$0 (ISV)",
        "platform_fee": "$0 (ISV)",
        "pricing_structure": "Custom MSA, not published",
        "industry_benchmark": "2.5-3.5% for card-to-stablecoin",
        "solana_gas": "Coinflow covers 100%",
        "other_chain_gas": "Negotiable in MSA",
        "payout_rail_fees": "Varies (ACH per-tx, flat negotiable)",
        "_source": "zabal-dispatch-coinflow-20260523"
      }
    },
    {
      "id": "fishbowlz",
      "name": "FISHBOWLZ",
      "labels": [
        "Product"
      ],
      "attributes": {
        "status": "paused 2026-04-16 for Juke partnership",
        "launch_date": "2026-04-04",
        "pause_date": "2026-04-16",
        "original_stack": "Next.js + Privy wallet + 100ms (HMS) WebRTC",
        "original_repo": "/Users/zaalpanthaki/Documents/fishbowlz/",
        "core_feature": "persistent async audio rooms + fishbowl rotation format + agent participation",
        "token": "FISHBOWLZ (Clanker, 2026-04-04)",
        "format_novel": "mute-lockout moderation - audience speaker auto-demoted on self-mute, must re-raise hand",
        "reason_for_pause": "strategic pivot to Juke's superior native audio + Farcaster integration vs rebuilding custom",
        "_source": "zabal-dispatch-fishbowlz-juke-20260523"
      }
    },
    {
      "id": "juke",
      "name": "Juke",
      "labels": [
        "Product"
      ],
      "attributes": {
        "builder": "Nicky Sap (@nickysap on Farcaster)",
        "announcement_date": "2026-03-27 (Substack: Farcaster Was 'Dead,' So I Started Building)",
        "build_time": "3 days",
        "build_method": "10 parallel AI agents, 800-line SPEC.md",
        "platform": "iOS-native, TestFlight beta open, Android coming soon, web secondary",
        "transport": "LiveKit (open-source WebRTC SFU, vendor-lock-in avoided)",
        "auth": "Sign In With Farcaster (SIWF / SIWN, EIP-4361-based, phishing-resistant QR)",
        "chat": "Farcaster reply-tree (host's space-announcement cast -> reply tree is chat, ephemeral Neynar webhook, zero chat DB, cross-client visible, permanent on-graph artifact)",
        "roles": "listener, speaker, co-host, host (role-based permission model, host-promotion required for speaking)",
        "token": "none (no token, nickysap stated explicitly)",
        "monetization_plan": "charge hosts for premium (scheduled spaces, custom links, analytics, recordings/replays, clipping); core stays free",
        "open_source_status": "maybe (nickysap: codebase + SPEC.md could be open-source 'if there's demand')",
        "native_constraint": "iOS kills background WebRTC within seconds without AVAudioSession + UIBackgroundModes:audio; PWA cannot do this; strong audio experience requires native",
        "web_sdk": "yes - @juke/audio-sdk + iframe embed for listen-in / lobby, not for sustained speaking",
        "api_surface": "12 SDK methods, 5 public endpoints, 10 developer endpoints (POST /v1/developer/spaces), no webhooks, no demote endpoint, no recording control",
        "_source": "zabal-dispatch-fishbowlz-juke-20260523"
      }
    },
    {
      "id": "nicky-sap-nickysap",
      "name": "Nicky Sap (@nickysap)",
      "labels": [
        "Person"
      ],
      "attributes": {
        "role": "founder of Juke",
        "platform": "Farcaster, Substack",
        "build_approach": "agentic (10 parallel agents executing SPEC.md), ship-fast (3 days to TestFlight)",
        "engagement": "open to partnerships (Zaal already hosts spaces on Juke, confirmed by @farcaster cast 2026-04-24), responsive to feature requests, considering open-source (PR-dependent)",
        "_source": "zabal-dispatch-fishbowlz-juke-20260523"
      }
    },
    {
      "id": "zaal-zaal-on-farcaster",
      "name": "Zaal (@zaal on Farcaster)",
      "labels": [
        "Person"
      ],
      "attributes": {
        "role": "founder of ZAO, FISHBOWLZ pioneer, early Juke host",
        "decisions": "paused FISHBOWLZ Apr 16 to pivot to Juke, leading the Juke integration (Path A iframe, Path B space creation), pursuing flagship-community positioning",
        "status": "negotiating with nickysap on 7 open questions (demote endpoint, webhooks, token lifetime, co-host cap, pricing, recording API, agent surface) before Phase 2 of FISHBOWLZ revival on Juke",
        "_source": "zabal-dispatch-fishbowlz-juke-20260523"
      }
    },
    {
      "id": "fishbowlz-legacy-code-zaoos-copy",
      "name": "FISHBOWLZ Legacy Code (ZAOOS Copy)",
      "labels": [
        "Codebase"
      ],
      "attributes": {
        "path": "bettercallzaal/zaoos - src/app/fishbowlz/, src/app/api/fishbowlz/, src/components/fishbowlz/",
        "files": 22,
        "composition": "4 pages (list, detail, loading, opengraph) + 13 API routes (gate, recap, transcripts, chat, sessions, users, rooms, export, events, invites, transcribe, privy-webhook, room-detail) + 5 components (Reactions, OnboardingModal, RoomCardSkeleton, EmptyState, TipButton)",
        "status": "stale, marked for deletion (doc 661h audit + doc 662 decision)",
        "reason": "original design (custom audio + Privy + HMS + custom transcripts) not compatible with new Juke-based direction",
        "action": "delete in follow-up PR after Juke direction locks (git tag pre-fishbowlz-removal-2026-05-XX for archive)",
        "_source": "zabal-dispatch-fishbowlz-juke-20260523"
      }
    },
    {
      "id": "fishbowlz-standalone-repo",
      "name": "FISHBOWLZ Standalone Repo",
      "labels": [
        "Codebase"
      ],
      "attributes": {
        "path": "/Users/zaalpanthaki/Documents/fishbowlz/",
        "status": "active, source of truth for FISHBOWLZ",
        "last_activity": "2026-05-23 (commit 614bca5 - restore features lost by sync overwrite)",
        "recent_fixes": "HMS component speaker pruning, layout stability, auth consistency, reconnection loops",
        "features_to_preserve": "anonymous listen mode, room filters (All/Live/Scheduled/Ended/Gated), gating UI (open/farcaster/invite-only/token-gate), reconnection handler",
        "note": "do NOT sync ZAOOS -> standalone; standalone is canonical; understand Juke pivot before cherry-picking old features",
        "_source": "zabal-dispatch-fishbowlz-juke-20260523"
      }
    },
    {
      "id": "juke-integration-path-a-iframe-embed",
      "name": "Juke Integration Path A (iframe embed)",
      "labels": [
        "Feature"
      ],
      "attributes": {
        "status": "shipped, QA'd on production",
        "effort": "2/10",
        "what": "keyless iframe (https://juke.audio/embed/{spaceId}) embedded in ZAO OS miniapp, handles room metadata, anonymous listening, SIWF sign-in, reactions, hand-raise, mic control, LiveKit connection",
        "files": "src/lib/spaces/juke.ts, src/components/spaces/JukeEmbed.tsx, src/app/live/[spaceId]/page.tsx",
        "home": "ZAO OS Farcaster miniapp (Quick Auth works in miniapp context)",
        "branding": "must honor 'Powered by Juke' attribution; ZAO gold accent (#f5a623) acceptable (Juke requires attribution, not exact palette match)",
        "_source": "zabal-dispatch-fishbowlz-juke-20260523"
      }
    },
    {
      "id": "juke-integration-path-b-server-side-space-creation",
      "name": "Juke Integration Path B (server-side space creation)",
      "labels": [
        "Feature"
      ],
      "attributes": {
        "status": "built (PR #608, #613), waiting for credentials (JUKE_API_KEY, JUKE_USER_TOKEN)",
        "effort": "4/10",
        "what": "POST /v1/developer/spaces endpoint, server-side admin/password auth, mints branded spaces for recurring events (ZAOstock standups, fractal calls, COC Concertz)",
        "files": "src/lib/spaces/juke-api.ts (the ONE Juke client), src/app/api/juke/space/route.ts (the ONE route), src/app/live/create/page.tsx (web creator), scripts/test-juke-space.ts (smoke test)",
        "next_iteration": "add juke_spaces Supabase table (persistence, listing, idempotency key, audit trail)",
        "bot_integration": "ZAOcowork bot (ZAODEVZ/ZAOcowork PR #3) POSTs /api/juke/space via JUKE_CREATE_PASSWORD; use crypto.timingSafeEqual for constant-time comparison",
        "token_risk": "JUKE_USER_TOKEN TTL unknown; if long-lived (30+ days) keep as env var; if short-lived (hours) add juke_credentials table + on-demand refresh with 30s expiry buffer + 401-retry-once logic",
        "_source": "zabal-dispatch-fishbowlz-juke-20260523"
      }
    },
    {
      "id": "juke-integration-path-c-fishbowlz-sdk-custom-ui",
      "name": "Juke Integration Path C (FISHBOWLZ SDK + custom UI)",
      "labels": [
        "Feature"
      ],
      "attributes": {
        "status": "re-scoped pending native-vs-web caveat validation",
        "effort": "8/10",
        "what": "@juke/audio-sdk + custom Next.js client UI, enforces mute-lockout moderation rule (audience speaker auto-demoted on self-mute, must re-raise hand)",
        "blocker": "Juke's web SDK loses background audio on iOS screen-lock (same problem nickysap built native to escape); a web FISHBOWLZ with sustained mobile speakers will drop audio. Not a moderation problem, a platform problem.",
        "re-scope_options": "(1) FISHBOWLZ as room format/template inside Juke's native app (Juke owns native, ZAO owns format + moderation rules), (2) FISHBOWLZ web accepts web tier is listen+lobby, speaking is in Juke native app, (3) FISHBOWLZ stays on ZAO's existing Stream/100ms stack + Juke for discovery",
        "decision_pending": "awaiting discussion with nickysap re: demote endpoint, webhooks, token model",
        "_source": "zabal-dispatch-fishbowlz-juke-20260523"
      }
    },
    {
      "id": "juke-integration-path-d-fip-2-chat-pattern",
      "name": "Juke Integration Path D (FIP-2 chat pattern)",
      "labels": [
        "Feature"
      ],
      "attributes": {
        "status": "independent, no Juke dependency, deferred to doc 695 workstream",
        "what": "adopt Juke's chat pattern into ZAO OS Spaces: host's space-announcement cast -> reply tree fed by ephemeral Neynar webhook -> zero chat DB, zero WebSocket text server, cross-client visible, permanent on-graph artifact",
        "effort": "3/10",
        "why": "Juke's idea is architecture win; ZAO already runs Neynar; kill ZAO's existing Spaces chat DB and refactor to Farcaster-native reply tree",
        "_source": "zabal-dispatch-fishbowlz-juke-20260523"
      }
    },
    {
      "id": "zao-as-juke-flagship-community",
      "name": "ZAO as Juke Flagship Community",
      "labels": [
        "Partnership"
      ],
      "attributes": {
        "status": "live (Zaal already hosts on Juke, confirmed by @farcaster cast 2026-04-24)",
        "recorded_space": "zaal x nickysap x rish (referenced at https://x.com/nicky_sap/status/2047770959403516069 - audio artifact, not transcribed)",
        "leverage": "co-marketing, roadmap input, early access if Juke open-sources SPEC.md + codebase",
        "actions": "DM nickysap with doc 695 + 662 + 710; raise 7 open questions; apply for developer access; maintain relationship",
        "_source": "zabal-dispatch-fishbowlz-juke-20260523"
      }
    },
    {
      "id": "the-mute-lockout-moderation-rule",
      "name": "The Mute-Lockout Moderation Rule",
      "labels": [
        "Feature/Decision"
      ],
      "attributes": {
        "novel": "only audio platform with this pattern (Clubhouse, X Spaces, Discord Stage, Telegram Voice all keep speaker role after self-mute; FISHBOWLZ auto-demotes)",
        "rule": "4+ permanent co-hosts have mic always (toggle freely); audience listeners raise hand, co-host picks, listener gets speaker token. Instant self-mute -> auto-downgrade to listener. To speak again, must re-raise + re-pick.",
        "benefits": "no mic hogging (re-entry costs hand-raise + approval), punchier contributions (one-shot incentive), equity (FIFO hand-raise queue), clear co-host signal (always-on, always-decide), low moderation cost (self-mute = natural exit)",
        "costs": "back-and-forth conversation gets clunky, accidental mutes are punishing (UX: confirmation modal?), no safety valve for 5-second think (can add 'Pause' button distinct from 'Mute'?), co-host coordination burden (show recent-speaker history?)",
        "implementation_dependency": "requires Juke to expose server-side demote endpoint or token-reissue mechanism; client-side enforcement alone is bypassable; doc 662 has 7 open Qs for nickysap",
        "_source": "zabal-dispatch-fishbowlz-juke-20260523"
      }
    },
    {
      "id": "juke-api-gaps-blockers-for-fishbowlz-zao-integration",
      "name": "Juke API Gaps (Blockers for FISHBOWLZ + ZAO Integration)",
      "labels": [
        "Technical-Gap"
      ],
      "attributes": {
        "no_webhooks": "Juke's developer API documents zero webhooks. LiveKit underneath has room_finished + 11 others; Juke has not exposed them. Impact: ZAO can only poll GET /v1/rooms/{id} to detect space end. No lifecycle events. Mitigated at ZAO's volume (3-5 spaces/week).",
        "no_demote_endpoint": "No explicit 'demote speaker to listener' endpoint. Options: (1) ask Juke to expose demote, (2) token-reissue (issue new 'listener' token to current speaker), (3) room-rejoin (leave + rejoin as listener). Doc 662 Q1 pending with nickysap.",
        "no_recording_control": "room.recording is host-side toggle, exposed read-only. No developer API to start/stop recording. Impact: host must toggle in Juke iOS app; ZAO can only read status. No auto-record pipeline possible.",
        "no_agent_surface": "Agent access explicitly 'separate future surface' per Juke docs. allow_agents flag is forward-declaration for unreleased feature. Do not build ZOE-in-Juke yet.",
        "scheduled_space_behavior_undocumented": "scheduled_at accepts future ISO timestamp, but pre-start join behavior + metadata visibility not documented. Blocker for recurring-event cron.",
        "no_recording_replay_clip_api": "Recording/replays/clipping listed as planned host-premium features, not developer-API features.",
        "token_ttl_unknown": "JUKE_USER_TOKEN lifetime not documented. Determines refresh strategy (env var if long-lived, Supabase table + on-demand refresh if short-lived).",
        "_source": "zabal-dispatch-fishbowlz-juke-20260523"
      }
    },
    {
      "id": "the-pause-decision-2026-04-16",
      "name": "The Pause Decision (2026-04-16)",
      "labels": [
        "Decision"
      ],
      "attributes": {
        "what_paused": "FISHBOWLZ development on the Privy + 100ms custom stack",
        "why": "Strategic pivot opportunity: Juke solved 80% of FISHBOWLZ's hard problems (native audio, Farcaster auth, role-based speaking model, LiveKit SFU) in 3 days with 10 AI agents. FISHBOWLZ was rebuilding all of that custom. Partnership beats rebuild.",
        "what_continued": "research, architecture design (mute-lockout model, Path A/B/C/D integration paths), standalone repo stabilization and feature preservation",
        "impact": "ZAOOS FISHBOWLZ code marked for deletion; standalone repo is canonical; Juke becomes the audio platform; FISHBOWLZ becomes either a room format inside Juke native OR a thin web/embed surface on Juke's SDK",
        "lessons": "native audio is hard (iOS background audio requires AVAudioSession + UIBackgroundModes, PWA can't do it); Farcaster-native partnerships > custom auth; infrastructure partnerships at ZAO's scale trade custom code for leverage",
        "_source": "zabal-dispatch-fishbowlz-juke-20260523"
      }
    },
    {
      "id": "quotient",
      "name": "Quotient",
      "labels": [
        "Platform",
        "reputation_system",
        "ReputationSystem"
      ],
      "attributes": {
        "description": "Farcaster-native reputation system measuring social graph quality and engagement momentum",
        "category": "social-reputation",
        "api_host": "api.quotient.social",
        "product_version": "0.1-beta",
        "algorithm": "PageRank-variant optimized for Farcaster",
        "score_range": "0.0-1.0",
        "algorithm_details": "Weights recent interactions heavily, ignores follower counts to prevent spam/sybil advantages, focuses on genuine engagement patterns",
        "_source": "zabal-dispatch-quotient-20260523",
        "domain": "getquotient.ai",
        "primary_network": "Farcaster",
        "focus": "allowlists, leaderboards, rewards",
        "protocol": "Farcaster",
        "booster_integration": "native to Empire Builder V3"
      }
    },
    {
      "id": "quotient-score",
      "name": "Quotient Score",
      "labels": [
        "Metric"
      ],
      "attributes": {
        "description": "Normalized reputation score measuring Farcaster user quality and engagement momentum",
        "scale": "0.0-1.0",
        "data_sources": [
          "incoming_engagement",
          "recast_interactions",
          "reply_quality",
          "mention_interactions"
        ],
        "excludes": [
          "follower_count",
          "bot_followers"
        ],
        "computation_method": "PageRank-variant with recency weighting",
        "contextLabels": [
          "Top Trader",
          "Top Builder/Dev",
          "Top Clanker Ecosystem Evangelist"
        ],
        "_source": "zabal-dispatch-quotient-20260523"
      }
    },
    {
      "id": "talent-protocol",
      "name": "Talent Protocol",
      "labels": [
        "Platform",
        "ReputationSystem",
        "reputation_system"
      ],
      "attributes": {
        "description": "Builder reputation and ranking system using verified onchain data",
        "ecosystem": "crypto-builders",
        "data_points": [
          "github_contributions",
          "onchain_transactions",
          "hackathon_participation",
          "farcaster_activity"
        ],
        "builder_rank": "relative ranking of builders based on verified activity",
        "api_host": "api.talentprotocol.com",
        "integration_notes": "Parallel reputation system to Quotient, focuses on builder activity rather than general engagement",
        "_source": "zabal-dispatch-quotient-20260523",
        "accounts_indexed": 11000000,
        "score_name": "Builder Score",
        "credential_categories": {
          "Identity": {
            "max_points": 20
          },
          "Activity": {
            "max_points": 40
          },
          "Skills": {
            "max_points": "uncapped"
          }
        },
        "api_integration": "credits-based",
        "notable_integrations": [
          "Etherscan",
          "Basenames"
        ],
        "domain": "talentprotocol.com",
        "founded": "2023",
        "focus": "on-chain builder reputation",
        "primary_network": "Ethereum, Celo, Base",
        "builder_score_range": "0-100",
        "credential_weights": {
          "Identity": 20,
          "Activity": 40,
          "Skills": "uncapped"
        },
        "builder_focus": "cryptographic activity and credential stacking"
      }
    },
    {
      "id": "zaostock-2026",
      "name": "ZAOstock 2026",
      "labels": [
        "Event"
      ],
      "attributes": {
        "date": "2026-10-03",
        "venue": "Franklin Street Parklet, Ellsworth ME",
        "time": "12:00pm - 6:00pm",
        "year": "Year 1",
        "artists_count": "10",
        "expected_attendance": "200-400 in-person, 1000+ livestream",
        "budget_range": "$5,000 - $25,000",
        "status": "Scheduled",
        "_source": "zabal-dispatch-zaostock-sponsor-20260523"
      }
    },
    {
      "id": "wallace-events",
      "name": "Wallace Events",
      "labels": [
        "Sponsor"
      ],
      "attributes": {
        "tier": "Confirmed Anchor",
        "role": "Equipment rental (tents, AV, stage setup)",
        "cost_category": "Venue/Equipment",
        "status": "Committed",
        "region": "Maine",
        "_source": "zabal-dispatch-zaostock-sponsor-20260523"
      }
    },
    {
      "id": "limone-sponsor",
      "name": "Limone (Sponsor)",
      "labels": [
        "Sponsor"
      ],
      "attributes": {
        "tier": "Medium",
        "commitment": "$1,000",
        "status": "Pledged - Payment Pending",
        "region": "Maine",
        "payment_status": "Not yet received as of 2026-05-19",
        "_source": "zabal-dispatch-zaostock-sponsor-20260523"
      }
    },
    {
      "id": "bangor-savings-bank",
      "name": "Bangor Savings Bank",
      "labels": [
        "Prospect Sponsor"
      ],
      "attributes": {
        "tier": "Likely Small/Medium ($5K target)",
        "type": "Local Maine Institution",
        "decision_maker": "VP Marketing (enrichment pending)",
        "track": "Local Maine SMB",
        "icp_fit": "HIGH",
        "outreach_strategy": "Community visibility + local artist support alignment",
        "_source": "zabal-dispatch-zaostock-sponsor-20260523"
      }
    },
    {
      "id": "candy-candytoybox",
      "name": "Candy (candytoybox)",
      "labels": [
        "Person"
      ],
      "attributes": {
        "role": "ZAOstock 2nd Lead",
        "team_position": "Design/Branding",
        "responsibility": "Co-sponsor outreach, brand kit direction, visual identity",
        "_source": "zabal-dispatch-zaostock-sponsor-20260523"
      }
    },
    {
      "id": "failoften",
      "name": "failoften",
      "labels": [
        "Person"
      ],
      "attributes": {
        "role": "Ops Advisor to Zaal",
        "team_position": "Advisory",
        "responsibility": "Operations guidance, sponsorship tier formalization, documentation standards",
        "_source": "zabal-dispatch-zaostock-sponsor-20260523"
      }
    },
    {
      "id": "tyler-stambaugh",
      "name": "Tyler Stambaugh",
      "labels": [
        "Person"
      ],
      "attributes": {
        "role": "Magnetiq Content Portal Founder",
        "team_position": "Advisory",
        "responsibility": "Road to ZAOstock content campaign (12 weekly drops), sponsor feature integration",
        "_source": "zabal-dispatch-zaostock-sponsor-20260523"
      }
    },
    {
      "id": "steve-peer",
      "name": "Steve Peer",
      "labels": [
        "Person"
      ],
      "attributes": {
        "role": "Sponsor Rolodex / Connector",
        "team_position": "Advisory",
        "responsibility": "Introducing local/regional sponsors via personal network",
        "_source": "zabal-dispatch-zaostock-sponsor-20260523"
      }
    },
    {
      "id": "roddy-parklet",
      "name": "Roddy Parklet",
      "labels": [
        "Person"
      ],
      "attributes": {
        "role": "Venue Liaison",
        "team_position": "Operations",
        "responsibility": "Coordination with Franklin Street Parklet + Parks & Rec, paperwork logistics",
        "_source": "zabal-dispatch-zaostock-sponsor-20260523"
      }
    },
    {
      "id": "art-of-ellsworth-committee",
      "name": "Art of Ellsworth Committee",
      "labels": [
        "Organization"
      ],
      "attributes": {
        "role": "Co-Programming Partner",
        "status": "Confirmed",
        "relationship": "ZAOstock is add-on to 9th Annual Art of Ellsworth festival",
        "benefit": "Access to statewide Maine Craft Weekend audience (10-week concert series baseline)",
        "_source": "zabal-dispatch-zaostock-sponsor-20260523"
      }
    },
    {
      "id": "black-moon-public-house",
      "name": "Black Moon Public House",
      "labels": [
        "Venue"
      ],
      "attributes": {
        "role": "After-Party Host",
        "location": "Ellsworth ME",
        "status": "Planned",
        "_source": "zabal-dispatch-zaostock-sponsor-20260523"
      }
    },
    {
      "id": "franklin-street-parklet",
      "name": "Franklin Street Parklet",
      "labels": [
        "Venue"
      ],
      "attributes": {
        "location": "Ellsworth, Maine",
        "status": "Verbally confirmed, paperwork pending",
        "cost": "Under $1,000 (likely under $500)",
        "includes": "Venue + stage + tent rental",
        "_source": "zabal-dispatch-zaostock-sponsor-20260523"
      }
    },
    {
      "id": "sponsor-tier-structure",
      "name": "Sponsor Tier Structure",
      "labels": [
        "Framework"
      ],
      "attributes": {
        "tier_1_name": "Small Sponsor",
        "tier_1_range": "Under $1,000",
        "tier_1_target": "Local Ellsworth/Maine businesses",
        "tier_2_name": "Medium Sponsor",
        "tier_2_range": "$1,000 - $5,000",
        "tier_2_target": "Maine/Regional brands",
        "tier_3_name": "Large / Presenting Sponsor",
        "tier_3_range": "$5,000+",
        "tier_3_target": "Regional/National brands + music tech companies",
        "status": "Finalized via email pitch drafts",
        "_source": "zabal-dispatch-zaostock-sponsor-20260523"
      }
    },
    {
      "id": "wavewarz-music-battle",
      "name": "WaveWarZ Music Battle",
      "labels": [
        "Festival Feature"
      ],
      "attributes": {
        "role": "Live audience-voted music competition",
        "web3_integration": "On-chain voting via QR code, direct artist payouts in SOL",
        "historical_data": "795 battles hosted, 435 SOL ($37K+) trading volume",
        "sponsor_integration": "Large sponsors get logo on voting interface visible to all attendees",
        "_source": "zabal-dispatch-zaostock-sponsor-20260523"
      }
    },
    {
      "id": "the-zao-community",
      "name": "The ZAO Community",
      "labels": [
        "Community"
      ],
      "attributes": {
        "size": "188+ members",
        "reach": "Farcaster + X + daily newsletter (400+ editions)",
        "governance": "90+ consecutive weekly sessions",
        "asset": "Sponsor visibility to engaged musicians/artists/creators",
        "_source": "zabal-dispatch-zaostock-sponsor-20260523"
      }
    },
    {
      "id": "finance-team-zaostock",
      "name": "Finance Team (ZAOstock)",
      "labels": [
        "Team"
      ],
      "attributes": {
        "members": [
          "Tyler Stambaugh",
          "Ohnahji B",
          "DFresh",
          "Craig G",
          "Maceo"
        ],
        "responsibility": "Sponsor tracking spreadsheet, payment follow-up, finders fee structure (20% total: 10% finders + 10% stewardship)",
        "_source": "zabal-dispatch-zaostock-sponsor-20260523"
      }
    },
    {
      "id": "sponsor-pipeline-crm",
      "name": "Sponsor Pipeline (CRM)",
      "labels": [
        "System"
      ],
      "attributes": {
        "tool": "SponsorCRM MVP at /stock/team",
        "features": "Kanban board, contact log, activity trail",
        "pipeline_stages": [
          "lead",
          "contacted",
          "in_talks",
          "committed",
          "paid",
          "declined"
        ],
        "tracks": [
          "local",
          "virtual",
          "ecosystem"
        ],
        "target_leads": "15-20 potential sponsors",
        "automation": "Clay.com enrichment (decision-makers), Claude API email drafting, webhook logging",
        "_source": "zabal-dispatch-zaostock-sponsor-20260523"
      }
    },
    {
      "id": "sisla-flickstopfun",
      "name": "Sisla (FlickstopFun)",
      "labels": [
        "Person"
      ],
      "attributes": {
        "role": "Token Launchpad Facilitator",
        "connection": "Introduced to Zaal for ZAOstock token potential",
        "timing": "Decision deferred to post-August 2026",
        "_source": "zabal-dispatch-zaostock-sponsor-20260523"
      }
    },
    {
      "id": "sponsor-to-livestream-integration",
      "name": "Sponsor-to-Livestream Integration",
      "labels": [
        "Framework"
      ],
      "attributes": {
        "all_tiers": "Logo on livestream overlay + full event visibility to online community",
        "large_tier": "Logo on WaveWarZ voting interface (highest touchpoint)",
        "_source": "zabal-dispatch-zaostock-sponsor-20260523"
      }
    },
    {
      "id": "zoe-bot",
      "name": "ZOE Bot",
      "labels": [
        "Agent",
        "agent",
        "ai-agent"
      ],
      "attributes": {
        "transport": "Telegram",
        "handle": "@zaoclaw_bot",
        "model": "Sonnet/Opus/Haiku (selected per message)",
        "framework": "grammy",
        "runtime": "Hermes canonical",
        "auth": "Max plan OAuth",
        "github_source": "bot/src/zoe/",
        "status": "production",
        "_source": "zabal-dispatch-zoe-telegram-20260523",
        "role": "Personal concierge running on @zaoclaw_bot Telegram",
        "message_type_tip": "'TIP' messages = Task Insight Prompts (hourly nudges from scheduler)",
        "tip_not_token": "ZOE TIP is NOT a token, it is a forward nudge on open task queue",
        "tip_format": "[ZOE TIP] <task_priority> <task_title>",
        "scheduler_frequency": "Hourly (rotates through open task queue)",
        "ledger_tracked": "Local task.json + nudge-pointer.txt",
        "confusion_risk": "High - 'TIP' terminology overloaded (Task Insight Prompt vs token)",
        "context_source": "Bonfire knowledge graph",
        "tasks": "Content drafting, social posting, event follow-up automation (thank-yous, ZOL logging)",
        "relevant_for_zol": "Auto-generates personalized volunteer thank-you emails with ZOL logging instructions"
      }
    },
    {
      "id": "zoe-skill-start",
      "name": "ZOE Skill: /start",
      "labels": [
        "Command"
      ],
      "attributes": {
        "handler": "bot/src/zoe/index.ts:156",
        "gating": "Zaal-only",
        "effect": "confirm identity, report memory loaded",
        "_source": "zabal-dispatch-zoe-telegram-20260523"
      }
    },
    {
      "id": "zoe-skill-tasks",
      "name": "ZOE Skill: /tasks",
      "labels": [
        "Command"
      ],
      "attributes": {
        "handler": "bot/src/zoe/index.ts:163",
        "gating": "Zaal-only",
        "effect": "list open tasks from ~/.zao/zoe/tasks.json",
        "reads": [
          "tasks memory"
        ],
        "_source": "zabal-dispatch-zoe-telegram-20260523"
      }
    },
    {
      "id": "zoe-skill-seed",
      "name": "ZOE Skill: /seed",
      "labels": [
        "Command"
      ],
      "attributes": {
        "handler": "bot/src/zoe/index.ts:169",
        "gating": "Zaal-only",
        "effect": "re-seed 8 starter tasks from doc 601 if queue empty",
        "_source": "zabal-dispatch-zoe-telegram-20260523"
      }
    },
    {
      "id": "zoe-skill-quest",
      "name": "ZOE Skill: /quest",
      "labels": [
        "Command"
      ],
      "attributes": {
        "handler": "bot/src/zoe/index.ts:179",
        "gating": "Zaal-only",
        "effect": "show active side quests",
        "_source": "zabal-dispatch-zoe-telegram-20260523"
      }
    },
    {
      "id": "zoe-skill-quests",
      "name": "ZOE Skill: /quests",
      "labels": [
        "Command"
      ],
      "attributes": {
        "handler": "bot/src/zoe/index.ts:185",
        "gating": "Zaal-only",
        "effect": "list formatted quest pool",
        "_source": "zabal-dispatch-zoe-telegram-20260523"
      }
    },
    {
      "id": "zoe-skill-voicememo",
      "name": "ZOE Skill: /voicememo",
      "labels": [
        "Command"
      ],
      "attributes": {
        "handler": "bot/src/zoe/posts/voicememo.ts",
        "aliases": [
          "/vm"
        ],
        "effect": "capture voice memo for post drafter",
        "writes": [
          "~/.zao/zoe/voice-memos/YYYY-MM-DD.md"
        ],
        "_source": "zabal-dispatch-zoe-telegram-20260523"
      }
    },
    {
      "id": "zoe-skill-zg-group-admin",
      "name": "ZOE Skill: /zg (group admin)",
      "labels": [
        "Command"
      ],
      "attributes": {
        "handler": "bot/src/zoe/index.ts:235",
        "gating": "Zaal-only",
        "subcommands": [
          "status",
          "enable",
          "mode",
          "add",
          "remove",
          "list"
        ],
        "effect": "manage per-group ZOE membership + routing mode (silent/mention/all)",
        "_source": "zabal-dispatch-zoe-telegram-20260523"
      }
    },
    {
      "id": "zoe-skill-note-prefix",
      "name": "ZOE Skill: note: prefix",
      "labels": [
        "Command"
      ],
      "attributes": {
        "handler": "bot/src/zoe/index.ts:422",
        "aliases": [
          "cc:",
          "claude:"
        ],
        "effect": "capture feedback for next Claude Code session",
        "writes": [
          "~/.zao/zoe/claude-code-notes.md"
        ],
        "_source": "zabal-dispatch-zoe-telegram-20260523"
      }
    },
    {
      "id": "zoe-skill-free-form-concierge",
      "name": "ZOE Skill: free-form concierge",
      "labels": [
        "Handler"
      ],
      "attributes": {
        "handler": "bot/src/zoe/concierge.ts:runConciergeTurn",
        "effect": "route user message through 4-block memory (persona/human/working/tasks) to Claude, auto-escalate Haiku/Sonnet/Opus based on message content",
        "reads": [
          "persona.md",
          "human.md",
          "recent.json",
          "tasks.json",
          "quests"
        ],
        "_source": "zabal-dispatch-zoe-telegram-20260523"
      }
    },
    {
      "id": "zoe-skill-morning-brief",
      "name": "ZOE Skill: morning brief",
      "labels": [
        "Cron"
      ],
      "attributes": {
        "schedule": "0 9 UTC daily (5am EST)",
        "handler": "bot/src/zoe/brief.ts",
        "effect": "fetch 24h commits + PRs + top 5 tasks, send 6-line summary",
        "idempotent": "sentinel flag ~/.zao/zoe/sentinels/morning-brief-YYYY-MM-DD.flag",
        "_source": "zabal-dispatch-zoe-telegram-20260523"
      }
    },
    {
      "id": "zoe-skill-evening-reflection",
      "name": "ZOE Skill: evening reflection",
      "labels": [
        "Cron"
      ],
      "attributes": {
        "schedule": "0 1 UTC daily (9pm EST)",
        "handler": "bot/src/zoe/reflect.ts",
        "effect": "3 questions (shipped/stuck/tomorrow) + captures block for Bonfire review",
        "idempotent": "sentinel flag ~/.zao/zoe/sentinels/evening-reflect-YYYY-MM-DD.flag",
        "_source": "zabal-dispatch-zoe-telegram-20260523"
      }
    },
    {
      "id": "zoe-skill-hourly-nudge",
      "name": "ZOE Skill: hourly nudge",
      "labels": [
        "Cron"
      ],
      "attributes": {
        "schedule": "0 * UTC hourly (skip 9,1)",
        "handler": "bot/src/zoe/nudges.ts:nextNudge",
        "effect": "surface real next task from queue, skip empty queue",
        "togglable": "start/stop nudges / start/stop tips",
        "_source": "zabal-dispatch-zoe-telegram-20260523"
      }
    },
    {
      "id": "zoe-skill-post-slate-v2",
      "name": "ZOE Skill: post slate v2",
      "labels": [
        "Cron"
      ],
      "attributes": {
        "schedule": "random 7x daily",
        "handler": "bot/src/zoe/posts/scheduler.ts",
        "effect": "draft social posts (personal/build/ecosystem/event), send with APPROVE/REGEN/SKIP buttons",
        "_source": "zabal-dispatch-zoe-telegram-20260523"
      }
    },
    {
      "id": "zoe-skill-bonfire-recall",
      "name": "ZOE Skill: Bonfire recall",
      "labels": [
        "Handler"
      ],
      "attributes": {
        "handler": "bot/src/zoe/recall.ts:recall",
        "effect": "vector search ZABAL knowledge graph for facts, fallback to manual relay @zabal_bonfire DM",
        "env": [
          "BONFIRE_API_KEY",
          "BONFIRE_ID"
        ],
        "api": "POST /vector_store/search",
        "_source": "zabal-dispatch-zoe-telegram-20260523"
      }
    },
    {
      "id": "zoe-skill-bonfire-remember",
      "name": "ZOE Skill: Bonfire remember",
      "labels": [
        "Handler"
      ],
      "attributes": {
        "handler": "bot/src/zoe/recall.ts:remember",
        "effect": "write captures/tasks/quests to Bonfire as episodes, auto-extract to knowledge graph",
        "env": [
          "BONFIRE_API_KEY",
          "BONFIRE_ID"
        ],
        "api": "POST /knowledge_graph/episode/create",
        "secret_scan": "blocks sk-*/ghp_/PEM keys/eth addresses",
        "_source": "zabal-dispatch-zoe-telegram-20260523"
      }
    },
    {
      "id": "zoe-skill-turn-mirroring",
      "name": "ZOE Skill: turn mirroring",
      "labels": [
        "Handler"
      ],
      "attributes": {
        "handler": "bot/src/zoe/recall.ts:mirrorTurn",
        "effect": "fire-and-forget mirror captures/task_ops/quest_ops into Bonfire as episodes",
        "best_effort": true,
        "_source": "zabal-dispatch-zoe-telegram-20260523"
      }
    },
    {
      "id": "zoe-skill-post-callback",
      "name": "ZOE Skill: post callback",
      "labels": [
        "Handler"
      ],
      "attributes": {
        "handler": "bot/src/zoe/posts/buttons.ts:handlePostCallback",
        "regex": "/^post-(approve|regen|skip):/",
        "effect": "handle APPROVE/REGEN/SKIP buttons on draft messages",
        "_source": "zabal-dispatch-zoe-telegram-20260523"
      }
    },
    {
      "id": "zoe-skill-nudge-callback",
      "name": "ZOE Skill: nudge callback",
      "labels": [
        "Handler"
      ],
      "attributes": {
        "handler": "bot/src/zoe/index.ts:560",
        "regex": "/^nudge:(now|later|shelve)$/",
        "effect": "mark nudge dismissed",
        "_source": "zabal-dispatch-zoe-telegram-20260523"
      }
    },
    {
      "id": "zoe-memory-persona-md",
      "name": "ZOE Memory: persona.md",
      "labels": [
        "Memory"
      ],
      "attributes": {
        "path": "~/.zao/zoe/persona.md",
        "source": "bot/src/zoe/memory.ts PERSONA_DEFAULT",
        "content": "Year-of-the-ZABAL voice rules: clear/spartan/active, no emojis/em-dashes, short default 2-3 sentences, lead with outcome",
        "gating": "versioned in repo, copied on first boot",
        "_source": "zabal-dispatch-zoe-telegram-20260523"
      }
    },
    {
      "id": "zoe-memory-human-md",
      "name": "ZOE Memory: human.md",
      "labels": [
        "Memory"
      ],
      "attributes": {
        "path": "~/.zao/zoe/human.md",
        "content": "Zaal facts (ENS, schedule, projects, relationships)",
        "refresh": "daily",
        "_source": "zabal-dispatch-zoe-telegram-20260523"
      }
    },
    {
      "id": "zoe-memory-recent-json",
      "name": "ZOE Memory: recent.json",
      "labels": [
        "Memory"
      ],
      "attributes": {
        "path": "~/.zao/zoe/recent/<chat_id>.json",
        "content": "last N turns per chat, FIFO ring buffer max 8",
        "refresh": "every concierge turn",
        "_source": "zabal-dispatch-zoe-telegram-20260523"
      }
    },
    {
      "id": "zoe-memory-tasks-json",
      "name": "ZOE Memory: tasks.json",
      "labels": [
        "Memory"
      ],
      "attributes": {
        "path": "~/.zao/zoe/tasks.json",
        "content": "open task queue (ZoeTask[])",
        "schema": "id/title/description/status/priority/source/blocked_by/notes/created_at/updated_at",
        "updated_by": [
          "/tasks command",
          "/seed command",
          "concierge task_ops"
        ],
        "_source": "zabal-dispatch-zoe-telegram-20260523"
      }
    },
    {
      "id": "zoe-memory-quests",
      "name": "ZOE Memory: quests",
      "labels": [
        "Memory"
      ],
      "attributes": {
        "path": "~/.zao/zoe/sidequests.json",
        "content": "main quest + active/parked side quests",
        "schema": "id/title/description/alignment(0-10)/status/pinned/created_at/updated_at/scored_at",
        "_source": "zabal-dispatch-zoe-telegram-20260523"
      }
    },
    {
      "id": "zoe-memory-captures-md",
      "name": "ZOE Memory: captures.md",
      "labels": [
        "Memory"
      ],
      "attributes": {
        "path": "~/.zao/zoe/captures/<YYYY-MM-DD>.json",
        "content": "meeting/voice/dm captures for Bonfire review",
        "refresh": "evening reflection",
        "_source": "zabal-dispatch-zoe-telegram-20260523"
      }
    },
    {
      "id": "bonfire-knowledge-graph",
      "name": "Bonfire Knowledge Graph",
      "labels": [
        "ExternalService"
      ],
      "attributes": {
        "transport": "REST API",
        "endpoint": "https://tnt-v2.api.bonfires.ai",
        "auth": "Bearer BONFIRE_API_KEY",
        "read_endpoint": "/vector_store/search",
        "write_endpoint": "/knowledge_graph/episode/create",
        "_source": "zabal-dispatch-zoe-telegram-20260523"
      }
    },
    {
      "id": "supabase",
      "name": "Supabase",
      "labels": [
        "ExternalService"
      ],
      "attributes": {
        "role": "persistent state for groups/tasks (future expansion)",
        "auth": "service-role key server-side only",
        "_source": "zabal-dispatch-zoe-telegram-20260523"
      }
    },
    {
      "id": "claude-cli-subprocess",
      "name": "Claude CLI subprocess",
      "labels": [
        "ExternalService"
      ],
      "attributes": {
        "handler": "bot/src/hermes/claude-cli.ts:callClaudeCli",
        "auth": "Max plan OAuth via Zaal account",
        "models": [
          "claude-3-5-sonnet-20241022",
          "claude-3-5-opus-20250514",
          "claude-3-5-haiku-20241022"
        ],
        "_source": "zabal-dispatch-zoe-telegram-20260523"
      }
    },
    {
      "id": "hats-protocol-core",
      "name": "Hats Protocol V1 Core",
      "labels": [
        "smart_contract_protocol"
      ],
      "attributes": {
        "standard": "ERC-1155",
        "organizational_model": "Hat trees with admin and accountability relationships",
        "core_concepts": [
          "top-hat",
          "child-hats",
          "admin-rights",
          "eligibility-modules",
          "toggle-modules"
        ],
        "deployed_chains": "Ethereum mainnet and EVM L2s",
        "_source": "zabal-dispatch-hats-protocol-tooling-and-sdk-20260524"
      }
    },
    {
      "id": "sdk-v1-core-npm",
      "name": "@hatsprotocol/sdk-v1-core",
      "labels": [
        "npm_package"
      ],
      "attributes": {
        "current_version": "0.12.4",
        "main_exports": [
          "index.js",
          "index.mjs"
        ],
        "typescript_support": true,
        "peer_dependencies": [
          "viem@^2.0.0",
          "graphql@^16.6.0",
          "graphql-request@^6.1.0"
        ],
        "_source": "zabal-dispatch-hats-protocol-tooling-and-sdk-20260524"
      }
    },
    {
      "id": "hats-modules-sdk",
      "name": "@hatsprotocol/modules-sdk",
      "labels": [
        "npm_package"
      ],
      "attributes": {
        "purpose": "Deploy and configure module instances from registry",
        "initialization": "HatsModulesClient init with publicClient and walletClient",
        "registry_fetch": "prepare() method must be called before use",
        "peer_dependency": "viem",
        "_source": "zabal-dispatch-hats-protocol-tooling-and-sdk-20260524"
      }
    },
    {
      "id": "hats-app",
      "name": "Hats App UI (app.hatsprotocol.xyz)",
      "labels": [
        "web_ui"
      ],
      "attributes": {
        "features": [
          "tree-visualization",
          "hat-creation",
          "module-deployment",
          "claiming-interface",
          "admin-management"
        ],
        "backend": "GraphQL subgraph queries",
        "module_registry_integration": true,
        "_source": "zabal-dispatch-hats-protocol-tooling-and-sdk-20260524"
      }
    },
    {
      "id": "hats-modules-registry",
      "name": "Hats Modules Registry",
      "labels": [
        "curated_registry"
      ],
      "attributes": {
        "location": "GitHub repo (community PR submissions)",
        "curation_status": "core-team-managed, roadmap-to-decentralize",
        "registry_types": [
          "eligibility_modules",
          "toggle_modules",
          "hatter_modules"
        ],
        "current_count": "15+ production modules",
        "_source": "zabal-dispatch-hats-protocol-tooling-and-sdk-20260524"
      }
    },
    {
      "id": "hats-eligibility-modules",
      "name": "Eligibility Modules (Mechanistic + Humanistic)",
      "labels": [
        "module_category"
      ],
      "attributes": {
        "mechanistic": "IHatsEligibility interface (pull-based, instant revocation via balanceOf hook)",
        "humanistic": "EOA/multisig/governance (push-based, call ruleOHatWearerStanding)",
        "concepts": [
          "wearer-eligibility",
          "wearer-standing",
          "bad-standing-revocation"
        ],
        "example_modules": [
          "Agreement Eligibility",
          "ERC20 Balance",
          "Staking",
          "Election Winner"
        ],
        "_source": "zabal-dispatch-hats-protocol-tooling-and-sdk-20260524"
      }
    },
    {
      "id": "hats-toggle-modules",
      "name": "Toggle Modules (Mechanistic + Humanistic)",
      "labels": [
        "module_category"
      ],
      "attributes": {
        "mechanistic": "IHatsToggle interface (pull-based, instant deactivation via checkToggle)",
        "humanistic": "EOA/multisig/governance (push-based, call toggleHatStatus)",
        "use_cases": [
          "time-based-expiry",
          "conditional-deactivation",
          "temporary-permission-gates"
        ],
        "distinction": "toggles affect hat active status for all wearers, not individual eligibility",
        "_source": "zabal-dispatch-hats-protocol-tooling-and-sdk-20260524"
      }
    },
    {
      "id": "hats-module-chains",
      "name": "Module Chain Composition (HatsEligibilitiesChain, HatsTogglesChain)",
      "labels": [
        "smart_contract_module"
      ],
      "attributes": {
        "logic_support": "AND/OR combinations",
        "format": "disjunction of conjunction clauses, e.g. '(mod1 && mod2) || mod3'",
        "example_methods": [
          "createEligibilitiesChain()",
          "createTogglesChain()",
          "getRulesets()",
          "isChain()"
        ],
        "immutable_args": [
          "NUM_CONJUNCTION_CLAUSES",
          "CONJUNCTION_CLAUSE_LENGTHS",
          "MODULES"
        ],
        "_source": "zabal-dispatch-hats-protocol-tooling-and-sdk-20260524"
      }
    },
    {
      "id": "hats-subgraph-sdk",
      "name": "@hatsprotocol/subgraph-sdk",
      "labels": [
        "npm_package"
      ],
      "attributes": {
        "purpose": "Query Hats Protocol data from GraphQL subgraph",
        "integration": "Viem public client based",
        "use_cases": [
          "read_tree_state",
          "fetch_hat_metadata",
          "query_wearers",
          "track_permissions"
        ],
        "_source": "zabal-dispatch-hats-protocol-tooling-and-sdk-20260524"
      }
    },
    {
      "id": "zao-governance-tree-treeid-226",
      "name": "ZAO Governance Tree (treeId 226)",
      "labels": [
        "HatTree"
      ],
      "attributes": {
        "treeId": 226,
        "chain": "Optimism",
        "contract_address": "0x3bc1A0Ad72417f2d411118085256fC53CBdDd137",
        "depth": 4,
        "total_hats": 19,
        "max_tree_depth": 15,
        "max_hats_per_level": 65536,
        "_source": "zabal-dispatch-hats-protocol-tree-architecture-20260524"
      }
    },
    {
      "id": "zao-top-hat",
      "name": "ZAO Top Hat",
      "labels": [
        "Hat"
      ],
      "attributes": {
        "hat_id_hex": "0x000000e2000000000000000000000000000000000000000000000000000000",
        "hat_id_shorthand": "226",
        "level": 0,
        "supply": "1/1",
        "admin": "self",
        "mutable": false,
        "minting_authority": "self-administered",
        "children_count": 2,
        "_source": "zabal-dispatch-hats-protocol-tree-architecture-20260524"
      }
    },
    {
      "id": "configurator-hat",
      "name": "Configurator Hat",
      "labels": [
        "Hat"
      ],
      "attributes": {
        "hat_id_hex": "0x000000e2000100000000000000000000000000000000000000000000000000",
        "hat_id_shorthand": "226.1",
        "level": 1,
        "supply": "2/5",
        "admin_hat": "ZAO Top Hat",
        "mutable": true,
        "role_description": "Primary tree administrators, can mint child hats and manage governance roles",
        "children_count": 2,
        "_source": "zabal-dispatch-hats-protocol-tree-architecture-20260524"
      }
    },
    {
      "id": "governance-council-hat",
      "name": "Governance Council Hat",
      "labels": [
        "Hat"
      ],
      "attributes": {
        "hat_id_hex": "0x000000e2000100010000000000000000000000000000000000000000000000",
        "hat_id_shorthand": "226.1.1",
        "level": 2,
        "supply": "0/1",
        "admin_hat": "Configurator Hat",
        "mutable": true,
        "role_description": "Reserved governance coordination role (currently unpopulated)",
        "children_count": 17,
        "_source": "zabal-dispatch-hats-protocol-tree-architecture-20260524"
      }
    },
    {
      "id": "governance-council-members-hat",
      "name": "Governance Council Members Hat",
      "labels": [
        "Hat"
      ],
      "attributes": {
        "hat_id_hex": "0x000000e2000100020000000000000000000000000000000000000000000000",
        "hat_id_shorthand": "226.1.2",
        "level": 2,
        "supply": "3/5",
        "admin_hat": "Configurator Hat",
        "mutable": true,
        "role_description": "Active governance council members with voting authority",
        "children_count": 0,
        "_source": "zabal-dispatch-hats-protocol-tree-architecture-20260524"
      }
    },
    {
      "id": "community-hat",
      "name": "Community Hat",
      "labels": [
        "Hat"
      ],
      "attributes": {
        "hat_id_hex": "0x000000e200010001000100000000000000000000000000000000000000000000",
        "hat_id_shorthand": "226.1.1.1",
        "level": 3,
        "supply": "0/1",
        "admin_hat": "Governance Council Hat",
        "mutable": true,
        "role_description": "Community task force lead",
        "children_count": 0,
        "_source": "zabal-dispatch-hats-protocol-tree-architecture-20260524"
      }
    },
    {
      "id": "coc-concertz-hat",
      "name": "COC Concertz Hat",
      "labels": [
        "Hat"
      ],
      "attributes": {
        "hat_id_hex": "0x000000e200010001000d00000000000000000000000000000000000000000000",
        "hat_id_shorthand": "226.1.1.13",
        "level": 3,
        "supply": "1/1",
        "admin_hat": "Governance Council Hat",
        "mutable": true,
        "role_description": "COC Concertz project lead (only fully assigned project hat)",
        "children_count": 0,
        "_source": "zabal-dispatch-hats-protocol-tree-architecture-20260524"
      }
    },
    {
      "id": "hatsclient-sdk",
      "name": "HatsClient SDK",
      "labels": [
        "Software"
      ],
      "attributes": {
        "package": "@hatsprotocol/sdk-v1-core",
        "language": "TypeScript",
        "license": "MIT",
        "built_on": "viem",
        "key_methods": [
          "isWearerOfHat",
          "viewHat",
          "getWornHats",
          "mintHat",
          "createHat",
          "transferHat"
        ],
        "chains_supported": 8,
        "_source": "zabal-dispatch-hats-protocol-tree-architecture-20260524"
      }
    },
    {
      "id": "hat-id-bitmap-encoding",
      "name": "Hat ID Bitmap Encoding",
      "labels": [
        "DataStructure"
      ],
      "attributes": {
        "size_bits": 256,
        "structure": "top-hat-domain (4 bytes) + 14 x level (16 bits each)",
        "tree_id_bits": 32,
        "max_depth_levels": 14,
        "bits_per_level": 16,
        "max_children_per_hat": 65536,
        "semantic_addressing": "IP-address-like (e.g., 226.1.1.2)",
        "_source": "zabal-dispatch-hats-protocol-tree-architecture-20260524"
      }
    },
    {
      "id": "erc-1155-non-transferable-mechanic",
      "name": "ERC-1155 Non-Transferable Mechanic",
      "labels": [
        "Standard"
      ],
      "attributes": {
        "token_standard": "ERC-1155-compatible",
        "token_id": "hat_id (uint256)",
        "balance_range": "0 or 1 per address per hat",
        "transferable": false,
        "minting_authority": "admin hat wearer only",
        "revocation_methods": [
          "admin revoke",
          "eligibility module revoke",
          "toggle deactivation"
        ],
        "querying": "balanceOf(address, hatId) returns 0 or 1",
        "_source": "zabal-dispatch-hats-protocol-tree-architecture-20260524"
      }
    },
    {
      "id": "role-check-query-system",
      "name": "Role-Check Query System",
      "labels": [
        "AccessControl"
      ],
      "attributes": {
        "methods": [
          "isWearerOfHat(address, hatId)",
          "isAdminOfHat(address, hatId)",
          "isEligible(address, hatId)"
        ],
        "layers": [
          "SDK read-only",
          "direct contract view",
          "subgraph GraphQL"
        ],
        "performance": "on-chain queries ~100ms; subgraph ~1s for full tree",
        "caching": "5-10 minute TTL recommended",
        "gating_module": "src/lib/hats/gating.ts exports 6 permission types",
        "_source": "zabal-dispatch-hats-protocol-tree-architecture-20260524"
      }
    },
    {
      "id": "zao-tree-226",
      "name": "ZAO Tree 226",
      "labels": [
        "Hat Tree"
      ],
      "attributes": {
        "tree_id": 226,
        "chain": "Optimism",
        "top_hat_wearer": "Zaal",
        "total_sub_hats": 17,
        "status": "live",
        "_source": "zabal-dispatch-hats-protocol-zao-governance-usage-20260524"
      }
    },
    {
      "id": "hat-top-hat",
      "name": "Top Hat - ZAO",
      "labels": [
        "Hat Role"
      ],
      "attributes": {
        "hat_id": "0x000000e2000000000000000000000000000000000000000000000000000000",
        "wearers": 1,
        "max_supply": 1,
        "parent": null,
        "permissions": [
          "admin",
          "moderate",
          "governance",
          "feature_tracks",
          "manage_events",
          "manage_projects"
        ],
        "_source": "zabal-dispatch-hats-protocol-zao-governance-usage-20260524"
      }
    },
    {
      "id": "hat-configurator",
      "name": "Configurator",
      "labels": [
        "Hat Role"
      ],
      "attributes": {
        "hat_id": "0x000000e200010000000000000000000000000000000000000000000000000000",
        "wearers": 2,
        "max_supply": 5,
        "parent": "hat-top-hat",
        "permissions": [
          "admin",
          "moderate",
          "governance",
          "feature_tracks",
          "manage_events",
          "manage_projects"
        ],
        "_source": "zabal-dispatch-hats-protocol-zao-governance-usage-20260524"
      }
    },
    {
      "id": "hat-governance-council",
      "name": "Governance Council",
      "labels": [
        "Hat Role"
      ],
      "attributes": {
        "hat_id": "0x000000e200010001000000000000000000000000000000000000000000000000",
        "wearers": 0,
        "max_supply": 1,
        "parent": "hat-configurator",
        "permissions": [
          "moderate",
          "governance",
          "feature_tracks",
          "manage_events"
        ],
        "_source": "zabal-dispatch-hats-protocol-zao-governance-usage-20260524"
      }
    },
    {
      "id": "hat-council-members",
      "name": "Council Members",
      "labels": [
        "Hat Role"
      ],
      "attributes": {
        "hat_id": "0x000000e200010002000000000000000000000000000000000000000000000000",
        "wearers": 3,
        "max_supply": 5,
        "parent": "hat-configurator",
        "permissions": [
          "governance"
        ],
        "_source": "zabal-dispatch-hats-protocol-zao-governance-usage-20260524"
      }
    },
    {
      "id": "hat-coc-concertz",
      "name": "COC ConcertZ",
      "labels": [
        "Hat Role"
      ],
      "attributes": {
        "hat_id": "0x000000e200010001000d000000000000000000000000000000000000000000",
        "wearers": 1,
        "max_supply": null,
        "parent": "hat-governance-council",
        "permissions": [],
        "_source": "zabal-dispatch-hats-protocol-zao-governance-usage-20260524"
      }
    },
    {
      "id": "hat-wavewarz-dao",
      "name": "Wave WarZ DAO",
      "labels": [
        "Hat Role"
      ],
      "attributes": {
        "hat_id": "0x000000e200010001000500000000000000000000000000000000000000000000",
        "wearers": 0,
        "max_supply": null,
        "parent": "hat-governance-council",
        "permissions": [],
        "_source": "zabal-dispatch-hats-protocol-zao-governance-usage-20260524"
      }
    },
    {
      "id": "zao-os-gating",
      "name": "Hat-Based Access Control (gating.ts)",
      "labels": [
        "Code Module"
      ],
      "attributes": {
        "location": "src/lib/hats/gating.ts",
        "functions": [
          "hasPermission",
          "getPermissions",
          "getRoles",
          "isHatAdmin",
          "requirePermission"
        ],
        "permission_types": [
          "admin",
          "moderate",
          "governance",
          "feature_tracks",
          "manage_events",
          "manage_projects"
        ],
        "_source": "zabal-dispatch-hats-protocol-zao-governance-usage-20260524"
      }
    },
    {
      "id": "zao-hats-api",
      "name": "Hat Check API",
      "labels": [
        "API Endpoint"
      ],
      "attributes": {
        "route": "/api/hats/check",
        "method": "GET",
        "auth_required": true,
        "params": [
          "wallet",
          "hatId"
        ],
        "location": "src/app/api/hats/check/route.ts",
        "_source": "zabal-dispatch-hats-protocol-zao-governance-usage-20260524"
      }
    },
    {
      "id": "wavewarz-finals-mechanic",
      "name": "ZABAL Gamez Finals WaveWarZ Market",
      "labels": [
        "Event Mechanics"
      ],
      "attributes": {
        "chain": "Base",
        "mechanism": "Prediction market for winner selection",
        "respect_integration": "Pre-funded positions for Respect-holder snapshot",
        "prize_settlement": "On-chain via WaveWarZ-Base smart contract",
        "reference": "Doc 720",
        "_source": "zabal-dispatch-hats-protocol-zao-governance-usage-20260524"
      }
    },
    {
      "id": "zao-telegram-bot",
      "name": "ZAO Telegram Bot",
      "labels": [
        "Bot Integration"
      ],
      "attributes": {
        "platform": "Telegram",
        "uses_hat_gating": "Via admin session check, augmented by isHatAdmin()",
        "admin_routes": [
          "publish/telegram"
        ],
        "_source": "zabal-dispatch-hats-protocol-zao-governance-usage-20260524"
      }
    },
    {
      "id": "zabal-games-s1-finisher-hat",
      "name": "ZABAL Gamez S1 Finisher Hat",
      "labels": [
        "Hats Protocol NFT"
      ],
      "attributes": {
        "network": "Base mainnet",
        "tree_type": "new tree (separate from ZAO treeId 226 Optimism)",
        "hat_level": 1,
        "recipients": "all Finalists (estimated 5-8)",
        "distribution_event": "WaveWarZ-Base settlement T+72h",
        "metadata_schema": "IPFS JSON CID (Hats SDK supported)",
        "batch_mint_function": "Hats.batchMintHats()",
        "status": "spec locked, implementation pending June",
        "_source": "zabal-dispatch-hats-protocol-zabal-games-finisher-champion-20260524"
      }
    },
    {
      "id": "zabal-games-s1-champion-hat",
      "name": "ZABAL Gamez S1 Champion Hat",
      "labels": [
        "Hats Protocol NFT"
      ],
      "attributes": {
        "network": "Base mainnet",
        "tree_type": "same tree as Finisher hat",
        "hat_level": 1,
        "recipients": "top-3 finalists by WaveWarZ settlement",
        "distribution_event": "WaveWarZ-Base settlement T+72h (same tx)",
        "metadata_schema": "IPFS JSON CID",
        "batch_mint_function": "Hats.batchMintHats()",
        "status": "spec locked, implementation pending June",
        "_source": "zabal-dispatch-hats-protocol-zabal-games-finisher-champion-20260524"
      }
    },
    {
      "id": "hats-protocol-base-deployment",
      "name": "Hats Protocol Base Deployment",
      "labels": [
        "Smart Contract"
      ],
      "attributes": {
        "contract_address": "0x3bc1A0Ad72417f2d411118085256fC53CBdDd137 (same across all chains)",
        "network": "Base mainnet",
        "functions_used": [
          "mintTophat()",
          "batchCreateHats()",
          "batchMintHats()"
        ],
        "sdk_available": "yes - v1-sdk on npm",
        "app_url": "app.hatsprotocol.xyz",
        "_source": "zabal-dispatch-hats-protocol-zabal-games-finisher-champion-20260524"
      }
    },
    {
      "id": "base-network-l2-fees",
      "name": "Base Network L2 Fees",
      "labels": [
        "Infrastructure Cost"
      ],
      "attributes": {
        "transaction_type": "hat batch mint (8-10 addresses)",
        "l2_execution_fee": "$0.001-0.007 per tx",
        "l1_security_fee": "$0.001-0.01 per tx (variable with L1 congestion)",
        "total_estimated_per_mint": "$0.02-0.20 (batch of 5-8)",
        "blob_data_savings": "EIP-4844 ~10x cheaper than pre-March 2024",
        "minimum_base_fee": "5,000,000 wei (0.005 gwei) on Base mainnet",
        "_source": "zabal-dispatch-hats-protocol-zabal-games-finisher-champion-20260524"
      }
    },
    {
      "id": "hat-tree-structure-design-zabal-games-s1",
      "name": "Hat Tree Structure Design (ZABAL Gamez S1)",
      "labels": [
        "Hats Protocol Architecture"
      ],
      "attributes": {
        "hat_tree_id": "TBD - minted in June setup phase",
        "top_hat_wearer": "ZABAL Gamez admin multisig (TBD)",
        "autonomous_admin_hat": "recommended for batch mint automation",
        "finisher_hat_admin": "top hat or autonomous admin",
        "champion_hat_admin": "top hat or autonomous admin",
        "max_depth": "15 (Hats Protocol standard)",
        "branching_factor": "65,536 per level",
        "_source": "zabal-dispatch-hats-protocol-zabal-games-finisher-champion-20260524"
      }
    },
    {
      "id": "hat-metadata-schema",
      "name": "Hat Metadata Schema",
      "labels": [
        "Data Format"
      ],
      "attributes": {
        "details_field_limit": "7,000 characters",
        "image_uri_limit": "7,000 characters",
        "recommended_storage": "IPFS JSON (CID in details field)",
        "finisher_fields": [
          "name: ZABAL Gamez Season 1 Finisher",
          "description: shipped in 24h, earned $35+ USDC, onchain credential",
          "image: TBD (Zaal to confirm visual)",
          "metadata.event_treeId: TBD",
          "metadata.finalist_number: TBD per finalist"
        ],
        "champion_fields": [
          "name: ZABAL Gamez Season 1 Champion",
          "description: top-3 placement, WaveWarZ settlement, $75-150 USDC",
          "image: TBD (distinct from Finisher)",
          "metadata.placement: 1st / 2nd / 3rd"
        ],
        "_source": "zabal-dispatch-hats-protocol-zabal-games-finisher-champion-20260524"
      }
    },
    {
      "id": "wavewarz-base-settlement-zabal-finals",
      "name": "WaveWarZ-Base Settlement (ZABAL Finals)",
      "labels": [
        "Event"
      ],
      "attributes": {
        "trigger": "T+72h Finals vote conclusion",
        "settlement_mechanism": "WaveWarZ-Base smart contract (Sam + Arthur)",
        "readout_data": "volume, win rates, placement ranking",
        "hat_issuance_trigger": "automated post-settlement, same tx or next block",
        "beneficiaries": "all finalists (Finisher) + top-3 (Champion)",
        "date": "August 2026 (TBD)",
        "_source": "zabal-dispatch-hats-protocol-zabal-games-finisher-champion-20260524"
      }
    },
    {
      "id": "finalist-eligibility-snapshot",
      "name": "Finalist Eligibility Snapshot",
      "labels": [
        "Data Event"
      ],
      "attributes": {
        "timing": "T-7 days pre-Finals",
        "purpose": "Respect-holder eligibility for pre-funded positions + Finals roster for hat issuance",
        "data_captured": [
          "address[]",
          "Respect status",
          "July build submission proof"
        ],
        "snapshot_mechanism": "on-chain read (Respect contract or Hats Protocol role check)",
        "cross_use_1": "WaveWarZ airdropPositions() pre-fund",
        "cross_use_2": "Hats hat-issuance whitelist",
        "_source": "zabal-dispatch-hats-protocol-zabal-games-finisher-champion-20260524"
      }
    },
    {
      "id": "poidh-proof-integration-zabal-games",
      "name": "POIDH Proof Integration (ZABAL Gamez)",
      "labels": [
        "Data Layer"
      ],
      "attributes": {
        "status": "integration not yet designed",
        "potential_role": "tie July build proof (live URL + repo + cast) to Finalist eligibility",
        "data_source": "POIDH bounty leaderboard (Doc 654 adoptable project #02)",
        "open_question": "does POIDH track 'finished a ZABAL Gamez build'? or just general proof-of-intent?",
        "_source": "zabal-dispatch-hats-protocol-zabal-games-finisher-champion-20260524"
      }
    },
    {
      "id": "zao-governance-hat-tree-optimism",
      "name": "ZAO Governance Hat Tree (Optimism)",
      "labels": [
        "Hats Protocol Tree"
      ],
      "attributes": {
        "tree_id": "226 (existing)",
        "network": "Optimism",
        "purpose": "ZAO governance roles, not ZABAL Gamez",
        "separation": "ZABAL Gamez gets its own new tree on Base",
        "_source": "zabal-dispatch-hats-protocol-zabal-games-finisher-champion-20260524"
      }
    },
    {
      "id": "june-tech-delivery-hats-wavewarz",
      "name": "June Tech Delivery (Hats + WaveWarZ)",
      "labels": [
        "Milestone"
      ],
      "attributes": {
        "owner": "Sam (candytoybox) + Arthur (Neynar)",
        "deliverable_1": "WaveWarZ-Base testnet contracts to security-reviewed state",
        "deliverable_2": "hat tree initialized on Base (top hat + autonomous admin + Finisher/Champion hats created)",
        "deliverable_3": "batch mint function tested with 5-8 addresses",
        "deliverable_4": "Arthur workshop session on smart contracts + hat integration",
        "_source": "zabal-dispatch-hats-protocol-zabal-games-finisher-champion-20260524"
      }
    },
    {
      "id": "july-mainnet-smoke-test",
      "name": "July Mainnet + Smoke Test",
      "labels": [
        "Milestone"
      ],
      "attributes": {
        "owner": "Sam + Arthur (WaveWarZ), Zaal (Finals infra)",
        "deliverable_1": "WaveWarZ-Base on Base mainnet (post-audit)",
        "deliverable_2": "smoke-test battle runs with fake finalist",
        "deliverable_3": "hat batch mint runs successfully (5-8 test addresses)",
        "deliverable_4": "Adoptable project #09 (Finals settlement surface) picked up",
        "_source": "zabal-dispatch-hats-protocol-zabal-games-finisher-champion-20260524"
      }
    },
    {
      "id": "august-finals-settlement-execution",
      "name": "August Finals Settlement Execution",
      "labels": [
        "Milestone"
      ],
      "attributes": {
        "date": "August 2026 (TBD)",
        "finalists": "5-8 (decided after July)",
        "settlement_tx": "single WaveWarZ-Base contract call at T+72h",
        "parallel_hat_issuance": "batch Finisher + Champion mints in same tx or next block",
        "live_reveal": "stream announces placements + hats distributed onchain",
        "total_hat_mints": "finalists + 3 (all receivers get Finisher; top-3 get Champion)",
        "_source": "zabal-dispatch-hats-protocol-zabal-games-finisher-champion-20260524"
      }
    },
    {
      "id": "ardrive",
      "name": "ArDrive",
      "labels": [
        "Platform",
        "Protocol"
      ],
      "attributes": {
        "chain": "Arweave",
        "model": "One-time payment permanent storage",
        "founded": 2020,
        "license": "MIT (CLI/Core JS)",
        "status": "Active 2026",
        "_source": "zabal-dispatch-ardrive-permastorage-ardrive-cli-vs-app-20260524",
        "substrate": "Arweave + ArFS",
        "pricing_per_gb": "9-12 USD",
        "payment_model": "one-time",
        "gui_layer": "consumer-friendly file management"
      }
    },
    {
      "id": "ardrive-cli",
      "name": "ArDrive CLI",
      "labels": [
        "Tool"
      ],
      "attributes": {
        "language": "Node.js / TypeScript",
        "latestVersion": "4.0.0",
        "package": "ardrive-cli npm",
        "audience": "Power users, bulk uploaders, automation",
        "_source": "zabal-dispatch-ardrive-permastorage-ardrive-cli-vs-app-20260524"
      }
    },
    {
      "id": "ardrive-web-app",
      "name": "ArDrive Web App",
      "labels": [
        "Application"
      ],
      "attributes": {
        "url": "https://app.ardrive.io",
        "interface": "Drag-drop GUI",
        "encryption": "End-to-end supported",
        "audience": "Non-technical users",
        "_source": "zabal-dispatch-ardrive-permastorage-ardrive-cli-vs-app-20260524"
      }
    },
    {
      "id": "ardrive-turbo",
      "name": "ArDrive Turbo",
      "labels": [
        "Service",
        "Storage",
        "Tool|Platform"
      ],
      "attributes": {
        "bundler": "ANS-104 bundler",
        "paymentMethods": [
          "Credit card via Stripe",
          "Crypto wallets",
          "Turbo Credits"
        ],
        "costPerMB": "$0.008-0.04",
        "bundleLimit": "500 MiB per bundle, 250 files",
        "_source": "zabal-dispatch-ardrive-permastorage-ardrive-cli-vs-app-20260524",
        "protocol": "Arweave bundler + permanent storage",
        "upload_cost": "~$0.034 per 5MB track",
        "permanence": "200+ year guarantee via endowment model",
        "payment_modes": "Fiat (Stripe), Crypto (AR/ETH), Turbo Credits",
        "sdk_package": "@ardrive/turbo-sdk",
        "status": "actively maintained (Irys deprecated as of Nov 2025)",
        "tag_strategy": "App-Name: ZAO-OS, Type: music-track, Artist, Title, Genre, ISRC, Released",
        "category": "music-infra",
        "role": "Permanent storage upload service for Arweave",
        "cost": "~$0.034 per 5MB track one-time (typical 50-100MB WAV master = $0.17-0.68)",
        "cost_volume": "40-60% savings vs Irys via ANS-104 bundling (batches up to 250 files / 500MB per transaction)",
        "payment_methods": "Fiat (Stripe), Crypto (AR/ETH/USDC), Turbo Credits",
        "auth": "email/password or wallet address for crypto",
        "what_it_does": "Uploads audio master files and metadata to Arweave's permanent storage network. Creates ar:// URIs (e.g., ar://abc123def) that reference immutable files guaranteed to exist for 200+ years via Arweave endowment model.",
        "storage_format": "ANS-104 manifest with artist/release/master/stems/cover art folders, tagged with ISRC + ISWC + BPM + key",
        "timeline": "upload completes in minutes, Arweave network finalization ~10 minutes",
        "caching": "ArDrive Web App or ArDrive CLI (@ardrive/turbo-sdk), no API rate limits",
        "replaces": "Irys (deprecated 2025), IPFS pinning ($5-20/mo recurring), Filecoin ($200-1000/TB/yr recurring), AWS S3 ($0.023/GB/mo recurs)",
        "why_zao_uses": "$0.034/track one-time cost vs $5-20/mo pinning, 200+ year guarantee vs 30-90 day pinning SLAs, immutable ar:// URIs embedded in NFT tokenURI metadata, phase 1 music release spec (doc 475)"
      }
    },
    {
      "id": "ardrive-core-js",
      "name": "ArDrive Core JS",
      "labels": [
        "Library"
      ],
      "attributes": {
        "purpose": "Backend SDK for CLI and desktop apps",
        "runtimes": [
          "Node.js",
          "Browser with polyfills"
        ],
        "features": [
          "Drive ops",
          "Folder ops",
          "File ops",
          "Encryption",
          "Turbo integration"
        ],
        "_source": "zabal-dispatch-ardrive-permastorage-ardrive-cli-vs-app-20260524"
      }
    },
    {
      "id": "arweave",
      "name": "Arweave",
      "labels": [
        "Blockchain",
        "Protocol"
      ],
      "attributes": {
        "consensus": "Proof of Access",
        "permanence": "200+ years designed storage",
        "costPerGB": "$6.35-8.00",
        "storageModel": "Pay-once endowment",
        "_source": "zabal-dispatch-ardrive-permastorage-ardrive-cli-vs-app-20260524",
        "storage_model": "one-time permanent",
        "token": "AR",
        "ar_price_usd_may2026": 1.97,
        "endowment_model": "200+ years (Kryder+ 0.5%+ decline)",
        "market_cap_usd_may2026": 129000000,
        "node_count": "~8000 nodes",
        "network": "Permaweb, layer 1",
        "use_case": "Permanent audio + metadata storage",
        "uri_format": "ar://{txId} or https://arweave.net/{txId}",
        "graphql_indexing": "Queryable by tags (App-Name, Type, Artist, etc)",
        "gateway_decentralized": "ar.io Wayfinder for resilient CDN"
      }
    },
    {
      "id": "ar-io-gateway-network",
      "name": "ar.io Gateway Network",
      "labels": [
        "Network"
      ],
      "attributes": {
        "gatewayCount": "650+ community-operated nodes",
        "egress_pricing": "x402 protocol, $0.10/GB default",
        "monetization": "ARIO token rewards + x402 egress fees",
        "minimumStake": "10000 ARIO to join",
        "_source": "zabal-dispatch-ardrive-permastorage-ardrive-cli-vs-app-20260524"
      }
    },
    {
      "id": "wayfinder",
      "name": "Wayfinder",
      "labels": [
        "SDK"
      ],
      "attributes": {
        "purpose": "Decentralized CDN gateway selection",
        "package": "@ar.io/wayfinder-core",
        "features": [
          "Intelligent routing",
          "Cryptographic verification",
          "Multi-gateway fallback"
        ],
        "_source": "zabal-dispatch-ardrive-permastorage-ardrive-cli-vs-app-20260524"
      }
    },
    {
      "id": "ans-104-bundling",
      "name": "ANS-104 Bundling",
      "labels": [
        "Standard"
      ],
      "attributes": {
        "purpose": "Bundle multiple data items into single transaction",
        "maxBundleSize": "500 MiB",
        "maxDataItems": "250 per bundle",
        "unbundlingTime": "5-60 minutes",
        "_source": "zabal-dispatch-ardrive-permastorage-ardrive-cli-vs-app-20260524"
      }
    },
    {
      "id": "arfs-protocol",
      "name": "ArFS Protocol",
      "labels": [
        "Standard"
      ],
      "attributes": {
        "purpose": "Arweave File System - file hierarchy on permaweb",
        "features": [
          "Folder structure",
          "File versioning",
          "Metadata",
          "Access control"
        ],
        "standardDoc": "ANS-105 license support",
        "_source": "zabal-dispatch-ardrive-permastorage-ardrive-cli-vs-app-20260524"
      }
    },
    {
      "id": "turbo-credits",
      "name": "Turbo Credits",
      "labels": [
        "Currency"
      ],
      "attributes": {
        "purpose": "Prepaid upload credits for ArDrive Turbo",
        "sharing": "Shareable between team members",
        "bulkDiscount": "Bulk purchases available",
        "expiry": "No expiration",
        "_source": "zabal-dispatch-ardrive-permastorage-ardrive-cli-vs-app-20260524"
      }
    },
    {
      "id": "x402-protocol",
      "name": "x402 Protocol",
      "labels": [
        "Standard"
      ],
      "attributes": {
        "purpose": "Internet-native micropayments for gateway egress",
        "networks": [
          "Base",
          "Base Sepolia testnet"
        ],
        "settlementAsset": "USDC",
        "operators": "230+ ar.io nodes tested 2025",
        "_source": "zabal-dispatch-ardrive-permastorage-ardrive-cli-vs-app-20260524"
      }
    },
    {
      "id": "cost-per-gb-arweave",
      "name": "Cost Per GB Arweave",
      "labels": [
        "PricingMetric"
      ],
      "attributes": {
        "range_usd": "5-12 USD per GB",
        "timestamp": "May 2026",
        "model": "one-time payment",
        "variation_cause": "AR token price volatility + network demand",
        "_source": "zabal-dispatch-ardrive-permastorage-cost-and-funding-20260524"
      }
    },
    {
      "id": "wavewarz-music-master",
      "name": "WaveWarZ Music Master",
      "labels": [
        "DataAsset"
      ],
      "attributes": {
        "typical_size": "50-100 MB per master WAV",
        "upload_cost_usd": "0.25-1.20 USD",
        "storage_duration_years": "200+",
        "renewal_required": false,
        "_source": "zabal-dispatch-ardrive-permastorage-cost-and-funding-20260524"
      }
    },
    {
      "id": "irys-bundlr",
      "name": "Irys (Bundlr)",
      "labels": [
        "Protocol"
      ],
      "attributes": {
        "function": "bundled uploads to Arweave",
        "pricing_model": "ANS-104 bundle optimization",
        "gas_savings": "up to 40-60% vs unbundled",
        "supports": "Ethereum, Solana, Polygon, Arbitrum",
        "_source": "zabal-dispatch-ardrive-permastorage-cost-and-funding-20260524"
      }
    },
    {
      "id": "bcz-strategies-treasury",
      "name": "BCZ Strategies Treasury",
      "labels": [
        "FundingEntity"
      ],
      "attributes": {
        "parent": "BetterCallZaal",
        "funding_cadence": "quarterly top-up (estimated)",
        "storage_target": "ZAO music masters + metadata",
        "blockchain_home": "Arweave + AR.IO",
        "recurring_model": "endowment-style with reserves",
        "_source": "zabal-dispatch-ardrive-permastorage-cost-and-funding-20260524"
      }
    },
    {
      "id": "arweave-endowment",
      "name": "Arweave Endowment",
      "labels": [
        "EconomicMechanism"
      ],
      "attributes": {
        "payment_phase": "upfront, portioned to long-term pool",
        "miner_reward_schedule": "declining as storage costs fall",
        "storage_cost_assumption": "Kryder+ 0.5-38% annual hardware cost decline",
        "sustainability_horizon": "200-10000+ years (simulation-dependent)",
        "_source": "zabal-dispatch-ardrive-permastorage-cost-and-funding-20260524"
      }
    },
    {
      "id": "akord",
      "name": "Akord",
      "labels": [
        "Protocol"
      ],
      "attributes": {
        "substrate": "Arweave (permanent) + AWS (temp storage)",
        "pricing_permanent": "9-12 USD per GB",
        "pricing_temp": "subscription hybrid",
        "ui_barrier": "low (simple registration)",
        "_source": "zabal-dispatch-ardrive-permastorage-cost-and-funding-20260524"
      }
    },
    {
      "id": "filecoin",
      "name": "Filecoin",
      "labels": [
        "Protocol"
      ],
      "attributes": {
        "payment_model": "time-based subscription",
        "cost_annual": "200-1000 USD per TB per year",
        "storage_duration": "renewable contracts",
        "renewal_required": true,
        "ideal_use": "mutable datasets, active management",
        "_source": "zabal-dispatch-ardrive-permastorage-cost-and-funding-20260524"
      }
    },
    {
      "id": "ipfs-pinning-pinata",
      "name": "IPFS Pinning (Pinata)",
      "labels": [
        "Protocol"
      ],
      "attributes": {
        "cost_monthly": "5-20 USD per month (100MB-1GB)",
        "storage_duration": "requires active renewal",
        "abandonment_risk": "high if subscription lapses",
        "_source": "zabal-dispatch-ardrive-permastorage-cost-and-funding-20260524"
      }
    },
    {
      "id": "music-master-archive-roi",
      "name": "Music Master Archive ROI",
      "labels": [
        "CostComparison"
      ],
      "attributes": {
        "arweave_10yr_total": "5-12 USD (one-time)",
        "filecoin_10yr_total": "2000-10000 USD (recurring, avg 200-1000/TB/yr)",
        "ipfs_pinning_10yr_total": "600-2400 USD (12x 5-20/month)",
        "breakeven_horizon_months": "80-120 months (Arweave cheaper long-term)",
        "_source": "zabal-dispatch-ardrive-permastorage-cost-and-funding-20260524"
      }
    },
    {
      "id": "ar-io",
      "name": "AR.IO",
      "labels": [
        "Protocol",
        "Tool|Platform"
      ],
      "attributes": {
        "role": "AR.IO gateways + node infrastructure",
        "token": "IO",
        "pricing_api": "via ar.io node pricing endpoint",
        "integration_target": "BCZ + ZAO music distribution",
        "_source": "zabal-dispatch-ardrive-permastorage-cost-and-funding-20260524",
        "category": "music-infra",
        "cost": "$0.10/GB configurable via x402 payment protocol (supports USDC micro-payments)",
        "cost_alternative": "$0.0000000001 USDC/byte granular pricing tier available",
        "auth": "no auth required for read (public gateway), address whitelisting for custom pricing",
        "what_it_does": "650+ independent gateways serve Arweave content (ar:// URIs) with geographically distributed CDN reliability. Supports x402 payment protocol for edge-computed royalty routing (smart payments tied to content delivery).",
        "network": "AR.IO node infrastructure, launched Release 54 (October 2025), 99.9% uptime SLA via decentralized node operators",
        "payment_integration": "x402 payment header enables micropayments per MB served, can trigger royalty distribution on ZAO splits",
        "content_addressing": "resolves ar:// URIs and https://arweave.net/ URLs to any gateway (redundancy)",
        "wayfinder_sdk": "cryptographic-verified intelligent routing, selects optimal gateway per request",
        "replaces": "Cloudflare, traditional CDN for Arweave content (bottleneck), x402 beats server-side rate limiting",
        "why_zao_uses": "decentralized egress routing for music masters (redundancy), x402 payment protocol enables edge-triggered micropayments on every download (future music royalty layer), $0.10/GB public tier enables artist economics at scale"
      }
    },
    {
      "id": "zabal-token-reserve",
      "name": "ZABAL Token Reserve",
      "labels": [
        "FundingEntity"
      ],
      "attributes": {
        "parent": "ZAO Ecosystem",
        "role": "backing ArDrive/Arweave uploads for music",
        "cadence": "periodic reserve deployment",
        "scalability": "per-submission allocation possible",
        "_source": "zabal-dispatch-ardrive-permastorage-cost-and-funding-20260524"
      }
    },
    {
      "id": "distrokid",
      "name": "DistroKid",
      "labels": [
        "DSP",
        "digital-distributor",
        "DigitalDistributor",
        "Tool|Platform"
      ],
      "attributes": {
        "role": "Music distribution service (centralized)",
        "isrc_assignment": "automatic, post-upload pre-delivery",
        "isrc_timing": "DistroKid has ISRC Agency appointment, assigns free ISRCs ~4 weeks before delivery date",
        "metadata_source": "DistroKid upload form (artist name, title, genre, composer, publisher, explicit flag)",
        "api_access": "JWT token via browser DevTools Authorization header",
        "musician_plus_cost": "$44.99/year",
        "_source": "zabal-dispatch-ardrive-permastorage-integration-with-distrokid-20260524",
        "pricing_model": "annual-subscription-based",
        "cost_musician_plus": "$44.99/year",
        "master_royalty_cut": "0%",
        "streaming_retention": "100%",
        "payment_lag_months": "2-3",
        "accounting_period": "monthly",
        "founder_status": "independent (not acquired Feb 2026)",
        "key_feature": "100% passthrough, flat fee only, no percentage on earnings",
        "leave_legacy_fee": "$29-49 per release to survive subscription lapse",
        "founding_year": 2013,
        "ownership": "Independently held (as of May 2026)",
        "market_share": "33% of weekly new music on Spotify (indie sector)",
        "pricing_tiers": [
          "Musician: $24.99/year (unlimited uploads)",
          "Musician Plus: $44.99/year (2 artists, custom release dates)",
          "Ultimate: $89.99/year (100+ artists, advanced analytics)"
        ],
        "royalty_retention": "100% (0% commission)",
        "delivery_speed": "24-72 hours to major DSPs",
        "content_id_cost": "$4.95/song/year or $14.95 one-time",
        "leave_a_legacy_cost": "$29-49 per release (catalog survives subscription lapse)",
        "catalog_removal_policy": "Music removed if subscription lapses unless Leave a Legacy is paid",
        "category": "music-infra",
        "cost": "$44.99/year Musician Plus plan",
        "cost_fallback": "$29 per single or $49 per album Leave a Legacy (catalog protection)",
        "auth": "email/password + 2FA",
        "what_it_does": "Uploads master recordings to all major DSPs (Spotify, Apple Music, Amazon Music, YouTube Music, Tidal, Deezer, etc). Assigns or accepts ISRC codes. Generates DDEX ERN for metadata delivery.",
        "delivery_timeline": "24-48 hours to Spotify after DSP acceptance",
        "replaces": "direct DSP deals, Tunecore, CD Baby for indie artists",
        "why_zao_uses": "low cost, 0% commission, Musician Plus tier enables ISRC ownership, ZAO standard distributor for all collective releases"
      }
    },
    {
      "id": "0xsplits",
      "name": "0xSplits",
      "labels": [
        "SmartContract",
        "smart-contract-split-platform",
        "Tool|Platform"
      ],
      "attributes": {
        "chain": "Base (EVM-compatible L2)",
        "contract_type": "Immutable split contract (ERC-1155 payoutRecipient)",
        "sdk_package": "@0xsplits/splits-sdk v6.4.1",
        "split_model": "80% artist, 10% treasury (ZAO DAO), 10% curator",
        "deployment_timing": "AFTER Zora mint, so NFT revenue auto-flows to split address",
        "distribution_method": "pull-based (recipients withdraw from contract)",
        "base_native_support": "full",
        "_source": "zabal-dispatch-ardrive-permastorage-integration-with-distrokid-20260524",
        "chain_primary": "Base",
        "supported_chains": "Base, Optimism, Ethereum, Arbitrum, Zora",
        "fees": "0% (completely free open-source)",
        "processing_volume": "$500M+ lifetime",
        "split_count_active": "6000+ on Zora L2 alone",
        "deployment_cost_base": "$0.50-5.00",
        "split_types": "immutable, liquid, waterfall, swapper",
        "immutable_splits": "set once, fully trustless, never changes",
        "category": "music-infra",
        "role": "Immutable on-chain revenue split contract for NFT sales and smart contract revenue",
        "cost": "$0 protocol fee, gas cost only (~$0.50-2 on Base)",
        "auth": "no auth required, deploy from wallet address",
        "what_it_does": "Creates an immutable smart contract on Base that automatically splits revenue from NFT mints, sales, and smart contract interactions across multiple wallets. 0xSplits is hyperstructure (audit-proven, GPL license, no admin keys).",
        "integration": "used as payoutRecipient parameter in Zora 1155 NFT mint contracts",
        "immutability": "split percentages and recipients locked at creation, cannot be changed post-launch",
        "chains": "Base, Ethereum, Optimism, Arbitrum, Zora, World Chain",
        "replaces": "trusted intermediary, manual wallet signaling, MultiSig for revenue splits",
        "why_zao_uses": "trustless, gas-efficient on Base, separates off-chain streaming (BMI/DistroKid) from on-chain NFT revenue, enables artist-first payout model"
      }
    },
    {
      "id": "zora_1155",
      "name": "Zora Protocol ERC-1155",
      "labels": [
        "NFT"
      ],
      "attributes": {
        "chain": "Base",
        "payout_recipient": "split contract address (0xSplits)",
        "metadata_uri": "ar://{metadata-txId} (Arweave-hosted JSON)",
        "animation_url": "ar://{audio-txId} (Arweave audio stream)",
        "deployment_cost": "~$1.05 total via Zora SDK",
        "mint_price": "configurable per release (e.g., 0.001 ETH)",
        "_source": "zabal-dispatch-ardrive-permastorage-integration-with-distrokid-20260524"
      }
    },
    {
      "id": "bmi_registry",
      "name": "BMI (Broadcast Music Inc)",
      "labels": [
        "Rights",
        "PerformingRightsOrganization"
      ],
      "attributes": {
        "registration_requirement": "ISRC (from DistroKid) + canonical composer/publisher",
        "manual_process": "submit via BMI portal or integrated publisher intake",
        "timing": "post-ISRC assignment, pre-or-concurrent with DSP delivery",
        "linked_to": "ISRC code (unique per track)",
        "_source": "zabal-dispatch-ardrive-permastorage-integration-with-distrokid-20260524",
        "role": "Publisher PRO + mechanicals collector",
        "writer_fee": "Free for songwriters",
        "publisher_fee": "$250 one-time for LLC",
        "mechanicals_coverage": "US + international via reciprocal agreements",
        "contract_length": "2yr writer / 5yr publisher",
        "retained_overhead": "~15%",
        "zao_music_recommendation": "Primary path for ZAO Music collective"
      }
    },
    {
      "id": "ddex_ern",
      "name": "DDEX ERN (Electronic Release Notification)",
      "labels": [
        "Metadata"
      ],
      "attributes": {
        "format": "XML standard for music metadata + rights",
        "required_fields": "UPC, ISRC per track, title, artist, composer, publisher, territories, ℗ © statements",
        "flow": "DistroKid generates ERN from upload form -> DSP ingestion",
        "related_isrc": "ISRC embedded in ERN as track identifier",
        "_source": "zabal-dispatch-ardrive-permastorage-integration-with-distrokid-20260524"
      }
    },
    {
      "id": "zao_music_flow",
      "name": "ZAO Music Distribution Flow",
      "labels": [
        "Process"
      ],
      "attributes": {
        "phase_1": "Artist uploads to ZAO OS form (title, audio, cover, composer, publisher)",
        "phase_2": "ArDrive Turbo upload (fiat or crypto), returns ar:// URIs",
        "phase_3": "Zora 1155 mint on Base with ar:// metadata URI, payoutRecipient = split address",
        "phase_4": "DistroKid API call with ISRC (post-upload, pre-delivery)",
        "phase_5": "0xSplits deploy with artist/treasury/curator addresses + percentages",
        "phase_6": "DistroKid push to DSPs (concurrent with split deployment)",
        "phase_7": "BMI registration (manual, using ISRC from step 4)",
        "_source": "zabal-dispatch-ardrive-permastorage-integration-with-distrokid-20260524"
      }
    },
    {
      "id": "metadata_layers",
      "name": "Three-Layer Metadata Stack",
      "labels": [
        "Architecture"
      ],
      "attributes": {
        "layer_1_arweave": "permanent audio master + tags (App-Name, Artist, ISRC, Genre, Duration)",
        "layer_2_base_onchain": "ERC-1155 tokenURI -> ar:// JSON (metadata), 0xSplits contract addresses",
        "layer_3_dsp_centralized": "DDEX ERN in DistroKid, then replicated across Spotify/Apple/YouTube",
        "_source": "zabal-dispatch-ardrive-permastorage-integration-with-distrokid-20260524"
      }
    },
    {
      "id": "entity_ardrive_turbo_sdk",
      "name": "ArDrive Turbo SDK",
      "labels": [
        "Upload Tool"
      ],
      "attributes": {
        "status": "active",
        "license": "MIT",
        "bundling_protocol": "ANS-104",
        "cost_per_5mb": "$0.04",
        "payment_methods": [
          "AR token",
          "ETH",
          "SOL",
          "MATIC",
          "fiat/Stripe"
        ],
        "_source": "zabal-dispatch-ardrive-permastorage-music-master-pipeline-20260524"
      }
    },
    {
      "id": "entity_ans104_bundling",
      "name": "ANS-104 Bundled Transactions",
      "labels": [
        "Upload Optimization"
      ],
      "attributes": {
        "files_per_bundle": "unlimited",
        "cost_savings_vs_direct": "20-30%",
        "finality_time": "fast",
        "manifest_support": true,
        "_source": "zabal-dispatch-ardrive-permastorage-music-master-pipeline-20260524"
      }
    },
    {
      "id": "entity_music_metadata_schema",
      "name": "Music Master Metadata Schema",
      "labels": [
        "Metadata Standard"
      ],
      "attributes": {
        "isrc_length": 12,
        "iswc_format": "T-NNNNNNNNN-C",
        "bpm_range": "30-300",
        "keys_supported": [
          "C",
          "C#",
          "D",
          "D#",
          "E",
          "F",
          "F#",
          "G",
          "G#",
          "A",
          "A#",
          "B",
          "minor_variants"
        ],
        "frequency_bands": [
          "bass_20_400hz",
          "mid_400hz_4khz",
          "treble_4khz_14khz"
        ],
        "license_types": [
          "UDL",
          "CC-BY",
          "CC-BY-SA",
          "proprietary"
        ],
        "_source": "zabal-dispatch-ardrive-permastorage-music-master-pipeline-20260524"
      }
    },
    {
      "id": "entity_isrc_codes",
      "name": "ISRC Codes (International Standard Recording Code)",
      "labels": [
        "Music Identifier"
      ],
      "attributes": {
        "format": "CC-XXX-YY-NNNNN",
        "length": 12,
        "issuer": "IFPI",
        "required_by_dsps": [
          "Spotify",
          "Apple Music",
          "Tidal",
          "Amazon Music",
          "YouTube Music"
        ],
        "reusability": "never_across_tracks",
        "source": "distributor_free_or_usisrc_$95",
        "_source": "zabal-dispatch-ardrive-permastorage-music-master-pipeline-20260524"
      }
    },
    {
      "id": "entity_iswc_codes",
      "name": "ISWC Codes (International Standard Musical Work Code)",
      "labels": [
        "Music Identifier"
      ],
      "attributes": {
        "format": "T-NNNNNNNNN-C",
        "length": 11,
        "issuer": "CISAC / US: ASCAP",
        "pro_coverage": [
          "ASCAP",
          "BMI",
          "SESAC"
        ],
        "reusability": "shared_across_versions",
        "_source": "zabal-dispatch-ardrive-permastorage-music-master-pipeline-20260524"
      }
    },
    {
      "id": "entity_arweave_graphql_indexing",
      "name": "Arweave GraphQL Indexing",
      "labels": [
        "Discovery Layer"
      ],
      "attributes": {
        "endpoints": [
          "https://arweave.net/graphql",
          "https://arweave-search.goldsky.com/graphql"
        ],
        "query_language": "GraphQL",
        "tag_searchable": true,
        "sort_options": [
          "HEIGHT_DESC",
          "HEIGHT_ASC"
        ],
        "_source": "zabal-dispatch-ardrive-permastorage-music-master-pipeline-20260524"
      }
    },
    {
      "id": "entity_ar_io_wayfinder",
      "name": "ar.io Wayfinder CDN",
      "labels": [
        "Gateway Network"
      ],
      "attributes": {
        "package": "@ar.io/wayfinder-core",
        "version": "1.3.0+",
        "delivery": "multi-gateway routing",
        "verification": "cryptographic",
        "framework_support": [
          "React",
          "Node.js",
          "CLI"
        ],
        "_source": "zabal-dispatch-ardrive-permastorage-music-master-pipeline-20260524"
      }
    },
    {
      "id": "entity_arweave_permaweb_url",
      "name": "Arweave Permaweb URLs",
      "labels": [
        "Permanent Link"
      ],
      "attributes": {
        "url_formats": [
          "https://arweave.net/{txId}",
          "ar://{txId}",
          "https://{gateway}/{txId}"
        ],
        "durability": "200+_years",
        "playable": true,
        "_source": "zabal-dispatch-ardrive-permastorage-music-master-pipeline-20260524"
      }
    },
    {
      "id": "entity_zao_release_folder_structure",
      "name": "ZAO Release Folder Convention",
      "labels": [
        "Organization"
      ],
      "attributes": {
        "root": "/artist-name/release-slug/",
        "master_path": "/artist-name/release-slug/master.wav",
        "stems_path": "/artist-name/release-slug/stems/{stem-name}.wav",
        "cover_path": "/artist-name/release-slug/cover.jpg",
        "metadata_path": "/artist-name/release-slug/metadata.json",
        "example": "/Zaal/wave-warZ-ep-v1/master.wav",
        "_source": "zabal-dispatch-ardrive-permastorage-music-master-pipeline-20260524"
      }
    },
    {
      "id": "cal-com-api-v2",
      "name": "Cal.com API v2",
      "labels": [
        "API_Service"
      ],
      "attributes": {
        "authentication_methods": [
          "OAuth",
          "API_Key",
          "Platform_OAuth"
        ],
        "rate_limit": "120 requests/min (scalable)",
        "base_url": "https://api.cal.com/v2",
        "latest_version": "v2",
        "status": "stable",
        "_source": "zabal-dispatch-calendar-automation-calcom-api-20260524"
      }
    },
    {
      "id": "api-key-auth",
      "name": "API Key Auth",
      "labels": [
        "Auth_Method"
      ],
      "attributes": {
        "test_prefix": "cal_",
        "production_prefix": "cal_live_",
        "header": "Authorization: Bearer YOUR_API_KEY",
        "access_level": "user_level",
        "storage": "Settings > Security in Cal.com dashboard",
        "_source": "zabal-dispatch-calendar-automation-calcom-api-20260524"
      }
    },
    {
      "id": "webhook-system",
      "name": "Webhook System",
      "labels": [
        "Integration_Feature"
      ],
      "attributes": {
        "trigger_count": 17,
        "features": [
          "custom_payloads",
          "HMAC_signing",
          "payload_templates"
        ],
        "min_plan": "Free",
        "subscriber_url_required": true,
        "payload_format": "JSON",
        "_source": "zabal-dispatch-calendar-automation-calcom-api-20260524"
      }
    },
    {
      "id": "booking-created-event",
      "name": "BOOKING_CREATED Event",
      "labels": [
        "Webhook_Trigger"
      ],
      "attributes": {
        "payload_includes": [
          "organizer",
          "attendees",
          "event_details",
          "custom_responses",
          "timestamps",
          "location",
          "booking_id",
          "uid"
        ],
        "trigger_timing": "immediate",
        "frequency": "per_booking",
        "_source": "zabal-dispatch-calendar-automation-calcom-api-20260524"
      }
    },
    {
      "id": "booking-cancelled-event",
      "name": "BOOKING_CANCELLED Event",
      "labels": [
        "Webhook_Trigger"
      ],
      "attributes": {
        "payload_includes": [
          "organizer",
          "attendees",
          "cancellation_reason",
          "original_booking_details",
          "request_reschedule_flag"
        ],
        "trigger_timing": "immediate",
        "special_field": "cancelledBy",
        "_source": "zabal-dispatch-calendar-automation-calcom-api-20260524"
      }
    },
    {
      "id": "event-type-api",
      "name": "Event Type API",
      "labels": [
        "API_Endpoint_Group"
      ],
      "attributes": {
        "operations": [
          "list",
          "get",
          "create",
          "update"
        ],
        "required_auth": "API_Key_or_OAuth",
        "fields": [
          "duration",
          "location",
          "custom_questions",
          "scheduling_type",
          "require_confirmation"
        ],
        "_source": "zabal-dispatch-calendar-automation-calcom-api-20260524"
      }
    },
    {
      "id": "booking-confirmation-workflow",
      "name": "Booking Confirmation Workflow",
      "labels": [
        "Feature"
      ],
      "attributes": {
        "config_field": "requires_confirmation",
        "webhook_trigger": "BOOKING_REQUESTED",
        "secondary_trigger": "BOOKING_CONFIRMED_or_REJECTED",
        "organizer_review": true,
        "_source": "zabal-dispatch-calendar-automation-calcom-api-20260524"
      }
    },
    {
      "id": "webhook-payload-template",
      "name": "Webhook Payload Template",
      "labels": [
        "Configuration"
      ],
      "attributes": {
        "syntax": "mustache_style",
        "variables": [
          "{{type}}",
          "{{title}}",
          "{{organizer.name}}",
          "{{attendees.0.name}}",
          "{{custom_field}}"
        ],
        "default_format": "JSON",
        "alt_format": "application/x-www-form-urlencoded",
        "_source": "zabal-dispatch-calendar-automation-calcom-api-20260524"
      }
    },
    {
      "id": "subscription-management",
      "name": "Subscription Management",
      "labels": [
        "API_Endpoint"
      ],
      "attributes": {
        "endpoint": "POST /v2/webhooks",
        "payload_field": "payloadTemplate",
        "triggers_field": "triggers",
        "active_field": "active",
        "secret_field": "secret",
        "_source": "zabal-dispatch-calendar-automation-calcom-api-20260524"
      }
    },
    {
      "id": "lu-ma-platform",
      "name": "Lu.ma Platform",
      "labels": [
        "EventManagementService"
      ],
      "attributes": {
        "free_tier": "unlimited events/guests, 500 invites/week",
        "plus_tier_cost": "$59/month or $708/year",
        "domain": "luma.com",
        "api_endpoint": "https://public-api.luma.com",
        "auth": "API key via calendar or organization",
        "rate_limits": "200 req/min calendar key, 500 req/min org key",
        "pricing_model": "subscription (no per-event API cost)",
        "_source": "zabal-dispatch-calendar-automation-luma-api-20260524"
      }
    },
    {
      "id": "lu-ma-webhooks",
      "name": "Lu.ma Webhooks",
      "labels": [
        "APIFeature"
      ],
      "attributes": {
        "requires_plan": "Luma Plus",
        "delivery": "real-time push (webhook-based since April 2026)",
        "setup": "Calendar Settings > Developer > Webhooks > Create",
        "signature_format": "HMAC SHA-256 (Webhook-Signature header)",
        "secret_prefix": "wh_",
        "max_payload_triggers": 9,
        "retry_strategy": "available in dashboard",
        "date_added": "April 2026 v6.0.0",
        "_source": "zabal-dispatch-calendar-automation-luma-api-20260524"
      }
    },
    {
      "id": "guest-registration-workflow",
      "name": "Guest Registration Workflow",
      "labels": [
        "EventFlow"
      ],
      "attributes": {
        "trigger": "Guest Registered webhook fires once per registration",
        "also_fires_on": "Ticket Registered for multi-ticket purchases (1 fire per ticket)",
        "approval_status_values": "Going, Pending, Not Going (mapped from UI labels)",
        "guest_data_available": "email, approval_status, check-in_status, profile fields",
        "guest_updated_vs_registered": "registered = new registrations only; updated = any change including re-registrations",
        "_source": "zabal-dispatch-calendar-automation-luma-api-20260524"
      }
    },
    {
      "id": "event-creation-api",
      "name": "Event Creation API",
      "labels": [
        "APIEndpoint"
      ],
      "attributes": {
        "endpoint": "POST /v1/event/create",
        "required_fields": [
          "name",
          "start_time",
          "end_time"
        ],
        "optional_fields": [
          "description",
          "location",
          "organizer_handle",
          "youtube_handle",
          "website"
        ],
        "returns": "event object with id (evt-*), user_id, timestamps",
        "response_includes": "full event details for immediate reference",
        "_source": "zabal-dispatch-calendar-automation-luma-api-20260524"
      }
    },
    {
      "id": "guest-list-api",
      "name": "Guest List API",
      "labels": [
        "APIEndpoint"
      ],
      "attributes": {
        "endpoint": "GET /v1/event/get-guests",
        "filters": [
          "approval_status",
          "sort_column",
          "sort_direction"
        ],
        "pagination": "supported (see changelog Mar 2026)",
        "response_fields": "flattened (Apr 2026 breaking change from nested structure)",
        "deprecated_fields": "still returned for backwards compat, avoid in new code",
        "_source": "zabal-dispatch-calendar-automation-luma-api-20260524"
      }
    },
    {
      "id": "luma-plus-features",
      "name": "Luma Plus Features",
      "labels": [
        "SubscriptionTier"
      ],
      "attributes": {
        "platform_fee": "0% (vs 5% free tier)",
        "calendar_admins": "5 included + $12/mo per extra",
        "weekly_sends": "5000 (Luma Plus base)",
        "send_add_ons": [
          "10k=$50",
          "25k=$200",
          "50k=$400",
          "75k=$600",
          "100k=$800"
        ],
        "integrations": "Zapier automation, API access",
        "custom_urls": "branded event pages (luma.com/your-slug)",
        "early_access": "select new features",
        "priority_support": true,
        "_source": "zabal-dispatch-calendar-automation-luma-api-20260524"
      }
    },
    {
      "id": "zabal-games-workshop-calendar",
      "name": "ZABAL Gamez Workshop Calendar",
      "labels": [
        "UseCase"
      ],
      "attributes": {
        "status": "not yet created in ZAO OS research",
        "potential_luma_features": [
          "webhook-driven automation",
          "real-time RSVP tracking",
          "attendee export",
          "Zapier email blasts"
        ],
        "integration_target": "Cal.com scheduling + Lu.ma RSVPs",
        "team_admins": "up to 10 with add-on seats",
        "estimated_monthly_invites": "likely under 5000 (free Luma Plus allocation)",
        "_source": "zabal-dispatch-calendar-automation-luma-api-20260524"
      }
    },
    {
      "id": "webhook-signature-verification",
      "name": "Webhook Signature Verification",
      "labels": [
        "SecurityPattern"
      ],
      "attributes": {
        "header_name": "Webhook-Signature",
        "format": "t=<timestamp>,v1=<hmac_sha256>",
        "validation_required": true,
        "secret_storage": "secure (starts with wh_)",
        "timestamp_included": "prevents replay attacks",
        "hash_algorithm": "HMAC SHA-256",
        "_source": "zabal-dispatch-calendar-automation-luma-api-20260524"
      }
    },
    {
      "id": "workshop-lead",
      "name": "Workshop Lead",
      "labels": [
        "Role"
      ],
      "attributes": {
        "definition": "Farcaster builder who commits to deliver a ~30-minute recorded session on a ZAO topic",
        "form_source": "zabalgamez.com/lead.html",
        "confirmation_channel": "Farcaster DM",
        "data_fields": [
          "name",
          "farcaster_handle",
          "x_handle",
          "topic",
          "preferred_june_window",
          "format_preference",
          "special_notes"
        ],
        "reward": "ZABAL participant collectible (Hats Protocol NFT on Base) + mentor team eligibility + cast credit",
        "_source": "zabal-dispatch-calendar-automation-zabal-games-flow-20260524"
      }
    },
    {
      "id": "zabal-games-calendar-flow",
      "name": "ZABAL Gamez Calendar Flow",
      "labels": [
        "Workflow"
      ],
      "attributes": {
        "description": "End-to-end automation from lead submission to Magnetiq hosting to Farcaster announcement",
        "phases": [
          "lead_capture_formspree",
          "zaal_approval_dm",
          "cal_com_booking_creation",
          "luma_event_creation",
          "lead_confirmation",
          "recording_session",
          "magnetic_upload_and_analytics",
          "farcaster_cast_announcement",
          "telegram_reminder",
          "context_indexing"
        ],
        "trigger_source": "form submission at /lead.html",
        "handoff_points": 6,
        "automation_coverage": "30% (form -> Supabase only; rest is manual or TBD)",
        "_source": "zabal-dispatch-calendar-automation-zabal-games-flow-20260524"
      }
    },
    {
      "id": "formspree-integration",
      "name": "Formspree Integration",
      "labels": [
        "Service"
      ],
      "attributes": {
        "endpoint": "https://formspree.io/f/mjgajyqe",
        "form_id": "mjgajyqe",
        "current_role": "Workshop lead form submission handler (soft launch)",
        "location": "zabalgamez.com/lead.html",
        "fields_captured": [
          "name",
          "handle",
          "topic",
          "when",
          "notes"
        ],
        "webhooks": "Not yet configured; no auto-forward to Supabase or Zaal",
        "status": "LIVE but manual-only",
        "next_step": "Add webhook to push submissions to Supabase workshop_leads table",
        "_source": "zabal-dispatch-calendar-automation-zabal-games-flow-20260524"
      }
    },
    {
      "id": "cal-com-workshop-slots",
      "name": "Cal.com Workshop Slots",
      "labels": [
        "Service"
      ],
      "attributes": {
        "vendor": "cal.com",
        "event_type": "ZABAL Gamez Workshop Slot (pending creation)",
        "slot_duration_minutes": 30,
        "availability": "June 1-30, 2026",
        "booking_model": "Self-serve embed iframe on /lead.html",
        "embedded_url": "https://cal.com/<handle>/zabal-games-workshop (placeholder)",
        "status": "NOT YET CREATED (Waiting blocker W3)",
        "owner": "Zaal",
        "api_integration": "TBD (manual link sharing to leads post-approval)",
        "handoff_to": "Zaal DM -> lead confirmation -> workshop-leads.json update",
        "_source": "zabal-dispatch-calendar-automation-zabal-games-flow-20260524"
      }
    },
    {
      "id": "lu-ma-workshop-calendar",
      "name": "Lu.ma Workshop Calendar",
      "labels": [
        "Service"
      ],
      "attributes": {
        "vendor": "luma.xyz",
        "event_name": "ZABAL Gamez Season 1 - June Workshops",
        "calendar_type": "Public calendar with per-workshop event creation",
        "embed_url": "https://lu.ma/zabal-games-workshops (placeholder)",
        "status": "NOT YET CREATED (Waiting blocker W2)",
        "owner": "Zaal",
        "per_event_creation": "Zaal creates one Lu.ma event per confirmed workshop (title, lead name, date, topic, description)",
        "integration": "No API integration; manual event creation per lead",
        "rsvp_collection": "Lu.ma handles; opt-in emails sent by Magnetiq later",
        "handoff_to": "Tyler/Magnetiq (event URL shared in announcement cast)",
        "_source": "zabal-dispatch-calendar-automation-zabal-games-flow-20260524"
      }
    },
    {
      "id": "magnetic-workshop-library-portal",
      "name": "Magnetiq Workshop Library Portal",
      "labels": [
        "Service"
      ],
      "attributes": {
        "vendor": "magnetic.ai / Tyler Stambaugh",
        "role": "The workshop library + retention hub for ZABAL Gamez",
        "native_video_hosting": "500GB capacity, natively hosted, no YouTube required",
        "analytics": "Per-vendor watch-time drop-off tracking, opt-in email collection",
        "snaps_methodology": "Status (badges), Novelty (time-limited access), Access (vendor-exclusive content), Power (voting), Stuff (merch) to drive emotional loyalty",
        "zabal_connector_nft": "Anchor magnet NFT; collecting it auto-drops road-to-ZAOstock entry",
        "ugc_fields": "Link-based submission for workshop submissions, suggestions, or promotion posts",
        "decisions_locked": [
          "Magnetiq will be the vendor",
          "Tyler pitches Magnetiq as a 30-min session",
          "Educational library model + per-vendor analytics"
        ],
        "action_pending": [
          "Tyler: build Zabal connector magnet + intro video + poll wording + UGC wording"
        ],
        "timeline": "Zabal Gamez opens ~Jun 1; Magnetiq portal live by then",
        "_source": "zabal-dispatch-calendar-automation-zabal-games-flow-20260524"
      }
    },
    {
      "id": "zaal-approval-gate",
      "name": "Zaal Approval Gate",
      "labels": [
        "Workflow_Step"
      ],
      "attributes": {
        "description": "Zaal reviews form submission, DMs lead in Farcaster to confirm topic + date + recording format",
        "trigger": "Formspree notification (email or webhook to Supabase)",
        "actions": [
          "Read form submission",
          "DM lead in Farcaster with questions (if any)",
          "Confirm date + format (livestream or pre-recorded or both)",
          "Lock the workshop-leads.json entry with confirmed_date + format"
        ],
        "timeline_to_complete": "Within 24h of form submission (per lead.html copy)",
        "downstream_trigger": "Cal.com slot creation + Lu.ma event creation",
        "_source": "zabal-dispatch-calendar-automation-zabal-games-flow-20260524"
      }
    },
    {
      "id": "workshop-lead-confirmation",
      "name": "Workshop Lead Confirmation",
      "labels": [
        "Workflow_Step"
      ],
      "attributes": {
        "description": "Lead responds to Zaal DM, confirms the date and recording format",
        "handoff_from": "Zaal approval gate",
        "actions": [
          "Lead DMs Zaal with confirmation",
          "Zaal records confirmation in workshop-leads.json (status: confirmed, confirmed_date: YYYY-MM-DD)"
        ],
        "triggers_next": "Cal.com booking link + Lu.ma event URL sent to lead",
        "_source": "zabal-dispatch-calendar-automation-zabal-games-flow-20260524"
      }
    },
    {
      "id": "cal-com-slot-creation",
      "name": "Cal.com Slot Creation",
      "labels": [
        "Workflow_Step"
      ],
      "attributes": {
        "description": "Once a lead is confirmed, Zaal creates a Cal.com booking slot (either manual or via API)",
        "trigger": "Zaal marks workshop-leads.json entry as confirmed",
        "method": "CURRENT: Manual - Zaal logs into cal.com, creates slot for the confirmed date, sends URL to lead via DM",
        "method_FUTURE": "API integration via cal.com webhook: on confirmation, trigger POST /cal.com/events to create 30-min slot",
        "slot_properties": {
          "duration_minutes": 30,
          "date": "confirmed_date from workshop-leads.json",
          "title": "ZABAL Gamez Workshop: {lead.topic}",
          "description": "{lead.name} on {lead.topic}",
          "organizer": "Zaal (bettercallzaal)"
        },
        "return_value": "cal_com_url, cal_com_event_id",
        "stored_in": "workshop-leads.json (cal_com_event_id)",
        "_source": "zabal-dispatch-calendar-automation-zabal-games-flow-20260524"
      }
    },
    {
      "id": "lu-ma-event-creation",
      "name": "Lu.ma Event Creation",
      "labels": [
        "Workflow_Step"
      ],
      "attributes": {
        "description": "Zaal creates one Lu.ma event per confirmed workshop",
        "trigger": "Same as Cal.com: workshop-leads.json entry marked as confirmed",
        "method": "CURRENT: Manual - Zaal logs into luma, creates event with title/description/date, gets RSVP link",
        "method_FUTURE": "API integration; POST to lu.ma/api/events",
        "event_properties": {
          "title": "ZABAL Gamez Workshop: {lead.topic} with {lead.name}",
          "date_time": "TBD (loose June window chosen by lead, firmed up with Zaal)",
          "duration_minutes": 30,
          "location": "Online (Farcaster Spaces or Zoom/OBS)",
          "description": "{lead.topic}. Livestreamed / recorded then clipped. Watch live or after. Studio: Magnetiq. Recording link posted after.",
          "image": "ZABAL Gamez logo or lead.name avatar"
        },
        "rsvp_collection": "Yes; Lu.ma collects RSVP + email opt-in",
        "return_value": "luma_url, luma_event_id",
        "stored_in": "workshop-leads.json (luma_event_id)",
        "_source": "zabal-dispatch-calendar-automation-zabal-games-flow-20260524"
      }
    },
    {
      "id": "recording-session",
      "name": "Recording Session",
      "labels": [
        "Workflow_Step"
      ],
      "attributes": {
        "description": "On confirmed_date, lead streams live or pre-records their 30-min session",
        "format_options": [
          "Live stream on Farcaster Spaces (preferred; allows real-time /zabal chat)",
          "Screen-recorded + uploaded to Google Drive (Zaal downloads, uploads to Magnetiq)",
          "Both (live + recorded backup)"
        ],
        "visibility_mode": "As per Doc 701, builder shows their work - livestream, recorded clips, AI logs, build casts",
        "recording_owner": "Lead or Zaal (whoever is recording)",
        "file_output": "Either Farcaster Spaces stream URL (extractable for clipping) or MP4 file from OBS/screen-record",
        "next_step": "Upload to Magnetiq",
        "_source": "zabal-dispatch-calendar-automation-zabal-games-flow-20260524"
      }
    },
    {
      "id": "magnetic-upload-clipping",
      "name": "Magnetiq Upload & Clipping",
      "labels": [
        "Workflow_Step"
      ],
      "attributes": {
        "description": "Tyler or Zaal uploads the 30-min session to Magnetiq native video hosting",
        "trigger": "Recording session complete",
        "responsible_party": "Tyler (Magnetiq) or Zaal",
        "method": "MANUAL: Log into Magnetiq portal, upload MP4 to the ZABAL Gamez workshop library magnet",
        "compression_note": "Magnetiq hosts up to 500GB; longer videos may need compression",
        "output": [
          "Video hosted on Magnetiq native player (not just YouTube link)",
          "Magnetiq analytics enabled: per-vendor drop-off, viewer heat-map, opt-in email collection"
        ],
        "youtube_mirror": "OPTIONAL: Also upload to YouTube for redundancy + discoverability; Magnetiq can link to it",
        "analytics": "Tyler provides watch-time per vendor; feeds SNAPS methodology (Novelty: early access to Magnetiq-exclusive drop)",
        "stored_in": "workshop-leads.json (magnetic_video_url)",
        "_source": "zabal-dispatch-calendar-automation-zabal-games-flow-20260524"
      }
    },
    {
      "id": "farcaster-announcement-cast",
      "name": "Farcaster Announcement Cast",
      "labels": [
        "Workflow_Step"
      ],
      "attributes": {
        "description": "Zaal fires a public cast in /zabal announcing the new workshop + linking to recording",
        "trigger": "Magnetiq upload complete (or YouTube link ready)",
        "channel": "/zabal (Farcaster channel, live as of 2026-05-22)",
        "cast_contents": [
          "Lead's name + Farcaster handle",
          "Topic",
          "Timestamp (just recorded / now live)",
          "Magnetiq recording link (or YouTube if no Magnetiq)",
          "Lu.ma RSVP link for future workshops",
          "Inline video if Farcaster supports native embed"
        ],
        "example": "NEW WORKSHOP: @{lead.handle} on {topic}. Just dropped on Magnetiq. Watch -> {magnetic_link}. More workshops: {luma_url}. /zabal #ZABAL Gamez",
        "amplification": "ZAO accounts recast in /zabal + cross-post to X, Telegram, ZAO newsletter",
        "return_value": "cast_hash (for linking)",
        "_source": "zabal-dispatch-calendar-automation-zabal-games-flow-20260524"
      }
    },
    {
      "id": "telegram-reminder-bot",
      "name": "Telegram Reminder Bot",
      "labels": [
        "Service"
      ],
      "attributes": {
        "description": "Day-after (T+1) reminder sent to lead with recording link + stats (if available)",
        "method": "FUTURE: Telegram bot or email; CURRENT: Manual DM",
        "trigger": "workshop-leads.json.status = 'recorded'",
        "message_template": "Your ZABAL Gamez workshop is live! Watch here: {magnetic_link}. Share it with your audience. Viewer stats: {watch_time_avg}. Questions? DM in /zabal.",
        "leads_to": "Lead shares recording in their own channels, driving cross-promotion",
        "_source": "zabal-dispatch-calendar-automation-zabal-games-flow-20260524"
      }
    },
    {
      "id": "context-indexing-llms-txt",
      "name": "Context Indexing & LLMs.txt",
      "labels": [
        "Workflow_Step"
      ],
      "attributes": {
        "description": "Post-season, workshop recordings are indexed into zabalgamez.com/llms.txt as kEngram pointers for July builders",
        "timeline": "After June workshops complete (Jun 30)",
        "content_added": [
          "Workshop title + lead name",
          "Topic summary",
          "Magnetiq link",
          "YouTube mirror (if available)",
          "Key learnings / code snippets from workshop"
        ],
        "purpose": "July builders can load /llms.txt into any AI harness and ask 'which workshop covers Empire Builder integration?' and get a direct link",
        "stored_in": "zabalgamez.com/llms.txt (additions in July prep phase)",
        "query_example": "Claude Code @ zabalgamez.com/llms.txt -> 'What workshops teach Claude Code?' -> returns 3 workshop links with watch summaries",
        "_source": "zabal-dispatch-calendar-automation-zabal-games-flow-20260524"
      }
    },
    {
      "id": "workshop-lead-data-schema",
      "name": "Workshop Lead Data Schema",
      "labels": [
        "Data_Structure"
      ],
      "attributes": {
        "source": "data/workshop-leads.json",
        "current_example": {
          "id": "001",
          "name": "Tyler Stambaugh",
          "org": "Magnetiq",
          "topic": "Magnetiq - the workshop library platform itself",
          "format": "30-min pitch, livestreamed then clipped",
          "when": "any day in June",
          "status": "confirmed",
          "confirmed_date": "2026-05-22",
          "spec_url": "https://github.com/ZAODEVZ/zabalgames/blob/main/docs/research/714-tyler-call.md",
          "color": "zabal"
        },
        "future_fields_needed": [
          "cal_com_event_id",
          "cal_com_url",
          "luma_event_id",
          "luma_url",
          "recording_date_actual (YYYY-MM-DD)",
          "recording_format (livestream|pre-recorded|both)",
          "recording_url_farcaster (spaces stream if live)",
          "magnetic_video_id",
          "magnetic_video_url",
          "youtube_url (optional mirror)",
          "cast_hash (farcaster announcement)",
          "status (values: submitted|approved|confirmed|recorded|announced|indexed)"
        ],
        "schema_version": "2 (with calendar + recording fields)",
        "_source": "zabal-dispatch-calendar-automation-zabal-games-flow-20260524"
      }
    },
    {
      "id": "zaal-bettercallzaal",
      "name": "Zaal (BetterCallZaal)",
      "labels": [
        "Person"
      ],
      "attributes": {
        "role": "ZABAL Gamez host + calendar orchestrator + announcement caster",
        "farcaster_id": 19640,
        "responsibilities": [
          "Review workshop lead form submissions (Formspree)",
          "DM leads to confirm date + format",
          "Create Cal.com booking slots",
          "Create Lu.ma events",
          "Collect RSVPs",
          "Coordinate with lead on recording date/time",
          "Fire Farcaster announcement cast once recording is live on Magnetiq",
          "Post-season: index workshops into /llms.txt"
        ],
        "bottleneck": "All calendar + booking steps are manual; automation is the lever",
        "_source": "zabal-dispatch-calendar-automation-zabal-games-flow-20260524"
      }
    },
    {
      "id": "tyler-stambaugh-magnetic",
      "name": "Tyler Stambaugh (Magnetiq)",
      "labels": [
        "Person"
      ],
      "attributes": {
        "role": "Workshop content platform vendor + video host + analytics provider",
        "organization": "Magnetiq",
        "responsibilities": [
          "Build Zabal Connector anchor magnet NFT + portal UX",
          "Host workshop videos (native Magnetiq hosting, 500GB capacity)",
          "Collect per-vendor watch analytics (drop-off, opt-in emails)",
          "Build YouTube watch-time analytics surface (future, promised in Doc 714)",
          "Write recap shorts linking to workshops (lower-priority, ownership unclear per Doc 714)"
        ],
        "decision_locked": "Magnetiq is the workshop library vendor",
        "_source": "zabal-dispatch-calendar-automation-zabal-games-flow-20260524"
      }
    },
    {
      "id": "supabase-workshop-table",
      "name": "Supabase Workshop Table",
      "labels": [
        "Service"
      ],
      "attributes": {
        "status": "PLANNED (schema drafted, not deployed)",
        "table_name": "workshop_leads (or similar)",
        "columns": [
          "id (uuid)",
          "name (text)",
          "farcaster_handle (text)",
          "x_handle (text)",
          "topic (text)",
          "preferred_date_window (text)",
          "format_preference (enum: livestream|pre-recorded|both)",
          "notes (text)",
          "status (enum: submitted|approved|confirmed|recorded|announced|indexed)",
          "confirmed_date (date, nullable)",
          "cal_com_event_id (text, nullable)",
          "cal_com_url (text, nullable)",
          "luma_event_id (text, nullable)",
          "luma_url (text, nullable)",
          "magnetic_video_id (text, nullable)",
          "magnetic_video_url (text, nullable)",
          "youtube_url (text, nullable)",
          "cast_hash (text, nullable)",
          "created_at (timestamp)",
          "confirmed_at (timestamp, nullable)",
          "recorded_at (timestamp, nullable)"
        ],
        "rls_policy": "TBD; public read-only for workshop list, Zaal insert/update for management",
        "next_step": "Deploy schema; add Formspree webhook to auto-insert submissions",
        "_source": "zabal-dispatch-calendar-automation-zabal-games-flow-20260524"
      }
    },
    {
      "id": "bmi",
      "name": "BMI",
      "labels": [
        "performing-rights-organization",
        "Tool|Platform"
      ],
      "attributes": {
        "songwriter_fee": "$0 (free)",
        "publisher_fee": "$250 one-time for LLC registration",
        "collections": "performance-royalties + mechanical-royalties-in-house",
        "contract_length": "2-year writer / 5-year publisher",
        "overhead_kept": "~15%",
        "international": "reciprocal agreements with foreign PROs",
        "mechanical_coverage": "in-house (no Songtrust needed)",
        "_source": "zabal-dispatch-music-rights-pipeline-creator-fund-onchain-20260524",
        "category": "music-infra",
        "role": "Performing Rights Organization (PRO) + publishing admin",
        "cost": "$250 one-time for LLC publisher registration",
        "cost_songwriter": "$0 free for songwriter affiliation",
        "auth": "online portal signup, requires EIN or SSN",
        "what_it_does": "Collects performing rights (radio, TV, streaming performance) and mechanical royalties (streaming, downloads) for registered compositions. Issues ISWC codes automatically when work is registered. Provides international reciprocal PRO agreements.",
        "publisher_registration": "establishes publishing entity that owns and administers compositions",
        "songwriter_registration": "registers individual as composer/lyricist, prerequisite for publisher",
        "timing": "5 days approval, songwriter affiliation free and immediate",
        "registration_requirement": "at least one composition written or co-written",
        "mechanical_model": "in-house (BMI collects mechanicals directly from licensees, no separate agency needed)",
        "replaces": "Songtrust, separate PRO + mechanical licensing (if using BMI in-house option)",
        "why_zao_uses": "$250 one-time fee lower than alternatives, BMI + MLC dual registration (belt-and-suspenders) covers all collecting societies globally, ZAO Music DBA registered as BMI publisher 2026"
      }
    },
    {
      "id": "the-mlc",
      "name": "The MLC",
      "labels": [
        "mechanical-licensing-collective",
        "mechanical-royalty-collector",
        "Tool|Platform"
      ],
      "attributes": {
        "royalty_type": "digital-streaming-mechanical",
        "fee": "$0 free registration",
        "coverage": "U.S. digital streams only (Spotify, Apple, Amazon, YouTube, Pandora)",
        "rate_per_stream": "$0.0008-$0.0012 (statutory)",
        "payout_frequency": "monthly (~2 months after streaming month)",
        "user_registration_time": "~15-30 minutes",
        "retroactive_payouts": "yes, back to Jan 2021 for new registrations",
        "critical": "indie artists leave ~15-25% on table if not registered",
        "_source": "zabal-dispatch-music-rights-pipeline-creator-fund-onchain-20260524",
        "registration_effort": "15 minutes per artist",
        "belt_and_suspenders": "redundant-with-BMI",
        "category": "music-infra",
        "role": "Mechanical Licensing Collective for US streaming mechanicals only",
        "cost": "$0 free to register, free to collect",
        "auth": "online account creation, no fee",
        "what_it_does": "Statutory collector of mechanical royalties from US streaming services (Spotify, Apple Music, Amazon Music, YouTube Music). Registers individual compositions with songwriter IPI, writer splits, and publisher entity. Matches ISRC to ISWC for royalty routing.",
        "jurisdiction": "US streaming mechanicals only, does not cover international or physical",
        "registration_timeline": "15 minutes online per composition",
        "requirement": "songwriter must have pre-existing BMI or ASCAP affiliation with IPI number",
        "iswc_matching": "matches ISRC from DistroKid to ISWC in MLC database for mechanical royalty routing",
        "purpose": "redundant backup to BMI in-house mechanicals collection, ensures no composition slips through unmatched",
        "replaces": "relying only on BMI for mechanicals (which is fine, but MLC is free insurance)",
        "why_zao_uses": "$0 cost, prevents unmatched recording problem (4.5-23% duplicate ISRC rates per UK Govt 2026), ZAO Music spec requires each artist register with MLC before DistroKid upload"
      }
    },
    {
      "id": "zao-music-entity",
      "name": "ZAO Music Entity",
      "labels": [
        "artist-support-collective",
        "business-legal-entity"
      ],
      "attributes": {
        "legal_wrapper": "DBA under BetterCallZaal Strategies LLC",
        "dba_name": "ZAO Music Publishing",
        "positioning": "artist-support-collective, NOT record label",
        "artist_contract": "per-release participation agreement (90-day termination)",
        "master_ownership": "artist retains 100%",
        "zao_gains": "publishing-admin-rights + producer-tag + compilation-rights",
        "producer_tag_domain": "thezao.com",
        "first_release": "the cipher (10 artists, summer 2026)",
        "_source": "zabal-dispatch-music-rights-pipeline-creator-fund-onchain-20260524",
        "structure": "DBA under BetterCallZaal Strategies LLC",
        "artist_share_default": 80,
        "treasury_share": 10,
        "curator_share": 10,
        "no_exclusive_deals": true,
        "per_release_participation": "90-day termination"
      }
    },
    {
      "id": "spotify-dsp",
      "name": "Spotify (DSP)",
      "labels": [
        "digital-service-provider"
      ],
      "attributes": {
        "per_stream_rate": "$0.003-$0.005",
        "payment_lag": "30-60 days reporting, then aggregator holds 2-3 months",
        "payment_method": "pro-rata royalty pool model",
        "total_lifetime_royalties_issued": "~$10B cumulative",
        "payout_recipient_zao": "via DistroKid account or 0xSplits split address",
        "_source": "zabal-dispatch-music-rights-pipeline-creator-fund-onchain-20260524"
      }
    },
    {
      "id": "apple-music-dsp",
      "name": "Apple Music (DSP)",
      "labels": [
        "digital-service-provider"
      ],
      "attributes": {
        "per_stream_rate": "$0.0078-$0.01",
        "payment_lag": "same as Spotify (30-60 days + 2-3 month aggregator hold)",
        "payment_method": "pro-rata model",
        "higher_rate": "than Spotify, attracts subscriber-heavy catalogs",
        "_source": "zabal-dispatch-music-rights-pipeline-creator-fund-onchain-20260524"
      }
    },
    {
      "id": "songtrust",
      "name": "Songtrust",
      "labels": [
        "publishing-admin-service"
      ],
      "attributes": {
        "fee_per_writer": "$100",
        "commission_on_collections": "15-20%",
        "scope": "global mechanical royalties",
        "verdict_zao": "SKIP - BMI in-house mechanicals sufficient, save 15-20% cost",
        "unnecessary_when": "BMI publisher registration replaces need",
        "_source": "zabal-dispatch-music-rights-pipeline-creator-fund-onchain-20260524"
      }
    },
    {
      "id": "zao-creator-fund",
      "name": "ZAO Creator Fund",
      "labels": [
        "on-chain-treasury"
      ],
      "attributes": {
        "source": "the 25% savings from fee consolidation",
        "mechanics": "multi-sig governance on Base via 0xSplits waterfall",
        "use_cases": "artist grants, curation bounties, emergency fund",
        "funding_trigger": "% of every DistroKid payout routed to fund via split logic",
        "philosophy": "net benefit, not a fee",
        "_source": "zabal-dispatch-music-rights-pipeline-creator-fund-onchain-20260524"
      }
    },
    {
      "id": "zora-protocol-sdk",
      "name": "Zora Protocol SDK",
      "labels": [
        "nft-mint-contract-sdk"
      ],
      "attributes": {
        "version": "v0.9.0",
        "contract_type": "create1155 (music editions)",
        "chain": "Base",
        "deployment_cost": "~$1.05 per release",
        "payoutRecipient": "points to 0xSplits split address",
        "integration_pattern": "splits address as payout receiver for NFT mints",
        "_source": "zabal-dispatch-music-rights-pipeline-creator-fund-onchain-20260524"
      }
    },
    {
      "id": "unified-artist-royalty-flow-zao-music",
      "name": "Unified Artist Royalty Flow (ZAO Music)",
      "labels": [
        "composite-system"
      ],
      "attributes": {
        "inputs": "Spotify streams + Apple Music streams + all DSPs",
        "reporting_lag": "30-60 days from DSP, then 2-3 months DistroKid hold",
        "distributor_account": "DistroKid Musician Plus label account under BetterCallZaal Strategies",
        "split_point": "DistroKid receives payout from DSPs, routes to 0xSplits split on Base",
        "split_recipients": "artist wallet (80-85%) + ZAO Music Treasury (10%) + curator/collaborator (5-10%)",
        "push_vs_pull": "PushSplit sends directly; anyone can call distribute() for free; optional keeper fee",
        "settlement_currency": "ETH on Base (optional Swapper for USDC conversion)",
        "real_time_transparency": "all splits on-chain, auditable, no hidden fees",
        "_source": "zabal-dispatch-music-rights-pipeline-creator-fund-onchain-20260524"
      }
    },
    {
      "id": "universal-music-group-umg",
      "name": "Universal Music Group (UMG)",
      "labels": [
        "Corporation"
      ],
      "attributes": {
        "market_position": "Largest major label (controls ~30% of global recorded music)",
        "acquisition_closed": "2026-02-20",
        "acquisition_value": "$775 million",
        "key_subsidiary": "Virgin Music Group",
        "recent_moves": [
          "Acquired Downtown Music Holdings (Feb 2026)",
          "Acquired PIAS independent distributor (2025)",
          "Acquired Revelator competitor (Mar 2026 via Warner racing)"
        ],
        "_source": "zabal-dispatch-music-rights-pipeline-post-umg-distrokid-only-20260524"
      }
    },
    {
      "id": "cd-baby",
      "name": "CD Baby",
      "labels": [
        "DigitalDistributor"
      ],
      "attributes": {
        "founding_year": 2000,
        "acquired_by": "UMG via Virgin Music Group",
        "acquisition_date": "2026-02-20",
        "creator_base": "4+ million DIY artists",
        "pricing_model": "Per-release ($9.99 single, $29.99 album one-time)",
        "royalty_cut": "9% commission",
        "catalog_permanence": "Permanent (no renewal required)",
        "status_post_acquisition": "Still operational but no longer independent",
        "market_impact": "Artists who chose CD Baby for independence now distribute through UMG",
        "_source": "zabal-dispatch-music-rights-pipeline-post-umg-distrokid-only-20260524"
      }
    },
    {
      "id": "tunecore",
      "name": "TuneCore",
      "labels": [
        "DigitalDistributor"
      ],
      "attributes": {
        "ownership": "Believe (French digital music company, publicly traded)",
        "pricing_structure": "Per-release annual renewal",
        "single_price": "$9.99/year",
        "album_price": "$29.99/year",
        "unlimited_plan": "$22.99-49.99/year (as of 2026)",
        "royalty_retention": "100% on most tiers",
        "delivery_speed": "24-72 hours (major platforms), 3-7 days average",
        "publishing_admin": "Included in some plans, takes 20% of social platform royalties",
        "catalog_permanence": "Annual renewal required; removal on non-payment",
        "_source": "zabal-dispatch-music-rights-pipeline-post-umg-distrokid-only-20260524"
      }
    },
    {
      "id": "ditto-music",
      "name": "Ditto Music",
      "labels": [
        "DigitalDistributor"
      ],
      "attributes": {
        "pricing": "$19/year (Starter)",
        "royalty_retention": "100%",
        "ownership": "Independently held (as of May 2026)",
        "market_positioning": "Affordable indie alternative",
        "feature_set": "Basic distribution, limited advanced tools vs DistroKid/TuneCore",
        "catalog_retention": "Requires ongoing subscription",
        "_source": "zabal-dispatch-music-rights-pipeline-post-umg-distrokid-only-20260524"
      }
    },
    {
      "id": "unitedmasters",
      "name": "UnitedMasters",
      "labels": [
        "DigitalDistributor"
      ],
      "attributes": {
        "ownership": "Independently held (investment from majors but not controlled)",
        "free_tier": "Free distribution with 10% commission",
        "paid_tiers": "$5-60/year (0% commission)",
        "brand_partnership": "Direct DSP relationships for artist exposure",
        "select_tier": "$59.99/year",
        "positioning": "Artist-brand-first, not distribution-first",
        "_source": "zabal-dispatch-music-rights-pipeline-post-umg-distrokid-only-20260524"
      }
    },
    {
      "id": "downtown-music-holdings",
      "name": "Downtown Music Holdings",
      "labels": [
        "MusicServicesCompany"
      ],
      "attributes": {
        "founded": 2007,
        "founder": "Justin Kalifowitz",
        "pre_acquisition_portfolio": [
          "CD Baby (DIY distribution)",
          "FUGA (B2B label distribution)",
          "Songtrust (publishing royalty collection)",
          "Curve (royalty accounting)",
          "Found.ee",
          "Soundrop"
        ],
        "acquired_by": "UMG Virgin Music Group",
        "acquisition_date": "2026-02-20",
        "creator_clients": "5,000+ business clients, 4M+ individual creators",
        "geographic_reach": "145 countries",
        "post_acquisition_status": "Integrated into Virgin Music Group",
        "_source": "zabal-dispatch-music-rights-pipeline-post-umg-distrokid-only-20260524"
      }
    },
    {
      "id": "european-commission-ec",
      "name": "European Commission (EC)",
      "labels": [
        "Regulatory Body"
      ],
      "attributes": {
        "role": "EU antitrust regulator",
        "action_on_downtown_deal": "Phase II investigation (July 2025 - Feb 2026)",
        "primary_concern": "Commercially sensitive data access risk to competitors",
        "forced_remedy": "Divestiture of Curve Royalty Systems only",
        "approval_date": "2026-02-13",
        "conditional_approval": "Curve must be sold to independent buyer; CD Baby/FUGA allowed to remain with UMG",
        "signal_sent": "Data sovereignty concerns warrant scrutiny, but distribution platform ownership not blocked",
        "_source": "zabal-dispatch-music-rights-pipeline-post-umg-distrokid-only-20260524"
      }
    },
    {
      "id": "curve-royalty-systems",
      "name": "Curve Royalty Systems",
      "labels": [
        "Software/Accounting"
      ],
      "attributes": {
        "function": "Accounting/royalty calculation for indie labels",
        "held_data": "Detailed financial data from competing labels (commercially sensitive)",
        "acquired_by": "UMG (initially)",
        "regulatory_action": "Forced divestment by EC as remedy",
        "divested_to": "Independent buyer (approved by EC)",
        "timeline": "Spun off during 2025 Phase II review, fully separated by Feb 2026",
        "_source": "zabal-dispatch-music-rights-pipeline-post-umg-distrokid-only-20260524"
      }
    },
    {
      "id": "the-mlc-mechanical-licensing-collective",
      "name": "The MLC (Mechanical Licensing Collective)",
      "labels": [
        "LicensingOrganization"
      ],
      "attributes": {
        "role": "US statutory mechanicals collector for streaming",
        "fee": "Free",
        "coverage": "US streaming only",
        "registration_effort": "~15 minutes per artist",
        "zao_music_use": "Redundant registration alongside BMI for belt-and-suspenders coverage",
        "_source": "zabal-dispatch-music-rights-pipeline-post-umg-distrokid-only-20260524"
      }
    },
    {
      "id": "zao-music-the-cipher-collective-project",
      "name": "ZAO Music (The Cipher Collective Project)",
      "labels": [
        "ArtistSupportCollective"
      ],
      "attributes": {
        "legal_wrapper": "DBA under BetterCallZaal Strategies LLC",
        "dba_name": "ZAO Music Publishing",
        "positioning": "Artist support collective, NOT a record label",
        "launch_timeline": "Summer 2026 (cipher project)",
        "chosen_distributor": "DistroKid Musician Plus ($44.99/yr)",
        "chosen_publisher": "BMI",
        "chosen_mechanicals": "BMI + The MLC (redundant)",
        "on_chain_rails": "0xSplits on Base for per-release splits",
        "artist_ownership": "100% master ownership by artists",
        "zao_music_rights": "Publishing admin, producer tag, compilation rights",
        "participation_model": "90-day term, per-release participation agreement",
        "first_release_plan": "The Cipher (10 artists), timed to ZAOstock Oct 3 2026",
        "why_skipped_cd_baby": "UMG ownership = artist data flows to competitor; independence rationale destroyed",
        "_source": "zabal-dispatch-music-rights-pipeline-post-umg-distrokid-only-20260524"
      }
    },
    {
      "id": "virgin-music-group",
      "name": "Virgin Music Group",
      "labels": [
        "MusicServicesSubsidiary"
      ],
      "attributes": {
        "parent": "Universal Music Group",
        "role": "Operations arm for UMG's indie services strategy",
        "post_acquisition_responsibility": "Integration of Downtown Music assets (CD Baby, FUGA, Songtrust)",
        "co_ceos": "Nat Pastor, JT Myers",
        "public_messaging": "Greater flexibility and sharper services for indie artists",
        "actual_strategic_impact": "Extended UMG's monetization timeline from signed artists only to pre-signed DIY tier",
        "_source": "zabal-dispatch-music-rights-pipeline-post-umg-distrokid-only-20260524"
      }
    },
    {
      "id": "believe-soundcloud-owner-tunecore-owner",
      "name": "Believe (SoundCloud owner, TuneCore owner)",
      "labels": [
        "DigitalMusicCompany"
      ],
      "attributes": {
        "ownership": "Publicly traded French company",
        "subsidiary": "TuneCore",
        "market_position": "Number 2 in indie distribution (behind DistroKid)",
        "relevance_to_decision": "Partial consolidation risk; TuneCore remains operational but not independently owned",
        "_source": "zabal-dispatch-music-rights-pipeline-post-umg-distrokid-only-20260524"
      }
    },
    {
      "id": "bmi-publisher-registration",
      "name": "BMI Publisher Registration",
      "labels": [
        "legal_entity_step"
      ],
      "attributes": {
        "cost_llc": "$250 one-time",
        "cost_individual": "$175 one-time",
        "cost_partnership": "$500 one-time",
        "jurisdiction": "US-based only",
        "timeline_days": 5,
        "what_it_does": "Establishes the publishing company that will own and administer compositions. Enables BMI to collect performance royalties and mechanical royalties in-house (no Songtrust needed). Publisher must be registered before any songs can be claimed as owned by that entity.",
        "key_fact": "Self-publishing is allowed but requires explicit publisher registration if you want separate publisher vs songwriter payouts. Otherwise BMI treats you as self-published and flows both shares to your writer account.",
        "_source": "zabal-dispatch-music-rights-pipeline-registration-order-20260524"
      }
    },
    {
      "id": "bmi-songwriter-affiliation",
      "name": "BMI Songwriter Affiliation",
      "labels": [
        "rights_registration"
      ],
      "attributes": {
        "cost": "$0 free",
        "jurisdiction": "Global (must join before affiliate with BMI Publisher)",
        "requirement": "At least one composition written or co-written",
        "timeline_days": 1,
        "what_it_does": "Registers you as a songwriter/composer in BMI's system. Required before registering any compositions. Must be done BEFORE publishing entity registration if using both.",
        "critical_rule": "Late affiliation means royalties are NOT paid. You must be affiliated BEFORE the performance/stream happens. Retroactive claims are difficult.",
        "_source": "zabal-dispatch-music-rights-pipeline-registration-order-20260524"
      }
    },
    {
      "id": "the-mlc-songwriter-registration",
      "name": "The MLC Songwriter Registration",
      "labels": [
        "mechanical_royalties_registration"
      ],
      "attributes": {
        "cost": "$0 free",
        "jurisdiction": "US streaming mechanicals only",
        "requirement": "One free Member account per songwriter/self-admin entity",
        "timeline_days": 15,
        "what_it_does": "Registers individual compositions with the Mechanical Licensing Collective. The MLC is the statutory collector for US streaming mechanicals (Spotify, Apple Music, etc.). Required BEFORE recordings go live or mechanical royalties are missed. Links songwriter IPI, composition title, writer splits, publisher entity.",
        "critical_rule": "Registration must happen before the song is distributed. The MLC can only pay out mechanicals for compositions already in their database matched to ISRCs. If a song streams before MLC registration, the royalties sit unmatched until registration happens (up to 9 months grace period per BMI policy).",
        "_source": "zabal-dispatch-music-rights-pipeline-registration-order-20260524"
      }
    },
    {
      "id": "distrokid-upload",
      "name": "DistroKid Upload",
      "labels": [
        "digital_distribution"
      ],
      "attributes": {
        "cost": "$44.99/yr Musician Plus (ZAO Music standard)",
        "cost_fallback": "$29 per single or $49 per album Leave a Legacy (protects catalog if payment lapses)",
        "what_it_does": "Distributes master recordings to all DSPs (Spotify, Apple Music, Amazon Music, Tidal, etc.). Generates or accepts ISRC codes for the sound recording. Requires UPC for the release. Takes 24-48 hours to go live on Spotify.",
        "isrc_ownership": "DistroKid assigns ISRCs by default. Use theirs unless you pre-assign your own via RIAA ($95 one-time registrant code). DO NOT let multiple distributors assign different ISRCs to the same recording.",
        "timeline_days": 3,
        "critical_rule": "Must happen AFTER BMI and MLC registration are complete. DistroKid does NOT register with PROs or MLC. You must do that separately. If you upload first, ISRCs arrive before ISWC exists, creating unmatched recordings.",
        "_source": "zabal-dispatch-music-rights-pipeline-registration-order-20260524"
      }
    },
    {
      "id": "iswc-code-assignment",
      "name": "ISWC Code Assignment",
      "labels": [
        "composition_identifier"
      ],
      "attributes": {
        "format": "T-NNNNNNNNN-C (11 digits + T prefix + check digit)",
        "issued_by": "ASCAP (US official agency) or BMI during work registration process",
        "when_assigned": "Automatically when composition is registered with PRO and processed",
        "timeline_days": 3,
        "what_it_does": "Unique identifier for the musical composition (the song itself — lyrics, melody, arrangement). One ISWC per composition, regardless of how many recordings exist. Links to songwriter IPI numbers, publishing splits, and mechanical royalty claims.",
        "critical_rule": "ISWC is assigned by the PRO system, not manually. You cannot request an ISWC before registering with BMI or ASCAP. Once assigned, it follows the composition forever across all recordings and remixes.",
        "_source": "zabal-dispatch-music-rights-pipeline-registration-order-20260524"
      }
    },
    {
      "id": "isrc-code-assignment",
      "name": "ISRC Code Assignment",
      "labels": [
        "recording_identifier"
      ],
      "attributes": {
        "format": "CC-XXX-YY-NNNNN (Country code - Registrant - Year - Designation)",
        "issued_by": "DistroKid (via IFPI registrant code) or RIAA (direct $95 per code via usisrc.org)",
        "assignment_timing": "During DistroKid upload or pre-assigned by label/artist",
        "timeline_days": 1,
        "what_it_does": "Unique identifier for the sound recording (the specific audio file). One ISRC per recording version (original, remix, live, remaster each get different ISRCs). Tracks the recording across all platforms and royalty streams.",
        "ownership_rule": "ISRC must be assigned by the recording rights owner (you for indie artists). If you switch distributors, you MUST keep the original ISRC. Do not let new distributor assign a new code for the same audio file — that creates duplicate tracking and lost royalties.",
        "matching": "Must be linked to an ISWC for mechanical royalties to be paid. Unmatched ISRCs (recording without linked composition) sit in DSP queues unpaid.",
        "_source": "zabal-dispatch-music-rights-pipeline-registration-order-20260524"
      }
    },
    {
      "id": "isrc-to-iswc-matching",
      "name": "ISRC-to-ISWC Matching",
      "labels": [
        "metadata_linking"
      ],
      "attributes": {
        "who_does_it": "The MLC and DSPs during the royalty accounting process",
        "timing": "Must happen BEFORE first stream or mechanical royalties are unreachable",
        "failure_rate": "Per UK Govt report 2026: less than 0.1% of indie recordings arrived with ISWC mapping at DSPs. Duplicate ISRCs range 4.5-23% across platforms.",
        "consequence_if_missing": "Recording streams but composition owner is not found. Mechanical royalties accumulate in DSP 'unmatched pool'. Unmatched pool is redistributed to major publishers based on market share, NOT to actual songwriters. Unmatched can only be recovered within 9 months of the payment date.",
        "how_to_ensure": "Register composition with BMI/MLC BEFORE uploading to DistroKid. Explicitly note the ISRC on the MLC registration form (optional but highly recommended). Let DistroKid include ISWC in metadata delivery to DSPs.",
        "_source": "zabal-dispatch-music-rights-pipeline-registration-order-20260524"
      }
    },
    {
      "id": "0xsplits-deployment",
      "name": "0xSplits Deployment",
      "labels": [
        "on_chain_revenue_split"
      ],
      "attributes": {
        "chain": "Base (Ethereum L2)",
        "use_case": "Artist wallet payouts for NFT mints and smart contract revenue sharing",
        "standard_split": "80% Artist / 10% ZAO Music Treasury / 10% Curator (configurable)",
        "gas_cost": "Variable, approx $10-50 per split creation",
        "integration": "Used as payoutRecipient in Zora 1155 mint contracts. Auto-routes revenue to wallets on every mint.",
        "metadata_requirement": "Uses ISRC and ISWC from off-chain registration to create on-chain provenance record. Does not replace BMI/MLC registration — complements it.",
        "timeline_days": 1,
        "what_it_does": "Creates an immutable smart contract that splits revenue from on-chain sales (NFTs, memberships, etc.) across multiple wallets. Enables trustless, automated payouts without intermediaries.",
        "_source": "zabal-dispatch-music-rights-pipeline-registration-order-20260524"
      }
    },
    {
      "id": "zao-music-collective-entity",
      "name": "ZAO Music (Collective Entity)",
      "labels": [
        "organizational_structure"
      ],
      "attributes": {
        "legal_wrapper": "DBA 'ZAO Music Publishing' under BetterCallZaal Strategies LLC",
        "pro_affiliation": "BMI (publisher at $250 LLC fee, songwriter free)",
        "mechanical_coverage": "BMI in-house + The MLC (free, US mechanicals redundancy)",
        "distributor": "DistroKid Musician Plus ($44.99/yr)",
        "on_chain_rails": "0xSplits on Base per doc 143 and 407 specs",
        "first_release": "The cipher (10 artists, summer 2026, timed to ZAOstock Oct 2026)",
        "artist_contract_model": "Per-release participation agreement (90-day termination, no exclusive deals, artist keeps 100% master ownership)",
        "producer_tag": "thezao.com producer tag recorded, attached to every release as first audio beat",
        "_source": "zabal-dispatch-music-rights-pipeline-registration-order-20260524"
      }
    },
    {
      "id": "unmatched-recording-problem",
      "name": "Unmatched Recording Problem",
      "labels": [
        "royalty_loss_mechanism"
      ],
      "attributes": {
        "definition": "Sound recording (ISRC) with no linked musical composition (ISWC) in the royalty system",
        "scale_2026": "Millions of unmatched recordings accumulated since Music Modernization Act (2018). DSPs process 47.8M recordings/year, less than 0.1% arrive with ISWC mapping.",
        "payment_outcome": "Recording streams, but mechanical royalties cannot be routed to songwriter. Unmatched pool redistributes to major publishers based on market share, not actual ownership.",
        "recovery_window": "BMI policy: 9 months after the distribution in which royalties would have been paid. After 9 months, unmatched royalties are lost permanently.",
        "root_cause_order": "Uploading to DistroKid before registering with The MLC. ISRC arrives at DSP; ISWC does not exist yet. No matching occurs.",
        "prevention": "Register composition with BMI/MLC BEFORE DistroKid upload.",
        "_source": "zabal-dispatch-music-rights-pipeline-registration-order-20260524"
      }
    },
    {
      "id": "double-registration-headaches",
      "name": "Double Registration Headaches",
      "labels": [
        "metadata_conflict"
      ],
      "attributes": {
        "definition": "Same composition registered twice with different songwriter splits, publisher names, or writer counts",
        "root_cause_order": "Registering with BMI and The MLC with conflicting information. Or registering separately with ASCAP and BMI without communicating splits.",
        "consequence": "MLC flags the conflict and holds payment in dispute status. Royalties are not distributed until conflict is resolved via dispute procedure.",
        "recovery": "Contact MLC or PRO support. Provide documentation of actual splits. Resolution can take weeks or months.",
        "prevention": "Register ONCE with BMI as publisher. Songwriters join BMI free. Then register the same composition with The MLC using identical writer names, IPIs, and shares. Use a shared spreadsheet for all collaborators to confirm splits before any registration.",
        "_source": "zabal-dispatch-music-rights-pipeline-registration-order-20260524"
      }
    },
    {
      "id": "late-registration-penalty-bmi-policy",
      "name": "Late Registration Penalty (BMI Policy)",
      "labels": [
        "business_rule"
      ],
      "attributes": {
        "rule": "If no payment was made because of missing/late work registrations, royalties will be paid beginning with first possible distribution AFTER registration is complete, provided registration is received within 9 months after the distribution date when royalties would have been paid.",
        "implication_1": "Late registrations are recoverable (up to 9 months). But you miss royalties in every distribution cycle before registration is complete.",
        "implication_2": "Registration delays (e.g., waiting 2 months to register) cost you 2 months of royalty payments. Not recoverable.",
        "implication_3": "If registration happens after 9 months from first stream date, those royalties are lost permanently.",
        "optimization": "Register immediately before or during music production, not after release.",
        "_source": "zabal-dispatch-music-rights-pipeline-registration-order-20260524"
      }
    },
    {
      "id": "distrokid-ai-disclosure-checkbox",
      "name": "DistroKid AI Disclosure Checkbox",
      "labels": [
        "metadata_requirement"
      ],
      "attributes": {
        "introduced": "2026",
        "requirement": "Must check if ANY part of track used AI (composition, vocals, instrumentation, production, mixing)",
        "detection": "DistroKid runs automated AI detection on ALL uploads. If checkbox not checked but AI detected, track flagged for review.",
        "consequence_undisclosed": "Track removed. Repeat offenders face account suspension.",
        "consequence_disclosed": "Detection results verify honesty; no rejection. Metadata passed to DSPs as DDEX AI disclosure.",
        "relationship_to_bmi": "AI disclosure is separate from BMI registration. Must do both. Disclosed AI tracks still register with BMI if human authorship is present (e.g., lyrics by human, beat by AI). Undisclosed AI is a distributor policy issue, not a PRO issue.",
        "_source": "zabal-dispatch-music-rights-pipeline-registration-order-20260524"
      }
    },
    {
      "id": "0xsplits-protocol",
      "name": "0xSplits Protocol",
      "labels": [
        "smart-contract-protocol"
      ],
      "attributes": {
        "chains": [
          "Base",
          "Ethereum",
          "Optimism",
          "Arbitrum",
          "Zora",
          "World Chain"
        ],
        "license": "GPL-3.0-or-later",
        "audit_status": "independently-audited-by-Shipyard",
        "hyperstructure": true,
        "immutable": true,
        "fee_model": "free-to-use-gas-only",
        "github": "github.com/0xSplits/splits-contracts-monorepo",
        "_source": "zabal-dispatch-music-rights-pipeline-splits-architecture-20260524"
      }
    },
    {
      "id": "split-wallet-contract",
      "name": "Split Wallet Contract",
      "labels": [
        "on-chain-contract"
      ],
      "attributes": {
        "standard": "EIP-1167-minimal-proxy",
        "receives_eth": true,
        "receives_erc20": true,
        "deterministic_address": true,
        "mutable_vs_immutable_at_creation": true,
        "controller_address_optional": true,
        "_source": "zabal-dispatch-music-rights-pipeline-splits-architecture-20260524"
      }
    },
    {
      "id": "zao-music-release-split",
      "name": "ZAO Music Release Split",
      "labels": [
        "split-instance"
      ],
      "attributes": {
        "recipients": [
          "Artist Address",
          "ZAO Treasury",
          "Curator Address"
        ],
        "default_percentages": {
          "artist": 80,
          "treasury": 10,
          "curator": 10
        },
        "immutable": true,
        "controller": "0x0000000000000000000000000000000000000000",
        "distributor_fee": "0% (free distribution)",
        "chain": "Base",
        "_source": "zabal-dispatch-music-rights-pipeline-splits-architecture-20260524"
      }
    },
    {
      "id": "zora-protocol-1155-mint-contract",
      "name": "Zora Protocol 1155 Mint Contract",
      "labels": [
        "nft-minting-contract"
      ],
      "attributes": {
        "standard": "ERC-1155 multi-edition",
        "creates": "music-nft-editions",
        "payoutRecipient_field": true,
        "payoutRecipient_value": "0xSplits-split-address",
        "revenue_flow": "split-receives-all-eth-usdc",
        "_source": "zabal-dispatch-music-rights-pipeline-splits-architecture-20260524"
      }
    },
    {
      "id": "splits-warehouse",
      "name": "Splits Warehouse",
      "labels": [
        "defi-contract"
      ],
      "attributes": {
        "role": "Splits v2 token holding layer",
        "batch_transfer": true,
        "holds_eth_and_erc20": true,
        "pull_distribution_pattern": true,
        "_source": "zabal-dispatch-music-rights-pipeline-splits-architecture-20260524"
      }
    },
    {
      "id": "distrokid-musician-plus",
      "name": "DistroKid Musician Plus",
      "labels": [
        "off-chain-distributor"
      ],
      "attributes": {
        "pricing": "$44.99/year",
        "commission": "0%",
        "coverage": [
          "Spotify",
          "Apple Music",
          "Amazon",
          "YouTube Music",
          "Tidal"
        ],
        "indie_owned": true,
        "label_account": "BetterCallZaal Strategies LLC",
        "fallback": "Leave a Legacy ($29-49 per item)",
        "_source": "zabal-dispatch-music-rights-pipeline-splits-architecture-20260524"
      }
    },
    {
      "id": "bmi-publishing",
      "name": "BMI Publishing",
      "labels": [
        "performing-rights-organization"
      ],
      "attributes": {
        "publisher_fee": "$250 one-time LLC",
        "songwriter_fee": "$0 (free)",
        "mechanicals_collection": "in-house",
        "international_coverage": "reciprocal-agreements",
        "zao_entity": "ZAO Music Publishing DBA under BetterCallZaal Strategies",
        "_source": "zabal-dispatch-music-rights-pipeline-splits-architecture-20260524"
      }
    },
    {
      "id": "coinflow-contract-settlement",
      "name": "Coinflow Contract Settlement",
      "labels": [
        "fiat-to-crypto-bridge"
      ],
      "attributes": {
        "accepts": "credit-card",
        "converts_to": "USDC",
        "chain": "Base",
        "gasless": true,
        "merchant_contract_whitelist": true,
        "sdk_package": "@coinflowlabs/react",
        "_source": "zabal-dispatch-music-rights-pipeline-splits-architecture-20260524"
      }
    },
    {
      "id": "0xsplits-sdk",
      "name": "0xSplits SDK",
      "labels": [
        "javascript-sdk"
      ],
      "attributes": {
        "package": "@0xsplits/splits-sdk",
        "version": "6.4.1",
        "language": "TypeScript",
        "dependencies": [
          "viem",
          "ethers"
        ],
        "github": "github.com/0xSplits/splits-sdk",
        "_source": "zabal-dispatch-music-rights-pipeline-splits-architecture-20260524"
      }
    },
    {
      "id": "songjam",
      "name": "SongJam",
      "labels": [
        "Platform",
        "platform"
      ],
      "attributes": {
        "url": "songjam.space",
        "description": "Music engagement + social scoring platform",
        "founder": "Adam",
        "nativeToken": "SANG",
        "hasOwnLeaderboard": true,
        "currentDataSource": "Twitter X API (deprecated Q2 2026)",
        "_source": "zabal-dispatch-songjam-x-empire-new-empire-flow-20260524",
        "focus": "live audio spaces with voice verification",
        "ecosystem": "Farcaster + Solana",
        "token": "SANG on Solana",
        "tech_stack": "100ms SDK for voice, ElevenLabs TTS, Stream.io video",
        "tagline": "When Attention becomes Currency, Voice is the Commodity",
        "core_product": "live audio spaces platform",
        "infrastructure": "100ms SDK for voice, ElevenLabs synthesis, Stream.io video",
        "identity_backend": "Neynar (Farcaster)",
        "primary_blockchain": "Solana",
        "token_issued": "SANG",
        "key_feature": "per-second leaderboard tracking during live audio sessions"
      }
    },
    {
      "id": "songjam-music-engagement-api",
      "name": "SongJam Music Engagement API",
      "labels": [
        "DataSource",
        "internal_service"
      ],
      "attributes": {
        "metrics": [
          "plays",
          "reposts",
          "comments",
          "engagement_score"
        ],
        "scope": "SongJam native platform",
        "updateFrequency": "Real-time or hourly batches",
        "authRequired": true,
        "outputFormat": "Array of {wallet, score, rank} tuples",
        "_source": "zabal-dispatch-songjam-x-empire-new-empire-flow-20260524",
        "purpose": "track music engagement natively within SongJam ecosystem",
        "data_source": "SongJam voice spaces, stakes, user participation",
        "availability": "existing, operational",
        "replacement_for": "X scraper (alternative data source)"
      }
    },
    {
      "id": "empire-builder-apileaderboards",
      "name": "Empire Builder apiLeaderboards",
      "labels": [
        "APIPattern"
      ],
      "attributes": {
        "endpoint": "GET /api/leaderboards?tokenAddress=0xbB48f19B0494Ff7C1fE5Dc2032aeEE14312f0b07",
        "writeEndpoint": "POST /api/leaderboards/update (permissioned)",
        "responseShape": [
          {
            "uuid": "string (UUID v4)",
            "name": "string (display name)",
            "type": "tokenHolders|farToken|api|null",
            "empireAddress": "string (hex)",
            "rankedCount": "integer (250 for Basic, 500 for Ascended)",
            "topRanks": "Array of {rank, wallet, score, lifetime_distributed}"
          }
        ],
        "readAuth": "None (public)",
        "writeAuth": "API key (permissioned)",
        "_source": "zabal-dispatch-songjam-x-empire-new-empire-flow-20260524"
      }
    },
    {
      "id": "songjam-leaderboard-season-1",
      "name": "SongJam Leaderboard - Season 1",
      "labels": [
        "Leaderboard"
      ],
      "attributes": {
        "empireAddress": "0xe0faa499d6711870211505bd9ae2105206af1462",
        "type": "api",
        "dataSource": "SongJam Music Engagement API",
        "metric": "Music engagement (plays + reposts + comments)",
        "rankedSpots": 250,
        "useCase": "ZABAL Gamez Phase 1 (July open submissions)",
        "migrationStatus": "Planned Q2 2026",
        "_source": "zabal-dispatch-songjam-x-empire-new-empire-flow-20260524"
      }
    },
    {
      "id": "songjam-leaderboard-season-2-episode-1",
      "name": "SongJam Leaderboard - Season 2 Episode 1",
      "labels": [
        "Leaderboard"
      ],
      "attributes": {
        "empireAddress": "0xe0faa499d6711870211505bd9ae2105206af1462",
        "type": "api",
        "dataSource": "SongJam Music Engagement API",
        "metric": "Episode 1 specific tracks",
        "rankedSpots": 250,
        "useCase": "SongJam's internal Season 2 competition",
        "_source": "zabal-dispatch-songjam-x-empire-new-empire-flow-20260524"
      }
    },
    {
      "id": "songjam-leaderboard-season-2-episode-2",
      "name": "SongJam Leaderboard - Season 2 Episode 2",
      "labels": [
        "Leaderboard"
      ],
      "attributes": {
        "empireAddress": "0xe0faa499d6711870211505bd9ae2105206af1462",
        "type": "api",
        "dataSource": "SongJam Music Engagement API",
        "metric": "Episode 2 specific tracks",
        "rankedSpots": 250,
        "useCase": "SongJam's internal Season 2 competition",
        "_source": "zabal-dispatch-songjam-x-empire-new-empire-flow-20260524"
      }
    },
    {
      "id": "adam-songjam-founder",
      "name": "Adam (SongJam Founder)",
      "labels": [
        "Person"
      ],
      "attributes": {
        "role": "Founder, SongJam",
        "decision": "Deprecate Twitter X scraper due to cost",
        "migrationOwner": true,
        "collab": "Zaal + Jordan (Empire Builder)",
        "_source": "zabal-dispatch-songjam-x-empire-new-empire-flow-20260524"
      }
    },
    {
      "id": "songjam-builder-airdrop-flow",
      "name": "SongJam Builder Airdrop Flow",
      "labels": [
        "Pattern"
      ],
      "attributes": {
        "trigger": "SongJam builder launches Clanker token in August (ZABAL Gamez finalist)",
        "inputSource": "SongJam leaderboard CSV export (top 250 contributors)",
        "airdropMechanism": "Clanker UI + vesting schedule",
        "result": "Builder's token launches into Ascended Empire with SongJam engagement as airdrop vector",
        "_source": "zabal-dispatch-songjam-x-empire-new-empire-flow-20260524"
      }
    },
    {
      "id": "songjam-old-x-scraper",
      "name": "SongJam Old X Scraper",
      "labels": [
        "deprecated_service"
      ],
      "attributes": {
        "purpose": "track music engagement on X/Twitter posts",
        "input": "X API v2 search/timeline endpoints",
        "metrics": "replies, likes, retweets, engagement intensity",
        "output": "leaderboard data (engagement per creator)",
        "deprecation_date": "2026-05",
        "reason": "prohibitive API costs, maintainer burnout",
        "_source": "zabal-dispatch-songjam-x-empire-old-x-scraper-20260524"
      }
    },
    {
      "id": "x-api-v2",
      "name": "X API v2",
      "labels": [
        "external_api"
      ],
      "attributes": {
        "owner": "X Corp",
        "pricing_model": "paid-only, no free tier as of 2026",
        "post_writes_cost": "$0.01 per post",
        "post_reads_cost": "$0.005 per read",
        "basic_tier": "$200/month",
        "enterprise": "pricing on demand",
        "_source": "zabal-dispatch-songjam-x-empire-old-x-scraper-20260524"
      }
    },
    {
      "id": "adam",
      "name": "Adam",
      "labels": [
        "person"
      ],
      "attributes": {
        "role": "SongJam founder and maintainer",
        "decision_date": "2026-05-16",
        "burnout_signal": "scraper cost unsustainability, technical debt",
        "current_focus": "voice spaces, not social analytics",
        "_source": "zabal-dispatch-songjam-x-empire-old-x-scraper-20260524"
      }
    },
    {
      "id": "neynar",
      "name": "Neynar",
      "labels": [
        "external_api"
      ],
      "attributes": {
        "role": "Farcaster data aggregator alternative",
        "free_tier": "available (rate-limited)",
        "use_case": "Farcaster-native data source instead of X API",
        "_source": "zabal-dispatch-songjam-x-empire-old-x-scraper-20260524"
      }
    },
    {
      "id": "staking-multiplier-formula",
      "name": "Staking Multiplier Formula",
      "labels": [
        "Mechanic"
      ],
      "attributes": {
        "formula": "1 + sqrt(stakeAmount / 250000 SANG)",
        "result_range": "2.1x - 3.0x",
        "minimum_threshold": "250000 SANG",
        "input_token": "SANG",
        "output_effect": "points multiplier on ZABAL leaderboard",
        "_source": "zabal-dispatch-songjam-x-empire-sang-token-utility-20260524"
      }
    },
    {
      "id": "empire-builder-booster-system",
      "name": "Empire Builder Booster System",
      "labels": [
        "Mechanic"
      ],
      "attributes": {
        "platform": "Empire Builder v3",
        "result_range": "4.0x - 8.6x",
        "mechanic": "permissionless token-community infrastructure",
        "booster_stacking": "composes with staking multiplier",
        "_source": "zabal-dispatch-songjam-x-empire-sang-token-utility-20260524"
      }
    },
    {
      "id": "total-multiplier-stack",
      "name": "Total Multiplier Stack",
      "labels": [
        "Mechanic"
      ],
      "attributes": {
        "formula": "totalPoints = pointsWithoutMultiplier * stakingMultiplier * empireMultiplier",
        "max_theoretical_multiplier": "25x+",
        "example": "10 ZABAL + active Empire + SANG stake = ~25x effective scoring",
        "_source": "zabal-dispatch-songjam-x-empire-sang-token-utility-20260524"
      }
    },
    {
      "id": "voice-participation-points-system",
      "name": "Voice Participation Points System",
      "labels": [
        "Mechanic"
      ],
      "attributes": {
        "operator": "SongJam",
        "platform": "live audio rooms",
        "accumulation_rate": "per-second",
        "role_multipliers": {
          "listener": 1,
          "speaker": 2,
          "host": 0
        },
        "earning_token": "SANG",
        "_source": "zabal-dispatch-songjam-x-empire-sang-token-utility-20260524"
      }
    },
    {
      "id": "zao-ecosystem",
      "name": "ZAO Ecosystem",
      "labels": [
        "Community"
      ],
      "attributes": {
        "membership": "188 gated members",
        "native_blockchain": "Base",
        "social_layer": "Farcaster",
        "ecosystem_token": "ZABAL",
        "reputation_layer": "Respect (non-tradeable)",
        "related_communities": [
          "SongJam",
          "Empire Builder",
          "WaveWarZ",
          "COC Concertz"
        ],
        "_source": "zabal-dispatch-songjam-x-empire-sang-token-utility-20260524"
      }
    },
    {
      "id": "quotient-2",
      "name": "QUOTIENT",
      "labels": [
        "ReputationSystem"
      ],
      "attributes": {
        "protocol": "Farcaster",
        "founder": "amphib0ly",
        "incubator": "Skycastle Tokens",
        "scoring_method": "PageRank-style, measures engagement quality and momentum",
        "features": [
          "allowlists",
          "leaderboards",
          "rewards"
        ],
        "tge_chain": "Base",
        "booster_config": {
          "use_zero_address": true
        },
        "_source": "zabal-dispatch-talent-vs-quotient-empire-integration-20260524"
      }
    },
    {
      "id": "nft-booster",
      "name": "NFT Booster",
      "labels": [
        "BoosterType"
      ],
      "attributes": {
        "supported_by": "Empire Builder",
        "mechanism": "Check NFT contract holdings",
        "contract_address_required": true,
        "stacking": "additive",
        "_source": "zabal-dispatch-talent-vs-quotient-empire-integration-20260524"
      }
    },
    {
      "id": "erc20-booster",
      "name": "ERC20 Booster",
      "labels": [
        "BoosterType"
      ],
      "attributes": {
        "supported_by": "Empire Builder",
        "mechanism": "Check ERC20 token balance",
        "contract_address_required": true,
        "stacking": "additive",
        "minAmount_field": true,
        "_source": "zabal-dispatch-talent-vs-quotient-empire-integration-20260524"
      }
    },
    {
      "id": "quotient-booster-2",
      "name": "QUOTIENT Booster",
      "labels": [
        "BoosterType"
      ],
      "attributes": {
        "supported_by": "Empire Builder",
        "mechanism": "Check QUOTIENT pagerank-style reputation score threshold",
        "contract_address": "0x0000000000000000000000000000000000000000",
        "multiplier_applies_to": "leaderboard points",
        "stacking": "additive",
        "field_requirement": "minAmount (reputation threshold in score units)",
        "_source": "zabal-dispatch-talent-vs-quotient-empire-integration-20260524"
      }
    },
    {
      "id": "jordan-oram",
      "name": "Jordan Oram",
      "labels": [
        "Person"
      ],
      "attributes": {
        "role": "Co-founder, Empire Builder",
        "expertise": [
          "onchain systems",
          "token ecosystems",
          "community design"
        ],
        "linkedin": "yerbearserker",
        "_source": "zabal-dispatch-talent-vs-quotient-empire-integration-20260524"
      }
    },
    {
      "id": "farcaster",
      "name": "Farcaster",
      "labels": [
        "Protocol",
        "Platform"
      ],
      "attributes": {
        "type": "decentralized social media",
        "reputation_systems": [
          "QUOTIENT",
          "OpenRank",
          "FarcasterScore"
        ],
        "mini_app_support": true,
        "_source": "zabal-dispatch-talent-vs-quotient-empire-integration-20260524",
        "cost": "$0 (free protocol, free mini apps, free Frames)",
        "role": "Social protocol, identity, Frames (interactive content), mini apps, Snaps (signers)",
        "category": "ops-infra",
        "integration": "SDK (@farcaster/miniapp-sdk via CDN), Frames Protocol (OpenFrames standard), Neynar API for reads/identity",
        "zao_usage": "BetterCallZaal mini app, COC Concertz Frames for share-to-cast, ZAO Snaps for account association (FID 19640 for Zaal)",
        "mini_app_requirements": "sdk.actions.ready() must be called to dismiss splash screen; sdk.actions.composeCast() for sharing within app",
        "fallback": "Outside mini app context, use Warpcast compose URL for cast sharing",
        "farcaster_id": "Zaal FID 19640",
        "neynar_api": "Free dev tier for Farcaster reads, signers, identity data"
      }
    },
    {
      "id": "builder-score",
      "name": "Builder Score",
      "labels": [
        "reputation_metric"
      ],
      "attributes": {
        "range": "0-100",
        "calculation": "sum of weighted credentials",
        "categories": [
          "Identity",
          "Activity",
          "Skills"
        ],
        "storage": "smart contract",
        "_source": "zabal-dispatch-talent-vs-quotient-scoring-methodology-20260524"
      }
    },
    {
      "id": "identity-credentials",
      "name": "Identity Credentials",
      "labels": [
        "credential_class"
      ],
      "attributes": {
        "max_points": 20,
        "purpose": "sybil resistance",
        "sources": [
          "ENS",
          "Farcaster",
          "GitHub",
          "LinkedIn"
        ],
        "_source": "zabal-dispatch-talent-vs-quotient-scoring-methodology-20260524"
      }
    },
    {
      "id": "activity-credentials",
      "name": "Activity Credentials",
      "labels": [
        "credential_class"
      ],
      "attributes": {
        "max_points": 40,
        "purpose": "distinguish contributors from farmers",
        "sources": [
          "GitHub commits",
          "Farcaster posts",
          "on-chain txn"
        ],
        "_source": "zabal-dispatch-talent-vs-quotient-scoring-methodology-20260524"
      }
    },
    {
      "id": "skills-credentials",
      "name": "Skills Credentials",
      "labels": [
        "credential_class"
      ],
      "attributes": {
        "max_points": "uncapped",
        "purpose": "builder expertise showcase",
        "sources": [
          "GitHub activity",
          "on-chain deployments",
          "Base Builds"
        ],
        "_source": "zabal-dispatch-talent-vs-quotient-scoring-methodology-20260524"
      }
    },
    {
      "id": "quotient-scoring-engine",
      "name": "Quotient Scoring Engine",
      "labels": [
        "algorithm"
      ],
      "attributes": {
        "algorithm_family": "PageRank variant",
        "metric_type": "engagement quality and momentum",
        "ignores": "raw metric counts",
        "inputs": "Farcaster social graph interactions",
        "_source": "zabal-dispatch-talent-vs-quotient-scoring-methodology-20260524"
      }
    },
    {
      "id": "farcaster-integration",
      "name": "Farcaster Integration",
      "labels": [
        "data_source"
      ],
      "attributes": {
        "protocol": "Farcaster",
        "signal_type": "social engagement",
        "bonus": "Power Badge holders (FID < 20k) extra points",
        "_source": "zabal-dispatch-talent-vs-quotient-scoring-methodology-20260524"
      }
    },
    {
      "id": "the-zao",
      "name": "The ZAO",
      "labels": [
        "Community"
      ],
      "attributes": {
        "description": "Farcaster-native music infrastructure guild for independent artists",
        "primary_medium": "Farcaster",
        "reputation_system": "Respect (peer-validated Fibonacci ranks)",
        "core_members": 188,
        "ecosystem": "music-web3",
        "_source": "zabal-dispatch-talent-vs-quotient-zao-fit-20260524"
      }
    },
    {
      "id": "respect",
      "name": "Respect",
      "labels": [
        "ReputationSystem",
        "reputation-system"
      ],
      "attributes": {
        "description": "ZAO peer-validated Fibonacci-ranked contributor reputation via weekly fractal consensus",
        "mechanism": "Soulbound consensus ranking (OG ERC-20 + ZOR ERC-1155)",
        "cadence": "weekly, ~90+ weeks running since Aug 2024",
        "distribution": "Fibonacci 1-6 ranks award 110/68/42/26/16/10 points",
        "gates": "ZABAL Gamez voter eligibility, governance voting, leaderboard weighting",
        "_source": "zabal-dispatch-talent-vs-quotient-zao-fit-20260524",
        "full_name": "ZAO Reputation Token",
        "accrual_mechanism": "Weekly fractal sessions - peer-evaluation by 3-6 person breakout groups",
        "fibonacci_curve": [
          13,
          8,
          5,
          3,
          2,
          1
        ],
        "rank_order": "1st-6th contributor rank in session",
        "on_chain": true,
        "soulbound": true,
        "transferable": false,
        "governance_weight": "Voting weight in ZAO governance (ZABAL Gamez Finals, ZAO Fund curation, DAO votes)",
        "minimum_threshold_for_voting": "N threshold UNKNOWN (Doc 701 Decision #8: 'still undecided')",
        "contract_family": "ORDAO contract set (Optimism/Eden Fractal lineage)"
      }
    },
    {
      "id": "tip-token",
      "name": "$TIP Token",
      "labels": [
        "token_concept"
      ],
      "attributes": {
        "status": "UNKNOWN - theoretical, not deployed",
        "chain": "UNKNOWN",
        "contract_address": "UNKNOWN",
        "purpose": "Conceptual tipping mechanism in ZAO ecosystem, inspired by Farcaster DEGEN model",
        "ledger_type": "UNKNOWN - virtual vs on-chain TBD",
        "_source": "zabal-dispatch-tip-zols-architecture-tip-token-mechanics-20260524"
      }
    },
    {
      "id": "zabal-token-2",
      "name": "ZABAL Token",
      "labels": [
        "erc20_token",
        "ecosystem-token"
      ],
      "attributes": {
        "contract_address": "0xbB48f19B0494Ff7C1fE5Dc2032aeEE14312f0b07",
        "chain": "Base L2",
        "total_supply": "100,000,000,000",
        "decimals": 18,
        "market_cap": "~14300 USD",
        "liquidity": "~550-1200 USDC",
        "primary_pair": "ZABAL/ETH on Uniswap V4",
        "status": "Active, illiquid (non-transferable governance intent)",
        "distribution": "Empire Builder rewards, ZABAL leaderboards, treasury buybacks",
        "_source": "zabal-dispatch-tip-zols-architecture-tip-token-mechanics-20260524",
        "standard": "ERC-20",
        "launch_date": "2026-01-01",
        "launch_mechanism": "Clanker token factory",
        "current_holders": 342,
        "distribution_channels": [
          "Daily airdrops via Clanker",
          "Empire Builder rewards",
          "SongJam leaderboard prizes",
          "Incented campaigns"
        ],
        "staking_contract": "0x4C143539356444ABA748b8523A39D953f24D8d80",
        "staking_formula": "1 + sqrt(Stake / 250000) - minimum stake 250K ZABAL",
        "burned_to_date_q1": "178.21M ZABAL",
        "treasury_balance": "$1,463.34",
        "role_in_economy": "Liquid incentive layer for contribution rewards"
      }
    },
    {
      "id": "zols-ledger",
      "name": "ZOLs Ledger",
      "labels": [
        "virtual_contribution_credit"
      ],
      "attributes": {
        "definition": "ZABAL Opinion Leaders - monthly recognition credits",
        "quantity_issued": "12 total (as of Q1 2026)",
        "allocation_method": "Top 3 SongJam leaderboard participants each month",
        "allocation_frequency": "Monthly",
        "chain": "Virtual (not on-chain)",
        "on_chain_companion": "UNKNOWN if NFT representation exists",
        "recognition_form": "Status + community visibility",
        "examples": "GodFactor, wildermax, Preshzinobabe, tabbytheblack, ohnahji, akele, jason alder, collinsxweb3, metamu, candytoybox",
        "utility": "UNKNOWN - potential NFT perks mentioned but not confirmed",
        "_source": "zabal-dispatch-tip-zols-architecture-tip-token-mechanics-20260524"
      }
    },
    {
      "id": "zao-respect-token",
      "name": "ZAO Respect Token",
      "labels": [
        "governance_token_concept"
      ],
      "attributes": {
        "status": "Designed but not deployed",
        "type_design": "Soulbound (non-transferable)",
        "transferability": "Illiquid by design",
        "purpose": "On-chain identity and contribution tracking for ZAO members",
        "token_model": "Non-linear (Fibonacci-style) distribution via peer-ranking",
        "governance_scope": "ZAO DAO decisions, leadership roles, treasury",
        "relation_to_tip": "Separate system - Respect is governance, TIP would be utility tipping",
        "_source": "zabal-dispatch-tip-zols-architecture-tip-token-mechanics-20260524"
      }
    },
    {
      "id": "fishbowlz-token",
      "name": "FISHBOWLZ Token",
      "labels": [
        "erc20_token_planned"
      ],
      "attributes": {
        "status": "Planned via Clanker deployment",
        "deployment_mechanism": "Clanker SDK v4 on Base",
        "purpose": "Spaces protocol token (tipping, token-gating rooms)",
        "fee_split": "70% speaker, 20% ZABAL auto-buyback, 10% protocol treasury",
        "treasury_contract": "PaymentSplitter on Base (implements fee split)",
        "distribution_method": "Room creation fees, speaker rewards",
        "chain": "Base",
        "_source": "zabal-dispatch-tip-zols-architecture-tip-token-mechanics-20260524"
      }
    },
    {
      "id": "zabal-empire-empire-builder",
      "name": "ZABAL Empire (Empire Builder)",
      "labels": [
        "gamification_contract"
      ],
      "attributes": {
        "contract_purpose": "SongJam leaderboard rewards distribution",
        "empire_address": "0xe0faa499d6711870211505bd9ae2105206af1462",
        "platform": "empirebuilder.world/zabal",
        "leaderboard_types": "24h, 7d, all-time",
        "stake_multiplier": "Requires 250k SANG minimum stake",
        "rewards_distribution": "Automatic via `distributeTokens` call",
        "guardian_addresses": "Adam (SongJam founder) primary, Zaal can be co-guardian",
        "rewards_driver": "ZABAL token emissions based on SongJam engagement",
        "_source": "zabal-dispatch-tip-zols-architecture-tip-token-mechanics-20260524"
      }
    },
    {
      "id": "zao-treasury",
      "name": "ZAO Treasury",
      "labels": [
        "financial_entity"
      ],
      "attributes": {
        "primary_assets": "ETH, USDC, accumulated ZABAL (via weekly buyback)",
        "buyback_schedule": "Weekly, $50-100 minimum",
        "buyback_route": "1inch aggregator (Base DEX routing)",
        "target_holdings": "ZABAL (long-term signal), USDC (operations)",
        "multisig_status": "Planned (2-of-3) for security",
        "burn_signal": "1% of acquired ZABAL on each $500 accumulation threshold",
        "_source": "zabal-dispatch-tip-zols-architecture-tip-token-mechanics-20260524"
      }
    },
    {
      "id": "respect-token",
      "name": "Respect Token",
      "labels": [
        "SoulboundToken"
      ],
      "attributes": {
        "chainless": true,
        "scoringCurve": "Fibonacci (110/68/42/26/16/10 for ZAO 2x variant)",
        "consensus": "2/3 majority required in 3-6 person breakout group",
        "decayRate": "2% per week",
        "halfLife": "34 weeks (8 months)",
        "voting": "Weight-based on OG Respect balance at proposal block",
        "transfer": "Non-transferable (soulbound, ERC-1155 NTT per session)",
        "earning": "Weekly Monday 6pm EST Respect Game consensus ranking",
        "ledgerAvailable": true,
        "_source": "zabal-dispatch-tip-zols-architecture-tip-vs-zol-vs-zabal-20260524"
      }
    },
    {
      "id": "zols-contribution-ledger",
      "name": "ZOLs Contribution Ledger",
      "labels": [
        "LedgerSystem"
      ],
      "attributes": {
        "purpose": "Registry of off-chain work contributions to ZABAL ecosystem",
        "entries": [
          "Doc write-ups",
          "Research contributions",
          "Mentoring sessions",
          "Code submissions",
          "Community moderation",
          "Event coordination"
        ],
        "entryFormat": "Plaintext registry in memory or GitHub Issues (not tokenized yet)",
        "payout_mechanism": "UNKNOWN (proposed conversion pending designer decision)",
        "tokenization": "Not yet implemented as blockchain primitive",
        "governance": "Submitted via /zao-research skill or pull request comments",
        "arbitration": "Designer/maintainer discretion per contribution context",
        "_source": "zabal-dispatch-tip-zols-architecture-tip-vs-zol-vs-zabal-20260524"
      }
    },
    {
      "id": "respect-game",
      "name": "Respect Game",
      "labels": [
        "Mechanism"
      ],
      "attributes": {
        "session": "Weekly (Monday 6pm EST)",
        "participants": "3-6 people per breakout group",
        "phases": [
          "Gathering (5-10m)",
          "Contribution sharing (45-60m)",
          "Consensus ranking (30-45m)",
          "On-chain submission (automatic)",
          "Voting + veto (96h)",
          "Execution + minting"
        ],
        "consensus_threshold": "2/3 majority per individual rank",
        "voting_window": "48 hours (YES/NO weighted)",
        "veto_window": "48 hours (NO only, challenge period)",
        "sybil_resistance": "Random group assignment, 3-6 person limit, Ultimatum Game frame",
        "_source": "zabal-dispatch-tip-zols-architecture-tip-vs-zol-vs-zabal-20260524"
      }
    },
    {
      "id": "zao-fractal-governance",
      "name": "ZAO Fractal Governance",
      "labels": [
        "Governance"
      ],
      "attributes": {
        "structure": "Respect-weighted voting (2/3 consensus rule)",
        "voting_entity": "OREC (Optimistic Respect Execution Contract)",
        "proposal_types": [
          "Contribution rankings",
          "Governance changes",
          "Project incubation"
        ],
        "participation": "Weekly Respect Game + asynchronous voting",
        "equality_metric": "Gini coefficient 0.23 (highly egalitarian vs token DAOs at 0.97+)",
        "power_decay": "0 power after ~4.4 years with zero participation",
        "_source": "zabal-dispatch-tip-zols-architecture-tip-vs-zol-vs-zabal-20260524"
      }
    },
    {
      "id": "contributor-ledger-entry-example",
      "name": "Contributor Ledger Entry - Example",
      "labels": [
        "LedgerEntry"
      ],
      "attributes": {
        "contributor": "civilmonkey",
        "work": "Doc 718b - Respect Game Mechanism Design (DEEP tier, validated 2026-05-22)",
        "type": "Research",
        "status": "COMPLETE",
        "zol_claim": "Pending finalization (no payout yet)",
        "respect_earned": "UNKNOWN (awaiting Respect Game consensus ranking in next session)",
        "_source": "zabal-dispatch-tip-zols-architecture-tip-vs-zol-vs-zabal-20260524"
      }
    },
    {
      "id": "zols",
      "name": "ZOLs",
      "labels": [
        "reputation-system"
      ],
      "attributes": {
        "full_name": "ZAO Opinion Leaders / Contribution Ledger",
        "accrual_rate": "1 ZOL per volunteer hour at ZAO events",
        "monthly_recognition_path": "Top 3 SongJam leaderboard performers each month",
        "payout": "Recognition only, no token, no cash",
        "nft_rewards": "Monthly ZOL winners earn NFT perks + ZAOndz co-creation rights",
        "storage_layer": "Hybrid - spreadsheet logs + volunteer profile URLs",
        "on_chain": false,
        "soulbound": true,
        "transferable": false,
        "scope": "ZAO event ecosystem (ZAOstock, ZABAL Gamez, COC Concertz, fractal sessions)",
        "governance_weight": "Peer-validated contribution signal; influences standing in weekly fractal peer-evaluation",
        "_source": "zabal-dispatch-tip-zols-architecture-zols-credits-system-20260524"
      }
    },
    {
      "id": "songjam-leaderboard",
      "name": "SongJam Leaderboard",
      "labels": [
        "engagement-leaderboard"
      ],
      "attributes": {
        "platform": "SongJam.space",
        "zabal_integration_start": "Q1 2026",
        "scoring_formula": "totalPoints = pointsWithoutMultiplier * stakingMultiplier * empireMultiplier",
        "point_types": [
          "Farcaster mentions",
          "TLs/Twitter posts",
          "Voice space participation"
        ],
        "multiplier_sources": [
          "SongJam staking (2.1x - 3.0x)",
          "Empire Builder holdings (4.0x - 8.6x)"
        ],
        "top_performers_monthly": "Top 3 earn ZOL status + NFT perks",
        "distribution_channel": "Monthly ZABAL airdrops to top leaderboard performers",
        "q1_campaign_participants": 1000,
        "_source": "zabal-dispatch-tip-zols-architecture-zols-credits-system-20260524"
      }
    },
    {
      "id": "zaostock-2026-event",
      "name": "ZAOstock 2026 Event",
      "labels": [
        "irl-event"
      ],
      "attributes": {
        "date": "2026-10-03",
        "location": "Franklin Street Parklet, Ellsworth, Maine",
        "volunteer_hours_tracked": 1865,
        "volunteer_zol_earning_formula": "1 ZOL per hour",
        "follow_up_process": "Immediate thank-yous, ROI reports, weekly content drip, ZOL profile credit",
        "expected_volunteers": 40,
        "volunteer_profiles_live": "Yes - /stock/team/volunteer/[id]/profile shows ZOLs balance",
        "appreciation_event_planned": "December - volunteer gifts to top contributors",
        "_source": "zabal-dispatch-tip-zols-architecture-zols-credits-system-20260524"
      }
    },
    {
      "id": "zabal-games-event",
      "name": "ZABAL Gamez Event",
      "labels": [
        "hackathon"
      ],
      "attributes": {
        "format": "3-month builder event (June prep, July build, August Finals)",
        "june_content": "Recorded sessions on governance, Respect, ZOLs, fractals",
        "july_phase": "Open build-a-thon - every submission earns Respect (Decision #4, Doc 701)",
        "august_finals": "24h mentor-embedded build + 24h promote + 24h governance vote",
        "voting_mechanism": "Respect-earning members, 1-person-1-vote (not token-weighted)",
        "participation_collectible": "Hats Protocol role NFT on Base (every July finisher + August finalist)",
        "july_builders_earn": "Respect + NFT participation collectible (no ZOL specified)",
        "prize_pool": "$500 USDC (1st $150 / 2nd $100 / 3rd $75 / 4th-8th $35 each)",
        "_source": "zabal-dispatch-tip-zols-architecture-zols-credits-system-20260524"
      }
    },
    {
      "id": "fractal-governance-sessions",
      "name": "Fractal Governance Sessions",
      "labels": [
        "governance-mechanism"
      ],
      "attributes": {
        "cadence": "Weekly, Mondays 6pm EST",
        "duration_weeks": "90+ weeks running",
        "group_size": "3-6 person breakout groups",
        "mechanism": "Peer-evaluation of weekly contributions (code, music, events, onboarding)",
        "reputation_earned": "Respect tokens on Fibonacci curve (13, 8, 5, 3, 2, 1)",
        "facilitators": "Dan + Tadas (ORDAO contract runners)",
        "contribution_types_eligible": [
          "Code",
          "Music",
          "Events",
          "Onboarding",
          "Community",
          "Moderation"
        ],
        "governance_output": "ZAO voting power, treasury decisions, project incubation approval",
        "zabal_games_usage": "Voting mechanism for August Finals judge panel",
        "_source": "zabal-dispatch-tip-zols-architecture-zols-credits-system-20260524"
      }
    },
    {
      "id": "claude-code-max-plan",
      "name": "Claude Code Max Plan",
      "labels": [
        "Tool",
        "Platform",
        "Development Environment"
      ],
      "attributes": {
        "cost": "$200/mo flat",
        "auth_method": "OAuth via ~/.claude/auth.json",
        "category": "agent-infra",
        "primary_use": "Hermes + ZOE subprocess spawn point",
        "models_available": [
          "Claude Opus 4.7",
          "Claude Sonnet 4.6"
        ],
        "what_it_powers": "Hermes Coder/Critic dual loop (PR fixes + scoring). ZOE Telegram concierge (Sonnet chitchat, Opus recall)",
        "rate_limits": "20x Pro per session (no per-token billing when used via subprocess)",
        "auth_safe": true,
        "notes": "Zero marginal cost per invocation when subprocess pattern used; no ANTHROPIC_API_KEY exposure required",
        "subprocess_host": "Claude Code CLI",
        "zao_adoption": "Production-proven across Hermes + ZOE, handles 3000+ monthly invocations",
        "_source": "llms.txt rows 607-654, zabal-dispatch-hermes-20260523"
      }
    },
    {
      "id": "anthropic-api",
      "name": "Anthropic API",
      "labels": [
        "Tool",
        "API",
        "LLM Provider"
      ],
      "attributes": {
        "cost": "$5 input / $25 output per million tokens (Opus 4.7)",
        "auth_method": "ANTHROPIC_API_KEY env var",
        "category": "agent-infra",
        "models": [
          "Claude Opus 4.7",
          "Claude Sonnet 4.6",
          "Claude Haiku 4.5"
        ],
        "sonnet_cost": "$3 input / $15 output per million tokens",
        "haiku_cost": "$1 input / $5 output per million tokens",
        "what_it_powers": "Direct API calls for non-Claude-Code integrations (rarely used in ZAO stack)",
        "pricing_options": [
          "Batch API (50% discount)",
          "Prompt caching (90% savings)",
          "Team seats ($100/seat, $20+ min)"
        ],
        "zao_adoption": "Minimal - avoided in favor of Claude Code Max OAuth pattern",
        "context_window": "1M tokens standard (Opus 4.7, Sonnet 4.6)",
        "_source": "web search Anthropic API pricing 2026, platform.claude.com/docs"
      }
    },
    {
      "id": "ollama",
      "name": "Ollama",
      "labels": [
        "Tool",
        "Local Inference Engine"
      ],
      "attributes": {
        "cost": "Self-hosted (VPS $40-50/mo for full stack)",
        "auth_method": "None - local HTTP port 11434",
        "category": "agent-infra",
        "model_in_use": "llama3.1:8b",
        "what_it_powers": "Inbox classification, Bonfire entity-class first-pass, ZOE audit subagent fact-check",
        "deployment": "VPS port 11434, bot/src/zoe/ollama.ts wrapper (ollamaChat, ollamaClassify, ollamaHealth)",
        "restrictions": "NEVER for brand outputs, concierge replies, research sourcing, public-facing anything",
        "marginal_cost": "Zero per-token (hardware cost amortized)",
        "inference_speed": "Fast on 8B, suitable for low-stakes classification",
        "privacy": "On-premise, full data control",
        "zao_adoption": "Production-active, handles inbox + entity scoring",
        "notes": "Decommissioned version: openclaw container + 7-agent squad (workspace nuked 2026-05-05)",
        "_source": "llms.txt rows 607-654, web search Ollama self-hosted 2026"
      }
    },
    {
      "id": "openrouter",
      "name": "OpenRouter",
      "labels": [
        "Tool",
        "API Gateway",
        "LLM Router"
      ],
      "attributes": {
        "cost": "Pay-as-you-go with 5.5% platform fee ($0.80 minimum)",
        "auth_method": "API key via openrouter.ai account",
        "category": "agent-infra",
        "models_available": "25+ free models (Google, Meta, Mistral, NVIDIA); also all Anthropic models at provider pricing",
        "free_models_throughput": "100 requests per 60 seconds per connection",
        "claude_sonnet_cost": "$3 input / $15 output per million tokens",
        "claude_opus_cost": "$5 input / $25 output per million tokens",
        "what_it_powers": "Testing, low-volume inference, fallback routes when Claude Code unavailable",
        "byok_fee": "5% of provider cost for Bring Your Own Key usage after first 1M requests/mo",
        "crypto_payment_fee": "5% additional",
        "zao_adoption": "Secondary option, not primary stack",
        "use_case": "Prototyping new agent capabilities before mainline deployment",
        "_source": "web search OpenRouter pricing 2026, openrouter.ai/pricing"
      }
    },
    {
      "id": "bonfire-nerddao",
      "name": "Bonfires (NERDDAO)",
      "labels": [
        "Tool",
        "Knowledge Graph",
        "Memory Platform"
      ],
      "attributes": {
        "cost": "0.1 ETH Genesis NFT per bonfire (gates KNOW token pre-launch)",
        "auth_method": "SDK: pip install bonfires; API base: tnt-v2.api.bonfires.ai",
        "category": "agent-infra",
        "what_it_powers": "ZAO agent memory backbone - ingest Farcaster + GitHub + Twitch + ZAO Respect signals, produce per-address scores + entity relationships",
        "query_interface": "Natural language chat (DM Bonfire agent on Telegram or dashboard)",
        "export_formats": "Canvas, OWL, Markdown (open standards, no vendor lock-in)",
        "zao_instance": "zabal.bonfires.ai (254 entities, 322+ edges as of 2026-05-24)",
        "github_org": "NERDDAO (15+ repos, source: github.com/NERDDAO/bonfires-sdk)",
        "founders": "Joshua.eth, Ryan (Rskagy on Telegram, active ZAO Civilization GC)",
        "zao_adoption": "Production-active - queryable depth for agent memory + reputation scoring",
        "entity_depth": "Multi-hop relationships across ZAO ecosystem (tools, people, orgs, governance)",
        "pull_mechanism": "graph dump at data/bonfire-graph.json, pushed via node scripts/push-to-bonfire.mjs (needs BONFIRE_API_KEY)",
        "_source": "llms.txt rows 607-654, zabal.bonfires.ai public graph"
      }
    },
    {
      "id": "hermes-pattern",
      "name": "Hermes (Claude Code Subprocess Pattern)",
      "labels": [
        "Architecture",
        "Agent Framework",
        "Code Quality System"
      ],
      "attributes": {
        "cost": "$20/day notional fleet cap (derived from Claude Code Max $200/mo)",
        "auth_method": "Claude Code Max OAuth (subprocess spawned by bot/src/hermes/runner.ts)",
        "category": "agent-infra",
        "what_it_powers": "PR webhook -> Coder (Opus) writes fix -> Critic (Sonnet) scores (target >= 80/100) before merge",
        "dual_agent_loop": "bot/src/hermes/coder.ts + bot/src/hermes/critic.ts",
        "loop_limit": "Max 3 iterations",
        "preflight_gate": "bot/src/hermes/preflight.ts runs between Coder and Critic (typecheck + lint + test)",
        "allowlist": "Write-path allowlist + npm allowlist with ignore-scripts=true",
        "output_format": "--output-format json for response parsing",
        "system_prompt_injection": "--append-system-prompt per invocation",
        "tool_restrictions": "--allowedTools / --disallowedTools per run",
        "no_direct_api": "Never direct Anthropic API calls - always subprocess",
        "zao_adoption": "Production-active across ZAO repos (Hermes watches PR webhooks 24/7)",
        "cost_stable": "Zero marginal API cost, no billing surprises",
        "_source": "llms.txt rows 607-654, bot/src/hermes/ on VPS"
      }
    },
    {
      "id": "zoe-concierge-bot",
      "name": "ZOE (@zaoclaw_bot on Telegram)",
      "labels": [
        "Bot",
        "Concierge",
        "Agent"
      ],
      "attributes": {
        "cost": "Rolled into Claude Code Max $200/mo",
        "auth_method": "Claude Code Max OAuth (Telegram SDK integration)",
        "category": "agent-infra",
        "what_it_powers": "Telegram DMs, agent memory recall over Bonfire, basic task management for ZAO team",
        "models": "Sonnet 4.6 for chitchat (low-cost), Opus 4.7 for hard recall (memory depth)",
        "backend_pattern": "Mirrors Hermes subprocess runtime (bot/src/zoe/ on VPS)",
        "memory_source": "Bonfire graph queries for cross-platform signals",
        "restrictions": "Brand-safe outputs only, never fabricate facts",
        "telegram_channel": "Active home at @zaoclaw_bot + ZAOstockTeamBot for ops coordination",
        "invocation_count": "3000+ per month",
        "zao_adoption": "Production-active, team communication backbone",
        "_source": "llms.txt rows 607-654, bot/src/zoe/"
      }
    },
    {
      "id": "helius",
      "name": "Helius",
      "labels": [
        "Tool"
      ],
      "attributes": {
        "chain": "Solana",
        "category": "crypto-infra",
        "role": "RPC provider",
        "free_tier_credits": "1M/month",
        "free_tier_rps": "10 requests/sec",
        "cost_model": "Credit-based billing",
        "paid_tier_base": "$24.50/month (Developer)",
        "features": [
          "LaserStream WebSocket",
          "accountSubscribe",
          "DAS API",
          "Webhooks"
        ],
        "url": "https://www.helius.dev",
        "use_case": "WaveWarZ token reads + transaction monitoring",
        "_source": "zabal-dispatch-tool-stack-deep-dive-crypto-infra-tools-20260524"
      }
    },
    {
      "id": "alchemy",
      "name": "Alchemy",
      "labels": [
        "Tool"
      ],
      "attributes": {
        "chain": "Base, Ethereum, Polygon, Arbitrum, Optimism, and 10+ others",
        "category": "crypto-infra",
        "role": "RPC provider + enhanced APIs",
        "free_tier_cu": "30M compute units/month",
        "free_tier_rps": "25 requests/sec",
        "free_tier_apps": 5,
        "paid_tier_cost": "$0.45/1M CU up to 300M; $0.40/1M CU beyond",
        "features": [
          "NFT API",
          "Transfers API",
          "Token API",
          "Transaction Simulation",
          "Gas Manager"
        ],
        "url": "https://www.alchemy.com",
        "use_case": "Base mainnet reads for ZABAL ecosystem",
        "_source": "zabal-dispatch-tool-stack-deep-dive-crypto-infra-tools-20260524"
      }
    },
    {
      "id": "coinflow",
      "name": "Coinflow",
      "labels": [
        "Platform"
      ],
      "attributes": {
        "category": "crypto-infra",
        "role": "Fiat-to-crypto checkout",
        "settlement_token": "USDC",
        "settlement_chains": [
          "Solana",
          "Base",
          "Polygon",
          "Arbitrum"
        ],
        "cost_model": "Revenue share (configurable per merchant)",
        "features": [
          "Credit card to USDC",
          "Crypto pay-in",
          "Chargeback protection",
          "BYO wallet option"
        ],
        "url": "https://coinflow.cash",
        "api_endpoint": "api.coinflow.cash",
        "use_case": "Farcaster Mini App purchases + recurring subscriptions",
        "_source": "zabal-dispatch-tool-stack-deep-dive-crypto-infra-tools-20260524"
      }
    },
    {
      "id": "x402",
      "name": "x402",
      "labels": [
        "Tool"
      ],
      "attributes": {
        "category": "crypto-infra",
        "role": "HTTP-native payment protocol",
        "http_status": 402,
        "settlement_chains": [
          "Base",
          "Ethereum",
          "Solana"
        ],
        "settlement_tokens": [
          "USDC",
          "stablecoins"
        ],
        "cost_model": "Per-request micropayments (cents scale)",
        "scheme_types": [
          "exact",
          "upto",
          "batch-settlement"
        ],
        "pricing_example": "$0.01 per protected API call",
        "url": "https://x402.org",
        "github": "https://github.com/x402-foundation/x402",
        "use_case": "Protect Neynar API queries + COC content pipeline APIs",
        "_source": "zabal-dispatch-tool-stack-deep-dive-crypto-infra-tools-20260524"
      }
    },
    {
      "id": "clanker",
      "name": "Clanker",
      "labels": [
        "Platform"
      ],
      "attributes": {
        "category": "crypto-infra",
        "role": "AI token launcher on Farcaster",
        "chain": "Base",
        "trade_fee": "0.2%",
        "creator_fee_share": "100%",
        "cost": "Trade fee only (no upfront launch cost)",
        "features": [
          "Onchain token creation",
          "Farcaster-native",
          "Creator-owned"
        ],
        "url": "https://clanker.world",
        "use_case": "WaveWarZ + COC Concertz community tokens",
        "_source": "zabal-dispatch-tool-stack-deep-dive-crypto-infra-tools-20260524"
      }
    },
    {
      "id": "firewavez",
      "name": "FireWavez",
      "labels": [
        "Tool|Platform"
      ],
      "attributes": {
        "category": "music-infra",
        "role": "UNKNOWN - Spotify artist profile context only",
        "cost": "UNKNOWN",
        "auth": "UNKNOWN",
        "what_it_does": "UNKNOWN - mentioned in bonfire-graph.json as spotify context but not documented in llms.txt 32-tool stack or ZAO Music spec",
        "integration": "UNKNOWN - no reference in doc 475, music rights pipeline dispatches, or ardrive permastorage dispatches",
        "replaces": "UNKNOWN",
        "why_zao_uses": "UNKNOWN - verify with Zaal before adding to music infra spec",
        "_source": "zabal-dispatch-tool-stack-deep-dive-music-infra-tools-20260524"
      }
    },
    {
      "id": "lu-ma",
      "name": "Lu.ma",
      "labels": [
        "Tool|Platform"
      ],
      "attributes": {
        "cost": "Free (5% platform fee on paid events) or $59/mo (Luma Plus, 0% fee + API access)",
        "role": "Event and workshop calendar management, RSVP tracking, invite distribution",
        "category": "ops-infra",
        "integration": "API (requires Luma Plus), Zapier, webhooks for registration events",
        "rate_limit": "200 req/min per calendar (API keys) or 500 req/min per org (org keys)",
        "zao_usage": "Event calendar for ZAO workshops, COC Concertz announcements, community signups",
        "api_key_requirement": "Yes, available in Settings > Developer",
        "platform_fee": "5% for free plan, 0% for Plus plan on ticket sales",
        "addon_sends": "Included 5k/week invites; additional tiers $50-800/mo for 10k-100k weekly sends",
        "_source": "zabal-dispatch-tool-stack-deep-dive-ops-infra-tools-20260524"
      }
    },
    {
      "id": "cal-com",
      "name": "Cal.com",
      "labels": [
        "Tool|Platform"
      ],
      "attributes": {
        "cost": "Free (basic scheduling) or $12/mo (Pro) or $28/mo (Teams), or self-hosted free",
        "role": "Slot booking and meeting scheduling, multi-calendar sync, AI agent scheduling",
        "category": "ops-infra",
        "integration": "Webhooks (BOOKING_CREATED, BOOKING_RESCHEDULED, BOOKING_CANCELLED, MEETING_STARTED, MEETING_ENDED, BOOKING_PAID), API v2 (requires header cal-api-version: 2024-08-13)",
        "zao_usage": "Workshop slot booking, Zaal one-on-ones, team meeting scheduling",
        "ai_agent_support": "Yes - AI agents can query slots, create bookings, manage rescheduling via /v2/bookings endpoints",
        "rate_limit": "120 requests per minute (API key), contact support for higher limits",
        "api_endpoints": "GET /v2/slots, POST /v2/bookings, POST /v2/bookings/:uid/reschedule, GET /v2/event-types, POST /v2/webhooks",
        "credit_system": "Yes - agents can check credits available via GET /v2/credits/available and charge via POST /v2/credits/charge",
        "_source": "zabal-dispatch-tool-stack-deep-dive-ops-infra-tools-20260524"
      }
    },
    {
      "id": "magnetic",
      "name": "Magnetiq",
      "labels": [
        "Tool|Platform"
      ],
      "attributes": {
        "cost": "Per-customer (not publicly listed SaaS pricing; contact sales)",
        "role": "Portal and opt-in workshop library for brands and communities; opt-in discovery platform",
        "category": "ops-infra",
        "founder": "Tyler Stambaugh (Chief Product Officer), co-founder at MAGNETIQ",
        "web3_integration": "Blockchain + NFT loyalty infrastructure for brand activation and fan engagement",
        "integration": "MCP (Model Context Protocol) via Composio; AI agent toolkits for follow-up management, contact search, tag retrieval, user listing",
        "mcp_capabilities": "list upcoming follow-ups, search client contacts by company, get tags for contact, show users in organization",
        "framework_support": "AutoGen (via Composio Tool Router), Pydantic AI (via Composio), Claude via MCP",
        "zao_usage": "Workshop discovery library, opt-in portal for ZAO events, brand activation for COC Concertz, ZABAL Gamez registration",
        "parent_company": "MAGNETIQ Inc (web3 marketing infrastructure for brands)",
        "_source": "zabal-dispatch-tool-stack-deep-dive-ops-infra-tools-20260524"
      }
    },
    {
      "id": "telegram",
      "name": "Telegram",
      "labels": [
        "Platform"
      ],
      "attributes": {
        "cost": "$0 (free API, no per-message charges, no rate limits at small scale)",
        "role": "Team coordination, ZOE notification home, ZAO Devz command relay via @ZAODevZBot",
        "category": "ops-infra",
        "api": "Bot API (https://core.telegram.org/bots/API) - fully free since 2015",
        "update_methods": "getUpdates (polling) or setWebhook (incoming HTTPS POST)",
        "broadcast_rate": "30 messages/sec free, 0.1 Telegram Stars per message above that",
        "file_upload_limit": "50 MB per API request; files already on Telegram servers re-sendable via file_id",
        "cloud_storage": "1024 items per user per bot",
        "zao_usage": "ZAO Devz group command dispatch (/fix, /help, /status), Hermes Narrator phase updates, HermesBot PR alerts",
        "business_mode": "Yes - bots can process messages via personal business account with BotFather setup",
        "hosting_cost": "$5-40/mo VPS if self-hosted, $0 if using Cloudflare Workers or Vercel free tier",
        "_source": "zabal-dispatch-tool-stack-deep-dive-ops-infra-tools-20260524"
      }
    },
    {
      "id": "x-spaces",
      "name": "X Spaces",
      "labels": [
        "Platform"
      ],
      "attributes": {
        "cost": "$0 (free for hosts to create and broadcast audio spaces)",
        "role": "Live audio streaming and discussion, community conversations",
        "category": "ops-infra",
        "integration": "Web, mobile app native; no public API for automated scheduling (manual creation via X interface)",
        "zao_usage": "ZABAL Gamez announcements, live Q&A sessions, music producer interviews, community calls",
        "platform": "Twitter/X native feature",
        "host_requirements": "X account, no minimum follower count but algorithmic visibility favors established accounts",
        "_source": "zabal-dispatch-tool-stack-deep-dive-ops-infra-tools-20260524"
      }
    },
    {
      "id": "riverside",
      "name": "Riverside",
      "labels": [
        "Platform"
      ],
      "attributes": {
        "cost": "Free (basic recording) + freemium paid tiers; API and pricing not publicly documented",
        "role": "Local 4K video + uncompressed audio recording in separate tracks; multi-platform streaming and distribution",
        "category": "ops-infra",
        "recording_quality": "Up to 4K video + uncompressed audio, unaffected by internet connection (local capture)",
        "distribution": "YouTube, Spotify, Apple, LinkedIn, Instagram, Twitch, and 20+ platforms",
        "zao_usage": "COC Concertz high-fidelity recording, ZABAL Gamez tutorial capture, workshop documentation",
        "api_status": "No public developer API documented; primarily UI-driven platform",
        "_source": "zabal-dispatch-tool-stack-deep-dive-ops-infra-tools-20260524"
      }
    },
    {
      "id": "descript",
      "name": "Descript",
      "labels": [
        "Tool|Platform"
      ],
      "attributes": {
        "cost": "Free ($0/mo, 1 media hour monthly, 100 AI credits, watermark) or $16/mo (Hobbyist, annual $24 monthly) or $24/mo (Creator, annual $35 monthly)",
        "role": "Audio and video editing, transcription, AI-powered editing (Underlord co-editor), filler word removal, clip creation",
        "category": "ops-infra",
        "free_tier": "1 media hour/month, 100 AI credits, 720p export, watermark-free",
        "hobbyist": "10 media hours/month, 400 AI credits, 1080p export, full Underlord access",
        "creator": "30 media hours/month, 800 AI credits, 4K export, full AI tools, stock media",
        "zao_usage": "COC Concertz content pipeline (audio extraction, editing, clip generation), ZABAL Gamez video tutorials",
        "api_status": "No public API for automation documented; subscription-tier based feature access",
        "ai_credits": "Used for AI-powered tools (transcription, clip generation, speech synthesis, filler removal)",
        "_source": "zabal-dispatch-tool-stack-deep-dive-ops-infra-tools-20260524"
      }
    },
    {
      "id": "cloudflare-cdn",
      "name": "Cloudflare CDN",
      "labels": [
        "CDN"
      ],
      "attributes": {
        "pricing_model": "Free tier + Pro/Business",
        "standard_bandwidth_cost": "Free (capped) or $20+/mo Pro",
        "african_pops": "Johannesburg, Cairo, Lagos",
        "setup_complexity": "Low - DNS swap",
        "minimum_monthly_cost": "$0",
        "vercel_compatible": true,
        "strengths": "Workers, R2, Zero Trust, DDoS mitigation, free tier generous",
        "weaknesses": "Pro plan required for advanced features",
        "best_for": "Default choice, existing Cloudflare users",
        "_source": "zabal-dispatch-africa-cdn-routing-alternative-cdns-20260524"
      }
    },
    {
      "id": "bunnycdn",
      "name": "BunnyCDN",
      "labels": [
        "CDN"
      ],
      "attributes": {
        "pricing_model": "Pay-as-you-go $/GB",
        "standard_bandwidth_cost": "$0.06/GB",
        "volume_bandwidth_cost": "$0.005/GB at 500TB",
        "african_pops": 3,
        "african_locations": [
          "Johannesburg",
          "Cairo",
          "Lagos"
        ],
        "setup_complexity": "Medium - origin config",
        "minimum_monthly_cost": "$1",
        "vercel_compatible": true,
        "estimated_monthly_zao_1k": "$0.50-$2 (100-400MB bandwidth)",
        "strengths": "Transparent pricing, fast setup, GDPR native",
        "weaknesses": "No serverless compute, paid support starts at $1/mo",
        "best_for": "Cost-conscious teams, high-volume sites",
        "_source": "zabal-dispatch-africa-cdn-routing-alternative-cdns-20260524"
      }
    },
    {
      "id": "aws-cloudfront",
      "name": "AWS CloudFront",
      "labels": [
        "CDN"
      ],
      "attributes": {
        "pricing_model": "Complex tiered $/GB",
        "african_pops": 4,
        "african_locations": [
          "Johannesburg",
          "Cape Town",
          "Lagos",
          "Nairobi"
        ],
        "setup_complexity": "Medium-High - AWS console",
        "minimum_monthly_cost": "$0.50-$5 (estimate)",
        "vercel_compatible": true,
        "strengths": "Most African PoPs, integrates with AWS ecosystem, high volume discounts",
        "weaknesses": "Complex pricing, overkill for small sites",
        "best_for": "Teams already on AWS, high-volume or compute-heavy workloads",
        "_source": "zabal-dispatch-africa-cdn-routing-alternative-cdns-20260524"
      }
    },
    {
      "id": "fastly",
      "name": "Fastly",
      "labels": [
        "CDN"
      ],
      "attributes": {
        "pricing_model": "Premium $/GB",
        "african_pops": 1,
        "african_constraint": "Max 10% traffic from Africa",
        "setup_complexity": "Medium - config language VCL",
        "estimated_monthly_zao": "$50+ (Africa penalty surcharge)",
        "vercel_compatible": true,
        "strengths": "Powerful edge VCL, DDoS, premium support",
        "weaknesses": "Expensive for Africa, fewer PoPs than competitors",
        "best_for": "High-performance premium use cases, not Africa-focused",
        "_source": "zabal-dispatch-africa-cdn-routing-alternative-cdns-20260524"
      }
    },
    {
      "id": "netlify-edge-functions",
      "name": "Netlify Edge Functions",
      "labels": [
        "Edge Platform"
      ],
      "attributes": {
        "pricing_model": "Free tier + usage",
        "cdn_pops": 16,
        "runtime": "Deno",
        "setup_complexity": "Low - framework agnostic",
        "vercel_compatible": false,
        "compute_capable": true,
        "strengths": "Alternative to Vercel, TypeScript native, Deno runtime",
        "weaknesses": "Smaller network than Vercel (16 vs 126 PoPs), higher latency to Africa",
        "best_for": "Deno-native stacks, avoiding Vercel lock-in",
        "_source": "zabal-dispatch-africa-cdn-routing-alternative-cdns-20260524"
      }
    },
    {
      "id": "vultr-vps",
      "name": "Vultr VPS",
      "labels": [
        "VPS Provider"
      ],
      "attributes": {
        "regions": 32,
        "african_regions": [
          "Johannesburg"
        ],
        "pricing_model": "Fixed monthly",
        "starting_price": "$2.50/mo",
        "setup_complexity": "High - manual nginx/caching",
        "vercel_compatible": false,
        "requires_ops": true,
        "strengths": "Full control, cheapest option, no bandwidth caps",
        "weaknesses": "Manual cache management, no serverless, ops overhead",
        "best_for": "Teams with ops budget, extreme cost sensitivity",
        "_source": "zabal-dispatch-africa-cdn-routing-alternative-cdns-20260524"
      }
    },
    {
      "id": "zao-domains",
      "name": "ZAO Domains",
      "labels": [
        "Service Group"
      ],
      "attributes": {
        "current_host": "Vercel",
        "current_cdn": "Cloudflare (default)",
        "monthly_visitors_estimate": 1000,
        "monthly_bandwidth_estimate": "100-400 MB",
        "sites": [
          "zaoos.com",
          "other ZAO properties"
        ],
        "use_case": "Static documentation, ecosystem resources",
        "_source": "zabal-dispatch-africa-cdn-routing-alternative-cdns-20260524"
      }
    },
    {
      "id": "african-network-access-problem",
      "name": "African Network Access Problem",
      "labels": [
        "Ops Issue"
      ],
      "attributes": {
        "symptom": "Slow ZAO domain load times in Africa regions",
        "affected_regions": [
          "West Africa",
          "East Africa",
          "Southern Africa"
        ],
        "root_cause": "Limited edge presence or routing inefficiency",
        "priority": "Medium - impacts developer/user experience",
        "_source": "zabal-dispatch-africa-cdn-routing-alternative-cdns-20260524"
      }
    },
    {
      "id": "zabalgames-migration-plan",
      "name": "zabalgames-migration-plan",
      "labels": [
        "migration_plan"
      ],
      "attributes": {
        "target_domain": "zabalgamez.com",
        "current_registrar": "Porkbun",
        "current_nameservers": [
          "fortaleza.ns.porkbun.com",
          "maceio.ns.porkbun.com",
          "curitiba.ns.porkbun.com",
          "salvador.ns.porkbun.com"
        ],
        "current_origin": "Vercel CDN (76.76.21.21)",
        "problem": "African regions lack Vercel PoPs, causing slow/blocked access",
        "solution": "Add Cloudflare in front of Vercel as full DNS proxy with 126+ global PoPs",
        "plan_status": "ready_for_execution",
        "execution_window": "May 24-25 (before May 31 launch)",
        "estimated_total_duration": "24-48 hours for full propagation",
        "_source": "zabal-dispatch-africa-cdn-routing-fix-plan-20260524"
      }
    },
    {
      "id": "cloudflare-free-tier",
      "name": "cloudflare-free-tier",
      "labels": [
        "service"
      ],
      "attributes": {
        "provider": "Cloudflare",
        "plan": "Free",
        "cost": "0 USD/month",
        "global_pops": 126,
        "coverage_countries": 51,
        "africa_coverage": "yes",
        "dns_management": "included",
        "ddos_protection": "included_free",
        "tls_provisioning": "automatic",
        "suitable_for_launch": true,
        "_source": "zabal-dispatch-africa-cdn-routing-fix-plan-20260524"
      }
    },
    {
      "id": "porkbun-registrar",
      "name": "porkbun-registrar",
      "labels": [
        "service"
      ],
      "attributes": {
        "provider": "Porkbun",
        "domains_managed": [
          "zabalgamez.com",
          "bettercallzaal.com"
        ],
        "nameserver_change_location": "Domain Settings > Nameservers section",
        "dnssec_status": "may_need_disable_during_migration",
        "_source": "zabal-dispatch-africa-cdn-routing-fix-plan-20260524"
      }
    },
    {
      "id": "vercel-origin-config",
      "name": "vercel-origin-config",
      "labels": [
        "technical_config"
      ],
      "attributes": {
        "hostname": "vercel-dns-0.com or cname.vercel-dns-0.com",
        "ip_address": "76.76.21.21",
        "compatible_with_cloudflare": true,
        "tls_handling": "Vercel auto-provisions for any domain, Cloudflare must set Full or Full Strict mode",
        "_source": "zabal-dispatch-africa-cdn-routing-fix-plan-20260524"
      }
    },
    {
      "id": "dns-migration-step1-prepare",
      "name": "dns-migration-step1-prepare",
      "labels": [
        "migration_phase"
      ],
      "attributes": {
        "phase": "Preparation (24h before nameserver change)",
        "steps": [
          "Log into Porkbun registrar dashboard",
          "Find DNS settings for zabalgamez.com",
          "Lower TTL on existing A/CNAME record from 3600 to 300 seconds (5 min)",
          "Wait 6 hours for TTL reduction to propagate",
          "Create Cloudflare account if not exists",
          "Add zabalgamez.com domain to Cloudflare"
        ],
        "duration_hours": 24,
        "risk_level": "minimal",
        "_source": "zabal-dispatch-africa-cdn-routing-fix-plan-20260524"
      }
    },
    {
      "id": "dns-migration-step2-add-cloudflare",
      "name": "dns-migration-step2-add-cloudflare",
      "labels": [
        "migration_phase"
      ],
      "attributes": {
        "phase": "Cloudflare Setup",
        "steps": [
          "In Cloudflare dashboard: Add Site > Enter zabalgamez.com > Select Free plan",
          "Cloudflare auto-scans for existing DNS records",
          "Add A record pointing to Vercel: 76.76.21.21 (DNS only, gray cloud initially)",
          "Copy assigned Cloudflare nameservers from Zone Overview (2 servers, e.g. ns1234.cloudflare.com, ns5678.cloudflare.com)",
          "Save in notepad - you will need these in next step",
          "In Cloudflare Security: Set TLS mode to 'Full' (compatible with Vercel)"
        ],
        "duration_hours": 0.5,
        "risk_level": "minimal",
        "_source": "zabal-dispatch-africa-cdn-routing-fix-plan-20260524"
      }
    },
    {
      "id": "dns-migration-step3-nameserver-switch",
      "name": "dns-migration-step3-nameserver-switch",
      "labels": [
        "migration_phase"
      ],
      "attributes": {
        "phase": "Nameserver Migration (critical phase)",
        "steps": [
          "Log into Porkbun > zabalgamez.com > Domain Settings > Nameservers",
          "Delete all 4 Porkbun nameservers",
          "Enter Cloudflare nameservers (from step 2)",
          "Disable DNSSEC at Porkbun if enabled",
          "Click Save/Update",
          "Note timestamp - propagation starts now"
        ],
        "duration_hours": 0.25,
        "downtime_risk": "less than 5 minutes (if TTL was lowered in step 1)",
        "propagation_time_hours": "2-4 for fast cache expiry, up to 24 for complete global propagation",
        "_source": "zabal-dispatch-africa-cdn-routing-fix-plan-20260524"
      }
    },
    {
      "id": "dns-migration-step4-verification",
      "name": "dns-migration-step4-verification",
      "labels": [
        "migration_phase"
      ],
      "attributes": {
        "phase": "Post-Migration Verification",
        "steps": [
          "After 30 mins: Run 'dig zabalgamez.com' - should show Cloudflare IP",
          "Use whatsmydns.net and enter zabalgamez.com - track global propagation",
          "Test from Africa: use VPN to Nigerian/South African server, load zabalgamez.com in browser",
          "Check Cloudflare dashboard: Analytics > Requests should show traffic routing through Cloudflare",
          "Monitor error logs for 1-2 hours - watch for SSL/TLS errors"
        ],
        "duration_hours": 2,
        "tool_references": [
          "dig",
          "whatsmydns.net",
          "Cloudflare dashboard"
        ],
        "success_criteria": "All regions show fast response, no ERR_SSL_VERSION_ERROR or TLS handshake failures",
        "_source": "zabal-dispatch-africa-cdn-routing-fix-plan-20260524"
      }
    },
    {
      "id": "rollback-procedure",
      "name": "rollback-procedure",
      "labels": [
        "contingency"
      ],
      "attributes": {
        "trigger": "If zabalgamez.com is inaccessible from multiple regions after 1 hour",
        "steps": [
          "Log into Porkbun immediately",
          "Change nameservers back to original Porkbun nameservers (from your saved config)",
          "Wait 5 mins for local cache to clear",
          "Verify dig shows Porkbun response",
          "Site should be live within 5-10 minutes"
        ],
        "duration_hours": 0.25,
        "confidence": "very_high - this is a standard DNS rollback",
        "_source": "zabal-dispatch-africa-cdn-routing-fix-plan-20260524"
      }
    },
    {
      "id": "launch-timing-decision",
      "name": "launch-timing-decision",
      "labels": [
        "strategic_decision"
      ],
      "attributes": {
        "decision": "Migrate BEFORE May 31 launch",
        "reasoning": [
          "May 31 launch is 7 days away (Sun May 31)",
          "Nameserver propagation takes 12-24 hours globally",
          "If migrated May 24-25, African Cloudflare PoPs are live for launch cast",
          "If migrated during launch week (May 27-30), risk DNS instability during peak traffic",
          "Risk of incomplete propagation during launch is higher than executing now",
          "Early execution gives 5+ days buffer for any issues"
        ],
        "execution_date": "May 24 or May 25 (this weekend)",
        "launch_safety_margin": "5-6 days buffer after migration completes",
        "_source": "zabal-dispatch-africa-cdn-routing-fix-plan-20260524"
      }
    },
    {
      "id": "bettercallzaal-com-edge-routing",
      "name": "bettercallzaal.com Edge Routing",
      "labels": [
        "Live Test Result"
      ],
      "attributes": {
        "dns_resolution": "216.198.79.1 (Vercel)",
        "edge_location": "yul1 (Montreal, Canada)",
        "http_version": "HTTP/2",
        "quic_support": "Not advertised (no Alt-Svc header)",
        "ipv6_support": "None (AAAA records absent)",
        "ttfb_avg_ms": "115",
        "ttfb_variance": "87-493ms (cache hit vs cold start)",
        "content_length_bytes": 76321,
        "cache_status": "HIT",
        "_source": "zabal-dispatch-africa-cdn-routing-live-test-20260524"
      }
    },
    {
      "id": "zabalgames-com-edge-routing",
      "name": "zabalgamez.com Edge Routing",
      "labels": [
        "Live Test Result"
      ],
      "attributes": {
        "dns_resolution": "216.198.79.1 (Vercel)",
        "edge_location": "yul1 (Montreal, Canada)",
        "http_version": "HTTP/2",
        "quic_support": "Not advertised",
        "ipv6_support": "None",
        "ttfb_avg_ms": "135",
        "content_length_bytes": 104136,
        "cache_status": "HIT",
        "_source": "zabal-dispatch-africa-cdn-routing-live-test-20260524"
      }
    },
    {
      "id": "vercel-ip-216-198-79-1",
      "name": "Vercel IP 216.198.79.1",
      "labels": [
        "Network Asset"
      ],
      "attributes": {
        "provider": "Vercel",
        "geo_location": "Montreal, Canada",
        "geoip_lookup": "Failed (API requires key)",
        "serves": "Both bettercallzaal.com and zabalgamez.com",
        "dns_nameservers": "Porkbun (fortaleza, curitiba, maceio, salvador - Brazil-hosted)",
        "ttl": 600,
        "_source": "zabal-dispatch-africa-cdn-routing-live-test-20260524"
      }
    },
    {
      "id": "porkbun-dns-nameservers",
      "name": "Porkbun DNS Nameservers",
      "labels": [
        "DNS Infrastructure"
      ],
      "attributes": {
        "servers": [
          "fortaleza.ns.porkbun.com",
          "curitiba.ns.porkbun.com",
          "maceio.ns.porkbun.com",
          "salvador.ns.porkbun.com"
        ],
        "location": "Brazil (all cities are in Brazil)",
        "risk_for_africa": "South American DNS servers may have higher latency for African clients; no direct Africa presence",
        "_source": "zabal-dispatch-africa-cdn-routing-live-test-20260524"
      }
    },
    {
      "id": "tls-certificate-bettercallzaal-com",
      "name": "TLS Certificate bettercallzaal.com",
      "labels": [
        "Security Asset"
      ],
      "attributes": {
        "issued_by": "Let's Encrypt R12",
        "valid_from": "2026-05-17T23:27:20Z",
        "valid_until": "2026-08-15T23:27:19Z",
        "subject": "CN=bettercallzaal.com",
        "status": "Current",
        "_source": "zabal-dispatch-africa-cdn-routing-live-test-20260524"
      }
    },
    {
      "id": "african-network-routing-test-gap",
      "name": "African Network Routing Test Gap",
      "labels": [
        "Diagnostic Limitation"
      ],
      "attributes": {
        "current_vantage": "US/EU (Canada datacenter)",
        "cannot_measure": [
          "African ISP BGP routing",
          "IXP congestion points",
          "Regional DNS latency",
          "TLS handshake timeouts on weak connections"
        ],
        "requires_for_empirical_test": [
          "BrowserStack free trial with Lagos/Cape Town/Nairobi real devices",
          "WebPageTest free account with African agents",
          "curl from African mobile hotspot"
        ],
        "header_spoofing_result": "X-Forwarded-For does not trigger geo-routing; Vercel uses true client IP geolocation",
        "_source": "zabal-dispatch-africa-cdn-routing-live-test-20260524"
      }
    },
    {
      "id": "vercel-african-edge-coverage",
      "name": "Vercel African Edge Coverage",
      "labels": [
        "Infrastructure Gap"
      ],
      "attributes": {
        "description": "Vercel operates only 1 compute region in Africa (Cape Town, cpt1) out of 20 total regions. While 126 PoPs exist globally, most African traffic still routes through non-African regions or distant PoPs.",
        "coverage": "Only South Africa has compute; other 53 African nations rely on distant PoPs or default failover (P20 priority for cpt1 failover)",
        "source": "Vercel official docs, 2026-03-05",
        "_source": "zabal-dispatch-africa-cdn-routing-root-cause-20260524"
      }
    },
    {
      "id": "cloudflare-african-pop-density",
      "name": "Cloudflare African PoP Density",
      "labels": [
        "Competitive Infrastructure"
      ],
      "attributes": {
        "count": 32,
        "cities": "Abidjan, Accra, Addis Ababa, Algiers, Annaba, Antananarivo, Cairo, Cape Town, Constantine, Dakar, Dar Es Salaam, Djibouti, Durban, Gaborone, Harare, Johannesburg, Kampala, Kigali, Kinshasa, Lagos, Luanda, Lusaka, Maputo, Mombasa, Nairobi, Oran, Ouagadougou, Port Louis, Saint-Denis, Tunis, Windhoek, Yamoussoukro",
        "geographic_coverage": "North (Maghreb), East (Kenya/Ethiopia/Tanzania), West (Nigeria/Ghana/Ivory Coast), Southern (SA/Botswana/Zimbabwe)",
        "advantage": "Cloudflare 32x density vs Vercel 1 compute region = better cache hit ratio, lower latency, more peering options",
        "_source": "zabal-dispatch-africa-cdn-routing-root-cause-20260524"
      }
    },
    {
      "id": "african-isp-bgp-peering-gaps",
      "name": "African ISP BGP Peering Gaps",
      "labels": [
        "Network Topology Issue"
      ],
      "attributes": {
        "description": "Many African ISPs (Safaricom Kenya, MTN Group, Airtel Africa, Vodacom) present at same IXPs but do not peer with each other or international CDNs",
        "consequence": "Traffic forced off-continent or through slow international backbone routes instead of local PoP handoff",
        "affected_isp": [
          "Safaricom",
          "MTN",
          "Airtel Africa",
          "Vodacom"
        ],
        "peering_points": "NAPAfrica (6 South African IX locations), other East/West African IXPs",
        "source": "A First Look at ISP Interconnectivity in Africa, UCSB/NAPAfrica data",
        "_source": "zabal-dispatch-africa-cdn-routing-root-cause-20260524"
      }
    },
    {
      "id": "transparent-tls-proxy-interception",
      "name": "Transparent TLS Proxy Interception",
      "labels": [
        "Carrier Security Appliance"
      ],
      "attributes": {
        "description": "African mobile carriers (Safaricom, MTN, Airtel, Vodacom, Maroc Telecom) intercept and re-encrypt HTTPS at the carrier gateway",
        "mechanism": "Carrier terminates TLS connection, re-establishes with internal cert signed by carrier CA",
        "failure_mode": "Clients reject HTTPS if carrier CA not in OS trust store, or if SNI hostname mismatch occurs",
        "affected_protocols": "HTTPS/TLS 1.2+, HTTP/2",
        "source": "Medium (Security Compass), DNSFilter ISP transparency report",
        "_source": "zabal-dispatch-africa-cdn-routing-root-cause-20260524"
      }
    },
    {
      "id": "http-3-quic-blocking-uganda-east-africa",
      "name": "HTTP/3 QUIC Blocking (Uganda/East Africa)",
      "labels": [
        "UDP Filtering"
      ],
      "attributes": {
        "description": "Uganda ISPs observed blocking or timing out UDP port 443 (QUIC), forcing fallback to HTTP/2 TCP",
        "temporal_pattern": "Blocking methods change within days, high variance in enforcement",
        "failure_mode": "Browsers attempt QUIC handshake, timeout after initial packet, fallback to HTTP/2",
        "latency_impact": "QUIC timeout ~20-30s per attempt before fallback",
        "status": "Experimental carrier behavior, not yet standardized",
        "source": "OTF report on QUIC censorship patterns",
        "_source": "zabal-dispatch-africa-cdn-routing-root-cause-20260524"
      }
    },
    {
      "id": "ipv6-only-carrier-networks-with-broken-aaaa-records",
      "name": "IPv6-Only Carrier Networks with Broken AAAA Records",
      "labels": [
        "Dual-Stack Misconfiguration"
      ],
      "attributes": {
        "description": "Some African mobile carriers force IPv6-only access (e.g., 464XLAT NAT64) while domain AAAA records point to broken or distant routes",
        "failure_mode": "Client requests AAAA, receives response, attempts IPv6 connect, times out or is slow",
        "latency_penalty": "Happy Eyeballs timeout delay (300ms-1s per failed connection attempt before IPv4 retry)",
        "carriers_likely": "Large mobile groups deploying IPv6 core networks (Safaricom, MTN, Vodacom following T-Mobile/Reliance Jio patterns)",
        "source": "Oneuptime DNS troubleshooting guides, Infoblox ULA analysis",
        "_source": "zabal-dispatch-africa-cdn-routing-root-cause-20260524"
      }
    },
    {
      "id": "dns-resolver-peering-issues-quad9-vs-cloudflare",
      "name": "DNS Resolver Peering Issues (Quad9 vs Cloudflare)",
      "labels": [
        "DNS Routing Asymmetry"
      ],
      "attributes": {
        "description": "Quad9 has stronger African anycast coverage than Cloudflare 1.1.1.1, but both may route queries off-continent depending on ISP peering",
        "quad9_advantage": "Better African footprint, but blocks legitimate domains as collateral damage",
        "cloudflare_disadvantage": "Faster general performance, but weaker in Africa; some ISP peering causes timeouts on CDNs",
        "symptom": "DNS resolution slow, timeout, or returns wrong IP due to ISP interception or poor peering",
        "source": "Factually DNS speed tests, Cloudflare community reports",
        "_source": "zabal-dispatch-africa-cdn-routing-root-cause-20260524"
      }
    },
    {
      "id": "vercel-default-failover-priority-iad1-primary",
      "name": "Vercel Default Failover Priority (iad1 primary)",
      "labels": [
        "Routing Policy"
      ],
      "attributes": {
        "description": "Vercel Functions default to iad1 (Washington DC). Failover sequence prioritizes European/Asian regions; cpt1 is P20 (last)",
        "implication": "If origin traffic exceeds PoP capacity, requests fall back through US/EU before reaching Cape Town",
        "latency": "iad1 to Africa: 180-250ms, cpt1 to Africa: 10-50ms",
        "source": "Vercel official docs, failover table",
        "_source": "zabal-dispatch-africa-cdn-routing-root-cause-20260524"
      }
    },
    {
      "id": "certificate-chain-tls-1-2-downgrade-issues",
      "name": "Certificate Chain & TLS 1.2 Downgrade Issues",
      "labels": [
        "TLS Handshake Failure"
      ],
      "attributes": {
        "description": "Older Vercel edge certs or carriers forcing TLS 1.2 may fail if cert chain is incomplete or carrier MITM cert is invalid",
        "failure_mode": "Browser cert validation fails, connection refused, or user sees HSTS preload error",
        "affected_versions": "TLS 1.2 and earlier (1.3 better protected but some carriers still intercept)",
        "source": "Sectigo TLS handshake analysis, Cloudflare SNI documentation",
        "_source": "zabal-dispatch-africa-cdn-routing-root-cause-20260524"
      }
    },
    {
      "id": "cloudflare-african-pop-network",
      "name": "Cloudflare African PoP Network",
      "labels": [
        "Infrastructure"
      ],
      "attributes": {
        "pop_count_africa": 18,
        "key_pops": [
          "Lagos Nigeria",
          "Cairo Egypt",
          "Cape Town South Africa",
          "Nairobi Kenya",
          "Johannesburg South Africa",
          "Casablanca Morocco",
          "Accra Ghana",
          "Dar es Salaam Tanzania",
          "Luanda Angola",
          "Algiers Algeria",
          "Kigali Rwanda",
          "Durban South Africa",
          "Mombasa Kenya",
          "Tunis Tunisia"
        ],
        "strategy": "1 POP per country, focus on cable landing sites",
        "coverage_gap": "Vercel has near-zero Africa presence",
        "_source": "zabal-dispatch-africa-cdn-routing-cloudflare-setup-20260524"
      }
    },
    {
      "id": "cloudflare-dns-only-mode",
      "name": "Cloudflare DNS-Only Mode",
      "labels": [
        "Configuration"
      ],
      "attributes": {
        "common_name": "Grey cloud setting",
        "requirement": "DNS management on Cloudflare, no traffic proxy",
        "critical_reason": "Prevents Vercel SSL/TLS interception",
        "gotcha": "Orange cloud mode breaks Vercel bot protection and IP visibility",
        "_source": "zabal-dispatch-africa-cdn-routing-cloudflare-setup-20260524"
      }
    },
    {
      "id": "cloudflare-cname-flattening",
      "name": "Cloudflare CNAME Flattening",
      "labels": [
        "Technical Feature"
      ],
      "attributes": {
        "problem_solved": "RFC 1912 apex CNAME restriction",
        "how_it_works": "Cloudflare internally resolves CNAME to IP, returns A record",
        "benefit": "Allows CNAME at apex domain without DNS spec violation",
        "target_format": "<project-hash>.vercel-dns-xxx.com",
        "_source": "zabal-dispatch-africa-cdn-routing-cloudflare-setup-20260524"
      }
    },
    {
      "id": "full-strict-tls-mode",
      "name": "Full Strict TLS Mode",
      "labels": [
        "SSL/TLS Configuration"
      ],
      "attributes": {
        "requirement_set": [
          "unexpired certificate",
          "public CA or Cloudflare Origin CA",
          "CN or SAN matching hostname"
        ],
        "minimum_infrastructure": "Origin HTTPS on port 443",
        "common_error": "526 SSL Handshake Failure if cert mismatch",
        "vercel_compatibility": "Works if hostname validation passes",
        "_source": "zabal-dispatch-africa-cdn-routing-cloudflare-setup-20260524"
      }
    },
    {
      "id": "vercel-deployment-protection",
      "name": "Vercel Deployment Protection",
      "labels": [
        "Security Feature"
      ],
      "attributes": {
        "affected_systems": [
          "Bot Protection",
          "Firewall",
          "Threat Intelligence",
          "IP visibility"
        ],
        "problem_with_proxy": "Reverse proxies obscure signals, hide real IPs, rotate exit nodes causing re-challenges",
        "performance_impact": "Additional latency, cache conflicts, degraded speed",
        "vercel_stance": "Explicitly does not recommend Cloudflare proxy in front",
        "_source": "zabal-dispatch-africa-cdn-routing-cloudflare-setup-20260524"
      }
    },
    {
      "id": "argo-smart-routing",
      "name": "Argo Smart Routing",
      "labels": [
        "Performance Service"
      ],
      "attributes": {
        "cost_structure": "$5 per domain per month plus $0.10 per GB",
        "availability": "All tiers (Free, Pro, Business, Enterprise)",
        "performance_gain": "35% average latency reduction, 27% fewer connection errors",
        "africa_strategy": "Real-time routing around congestion, unknown specific Africa benefit data",
        "scalability_risk": "1 TB traffic = $100+ just for Argo",
        "_source": "zabal-dispatch-africa-cdn-routing-cloudflare-setup-20260524"
      }
    },
    {
      "id": "lagos-data-center",
      "name": "Lagos Data Center",
      "labels": [
        "Infrastructure Node"
      ],
      "attributes": {
        "location": "Lekki axis, Lagos Nigeria",
        "colocation": "MDXI datacentre facility",
        "connectivity": "Undersea cable operator connection, IXPN, WAF-IX Lagos",
        "local_impact": "18 of Nigeria's top 50 websites already use Cloudflare",
        "strategic_role": "West African cable hub",
        "_source": "zabal-dispatch-africa-cdn-routing-cloudflare-setup-20260524"
      }
    },
    {
      "id": "cloudflare-pricing-tiers",
      "name": "Cloudflare Pricing Tiers",
      "labels": [
        "Billing Model"
      ],
      "attributes": {
        "free_tier": "DNS only, no Argo",
        "pro_tier": "$20/month, includes Argo option",
        "business_tier": "$200/month, includes Argo + prioritization",
        "enterprise_tier": "Custom, Argo unlimited no metered fees",
        "argo_requirement": "For Africa optimization, minimum Business",
        "_source": "zabal-dispatch-africa-cdn-routing-cloudflare-setup-20260524"
      }
    },
    {
      "id": "dns-migration-vercel-to-cloudflare",
      "name": "DNS Migration Vercel to Cloudflare",
      "labels": [
        "Process"
      ],
      "attributes": {
        "steps": [
          "Change registrar nameservers to Cloudflare",
          "Add CNAME record (apex via Flattening)",
          "Keep proxy grey (DNS only)",
          "Verify in Vercel (2-10 min)",
          "Propagation 48 hours"
        ],
        "critical_gotcha": "Do not delete old DNS until verified live",
        "common_mistake": "Multiple NS records if Vercel nameservers not removed at registrar",
        "_source": "zabal-dispatch-africa-cdn-routing-cloudflare-setup-20260524"
      }
    },
    {
      "id": "zao-bettercallzaal-deployment",
      "name": "ZAO / BetterCallZaal Deployment",
      "labels": [
        "Use Case"
      ],
      "attributes": {
        "current_host": "Vercel",
        "desired_improvement": "African traffic latency reduction",
        "cloudflare_benefit": "18+ PoPs vs Vercel 0",
        "implementation_challenge": "Cannot proxy without breaking Vercel protections",
        "actual_solution_needed": "Argo Smart Routing on Business+ OR negotiate Vercel Africa edges",
        "_source": "zabal-dispatch-africa-cdn-routing-cloudflare-setup-20260524"
      }
    },
    {
      "id": "bcz-yapz",
      "name": "BCZ YapZ",
      "labels": [
        "DataStream",
        "interview-archive"
      ],
      "attributes": {
        "stream_id": "bcz-yapz",
        "status": "live",
        "summary": "Zaal's long-form interview show - conversations with a builder, founder, or organizer working on something worth understanding.",
        "ties_to_zabal": "Episode transcripts surface the people, tools, and threads moving through the ZAO ecosystem. BCZ YapZ already generates content/bonfire-ingest/ files from each transcript, so it is a native Bonfire feeder - the same memory layer ZABAL Gamez runs on.",
        "url": "https://www.bczyapz.com/",
        "_source": "data-streams-registry"
      }
    },
    {
      "id": "farcaster-agentic-bootcamp",
      "name": "Farcaster Agentic Bootcamp",
      "labels": [
        "DataStream",
        "bootcamp"
      ],
      "attributes": {
        "stream_id": "farcaster-agentic-bootcamp",
        "status": "archived",
        "summary": "Two-week online program (Mar 30 - Apr 10 2026) co-hosted by Builders Garden + Dev3Pack - zero to building autonomous agents and miniapps on the Farcaster social graph, deployed live to compete in FarHack Online 2026.",
        "ties_to_zabal": "This is the origin thread. The bootcamp fed FarHack, where Zaal/Zlank won the Snap category ($1,000), and that prize money went to ZAOstock. The agent + miniapp patterns taught here are the same rails ZABAL Gamez builds on.",
        "url": "https://builders-garden.notion.site/farcaster-agentic-bootcamp",
        "_source": "data-streams-registry"
      }
    },
    {
      "id": "zao-festivals-500-bounty",
      "name": "ZAO Festivals $500 Bounty",
      "labels": [
        "DataStream",
        "bounty"
      ],
      "attributes": {
        "stream_id": "zao-festivals-bounty",
        "status": "live",
        "summary": "The ZAO festivals team funds the ZABAL Gamez Season 1 prize pool - $500 USDC for v0, tiered across finalists, plus a Hats Protocol role NFT for every finisher.",
        "ties_to_zabal": "This is the prize pool itself. Every finalist who ships gets paid from it. Sponsor inquiries to grow the v1 pool: info@thezao.com.",
        "url": "/finals",
        "_source": "data-streams-registry"
      }
    },
    {
      "id": "farcaster-batches",
      "name": "Farcaster Batches",
      "labels": [
        "DataStream",
        "protocol-feature"
      ],
      "attributes": {
        "stream_id": "farcaster-batches",
        "status": "upcoming",
        "summary": "An upcoming Farcaster protocol feature, being introduced on GM Farcaster (Farcaster's #1 news show) during its X spaces.",
        "ties_to_zabal": "A new rail to design around. ZABAL Gamez builds that batch onchain or social actions get cheaper / more composable when Batches ships. Tracked here so builders catch it the week it lands.",
        "url": "https://www.gmfarcaster.com/",
        "_source": "data-streams-registry"
      }
    },
    {
      "id": "zabal-games-workshops",
      "name": "ZABAL Gamez Workshops",
      "labels": [
        "DataStream",
        "workshop"
      ],
      "attributes": {
        "stream_id": "zabal-games-workshops",
        "status": "live",
        "summary": "June workshop month - ZAO builders each record a ~30-min session on tools they have built. The whole library lands in the Magnetiq portal, watchable live or after.",
        "ties_to_zabal": "The workshops are the deep-context onboarding for builders. Raw session recordings + transcripts + summaries are the richest ZABAL Gamez data stream - they directly seed what people build in July.",
        "url": "/lead",
        "_source": "data-streams-registry"
      }
    }
  ],
  "edges": [
    {
      "from": "zaal",
      "to": "zabal",
      "type": "founded",
      "properties": {
        "fact": "Zaal founded ZABAL ecosystem"
      }
    },
    {
      "from": "zaal",
      "to": "bettercallzaal",
      "type": "owns",
      "properties": {
        "fact": "Zaal owns BetterCallZaal personal site"
      }
    },
    {
      "from": "hermes-runner",
      "to": "hermes-coder",
      "type": "SPAWNS",
      "properties": {
        "triggers": "on each attempt in loop",
        "passes": "FixerInput {issueText, workTreePath, branchName, attemptNumber, previousCriticFeedback}",
        "receives": "FixerOutput {filesChanged, commitMessage, prTitle, inputTokens, outputTokens}",
        "_source": "zabal-dispatch-hermes-20260523"
      }
    },
    {
      "from": "hermes-coder",
      "to": "hermes-pre-flight-gate",
      "type": "OUTPUT_TO",
      "properties": {
        "gates_before": "Critic review",
        "runs": "typecheck + lint + tests",
        "fails_back_to": "Hermes Runner (retry loop, feedback to Coder)",
        "_source": "zabal-dispatch-hermes-20260523"
      }
    },
    {
      "from": "hermes-pre-flight-gate",
      "to": "hermes-critic",
      "type": "GATES_ENTRY_TO",
      "properties": {
        "only_if": "pre-flight OK",
        "passes": "CritiqueInput {workTreePath, branchName, filesChanged, issueText}",
        "_source": "zabal-dispatch-hermes-20260523"
      }
    },
    {
      "from": "hermes-critic",
      "to": "hermes-runner",
      "type": "FEEDBACK_TO",
      "properties": {
        "returns": "CritiqueOutput {score, feedback, inputTokens, outputTokens}",
        "score_decision": "if >=70 then ready, else retry or escalate",
        "_source": "zabal-dispatch-hermes-20260523"
      }
    },
    {
      "from": "hermes-runner",
      "to": "hermes-database",
      "type": "LOGS_TO",
      "properties": {
        "writes": "HermesRun record + attempt count + model used + token counts",
        "timing": "create at start, update at each phase",
        "immutable": true,
        "_source": "zabal-dispatch-hermes-20260523"
      }
    },
    {
      "from": "zao-devz-bot",
      "to": "hermes-runner",
      "type": "DISPATCHES_TO",
      "properties": {
        "trigger": "user /fix command in Telegram",
        "passes": "DispatchInput {triggered_by, issue_text, target_repo}",
        "returns": "DispatchResult (ready | failed | escalated)",
        "_source": "zabal-dispatch-hermes-20260523"
      }
    },
    {
      "from": "hermes-narrator",
      "to": "zao-devz-bot",
      "type": "POSTS_TO",
      "properties": {
        "timing": "after each runner phase completes",
        "messages": "phase-transition updates (Coder started, Critic done, PR opened, etc)",
        "_source": "zabal-dispatch-hermes-20260523"
      }
    },
    {
      "from": "hermes-pr-watcher",
      "to": "hermes-narrator",
      "type": "ALERTS_VIA",
      "properties": {
        "trigger": "CI failure or CONFLICTING merge state",
        "medium": "Telegram message",
        "actionable": "link to CI logs, suggest rebase/re-run",
        "_source": "zabal-dispatch-hermes-20260523"
      }
    },
    {
      "from": "hermes-runner",
      "to": "claude-code-sdk",
      "type": "USES_AS_RUNTIME",
      "properties": {
        "spawns": "Coder subprocess (Opus), Critic subprocess (Sonnet)",
        "auth": "Max plan OAuth bearer",
        "model_arg": "--model opus / --model sonnet (hardcoded)",
        "_source": "zabal-dispatch-hermes-20260523"
      }
    },
    {
      "from": "hermes-coder",
      "to": "github-api",
      "type": "CLONES_AND_PUSHES",
      "properties": {
        "operations": [
          "clone zaoos",
          "checkout -b hermes/...",
          "commit",
          "push origin"
        ],
        "auth": "SSH key (bot account)",
        "scope": "single branch per run",
        "_source": "zabal-dispatch-hermes-20260523"
      }
    },
    {
      "from": "hermes-runner",
      "to": "github-api",
      "type": "OPENS_PR_VIA",
      "properties": {
        "command": "gh pr create --head hermes/... --base main",
        "auth": "gh CLI (bot SSH key)",
        "titles_from": "Coder prTitle + prBody",
        "_source": "zabal-dispatch-hermes-20260523"
      }
    },
    {
      "from": "diff-complexity-classifier",
      "to": "critic",
      "type": "INFORMS_MODEL_CHOICE_FOR",
      "properties": {
        "future_use": "Sprint 1 (Gap #1) - route simple to Haiku, complex to Sonnet",
        "today": "unused (all routed to Sonnet)",
        "_source": "zabal-dispatch-hermes-20260523"
      }
    },
    {
      "from": "hermes-coder",
      "to": "zabal-bonfire-bot",
      "type": "READS_CONTEXT_FROM",
      "properties": {
        "future_use": "Phase 1 post-May (Doc 547 spec)",
        "query": "constraint entities matching issue_text",
        "timeout_ms": 2000,
        "fallback": "silent (proceed without Bonfire context)",
        "_source": "zabal-dispatch-hermes-20260523"
      }
    },
    {
      "from": "hermes-runner",
      "to": "zabal-bonfire-bot",
      "type": "WRITES_EVENTS_TO",
      "properties": {
        "future_use": "Phase 2 (Doc 547 spec)",
        "writes": "Contribution node on PR open",
        "timing": "fire-and-forget (non-blocking)",
        "_source": "zabal-dispatch-hermes-20260523"
      }
    },
    {
      "from": "zao-devz-bot",
      "to": "hermes-http-dispatch",
      "type": "ALTERNATIVE_TRIGGER_VIA",
      "properties": {
        "endpoint": "POST :3007/hermes-dispatch",
        "auth": "x-hermes-secret header",
        "today": "used for integration tests, future for cross-bot dispatch",
        "_source": "zabal-dispatch-hermes-20260523"
      }
    },
    {
      "from": "hermes-coder",
      "to": "forbidden-paths",
      "type": "REFUSES_TO_WRITE",
      "properties": {
        "paths": [
          "bot/src/hermes",
          ".env*",
          ".git/hooks",
          "package.json",
          "CLAUDE.md",
          ".claude/rules"
        ],
        "enforced_by": "pre-flight forbidden-paths check",
        "rationale": "prevent self-modification, secrets leak, supply-chain attack",
        "_source": "zabal-dispatch-hermes-20260523"
      }
    },
    {
      "from": "zabal-games-builder",
      "to": "poidh",
      "type": "CLAIMS_BOUNTY_VIA",
      "properties": {
        "flow": "Claim adoptable project -> Create POIDH bounty on Base -> Execute task -> Submit proof NFT -> Issuer accepts -> Funds released to builder wallet",
        "chain": "Base",
        "bounty_types_available": [
          "Solo (builder pays)",
          "Open (community co-funds)"
        ],
        "proof_requirement": "Photo/video + text description minted as ERC-721 NFT",
        "_source": "zabal-dispatch-poidh-20260523"
      }
    },
    {
      "from": "poidh",
      "to": "empire-builder",
      "type": "FEEDS_LEADERBOARD",
      "properties": {
        "mechanism": "BCZ poidh-leaderboard.json pulls submitter addresses + scores -> Empire Builder apiLeaderboards reads via HTTPS",
        "refresh_trigger": "Manual or Cloudflare Worker cron",
        "data_format": "[{address, score}]",
        "_source": "zabal-dispatch-poidh-20260523"
      }
    },
    {
      "from": "empire-builder",
      "to": "zabal-empire",
      "type": "DISTRIBUTES_TOKENS",
      "properties": {
        "token": "ZABAL",
        "recipients": "All POIDH submitter wallets in leaderboard",
        "booster_stack": "Token Boosters + Reputation Boosters applied onchain",
        "distribution_trigger": "Empire guardian calls bulk-send or Zaal admin button on /poidh.html",
        "_source": "zabal-dispatch-poidh-20260523"
      }
    },
    {
      "from": "poidh-sentinel",
      "to": "poidh",
      "type": "MANAGES_AUTONOMOUSLY",
      "properties": {
        "actions": [
          "Suggest bounties",
          "Validate deposits",
          "Monitor submissions cron 1m",
          "Evaluate claims (deterministic + OCR + vision AI)",
          "Execute payouts",
          "Announce winners"
        ],
        "decision_threshold": "score >= 60 of 100",
        "channel": "/poidh on Farcaster",
        "_source": "zabal-dispatch-poidh-20260523"
      }
    },
    {
      "from": "poidh-sentinel",
      "to": "empire-builder",
      "type": "CALLS_DISTRIBUTE_PREPARE",
      "properties": {
        "timing": "T+0 when Sentinel picks winner",
        "endpoint": "POST /api/distribute-prepare on ZABAL Empire",
        "result": "Atomic moment: ETH lands in winner wallet + ZABAL distributed to all submitters in same second",
        "_source": "zabal-dispatch-poidh-20260523"
      }
    },
    {
      "from": "bcz-yapz-episodes",
      "to": "poidh",
      "type": "SEEDS_CLIPPING_BOUNTIES",
      "properties": {
        "cadence": "Weekly (one per episode)",
        "task": "Clip best 30-90s moment + post to X/Instagram/YouTube with comment",
        "proof": "Screenshot of live post + clip link + source video",
        "example_bounty": "https://poidh.xyz/base/bounty/1151",
        "prize_range": "0.005-0.01 ETH on Base",
        "_source": "zabal-dispatch-poidh-20260523"
      }
    },
    {
      "from": "zabal-games-adoptable-projects",
      "to": "poidh",
      "type": "CREATES_BOUNTIES_FOR",
      "properties": {
        "adoption_flow": "Builder claims project -> Creates POIDH solo bounty on Base -> Executes work -> Submits proof -> Wins payment + ZABAL",
        "project_count": 9,
        "examples": [
          "POIDH bounty leaderboard",
          "Streaming auto-clip flywheel",
          "WaveWarZ Finals settlement"
        ],
        "_source": "zabal-dispatch-poidh-20260523"
      }
    },
    {
      "from": "poidh",
      "to": "hats-protocol",
      "type": "CAN_MINT_PORTABLE_PROOF",
      "properties": {
        "mechanism": "Optional Phase 3: Mint ERC-1155 hat to each submitter address",
        "purpose": "Portable proof of 'I submitted to ZAO POIDH' across all ecosystems",
        "cost": "~$0.12 per address on Base",
        "prerequisite": "Zaal confirms cross-platform role intent",
        "_source": "zabal-dispatch-poidh-20260523"
      }
    },
    {
      "from": "zao",
      "to": "poidh-sentinel",
      "type": "COULD_PARTNER_VIA",
      "properties": {
        "option_a": "Sponsor/retainer partnership with 0x94t3z (mr94t3z on Farcaster)",
        "option_b": "Fork the open-source repo as Sentinel-for-ZAO",
        "leverage": "100x - saves months of autonomous bounty agent build",
        "contact": "DM @mr94t3z on Farcaster",
        "_source": "zabal-dispatch-poidh-20260523"
      }
    },
    {
      "from": "bettercallzaal-com-poidh-html",
      "to": "poidhv3-contract-events",
      "type": "INDEXES_FOR_LEADERBOARD",
      "properties": {
        "phase_1": "Parse OG meta from poidh.xyz/a/thezao album (participants query param)",
        "phase_2": "Read PoidhV3 contract events via Base RPC -> sybil-protected with claim NFT verification",
        "data_output": "poidh-leaderboard.json",
        "_source": "zabal-dispatch-poidh-20260523"
      }
    },
    {
      "from": "empire-builder",
      "to": "bountycaster",
      "type": "ALTERNATIVE_TO",
      "properties": {
        "zabal_primary": "POIDH 90% (on-chain escrow + NFT artifact + album)",
        "zabal_secondary": "Bountycaster for code/research without visual proof",
        "comparison_factor": "POIDH provides trustless payout + collectible; Bountycaster lighter trust model for text-based bounties",
        "_source": "zabal-dispatch-poidh-20260523"
      }
    },
    {
      "from": "fc-frame-button-n",
      "to": "farcaster-snap-protocol",
      "type": "REPLACED_BY",
      "properties": {
        "transition_date": "2026-03-27",
        "reason": "Snaps offer 16 components vs 4 buttons, multi-page state, JFS auth",
        "backward_compatibility": "Frame v1 still supported for legacy apps",
        "_source": "zabal-dispatch-snap-20260523"
      }
    },
    {
      "from": "farcaster-snap-protocol",
      "to": "content-negotiation-pattern",
      "type": "IMPLEMENTS",
      "properties": {
        "snap_header": "Accept: application/vnd.farcaster.snap+json",
        "response_mime": "application/vnd.farcaster.snap+json; charset=utf-8",
        "fallback_mime": "text/html; charset=utf-8",
        "discovery_rule": "Snap MUST be findable on plain GET",
        "_source": "zabal-dispatch-snap-20260523"
      }
    },
    {
      "from": "snap-response-v2-0",
      "to": "snap-element-catalog",
      "type": "USES_ELEMENTS",
      "properties": {
        "elements_field": "ui.elements",
        "max_total": 64,
        "validation_time": "spec-version aware per v2.0",
        "_source": "zabal-dispatch-snap-20260523"
      }
    },
    {
      "from": "snap-response-v2-0",
      "to": "snap-actions",
      "type": "DEFINES_ACTIONS",
      "properties": {
        "action_binding": "element.on.press.action field",
        "submit_requires": "target URL and JFS signature",
        "open_url_requires": "HTTPS target",
        "_source": "zabal-dispatch-snap-20260523"
      }
    },
    {
      "from": "zlank",
      "to": "farcaster-snap-protocol",
      "type": "IMPLEMENTS_BUILDER_FOR",
      "properties": {
        "build_target": "Snap response v2.0",
        "render_path": "/s/[uuid]",
        "content_negotiation": "true",
        "jfs_verification": "gated by NODE_ENV",
        "_source": "zabal-dispatch-snap-20260523"
      }
    },
    {
      "from": "jfs-json-farcaster-signature",
      "to": "snap-response-v2-0",
      "type": "AUTHENTICATES",
      "properties": {
        "triggers": "POST from client to snap server",
        "signature_verification": "verifyJFSRequestBody in @farcaster/snap",
        "identity_binding": "JFS header FID == user.fid (v2 requirement)",
        "_source": "zabal-dispatch-snap-20260523"
      }
    },
    {
      "from": "farcaster-snap-npm-package",
      "to": "jfs-json-farcaster-signature",
      "type": "PROVIDES_VERIFICATION_FOR",
      "properties": {
        "export_function": "verifyJFSRequestBody",
        "compatible_versions": "2.0.3+",
        "_source": "zabal-dispatch-snap-20260523"
      }
    },
    {
      "from": "zlank",
      "to": "farcaster-snap-npm-package",
      "type": "DEPENDS_ON",
      "properties": {
        "version_pinned": "2.1.1",
        "usage": "type schemas, validation, JFS verify",
        "_source": "zabal-dispatch-snap-20260523"
      }
    },
    {
      "from": "zlank",
      "to": "snap-host-whitelist",
      "type": "WHITELISTED_ON",
      "properties": {
        "host": "zlank.online",
        "status": "live May 2026",
        "snap_unfurl": "true",
        "_source": "zabal-dispatch-snap-20260523"
      }
    },
    {
      "from": "snap-host-whitelist",
      "to": "farcaster-snap-protocol",
      "type": "GATES_RENDERING_OF",
      "properties": {
        "enforcement_point": "Farcaster caster client",
        "non_whitelisted_behavior": "plain text URL fallback",
        "_source": "zabal-dispatch-snap-20260523"
      }
    },
    {
      "from": "fc-miniapp-meta-tag",
      "to": "farcaster-snap-protocol",
      "type": "COMPLEMENTARY_TO",
      "properties": {
        "snap_usage": "in-feed, lightweight, stateless",
        "miniapp_usage": "full-screen, persistent, wallet",
        "interop": "Snap can launch Mini App via open_mini_app action",
        "_source": "zabal-dispatch-snap-20260523"
      }
    },
    {
      "from": "snap-v2-0-structural-constraints",
      "to": "snap-response-v2-0",
      "type": "VALIDATES",
      "properties": {
        "validation_timing": "client-side on render, server-side on publish",
        "v1_vs_v2": "v1.0 skips constraints, v2.0 enforces",
        "_source": "zabal-dispatch-snap-20260523"
      }
    },
    {
      "from": "content-negotiation-pattern",
      "to": "snap-host-whitelist",
      "type": "WORKS_WITH",
      "properties": {
        "discovery_first": "server advertises snap on plain GET",
        "caster_verification": "caster checks whitelist, then fetches snap+json",
        "_source": "zabal-dispatch-snap-20260523"
      }
    },
    {
      "from": "zlank",
      "to": "jfs-json-farcaster-signature",
      "type": "IMPLEMENTS_VERIFICATION_FOR",
      "properties": {
        "skip_condition": "NODE_ENV !== 'production' or ZLANK_VERIFY_JFS env",
        "production_requirement": "MUST verify on /api/snap/[encoded]",
        "_source": "zabal-dispatch-snap-20260523"
      }
    },
    {
      "from": "snap-response-v2-0",
      "to": "snap-v2-0-structural-constraints",
      "type": "MUST_SATISFY",
      "properties": {
        "constraint_check": "per PR #95 validator",
        "v1_behavior": "no constraints (legacy)",
        "v2_behavior": "strict validation (current)",
        "_source": "zabal-dispatch-snap-20260523"
      }
    },
    {
      "from": "farcaster-snap-npm-package",
      "to": "snap-v2-0-structural-constraints",
      "type": "ENFORCES",
      "properties": {
        "validator_export": "validateSnapResponse",
        "applies_to": "version 2.0 snaps only",
        "_source": "zabal-dispatch-snap-20260523"
      }
    },
    {
      "from": "zlank",
      "to": "fc-miniapp-meta-tag",
      "type": "SERVES_FALLBACK_WITH",
      "properties": {
        "snap_response_condition": "Accept: application/vnd.farcaster.snap+json",
        "html_response_condition": "browser or older client",
        "html_includes": "fc:miniapp meta JSON for Mini App launch button",
        "_source": "zabal-dispatch-snap-20260523"
      }
    },
    {
      "from": "wavewarz-v1-solana",
      "to": "solana-mainnet",
      "type": "DEPLOYED_ON",
      "properties": {
        "program_id": "9TUfEHvk5fN5vogtQyrefgNqzKy2Bqb4nWVhSFUg2fYo",
        "pda_type": "Battle Vault (escrow)",
        "tx_cost_sol": 0.00025,
        "finality_ms": "sub-millisecond",
        "_source": "zabal-dispatch-wavewarz-20260523"
      }
    },
    {
      "from": "wavewarz-base-v2",
      "to": "ethereum-base-l2",
      "type": "DEPLOYED_ON",
      "properties": {
        "testnet": "Base Sepolia",
        "contract_address_sepolia": "0xe28709DF5c77eD096f386510240A4118848c1098",
        "expected_mainnet_date": "July 2026 (post-audit)",
        "payment_token": "WETH",
        "_source": "zabal-dispatch-wavewarz-20260523"
      }
    },
    {
      "from": "wavewarz-base-v2",
      "to": "zabal-games-season-1-finals",
      "type": "SETTLES_VOTING_FOR",
      "properties": {
        "mechanism": "Hybrid: market price (volume + win rate at T+72h) + Respect-holder baseline allocation ($1-2 per voter per finalist)",
        "decision_doc": "720",
        "option": "Option B (Hybrid, RECOMMENDED)",
        "placement_tie": "WaveWarZ smart contract settlement output (not manual)",
        "prize_integration": "Market payout (1% artist cut + losing pool split) + $500 USDC pool + Hats Protocol NFTs",
        "_source": "zabal-dispatch-wavewarz-20260523"
      }
    },
    {
      "from": "zabal-games-season-1-finals",
      "to": "x402-payment-protocol",
      "type": "USES_FOR",
      "properties": {
        "purpose": "Judge-agent autonomous evaluation (Doc 723 Decision #7)",
        "payment_per_evaluation": "Micropayment (amount TBD)",
        "judge_agents": "Autonomous, score build against rubric, emit scores to public feed",
        "_source": "zabal-dispatch-wavewarz-20260523"
      }
    },
    {
      "from": "candytoybox",
      "to": "wavewarz-v1-solana",
      "type": "DEVELOPS",
      "properties": {
        "primary_repos": [
          "wavewarz-intelligence",
          "wavewarz-base",
          "analytics-wave-warz",
          "Dashboard_wallet_checker",
          "homepage-redesign"
        ],
        "type": "Development organization (16 repos total)",
        "_source": "zabal-dispatch-wavewarz-20260523"
      }
    },
    {
      "from": "ikechi-nwachukwu-hurric4n3ike",
      "to": "wavewarz-v1-solana",
      "type": "FOUNDED",
      "properties": {
        "launch": "September 2025",
        "current_role": "Founder + most-active battler (wallet A: 60W-18L as of Mar 21 2026)",
        "_source": "zabal-dispatch-wavewarz-20260523"
      }
    },
    {
      "from": "ikechi-nwachukwu-hurric4n3ike",
      "to": "wavewarz-base-v2",
      "type": "LEADS_WITH",
      "properties": {
        "collaborators": "Sam + Arthur",
        "phase": "In-build, targeting mainnet July 2026",
        "_source": "zabal-dispatch-wavewarz-20260523"
      }
    },
    {
      "from": "sam-arthur",
      "to": "wavewarz-base-v2",
      "type": "BUILDS",
      "properties": {
        "scope": "Smart contracts (Solidity), security review, mainnet deployment",
        "timeline": "June-July 2026",
        "_source": "zabal-dispatch-wavewarz-20260523"
      }
    },
    {
      "from": "sam-arthur",
      "to": "zabal-games-season-1-finals",
      "type": "INTEGRATES_PROTOCOL_INTO",
      "properties": {
        "integration_item": "WaveWarZ-Base becomes Finals voting surface",
        "phase": "July smoke test, August production Finals run",
        "_source": "zabal-dispatch-wavewarz-20260523"
      }
    },
    {
      "from": "lui",
      "to": "wavewarz-v1-solana",
      "type": "COMPETES_ON",
      "properties": {
        "battles": 71,
        "wins": 49,
        "rank": "Dominant player (highest volume, highest win rate combo)",
        "_source": "zabal-dispatch-wavewarz-20260523"
      }
    },
    {
      "from": "aporkalypse",
      "to": "wavewarz-v1-solana",
      "type": "COMPETES_ON",
      "properties": {
        "battles": 30,
        "wins": 22,
        "rank": "High-quality performer (73% win rate)",
        "_source": "zabal-dispatch-wavewarz-20260523"
      }
    },
    {
      "from": "prof-t",
      "to": "wavewarz-v1-solana",
      "type": "COMPETES_ON",
      "properties": {
        "battles": 7,
        "wins": 5,
        "rank": "High-stakes performer (71% win rate, 13.86 SOL volume for 7 battles)",
        "_source": "zabal-dispatch-wavewarz-20260523"
      }
    },
    {
      "from": "kata7yst",
      "to": "wavewarz-v1-solana",
      "type": "COMPETES_ON",
      "properties": {
        "status": "Most active in current window (Mar 20-21 snapshot: 8 battles / 24h)",
        "note": "Not in original 43-wallet list; newer entrant; wallet address unknown",
        "_source": "zabal-dispatch-wavewarz-20260523"
      }
    },
    {
      "from": "lui",
      "to": "the-zao",
      "type": "RECRUITMENT_TARGET",
      "properties": {
        "priority": "High",
        "reason": "49W-22L record, 29.59 SOL volume (7x more than next leader)",
        "_source": "zabal-dispatch-wavewarz-20260523"
      }
    },
    {
      "from": "aporkalypse",
      "to": "the-zao",
      "type": "RECRUITMENT_TARGET",
      "properties": {
        "priority": "High",
        "reason": "73% win rate, strong cross-format performer, social profiles on 5+ platforms (SoundCloud, Instagram, Apple Music, X)",
        "_source": "zabal-dispatch-wavewarz-20260523"
      }
    },
    {
      "from": "dcoopofficial",
      "to": "the-zao",
      "type": "RECRUITMENT_PATH",
      "properties": {
        "path": "Farcaster-native via Coop Records + Sonata (music client)",
        "relevance": "Coop Records runs Sonata (open-source Farcaster music client); existing Farcaster community signal",
        "_source": "zabal-dispatch-wavewarz-20260523"
      }
    },
    {
      "from": "wavewarz-v1-solana",
      "to": "helius-solana-rpc",
      "type": "USES",
      "properties": {
        "plan": "Free tier integration for ZAO artist discovery pipeline (Doc 101 Part 3)",
        "credits_per_month": 1000000,
        "rate_limit_rps": 10,
        "cost": 0,
        "_source": "zabal-dispatch-wavewarz-20260523"
      }
    },
    {
      "from": "wavewarz-intelligence",
      "to": "wavewarz-v1-solana",
      "type": "READS_FROM",
      "properties": {
        "data": "Battle history (647 as of Mar 21, 735 as of May 23), artist profiles (43+)",
        "method": "Direct Solana RPC or internal API (not exposed in open-source Intelligence repo)",
        "supabase_note": "Intelligence Supabase only has events/calendar, not battle data",
        "_source": "zabal-dispatch-wavewarz-20260523"
      }
    },
    {
      "from": "zao-os",
      "to": "wavewarz-v1-solana",
      "type": "EMBEDS",
      "properties": {
        "location": "/wavewarz route on BetterCallZaal + ZAO OS",
        "tabs": [
          "Battles",
          "Intelligence",
          "Analytics"
        ],
        "integration_doc": "180 (WaveWarZ Integration Blueprints)",
        "_source": "zabal-dispatch-wavewarz-20260523"
      }
    },
    {
      "from": "zao-os",
      "to": "solana-wallet-bridge",
      "type": "USES_FOR",
      "properties": {
        "field": "users.solana_wallet",
        "purpose": "Match ZAO members to WaveWarZ artists (wallet-based linking)",
        "_source": "zabal-dispatch-wavewarz-20260523"
      }
    },
    {
      "from": "polymarket-agent-apis",
      "to": "wavewarz-base-v2",
      "type": "REFERENCE_ARCHITECTURE_FOR",
      "properties": {
        "pattern": "Agent integration for prediction market participation (EIP-712 signing, gasless relayer)",
        "_source": "zabal-dispatch-wavewarz-20260523"
      }
    },
    {
      "from": "agora",
      "to": "wavewarz-base-v2",
      "type": "INFORMS_DESIGN_OF",
      "properties": {
        "pattern": "Multiple frontier model agents trading concurrently with Brier score leaderboard; diversity improves accuracy",
        "_source": "zabal-dispatch-wavewarz-20260523"
      }
    },
    {
      "from": "guessmarket",
      "to": "wavewarz-base-v2",
      "type": "INFORMS_DESIGN_OF",
      "properties": {
        "pattern": "Multi-chain agent architecture (Solana support), agent-native market creation, 75% LP fee structure",
        "_source": "zabal-dispatch-wavewarz-20260523"
      }
    },
    {
      "from": "prediction-arena",
      "to": "wavewarz-base-v2",
      "type": "INFORMS_DESIGN_OF",
      "properties": {
        "pattern": "Frontier model trading with Kelly Criterion sizing, web search integration, market discovery",
        "_source": "zabal-dispatch-wavewarz-20260523"
      }
    },
    {
      "from": "polyswarm",
      "to": "wavewarz-base-v2",
      "type": "INFORMS_DESIGN_OF",
      "properties": {
        "pattern": "Multi-agent swarm reasoning; agents model other agents' knowledge via price observation",
        "_source": "zabal-dispatch-wavewarz-20260523"
      }
    },
    {
      "from": "orca",
      "to": "wavewarz-base-v2",
      "type": "INFORMS_DESIGN_OF",
      "properties": {
        "pattern": "Continuous autonomous operation, x402 payment integration, sentiment-driven signal aggregation",
        "_source": "zabal-dispatch-wavewarz-20260523"
      }
    },
    {
      "from": "anansi-ogma-pattern",
      "to": "zabal-games-judge-agents",
      "type": "DIRECT_IMPLEMENTATION_PATTERN_FOR",
      "properties": {
        "doc": "720 Decision #7",
        "mapping": "Artist agent (finalist builder) → Judge agent (rubric evaluation) → x402 payment → feedback loop",
        "scope": "Autonomous evaluation of build quality, ZAO-nativeness, usability, shipping speed",
        "_source": "zabal-dispatch-wavewarz-20260523"
      }
    },
    {
      "from": "golden-codex-pattern",
      "to": "zabal-games-judge-agents",
      "type": "INFORMS_DESIGN_OF",
      "properties": {
        "pattern": "Multiple independent judges with different criteria emit parallel scores; reasoning visible",
        "_source": "zabal-dispatch-wavewarz-20260523"
      }
    },
    {
      "from": "agentarena-pattern",
      "to": "zabal-games-finals",
      "type": "INFORMS_DESIGN_OF",
      "properties": {
        "pattern": "Bounty escrow + LLM judging + on-chain settlement + reputation scoring; agent judge immutable track record",
        "_source": "zabal-dispatch-wavewarz-20260523"
      }
    },
    {
      "from": "helius-solana-rpc",
      "to": "zao-os-wavewarz-artist-discovery-pipeline",
      "type": "PROVIDES_INFRASTRUCTURE_FOR",
      "properties": {
        "plan": "Phase 1 data foundation (Doc 101 Part 3.3 Tier 3: Direct Solana RPC)",
        "method": "getProgramAccounts(WAVEWARZ_PROGRAM_ID) to read Battle Vault PDAs directly",
        "status": "Unknown program ID (pending Ikechi request via X @WaveWarZ)",
        "_source": "zabal-dispatch-wavewarz-20260523"
      }
    },
    {
      "from": "bettercallzaal-wwbase",
      "to": "bettercallzaal",
      "type": "REPO_OWNED_BY",
      "properties": {
        "brief": "Public brief for WaveWarZ Base v2; agentic music battles; looking for technical co-founder",
        "_source": "zabal-dispatch-wavewarz-20260523"
      }
    },
    {
      "from": "bettercallzaal-wavewarzapp",
      "to": "bettercallzaal",
      "type": "REPO_OWNED_BY",
      "properties": {
        "purpose": "Mobile alert + spectator app for Solana music battles; demo build",
        "_source": "zabal-dispatch-wavewarz-20260523"
      }
    },
    {
      "from": "wavewarz-base-v2",
      "to": "wavewarzbase-sol",
      "type": "CONTAINS_CONTRACT",
      "properties": {
        "description": "Core battle mechanics (initialization, settlement, claiming)",
        "_source": "zabal-dispatch-wavewarz-20260523"
      }
    },
    {
      "from": "wavewarz-base-v2",
      "to": "ephemeralbattletoken-sol",
      "type": "CONTAINS_CONTRACT",
      "properties": {
        "description": "Temporary tokens minted per-battle, destroyed after settlement (creates FOMO + scarcity)",
        "_source": "zabal-dispatch-wavewarz-20260523"
      }
    },
    {
      "from": "wavewarz-base-v2",
      "to": "wavewarzmarketplace-sol",
      "type": "CONTAINS_CONTRACT",
      "properties": {
        "description": "Marketplace for buying/selling battle positions (secondary market)",
        "_source": "zabal-dispatch-wavewarz-20260523"
      }
    },
    {
      "from": "wavewarz-base-v2",
      "to": "wavewarzmusicnft-sol",
      "type": "CONTAINS_CONTRACT",
      "properties": {
        "description": "Music NFT contract (new in v2, not in Solana v1)",
        "_source": "zabal-dispatch-wavewarz-20260523"
      }
    },
    {
      "from": "zabal-games-finals",
      "to": "hats-protocol",
      "type": "USES_FOR",
      "properties": {
        "nft_minting": "Finisher NFT (all finalists), Champion NFT (top-3)",
        "role_check_option": "Respect-holder snapshot via Hats Protocol role check (vs direct Respect contract read)",
        "_source": "zabal-dispatch-wavewarz-20260523"
      }
    },
    {
      "from": "zabal-games-season-1-finals",
      "to": "empire-builder-v3",
      "type": "INTEGRATES_WITH",
      "properties": {
        "relationship": "Empire stays leaderboard layer, WaveWarZ becomes settlement layer (Doc 654)",
        "_source": "zabal-dispatch-wavewarz-20260523"
      }
    },
    {
      "from": "zabal-games-season-1-finals",
      "to": "eas-ethereum-attestation-service",
      "type": "INTEGRATES_WITH",
      "properties": {
        "stack": "EAS on Base for immutable Finals decision records",
        "_source": "zabal-dispatch-wavewarz-20260523"
      }
    },
    {
      "from": "zabal-games-season-1-finals",
      "to": "bonfire",
      "type": "INTEGRATES_WITH",
      "properties": {
        "stack": "Bonfire knowledge graph stores judge-agent scores + market data as training corpus for future agents",
        "_source": "zabal-dispatch-wavewarz-20260523"
      }
    },
    {
      "from": "zabal-games-season-1-finals",
      "to": "coinflow",
      "type": "INTEGRATES_WITH",
      "properties": {
        "stack": "Coinflow on Base for payment settlement of $500 USDC prize pool",
        "_source": "zabal-dispatch-wavewarz-20260523"
      }
    },
    {
      "from": "doc-720",
      "to": "doc-701",
      "type": "UPDATES_SECTION_OF",
      "properties": {
        "section": "Part 12 (WaveWarZ Finals mechanism) TBD, last validated 2026-05-23",
        "_source": "zabal-dispatch-wavewarz-20260523"
      }
    },
    {
      "from": "doc-720",
      "to": "doc-711",
      "type": "REFERENCES",
      "properties": {
        "doc": "Arthur intro call (May 19 2026); locks Arthur on WaveWarZ-Base smart contracts + ZABAL Gamez mentor",
        "_source": "zabal-dispatch-wavewarz-20260523"
      }
    },
    {
      "from": "doc-720",
      "to": "doc-723",
      "type": "REFERENCES",
      "properties": {
        "doc": "Agentic WaveWarZ + x402 research; confirms judge-agent pattern (Decision #7)",
        "_source": "zabal-dispatch-wavewarz-20260523"
      }
    },
    {
      "from": "wavewarz-v1-solana",
      "to": "x-spaces-broadcast-schedule",
      "type": "BROADCASTS_ON",
      "properties": {
        "schedule": "Mon-Fri 8:30 PM EST",
        "format": "Live battles, judge announcements, AMAs, trader chat",
        "_source": "zabal-dispatch-wavewarz-20260523"
      }
    },
    {
      "from": "hurric4n3ike",
      "to": "x-spaces-broadcast-schedule",
      "type": "HOSTS",
      "properties": {
        "role": "Founder community presence",
        "_source": "zabal-dispatch-wavewarz-20260523"
      }
    },
    {
      "from": "zabal-token",
      "to": "empire-builder-v3",
      "type": "REGISTERED_ON",
      "properties": {
        "tier": "Ascended",
        "empireAddress": "0xe0faa499d6711870211505bd9ae2105206af1462",
        "activeLeaderboards": 7,
        "activeBoosters": 5,
        "_source": "zabal-dispatch-zabal-empire-20260523"
      }
    },
    {
      "from": "quotient-booster",
      "to": "zabal-token",
      "type": "STACKS_ON",
      "properties": {
        "boosterType": "QUOTIENT",
        "multiplier": "UNKNOWN (likely 1-5x)",
        "active": true,
        "_source": "zabal-dispatch-zabal-empire-20260523"
      }
    },
    {
      "from": "sang-token",
      "to": "zabal-token",
      "type": "STACKS_ON",
      "properties": {
        "boosterType": "ERC20",
        "multiplier": "UNKNOWN",
        "active": true,
        "_source": "zabal-dispatch-zabal-empire-20260523"
      }
    },
    {
      "from": "zaal-token",
      "to": "zabal-token",
      "type": "STACKS_ON",
      "properties": {
        "boosterType": "ERC20",
        "multiplier": "UNKNOWN",
        "active": true,
        "_source": "zabal-dispatch-zabal-empire-20260523"
      }
    },
    {
      "from": "loanz-token",
      "to": "zabal-token",
      "type": "STACKS_ON",
      "properties": {
        "boosterType": "ERC20",
        "multiplier": "UNKNOWN",
        "active": true,
        "_source": "zabal-dispatch-zabal-empire-20260523"
      }
    },
    {
      "from": "clanker-token",
      "to": "zabal-empire",
      "type": "RECOMMENDED_BOOSTER",
      "properties": {
        "multiplier": "3-5x",
        "rationale": "Network effect stacking per Doc 584 (glonkybot pattern)",
        "priority": "High",
        "_source": "zabal-dispatch-zabal-empire-20260523"
      }
    },
    {
      "from": "glanker-token",
      "to": "zabal-empire",
      "type": "RECOMMENDED_BOOSTER",
      "properties": {
        "multiplier": "3-5x",
        "rationale": "Farcaster ecosystem token, proven in glonkybot",
        "priority": "High",
        "_source": "zabal-dispatch-zabal-empire-20260523"
      }
    },
    {
      "from": "artbaby-token",
      "to": "zabal-empire",
      "type": "RECOMMENDED_BOOSTER",
      "properties": {
        "multiplier": "3-5x",
        "rationale": "Top-20 empire by distribution, cross-creator signal",
        "priority": "Medium",
        "_source": "zabal-dispatch-zabal-empire-20260523"
      }
    },
    {
      "from": "empire-builder-v3",
      "to": "zabal-games-season-1",
      "type": "SUPPORTS",
      "properties": {
        "mechanism": "Basic Empire for July submissions, Ascended Empire for finalists",
        "apiIntegration": "Public leaderboard API for real-time scoring",
        "_source": "zabal-dispatch-zabal-empire-20260523"
      }
    },
    {
      "from": "zabal-games-season-1",
      "to": "clanker-airdrop-csv-pattern",
      "type": "UNLOCKS",
      "properties": {
        "timing": "August Finals, optional token Ascension",
        "beneficiary": "Finalist players launching their own tokens",
        "_source": "zabal-dispatch-zabal-empire-20260523"
      }
    },
    {
      "from": "glonkybot-empire",
      "to": "clanker-token",
      "type": "BOOSTS_WITH",
      "properties": {
        "multiplier": "5x",
        "holdings_min": "10000000000000000000000000 (10M tokens, 18 decimals)",
        "_source": "zabal-dispatch-zabal-empire-20260523"
      }
    },
    {
      "from": "glonkybot-empire",
      "to": "artbaby-token",
      "type": "BOOSTS_WITH",
      "properties": {
        "multiplier": "5x",
        "_source": "zabal-dispatch-zabal-empire-20260523"
      }
    },
    {
      "from": "zabal-empire-leaderboard-holders",
      "to": "zabal-token",
      "type": "MEASURES",
      "properties": {
        "metric": "Token holdings (balance on Base chain)",
        "refreshFrequency": "Real-time (blockchain state)",
        "_source": "zabal-dispatch-zabal-empire-20260523"
      }
    },
    {
      "from": "zabal-empire-leaderboard-zabal-voting-miniapp",
      "to": "zabal-voting-miniapp",
      "type": "CONSUMES_DATA_FROM",
      "properties": {
        "dataSource": "API endpoint (custom score feed)",
        "updateFrequency": "UNKNOWN",
        "_source": "zabal-dispatch-zabal-empire-20260523"
      }
    },
    {
      "from": "jordan-yerbearzerker",
      "to": "empire-builder-v3",
      "type": "CREATED",
      "properties": {
        "role": "Creator + co-maintainer",
        "collaborator": "Adrian (diviflyy)",
        "_source": "zabal-dispatch-zabal-empire-20260523"
      }
    },
    {
      "from": "adrian-diviflyy",
      "to": "glonkybot-empire",
      "type": "OWNS",
      "properties": {
        "rank": "9.34 (highest in top-20 by computed rank)",
        "strategy": "17-token booster stack at 5x each",
        "_source": "zabal-dispatch-zabal-empire-20260523"
      }
    },
    {
      "from": "adrian-diviflyy",
      "to": "zabal-token",
      "type": "HOLDS",
      "properties": {
        "rank": "3 in ZABAL leaderboard",
        "score": "297M",
        "lifetime_distributed": "$7.41",
        "_source": "zabal-dispatch-zabal-empire-20260523"
      }
    },
    {
      "from": "songjam-leaderboard",
      "to": "zabal-empire",
      "type": "INTEGRATED_INTO",
      "properties": {
        "slot": "Multiple (Season 1, 2 Ep1, 2 Ep2)",
        "migration": "From X scraper to Empire Builder API (2026 Q1 decision)",
        "_source": "zabal-dispatch-zabal-empire-20260523"
      }
    },
    {
      "from": "poidh-bounties",
      "to": "zabal-empire",
      "type": "CROSS_LISTS_INTO",
      "properties": {
        "metric": "Unique bounty submitters (not submission count)",
        "pattern": "1 wallet per bounty regardless of submission volume",
        "_source": "zabal-dispatch-zabal-empire-20260523"
      }
    },
    {
      "from": "distribution-event-raffle",
      "to": "zabal-token",
      "type": "DISTRIBUTES",
      "properties": {
        "recipientCount": 10,
        "selectionMethod": "Random",
        "recentDropAmount": "$12.60 USD (2026-04-29)",
        "_source": "zabal-dispatch-zabal-empire-20260523"
      }
    },
    {
      "from": "distribution-event-weighted",
      "to": "zabal-token",
      "type": "DISTRIBUTES",
      "properties": {
        "recipientCount": "50-100",
        "selectionMethod": "By leaderboard score",
        "recentDropAmount": "$14.25 USD (2026-04-22, 100 recipients)",
        "_source": "zabal-dispatch-zabal-empire-20260523"
      }
    },
    {
      "from": "bonfire-knowledge-network",
      "to": "x402-payment-protocol",
      "type": "USES",
      "properties": {
        "fact": "Every cross-bonfire query retrieval settles as x402 micropayment ($0.001-$0.25 USDC) on Base via HTTP 402 flow",
        "verified": "ETHBoulder + docpull.ai blog post (May 2026) + x402.org",
        "settlement_time": "~1 second (Base L2 Flashblocks optimization can reach 0.2s)",
        "_source": "zabal-dispatch-bonfire-revenue-20260523"
      }
    },
    {
      "from": "hyperblogs",
      "to": "x402-payment-protocol",
      "type": "USES",
      "properties": {
        "fact": "AI-generated blog post mints gated behind x402 USDC payment (0.25 USDC per mint at ETHBoulder)",
        "verified": "hyperblogs.bonfires.ai + paragraph.com/@joshuab/ethboulder-lets-make-sense",
        "backend": "Graphiti HTN generation + payment settlement via x402 middleware",
        "_source": "zabal-dispatch-bonfire-revenue-20260523"
      }
    },
    {
      "from": "know-token",
      "to": "bonfire-genesis-nft",
      "type": "ALLOCATED_BY",
      "properties": {
        "fact": "Genesis NFT mint (0.1 ETH) is ONLY way to receive $KNOW allocation pre-public-launch",
        "verified": "docs.bonfires.ai + app.bonfires.ai flow",
        "note": "Post-launch earning mechanics unknown (must ask Joshua.eth)",
        "_source": "zabal-dispatch-bonfire-revenue-20260523"
      }
    },
    {
      "from": "zabal-bonfire",
      "to": "knowledge-network",
      "type": "MEMBER_OF",
      "properties": {
        "fact": "ZABAL graph is one node in federated Knowledge Network; future queries can cross KGs via x402",
        "status": "Phase 1: local-only. Phase 2+: federated with cost/earnings unknown.",
        "_source": "zabal-dispatch-bonfire-revenue-20260523"
      }
    },
    {
      "from": "zabal-bonfire",
      "to": "zoe-bot",
      "type": "PROVIDES_MEMORY_TO",
      "properties": {
        "fact": "ZOE reads from ZABAL bonfire for agent context + long-term memory (replacing 8-turn ring buffer)",
        "reference": "Doc 669 reverse-engineered workflow; Ryan (Bonfires SDK author) shipping compiled-new-ZOE",
        "phase": "Phase 1 (~May 26 2026)",
        "_source": "zabal-dispatch-bonfire-revenue-20260523"
      }
    },
    {
      "from": "zabal-bonfire",
      "to": "zaocoworkingbot",
      "type": "INGESTS_FROM",
      "properties": {
        "fact": "ZAOcoworkingBot events auto-write to ZABAL bonfire every 20 min via episodic KG extraction",
        "phase": "Phase 1 (2026-05-26+)",
        "corpus_value": "Real recent context for compiled-new-ZOE delivery",
        "_source": "zabal-dispatch-bonfire-revenue-20260523"
      }
    },
    {
      "from": "zabal-bonfire",
      "to": "bonfire-search-zaoos-com",
      "type": "POWERS",
      "properties": {
        "fact": "Public onboarding interface uses paid-agent endpoint (~$0.01-0.05/query) to serve KG queries to new ZAO members",
        "phase": "Phase 2 (Week of 2026-05-26)",
        "question_examples": [
          "What is WaveWarZ?",
          "How do I contribute to The ZAO?"
        ],
        "_source": "zabal-dispatch-bonfire-revenue-20260523"
      }
    },
    {
      "from": "bonfire-agent-system",
      "to": "knowledge-network",
      "type": "READS_FROM",
      "properties": {
        "fact": "Agents access KG via semantic search + graph traversal in adaptive/regenerate/append modes",
        "verified": "doc 669 (agent system section) + bonfires-sdk source",
        "_source": "zabal-dispatch-bonfire-revenue-20260523"
      }
    },
    {
      "from": "nerddao",
      "to": "bonfire-labs",
      "type": "IS_GITHUB_ORG_FOR",
      "properties": {
        "fact": "NERDDAO hosts all Bonfire Labs open-source repos (bonfires-sdk, bonfire-tools, integrations, demos)",
        "_source": "zabal-dispatch-bonfire-revenue-20260523"
      }
    },
    {
      "from": "bonfire-fetch",
      "to": "asi-one-uagents",
      "type": "INTEGRATES_WITH",
      "properties": {
        "fact": "NERDDAO/bonfire-fetch enables ASI:One agents to query Bonfires via semantic search + context retrieval",
        "pattern": "Agent-as-consumer (reads KG, doesn't populate manually)",
        "_source": "zabal-dispatch-bonfire-revenue-20260523"
      }
    },
    {
      "from": "bcz-strategies",
      "to": "zabal-bonfire",
      "type": "MINTED_GENESIS_NFT_FOR",
      "properties": {
        "fact": "BCZ minted Genesis NFT (0.1 ETH, ~May 2026) to own ZABAL bonfire + claim $KNOW allocation",
        "sunk_cost": "0.1 ETH already paid for bonfire infrastructure",
        "_source": "zabal-dispatch-bonfire-revenue-20260523"
      }
    },
    {
      "from": "ethboulder-boulder-bonfire",
      "to": "hyperblogs",
      "type": "GENERATED_CONTENT_FOR",
      "properties": {
        "fact": "HyperBlogs feature trialed at ETHBoulder 2026 with AI-generated articles minted at 0.25 USDC/mint via x402",
        "url": "hyperblogs.bonfires.ai (browsable + purchasable)",
        "_source": "zabal-dispatch-bonfire-revenue-20260523"
      }
    },
    {
      "from": "graphiti-backend",
      "to": "kengram",
      "type": "STORES_AND_EXPORTS",
      "properties": {
        "fact": "kEngrams (Canvas/OWL/Markdown) export from Graphiti for portability + backup",
        "vendor_lock_out_pattern": "Merkle-verified, content-addressed subgraphs can migrate to local Obsidian",
        "_source": "zabal-dispatch-bonfire-revenue-20260523"
      }
    },
    {
      "from": "bonfires-labs",
      "to": "ethboulder-boulder-bonfire",
      "type": "DEPLOYED_AT",
      "properties": {
        "fact": "Joshua.eth + Bonfire team ran live deployment at ETHBoulder 2026 with 88K nodes / 7 days",
        "proof": "paragraph.com/@joshuab/ethboulder-lets-make-sense + graph.bonfires.ai archive",
        "_source": "zabal-dispatch-bonfire-revenue-20260523"
      }
    },
    {
      "from": "x402-payment-protocol",
      "to": "usdc-eip-3009",
      "type": "SETTLES_VIA",
      "properties": {
        "fact": "x402 uses EIP-3009 Transfer with Authorization for gasless USDC transfers on Base",
        "settlement_speed": "~1 second (Base native), ~0.2 second (Flashblocks optimization)",
        "token_choice_rationale": "Price stability ($1), fast settlement, sub-penny fees, broad ERC-20 tooling",
        "_source": "zabal-dispatch-bonfire-revenue-20260523"
      }
    },
    {
      "from": "x402-payment-protocol",
      "to": "coinbase-cdp-facilitator",
      "type": "FACILITATED_BY",
      "properties": {
        "fact": "Payment verification + settlement delegated to Coinbase CDP or custom facilitators",
        "pattern": "Resource server -> facilitator /verify + /settle -> blockchain",
        "_source": "zabal-dispatch-bonfire-revenue-20260523"
      }
    },
    {
      "from": "hermes-coder",
      "to": "zabal-bonfire",
      "type": "WILL_READ_FROM",
      "properties": {
        "fact": "Phase 2: Hermes `/fix` tasks access Bonfire MCP for constraint context (artist count, timeline, team decisions)",
        "latency_requirement": "<2s per query (per Mem0 benchmarks)",
        "_source": "zabal-dispatch-bonfire-revenue-20260523"
      }
    },
    {
      "from": "kengram",
      "to": "weaviate-vector-db",
      "type": "INDEXED_IN",
      "properties": {
        "fact": "kEngram chunks embedded as vectors for semantic search; labels propagated from summary to chunks",
        "_source": "zabal-dispatch-bonfire-revenue-20260523"
      }
    },
    {
      "from": "zao-os",
      "to": "coinflow-isv",
      "type": "USES",
      "properties": {
        "role": "ISV parent",
        "application_date": "April 2026",
        "_source": "zabal-dispatch-coinflow-20260523"
      }
    },
    {
      "from": "coinflow-isv",
      "to": "wavewarz",
      "type": "ENABLES_SUBMERCHANT",
      "properties": {
        "merchant_id": "wavestation",
        "since": "April 2026",
        "_source": "zabal-dispatch-coinflow-20260523"
      }
    },
    {
      "from": "coinflow-isv",
      "to": "coc-concertz",
      "type": "ENABLES_SUBMERCHANT",
      "properties": {
        "role": "future submerchant",
        "_source": "zabal-dispatch-coinflow-20260523"
      }
    },
    {
      "from": "coinflow-isv",
      "to": "fishbowlz",
      "type": "ENABLES_SUBMERCHANT",
      "properties": {
        "role": "future submerchant",
        "_source": "zabal-dispatch-coinflow-20260523"
      }
    },
    {
      "from": "wavewarz",
      "to": "solana",
      "type": "SETTLES_ON",
      "properties": {
        "settlement_currency": "USDC",
        "_source": "zabal-dispatch-coinflow-20260523"
      }
    },
    {
      "from": "zao-os",
      "to": "base",
      "type": "SETTLES_ON",
      "properties": {
        "settlement_currency": "USDC",
        "_source": "zabal-dispatch-coinflow-20260523"
      }
    },
    {
      "from": "coinflow-checkout",
      "to": "solana",
      "type": "SUPPORTS",
      "properties": {
        "_source": "zabal-dispatch-coinflow-20260523"
      }
    },
    {
      "from": "coinflow-checkout",
      "to": "base",
      "type": "SUPPORTS",
      "properties": {
        "_source": "zabal-dispatch-coinflow-20260523"
      }
    },
    {
      "from": "coinflow-payouts",
      "to": "zabal-games",
      "type": "POWERS",
      "properties": {
        "use_case": "Prize payouts, crypto-to-fiat",
        "_source": "zabal-dispatch-coinflow-20260523"
      }
    },
    {
      "from": "coinflow-kyc-kyb",
      "to": "wavewarz",
      "type": "VERIFIES_MERCHANT",
      "properties": {
        "status": "automated via Persona",
        "_source": "zabal-dispatch-coinflow-20260523"
      }
    },
    {
      "from": "coinflow-webhooks",
      "to": "zao-os",
      "type": "NOTIFIES",
      "properties": {
        "event_count": "24+ types",
        "_source": "zabal-dispatch-coinflow-20260523"
      }
    },
    {
      "from": "coinflow-smart-payment-orchestration",
      "to": "coinflow-checkout",
      "type": "OPTIMIZES",
      "properties": {
        "cost_reduction": "up to 6 bps",
        "_source": "zabal-dispatch-coinflow-20260523"
      }
    },
    {
      "from": "coinflow-series-a",
      "to": "coinflow-isv",
      "type": "FUNDS",
      "properties": {
        "amount": "$25M",
        "date": "October 2025",
        "_source": "zabal-dispatch-coinflow-20260523"
      }
    },
    {
      "from": "coinflow-marketplace",
      "to": "coinflow-kyc-kyb",
      "type": "REQUIRES",
      "properties": {
        "verification_level": "seller KYB",
        "_source": "zabal-dispatch-coinflow-20260523"
      }
    },
    {
      "from": "coinflow-pricing-model",
      "to": "coinflow-isv",
      "type": "DEFINES",
      "properties": {
        "model": "interchange-plus, 30% more vs flat-rate",
        "_source": "zabal-dispatch-coinflow-20260523"
      }
    },
    {
      "from": "fishbowlz",
      "to": "juke",
      "type": "PAUSED_FOR_PARTNERSHIP",
      "properties": {
        "date": "2026-04-16",
        "direction": "FISHBOWLZ paused, pivoting to Juke audio platform",
        "shape": "not acquisition; strategic redirect (Juke solves mobile audio + Farcaster auth + role model that FISHBOWLZ rebuilt custom)",
        "current_state": "mute-lockout design doc (662) + integration paths (695) + operations guide (710) in progress; 7 open questions with Juke pending",
        "_source": "zabal-dispatch-fishbowlz-juke-20260523"
      }
    },
    {
      "from": "juke",
      "to": "nicky-sap-nickysap",
      "type": "BUILT_BY",
      "properties": {
        "timeline": "3 days, 10 parallel AI agents, 800-line SPEC.md, announced 2026-03-27",
        "_source": "zabal-dispatch-fishbowlz-juke-20260523"
      }
    },
    {
      "from": "zaal-zaal",
      "to": "fishbowlz",
      "type": "FOUNDED",
      "properties": {
        "_source": "zabal-dispatch-fishbowlz-juke-20260523"
      }
    },
    {
      "from": "zaal-zaal",
      "to": "juke",
      "type": "EARLY_HOST",
      "properties": {
        "confirmed": "by @farcaster cast 2026-04-24: 'great convo between @nickysap x @zaal x @rish love seeing you host these on @jukeaudio'",
        "recorded_space": "https://x.com/nicky_sap/status/2047770959403516069",
        "_source": "zabal-dispatch-fishbowlz-juke-20260523"
      }
    },
    {
      "from": "zaal-zaal",
      "to": "fishbowlz-standalone-repo",
      "type": "MAINTAINS",
      "properties": {
        "path": "/Users/zaalpanthaki/Documents/fishbowlz/",
        "last_commit": "2026-05-23 (614bca5)",
        "_source": "zabal-dispatch-fishbowlz-juke-20260523"
      }
    },
    {
      "from": "fishbowlz-legacy-code-zaoos-copy",
      "to": "fishbowlz-standalone-repo",
      "type": "STALE_COPY_OF",
      "properties": {
        "status": "22 files marked for deletion (doc 661h audit, doc 662 decision)",
        "_source": "zabal-dispatch-fishbowlz-juke-20260523"
      }
    },
    {
      "from": "juke-integration-path-a-iframe-embed",
      "to": "juke",
      "type": "USES_API",
      "properties": {
        "endpoint": "https://juke.audio/embed/{spaceId}",
        "keys": "none",
        "_source": "zabal-dispatch-fishbowlz-juke-20260523"
      }
    },
    {
      "from": "juke-integration-path-b-server-side-space-creation",
      "to": "juke",
      "type": "USES_API",
      "properties": {
        "endpoint": "POST /v1/developer/spaces",
        "auth": "X-Juke-Api-Key (server-side only)",
        "_source": "zabal-dispatch-fishbowlz-juke-20260523"
      }
    },
    {
      "from": "juke-integration-path-c-fishbowlz-sdk-custom-ui",
      "to": "juke",
      "type": "USES_API",
      "properties": {
        "endpoints": "@juke/audio-sdk (12 methods) + POST /v1/developer/spaces (role management)",
        "status": "re-scoped due to native-vs-web caveat",
        "_source": "zabal-dispatch-fishbowlz-juke-20260523"
      }
    },
    {
      "from": "the-mute-lockout-moderation-rule",
      "to": "juke-api-gaps-blockers-for-fishbowlz-zao-integration",
      "type": "BLOCKED_BY",
      "properties": {
        "blocker": "no_demote_endpoint (doc 662 Q1), no_webhooks (for fallback enforcement)",
        "mitigation_pending": "awaiting Juke response on token-reissue or demote endpoint",
        "_source": "zabal-dispatch-fishbowlz-juke-20260523"
      }
    },
    {
      "from": "juke-integration-path-b-server-side-space-creation",
      "to": "juke-api-gaps-blockers-for-fishbowlz-zao-integration",
      "type": "REQUIRES_CLARIFICATION_ON",
      "properties": {
        "blockers": "token_ttl_unknown (determines refresh strategy), no_webhooks (no lifecycle events)",
        "_source": "zabal-dispatch-fishbowlz-juke-20260523"
      }
    },
    {
      "from": "zao-as-juke-flagship-community",
      "to": "zaal-zaal",
      "type": "DEPENDS_ON",
      "properties": {
        "action": "ongoing relationship with nickysap (DM with docs + 7 Qs)",
        "_source": "zabal-dispatch-fishbowlz-juke-20260523"
      }
    },
    {
      "from": "juke-integration-path-d-fip-2-chat-pattern",
      "to": "zao-os-spaces",
      "type": "REFACTORS",
      "properties": {
        "impact": "kills ZAO Spaces chat DB, replaces with Farcaster reply-tree (ephemeral Neynar webhook), independent of Juke partnership",
        "_source": "zabal-dispatch-fishbowlz-juke-20260523"
      }
    },
    {
      "from": "fishbowlz-standalone-repo",
      "to": "features-to-preserve",
      "type": "CONTAINS",
      "properties": {
        "features": "anonymous listen mode, room filters (All/Live/Scheduled/Ended/Gated), gating UI (open/farcaster/invite-only/token-gate), reconnection handler, transparent speaker UI",
        "_source": "zabal-dispatch-fishbowlz-juke-20260523"
      }
    },
    {
      "from": "quotient",
      "to": "farcaster",
      "type": "MEASURES_REPUTATION_ON",
      "properties": {
        "metric": "quotientScore",
        "coverage": "all_farcaster_users",
        "api": "/v1/user-reputation",
        "_source": "zabal-dispatch-quotient-20260523"
      }
    },
    {
      "from": "quotient-booster",
      "to": "empire-builder-v3",
      "type": "BOOSTER_TYPE_IN",
      "properties": {
        "booster_type": "QUOTIENT",
        "api_field_name": "type",
        "multiplier_field": "multiplier",
        "qualification_check": "queryable_via_api",
        "_source": "zabal-dispatch-quotient-20260523"
      }
    },
    {
      "from": "quotient-booster",
      "to": "zabal-empire",
      "type": "APPLIES_MULTIPLIER_TO",
      "properties": {
        "effect": "weighted_leaderboard_positioning",
        "computation": "score * multiplier where multiplier depends on quotientScore",
        "_source": "zabal-dispatch-quotient-20260523"
      }
    },
    {
      "from": "empire-builder-v3",
      "to": "zabal-empire",
      "type": "HOSTS_LEADERBOARD_FOR",
      "properties": {
        "leaderboard_type": "tokenHolders",
        "active_boosters": [
          "QUOTIENT"
        ],
        "api_endpoint": "GET /api/leaderboards?tokenAddress=0xbB48f19B0494Ff7C1fE5Dc2032aeEE14312f0b07",
        "_source": "zabal-dispatch-quotient-20260523"
      }
    },
    {
      "from": "quotient-score",
      "to": "quotient-booster",
      "type": "POWERS_QUALIFICATION_FOR",
      "properties": {
        "field_queried": "quotientScore",
        "threshold": "0.5",
        "below_threshold": "account_quality_drops_significantly",
        "_source": "zabal-dispatch-quotient-20260523"
      }
    },
    {
      "from": "talent-protocol",
      "to": "quotient",
      "type": "PARALLEL_REPUTATION_SYSTEM",
      "properties": {
        "similarity": "both_measure_farcaster_reputation",
        "difference": "Talent=builder_focus, Quotient=general_engagement_quality",
        "integration": "UNKNOWN",
        "_source": "zabal-dispatch-quotient-20260523"
      }
    },
    {
      "from": "quotient",
      "to": "quotient-booster",
      "type": "ENABLES",
      "properties": {
        "mechanism": "API_scores_fed_to_booster_qualification",
        "api_endpoint": "POST /v1/user-reputation",
        "_source": "zabal-dispatch-quotient-20260523"
      }
    },
    {
      "from": "zaostock-2026",
      "to": "wallace-events",
      "type": "PROVIDES_SERVICES_TO",
      "properties": {
        "service": "Equipment rental (tents, stage, AV)",
        "cost": "Included in under $1K venue budget",
        "status": "Committed",
        "_source": "zabal-dispatch-zaostock-sponsor-20260523"
      }
    },
    {
      "from": "limone-sponsor",
      "to": "zaostock-2026",
      "type": "SPONSORS",
      "properties": {
        "tier": "Medium",
        "commitment_amount": "$1,000",
        "status": "Pledged but payment outstanding",
        "note": "As of May 19, Zaal flagged slow payment from large branded sponsors as a pattern",
        "_source": "zabal-dispatch-zaostock-sponsor-20260523"
      }
    },
    {
      "from": "zaal",
      "to": "zaostock-2026",
      "type": "LEADS",
      "properties": {
        "role": "Festival organizer + sponsor pitch lead",
        "responsibility": "Overall festival direction + tier framework development",
        "_source": "zabal-dispatch-zaostock-sponsor-20260523"
      }
    },
    {
      "from": "candy-candytoybox",
      "to": "zaostock-2026",
      "type": "CO_LEADS",
      "properties": {
        "role": "2nd lead, co-sponsor outreach",
        "responsibility": "Brand identity + visual sponsor integration",
        "_source": "zabal-dispatch-zaostock-sponsor-20260523"
      }
    },
    {
      "from": "failoften",
      "to": "zaal",
      "type": "ADVISES",
      "properties": {
        "topic": "Operations + sponsorship tier clarity",
        "key_recommendation": "Formalize sponsorship packages Tier 1/2/3 with explicit deliverables; document volunteer expectations upfront",
        "_source": "zabal-dispatch-zaostock-sponsor-20260523"
      }
    },
    {
      "from": "tyler-stambaugh",
      "to": "zaostock-2026",
      "type": "INTEGRATES_CONTENT_FOR",
      "properties": {
        "tool": "Magnetiq Portal",
        "campaign": "Road to ZAOstock - 12 weekly content drops (July launch for Oct 3 event)",
        "sponsor_benefit": "Sponsor features + reveals across content campaign",
        "_source": "zabal-dispatch-zaostock-sponsor-20260523"
      }
    },
    {
      "from": "steve-peer",
      "to": "sponsor-prospects",
      "type": "REFERS_TO",
      "properties": {
        "mechanism": "Personal rolodex introduction",
        "tier_focus": "Likely local/regional SMB + corporate connections",
        "_source": "zabal-dispatch-zaostock-sponsor-20260523"
      }
    },
    {
      "from": "roddy-parklet",
      "to": "franklin-street-parklet",
      "type": "COORDINATES",
      "properties": {
        "responsibility": "Venue logistics + Parks & Rec coordination + paperwork finalization",
        "_source": "zabal-dispatch-zaostock-sponsor-20260523"
      }
    },
    {
      "from": "franklin-street-parklet",
      "to": "zaostock-2026",
      "type": "HOSTS",
      "properties": {
        "status": "Verbally confirmed, pending paperwork",
        "cost": "Under $1K (likely under $500 for stage + tent setup)",
        "_source": "zabal-dispatch-zaostock-sponsor-20260523"
      }
    },
    {
      "from": "art-of-ellsworth-committee",
      "to": "zaostock-2026",
      "type": "CO_PROGRAMS",
      "properties": {
        "context": "ZAOstock is add-on concert to 9th Annual Art of Ellsworth festival",
        "benefit": "Access to existing Maine Craft Weekend statewide audience",
        "_source": "zabal-dispatch-zaostock-sponsor-20260523"
      }
    },
    {
      "from": "black-moon-public-house",
      "to": "zaostock-2026",
      "type": "HOSTS_AFTER_PARTY",
      "properties": {
        "timing": "Post-festival evening",
        "audience": "Attendees + artists + VIP sponsors",
        "_source": "zabal-dispatch-zaostock-sponsor-20260523"
      }
    },
    {
      "from": "the-zao-community",
      "to": "zaostock-2026",
      "type": "PROVIDES_AUDIENCE_TO",
      "properties": {
        "size": "188+ members core + 400+ newsletter reach",
        "channels": "Farcaster, X, daily newsletter (400+ editions)",
        "value": "Pre-event promotion + day-of audience + post-event engagement",
        "_source": "zabal-dispatch-zaostock-sponsor-20260523"
      }
    },
    {
      "from": "finance-team-zaostock",
      "to": "sponsor-pipeline-crm",
      "type": "MANAGES",
      "properties": {
        "tool": "Shared spreadsheet (payment tracking)",
        "owners": "Tyler Stambaugh, Ohnahji B, DFresh, Craig G, Maceo",
        "_source": "zabal-dispatch-zaostock-sponsor-20260523"
      }
    },
    {
      "from": "finance-team-zaostock",
      "to": "limone-sponsor",
      "type": "FOLLOWS_UP_WITH",
      "properties": {
        "status": "Working on payment transmission",
        "context": "Large branded sponsors are slow with actual money (Zaal's pattern observation)",
        "_source": "zabal-dispatch-zaostock-sponsor-20260523"
      }
    },
    {
      "from": "wavewarz-music-battle",
      "to": "zaostock-2026",
      "type": "INTEGRATES_INTO",
      "properties": {
        "format": "Live audience-voted bracket via QR code",
        "sponsor_touchpoint": "Logo on voting interface visible to all participants",
        "web3_layer": "Direct on-chain artist payouts in SOL",
        "_source": "zabal-dispatch-zaostock-sponsor-20260523"
      }
    },
    {
      "from": "sponsor-tier-structure",
      "to": "zaostock-2026",
      "type": "DEFINES",
      "properties": {
        "status": "Finalized",
        "deliverables": "Explicit per-tier benefits documented in email pitch templates (Doc 443)",
        "_source": "zabal-dispatch-zaostock-sponsor-20260523"
      }
    },
    {
      "from": "sponsor-pipeline-crm",
      "to": "sponsorcrm-mvp",
      "type": "IMPLEMENTS",
      "properties": {
        "location": "/stock/team endpoint",
        "stages": "6-stage pipeline (lead -> contacted -> in_talks -> committed -> paid -> declined)",
        "automation": "Clay.com (prospect enrichment), Claude API (email drafting), webhook logging",
        "_source": "zabal-dispatch-zaostock-sponsor-20260523"
      }
    },
    {
      "from": "zaal",
      "to": "sisla-flickstopfun",
      "type": "EXPLORES_TOKEN_WITH",
      "properties": {
        "topic": "ZAOstock token launchpad",
        "timing": "Decision post-August 2026",
        "approach": "Contribution-validated fractal game (humans share contributions, AI validates)",
        "_source": "zabal-dispatch-zaostock-sponsor-20260523"
      }
    },
    {
      "from": "bangor-savings-bank",
      "to": "zaostock-2026",
      "type": "PROSPECT_FOR",
      "properties": {
        "outreach_plan": "Clay enrichment + Claude email draft + 7-day follow-up cadence",
        "target_tier": "Small/Medium",
        "decision_timeline": "Commit by June 15 (ideal)",
        "icp_fit": "HIGH - local Maine bank, community focus",
        "_source": "zabal-dispatch-zaostock-sponsor-20260523"
      }
    },
    {
      "from": "sponsor-to-livestream-integration",
      "to": "zaostock-2026",
      "type": "PROVIDES_VISIBILITY_FOR",
      "properties": {
        "audience": "1000+ livestream viewers online",
        "overlay": "Sponsor logos on stream (all tiers)",
        "_source": "zabal-dispatch-zaostock-sponsor-20260523"
      }
    },
    {
      "from": "zoe-bot",
      "to": "zoe-skill-start",
      "type": "EXPOSES",
      "properties": {
        "command": "/start",
        "_source": "zabal-dispatch-zoe-telegram-20260523"
      }
    },
    {
      "from": "zoe-bot",
      "to": "zoe-skill-tasks",
      "type": "EXPOSES",
      "properties": {
        "command": "/tasks",
        "_source": "zabal-dispatch-zoe-telegram-20260523"
      }
    },
    {
      "from": "zoe-bot",
      "to": "zoe-skill-seed",
      "type": "EXPOSES",
      "properties": {
        "command": "/seed",
        "_source": "zabal-dispatch-zoe-telegram-20260523"
      }
    },
    {
      "from": "zoe-bot",
      "to": "zoe-skill-quest",
      "type": "EXPOSES",
      "properties": {
        "command": "/quest",
        "_source": "zabal-dispatch-zoe-telegram-20260523"
      }
    },
    {
      "from": "zoe-bot",
      "to": "zoe-skill-quests",
      "type": "EXPOSES",
      "properties": {
        "command": "/quests",
        "_source": "zabal-dispatch-zoe-telegram-20260523"
      }
    },
    {
      "from": "zoe-bot",
      "to": "zoe-skill-voicememo",
      "type": "EXPOSES",
      "properties": {
        "command": "/voicememo, /vm",
        "_source": "zabal-dispatch-zoe-telegram-20260523"
      }
    },
    {
      "from": "zoe-bot",
      "to": "zoe-skill-zg-group-admin",
      "type": "EXPOSES",
      "properties": {
        "command": "/zg",
        "_source": "zabal-dispatch-zoe-telegram-20260523"
      }
    },
    {
      "from": "zoe-bot",
      "to": "zoe-skill-note-prefix",
      "type": "EXPOSES",
      "properties": {
        "prefix": "note:, cc:, claude:",
        "_source": "zabal-dispatch-zoe-telegram-20260523"
      }
    },
    {
      "from": "zoe-bot",
      "to": "zoe-skill-free-form-concierge",
      "type": "ROUTES_TO",
      "properties": {
        "default": true,
        "per_message": true,
        "_source": "zabal-dispatch-zoe-telegram-20260523"
      }
    },
    {
      "from": "zoe-bot",
      "to": "zoe-skill-morning-brief",
      "type": "SCHEDULES",
      "properties": {
        "cron": "0 9 UTC",
        "_source": "zabal-dispatch-zoe-telegram-20260523"
      }
    },
    {
      "from": "zoe-bot",
      "to": "zoe-skill-evening-reflection",
      "type": "SCHEDULES",
      "properties": {
        "cron": "0 1 UTC",
        "_source": "zabal-dispatch-zoe-telegram-20260523"
      }
    },
    {
      "from": "zoe-bot",
      "to": "zoe-skill-hourly-nudge",
      "type": "SCHEDULES",
      "properties": {
        "cron": "0 * UTC",
        "_source": "zabal-dispatch-zoe-telegram-20260523"
      }
    },
    {
      "from": "zoe-bot",
      "to": "zoe-skill-post-slate-v2",
      "type": "SCHEDULES",
      "properties": {
        "frequency": "random 7x daily",
        "_source": "zabal-dispatch-zoe-telegram-20260523"
      }
    },
    {
      "from": "zoe-skill-free-form-concierge",
      "to": "zoe-memory-persona-md",
      "type": "READS",
      "properties": {
        "per_turn": true,
        "_source": "zabal-dispatch-zoe-telegram-20260523"
      }
    },
    {
      "from": "zoe-skill-free-form-concierge",
      "to": "zoe-memory-human-md",
      "type": "READS",
      "properties": {
        "per_turn": true,
        "_source": "zabal-dispatch-zoe-telegram-20260523"
      }
    },
    {
      "from": "zoe-skill-free-form-concierge",
      "to": "zoe-memory-recent-json",
      "type": "READS",
      "properties": {
        "per_turn": true,
        "_source": "zabal-dispatch-zoe-telegram-20260523"
      }
    },
    {
      "from": "zoe-skill-free-form-concierge",
      "to": "zoe-memory-tasks-json",
      "type": "READS_AND_WRITES",
      "properties": {
        "via": "task_ops",
        "_source": "zabal-dispatch-zoe-telegram-20260523"
      }
    },
    {
      "from": "zoe-skill-free-form-concierge",
      "to": "zoe-memory-quests",
      "type": "READS_AND_WRITES",
      "properties": {
        "via": "quest_ops",
        "_source": "zabal-dispatch-zoe-telegram-20260523"
      }
    },
    {
      "from": "zoe-skill-free-form-concierge",
      "to": "claude-cli-subprocess",
      "type": "CALLS",
      "properties": {
        "model_selection": "Haiku/Sonnet/Opus",
        "system_prompt": "4 memory blocks",
        "allowed_tools": [
          "Read",
          "Glob",
          "Grep",
          "Bash (read-only)",
          "Playwright MCP"
        ],
        "_source": "zabal-dispatch-zoe-telegram-20260523"
      }
    },
    {
      "from": "zoe-skill-tasks",
      "to": "zoe-memory-tasks-json",
      "type": "READS",
      "properties": {
        "_source": "zabal-dispatch-zoe-telegram-20260523"
      }
    },
    {
      "from": "zoe-skill-seed",
      "to": "zoe-memory-tasks-json",
      "type": "WRITES",
      "properties": {
        "source": "doc 601",
        "_source": "zabal-dispatch-zoe-telegram-20260523"
      }
    },
    {
      "from": "zoe-skill-quest",
      "to": "zoe-memory-quests",
      "type": "READS",
      "properties": {
        "_source": "zabal-dispatch-zoe-telegram-20260523"
      }
    },
    {
      "from": "zoe-skill-quests",
      "to": "zoe-memory-quests",
      "type": "READS",
      "properties": {
        "_source": "zabal-dispatch-zoe-telegram-20260523"
      }
    },
    {
      "from": "zoe-skill-voicememo",
      "to": "zoe-memory-voice-memos",
      "type": "WRITES",
      "properties": {
        "path": "~/.zao/zoe/voice-memos/YYYY-MM-DD.md",
        "_source": "zabal-dispatch-zoe-telegram-20260523"
      }
    },
    {
      "from": "zoe-skill-zg-group-admin",
      "to": "supabase",
      "type": "READS_AND_WRITES",
      "properties": {
        "table": "zoe_groups",
        "_source": "zabal-dispatch-zoe-telegram-20260523"
      }
    },
    {
      "from": "zoe-skill-note-prefix",
      "to": "zoe-memory-claude-code-notes-md",
      "type": "WRITES",
      "properties": {
        "append": true,
        "_source": "zabal-dispatch-zoe-telegram-20260523"
      }
    },
    {
      "from": "zoe-skill-morning-brief",
      "to": "zoe-memory-sentinels",
      "type": "WRITES",
      "properties": {
        "file": "morning-brief-YYYY-MM-DD.flag",
        "_source": "zabal-dispatch-zoe-telegram-20260523"
      }
    },
    {
      "from": "zoe-skill-evening-reflection",
      "to": "zoe-memory-sentinels",
      "type": "WRITES",
      "properties": {
        "file": "evening-reflect-YYYY-MM-DD.flag",
        "_source": "zabal-dispatch-zoe-telegram-20260523"
      }
    },
    {
      "from": "zoe-skill-hourly-nudge",
      "to": "zoe-memory-tasks-json",
      "type": "READS",
      "properties": {
        "_source": "zabal-dispatch-zoe-telegram-20260523"
      }
    },
    {
      "from": "zoe-skill-bonfire-recall",
      "to": "bonfire-knowledge-graph",
      "type": "QUERIES",
      "properties": {
        "endpoint": "/vector_store/search",
        "method": "POST",
        "fallback": "manual_relay",
        "_source": "zabal-dispatch-zoe-telegram-20260523"
      }
    },
    {
      "from": "zoe-skill-bonfire-remember",
      "to": "bonfire-knowledge-graph",
      "type": "WRITES",
      "properties": {
        "endpoint": "/knowledge_graph/episode/create",
        "content": "episodes",
        "_source": "zabal-dispatch-zoe-telegram-20260523"
      }
    },
    {
      "from": "zoe-skill-turn-mirroring",
      "to": "bonfire-knowledge-graph",
      "type": "WRITES",
      "properties": {
        "fire_and_forget": true,
        "content": "captures/task_ops/quest_ops as episodes",
        "_source": "zabal-dispatch-zoe-telegram-20260523"
      }
    },
    {
      "from": "zoe-bot",
      "to": "bonfire-knowledge-graph",
      "type": "INTEGRATES_WITH",
      "properties": {
        "read_unlocked": false,
        "write_enabled": true,
        "status": "May 2026 verified",
        "_source": "zabal-dispatch-zoe-telegram-20260523"
      }
    },
    {
      "from": "zao-top-hat",
      "to": "configurator-hat",
      "type": "admin-child",
      "properties": {
        "fact": "Top Hat self-administers; Configurator is direct child",
        "authority": "Top Hat wearer can mint/revoke Configurator",
        "level_offset": 1,
        "_source": "zabal-dispatch-hats-protocol-tree-architecture-20260524"
      }
    },
    {
      "from": "configurator-hat",
      "to": "governance-council-hat",
      "type": "admin-child",
      "properties": {
        "fact": "Configurator administers both Governance Council and Council Members hats",
        "authority": "Configurator wearer (2/5) can mint Governance Council",
        "level_offset": 1,
        "_source": "zabal-dispatch-hats-protocol-tree-architecture-20260524"
      }
    },
    {
      "from": "configurator-hat",
      "to": "governance-council-members-hat",
      "type": "admin-child",
      "properties": {
        "fact": "Council Members hat is sibling under Configurator with 3/5 active wearers",
        "authority": "Configurator can mint new council members",
        "level_offset": 1,
        "_source": "zabal-dispatch-hats-protocol-tree-architecture-20260524"
      }
    },
    {
      "from": "governance-council-hat",
      "to": "community-hat",
      "type": "admin-child",
      "properties": {
        "fact": "17 project sub-hats hang under Governance Council (level 3)",
        "authority": "Governance Council wearer would mint Community hat if active",
        "level_offset": 1,
        "_source": "zabal-dispatch-hats-protocol-tree-architecture-20260524"
      }
    },
    {
      "from": "governance-council-hat",
      "to": "coc-concertz-hat",
      "type": "admin-child",
      "properties": {
        "fact": "COC Concertz is the only assigned project hat (1/1 wearer)",
        "authority": "Governance Council could revoke or transfer (if mutable)",
        "level_offset": 1,
        "_source": "zabal-dispatch-hats-protocol-tree-architecture-20260524"
      }
    },
    {
      "from": "hatsclient-sdk",
      "to": "hats-protocol",
      "type": "client-implementation",
      "properties": {
        "fact": "@hatsprotocol/sdk-v1-core wraps Hats.sol contract ABI on viem",
        "chainId": 10,
        "validates_before_tx": true,
        "_source": "zabal-dispatch-hats-protocol-tree-architecture-20260524"
      }
    },
    {
      "from": "hat-id-bitmap-encoding",
      "to": "zao-governance-tree",
      "type": "encodes",
      "properties": {
        "fact": "Each ZAO hat encoded as uint256 bitmap; treeId 226 appears in first 4 bytes",
        "example": "226.1 = 0x000000e2 00010000 (rest zeros)",
        "semantic": "IP-address-like routing within tree",
        "_source": "zabal-dispatch-hats-protocol-tree-architecture-20260524"
      }
    },
    {
      "from": "erc-1155-non-transferable-mechanic",
      "to": "configurator-hat",
      "type": "implements",
      "properties": {
        "fact": "Configurator hat is ERC-1155 token; balanceOf(wearer, configuratorId) = 1 or 0",
        "minting": "only Configurator admin can call mint()",
        "revocation": "admin + eligibility module + toggle can revoke",
        "_source": "zabal-dispatch-hats-protocol-tree-architecture-20260524"
      }
    },
    {
      "from": "role-check-query-system",
      "to": "governance-council-members-hat",
      "type": "queries",
      "properties": {
        "fact": "ZAO OS gating.ts calls isWearerOfHat(userAddress, COUNCIL_MEMBERS_HAT_ID) to check governance access",
        "cached": true,
        "permission_type": "governance",
        "_source": "zabal-dispatch-hats-protocol-tree-architecture-20260524"
      }
    },
    {
      "from": "role-check-query-system",
      "to": "configurator-hat",
      "type": "queries",
      "properties": {
        "fact": "ZAO OS gating.ts checks hat ownership for admin permission (manage_events, manage_projects)",
        "cached": true,
        "permission_type": "admin",
        "_source": "zabal-dispatch-hats-protocol-tree-architecture-20260524"
      }
    },
    {
      "from": "zao-governance-tree",
      "to": "optimism",
      "type": "deployed-on",
      "properties": {
        "fact": "Tree 226 lives on Optimism mainnet (chain ID 10) at 0x3bc1A0Ad72417f2d411118085256fC53CBdDd137",
        "immutable": true,
        "last_activity": "2026-05-20 (confirmed live)",
        "_source": "zabal-dispatch-hats-protocol-tree-architecture-20260524"
      }
    },
    {
      "from": "configurator-hat",
      "to": "future-project-hats",
      "type": "admin-potential-children",
      "properties": {
        "fact": "4 placeholder Future Project hats (226.1.1.10-13) reserved for expansion",
        "supply": "0/1 each",
        "admin": "Governance Council (via Configurator delegation)",
        "_source": "zabal-dispatch-hats-protocol-tree-architecture-20260524"
      }
    },
    {
      "from": "ardrive",
      "to": "arweave",
      "type": "buildsOn",
      "properties": {
        "_source": "zabal-dispatch-ardrive-permastorage-ardrive-cli-vs-app-20260524"
      }
    },
    {
      "from": "ardrive-cli",
      "to": "ardrive-core-js",
      "type": "uses",
      "properties": {
        "_source": "zabal-dispatch-ardrive-permastorage-ardrive-cli-vs-app-20260524"
      }
    },
    {
      "from": "ardrive-web-app",
      "to": "ardrive-core-js",
      "type": "uses",
      "properties": {
        "_source": "zabal-dispatch-ardrive-permastorage-ardrive-cli-vs-app-20260524"
      }
    },
    {
      "from": "ardrive-turbo",
      "to": "ans-104-bundling",
      "type": "implements",
      "properties": {
        "_source": "zabal-dispatch-ardrive-permastorage-ardrive-cli-vs-app-20260524"
      }
    },
    {
      "from": "ardrive-cli",
      "to": "ardrive-turbo",
      "type": "optionallyUses",
      "properties": {
        "_source": "zabal-dispatch-ardrive-permastorage-ardrive-cli-vs-app-20260524"
      }
    },
    {
      "from": "ardrive-web-app",
      "to": "ardrive-turbo",
      "type": "defaultBackend",
      "properties": {
        "_source": "zabal-dispatch-ardrive-permastorage-ardrive-cli-vs-app-20260524"
      }
    },
    {
      "from": "ardrive",
      "to": "arfs-protocol",
      "type": "implements",
      "properties": {
        "_source": "zabal-dispatch-ardrive-permastorage-ardrive-cli-vs-app-20260524"
      }
    },
    {
      "from": "ar-io-gateway-network",
      "to": "arweave",
      "type": "servesData",
      "properties": {
        "_source": "zabal-dispatch-ardrive-permastorage-ardrive-cli-vs-app-20260524"
      }
    },
    {
      "from": "wayfinder",
      "to": "ar-io-gateway-network",
      "type": "routes",
      "properties": {
        "_source": "zabal-dispatch-ardrive-permastorage-ardrive-cli-vs-app-20260524"
      }
    },
    {
      "from": "ar-io-gateway-network",
      "to": "x402-protocol",
      "type": "supportsPaymentVia",
      "properties": {
        "_source": "zabal-dispatch-ardrive-permastorage-ardrive-cli-vs-app-20260524"
      }
    },
    {
      "from": "ardrive-turbo",
      "to": "turbo-credits",
      "type": "acceptsPaymentIn",
      "properties": {
        "_source": "zabal-dispatch-ardrive-permastorage-ardrive-cli-vs-app-20260524"
      }
    },
    {
      "from": "ardrive-cli",
      "to": "turbo-credits",
      "type": "canShareVia",
      "properties": {
        "_source": "zabal-dispatch-ardrive-permastorage-ardrive-cli-vs-app-20260524"
      }
    },
    {
      "from": "ans-104-bundling",
      "to": "arweave",
      "type": "submitsTxTo",
      "properties": {
        "_source": "zabal-dispatch-ardrive-permastorage-ardrive-cli-vs-app-20260524"
      }
    },
    {
      "from": "ardrive-core-js",
      "to": "ans-104-bundling",
      "type": "uses",
      "properties": {
        "_source": "zabal-dispatch-ardrive-permastorage-ardrive-cli-vs-app-20260524"
      }
    },
    {
      "from": "ardrive",
      "to": "ar-io-gateway-network",
      "type": "streamsFrom",
      "properties": {
        "_source": "zabal-dispatch-ardrive-permastorage-ardrive-cli-vs-app-20260524"
      }
    },
    {
      "from": "bcz-strategies-treasury",
      "to": "arweave",
      "type": "funds permanent music archive uploads",
      "properties": {
        "cadence": "quarterly",
        "primary_asset": "music masters",
        "fact": "funds permanent music archive uploads",
        "_source": "zabal-dispatch-ardrive-permastorage-cost-and-funding-20260524"
      }
    },
    {
      "from": "arweave",
      "to": "arweave-endowment",
      "type": "implements economic model for perpetual storage",
      "properties": {
        "mechanism": "Kryder+ assumption, miner incentives",
        "fact": "implements economic model for perpetual storage",
        "_source": "zabal-dispatch-ardrive-permastorage-cost-and-funding-20260524"
      }
    },
    {
      "from": "wavewarz-music-master",
      "to": "ardrive",
      "type": "stored permanently via consumer interface",
      "properties": {
        "cost_per_file": "0.25-1.20 USD",
        "fact": "stored permanently via consumer interface",
        "_source": "zabal-dispatch-ardrive-permastorage-cost-and-funding-20260524"
      }
    },
    {
      "from": "irys",
      "to": "arweave",
      "type": "bundles multiple uploads for gas optimization",
      "properties": {
        "savings": "40-60% per-tx overhead reduction",
        "fact": "bundles multiple uploads for gas optimization",
        "_source": "zabal-dispatch-ardrive-permastorage-cost-and-funding-20260524"
      }
    },
    {
      "from": "ardrive",
      "to": "arweave",
      "type": "built on top of network",
      "properties": {
        "layer": "GUI + file system (ArFS)",
        "fact": "built on top of network",
        "_source": "zabal-dispatch-ardrive-permastorage-cost-and-funding-20260524"
      }
    },
    {
      "from": "akord",
      "to": "arweave",
      "type": "permanent storage substrate",
      "properties": {
        "competing_feature": "subscription model hybrid",
        "fact": "permanent storage substrate",
        "_source": "zabal-dispatch-ardrive-permastorage-cost-and-funding-20260524"
      }
    },
    {
      "from": "zabal-token-reserve",
      "to": "cost-per-gb-arweave",
      "type": "allocates budget per quarterly upload batch",
      "properties": {
        "rate_lock": "no (dynamic AR pricing)",
        "fact": "allocates budget per quarterly upload batch",
        "_source": "zabal-dispatch-ardrive-permastorage-cost-and-funding-20260524"
      }
    },
    {
      "from": "music-master-archive-roi",
      "to": "filecoin",
      "type": "cost-benefit analysis shows Arweave cheaper 10yr+",
      "properties": {
        "decision_point": "180 months of storage",
        "fact": "cost-benefit analysis shows Arweave cheaper 10yr+",
        "_source": "zabal-dispatch-ardrive-permastorage-cost-and-funding-20260524"
      }
    },
    {
      "from": "ar-io",
      "to": "arweave",
      "type": "gateway + node infrastructure for access",
      "properties": {
        "role": "read-path optimization",
        "fact": "gateway + node infrastructure for access",
        "_source": "zabal-dispatch-ardrive-permastorage-cost-and-funding-20260524"
      }
    },
    {
      "from": "bcz-strategies-treasury",
      "to": "zabal-token-reserve",
      "type": "may allocate ZABAL for Arweave uploads",
      "properties": {
        "model": "token-denominated treasury hybrid",
        "fact": "may allocate ZABAL for Arweave uploads",
        "_source": "zabal-dispatch-ardrive-permastorage-cost-and-funding-20260524"
      }
    },
    {
      "from": "filecoin",
      "to": "cost-per-gb-arweave",
      "type": "competitor on long-horizon permanent storage",
      "properties": {
        "edge": "Arweave wins 10yr+, Filecoin for mutable data",
        "fact": "competitor on long-horizon permanent storage",
        "_source": "zabal-dispatch-ardrive-permastorage-cost-and-funding-20260524"
      }
    },
    {
      "from": "ipfs-pinning",
      "to": "cost-per-gb-arweave",
      "type": "competitor on low-touch, high-maintenance model",
      "properties": {
        "risk": "abandonment if subscription lapses",
        "fact": "competitor on low-touch, high-maintenance model",
        "_source": "zabal-dispatch-ardrive-permastorage-cost-and-funding-20260524"
      }
    },
    {
      "from": "arweave-endowment",
      "to": "music-master-archive-roi",
      "type": "enables 200-year guarantee, reducing long-term sponsor burden",
      "properties": {
        "sustainability": "Kryder+ assumption holds",
        "fact": "enables 200-year guarantee, reducing long-term sponsor burden",
        "_source": "zabal-dispatch-ardrive-permastorage-cost-and-funding-20260524"
      }
    },
    {
      "from": "wavewarz-music-master",
      "to": "arweave-endowment",
      "type": "participates in endowment fund as stored asset",
      "properties": {
        "benefit": "perpetual care without renewal",
        "fact": "participates in endowment fund as stored asset",
        "_source": "zabal-dispatch-ardrive-permastorage-cost-and-funding-20260524"
      }
    },
    {
      "from": "distrokid",
      "to": "ardrive-turbo",
      "type": "precedes_workflow",
      "properties": {
        "direction": "sequential",
        "description": "ISRC assignment happens post-upload to DistroKid, but Arweave upload happens before DistroKid delivery",
        "_source": "zabal-dispatch-ardrive-permastorage-integration-with-distrokid-20260524"
      }
    },
    {
      "from": "ardrive-turbo",
      "to": "arweave",
      "type": "uploads_to",
      "properties": {
        "method": "@ardrive/turbo-sdk",
        "output": "ar:// URIs for audio + metadata",
        "permanence": "200+ years",
        "_source": "zabal-dispatch-ardrive-permastorage-integration-with-distrokid-20260524"
      }
    },
    {
      "from": "arweave",
      "to": "zora-1155",
      "type": "metadata_source_for",
      "properties": {
        "uri_reference": "ar://{metadata-txId} in tokenURI",
        "animation_url": "ar://{audio-txId}",
        "immutability": "Arweave permanence guarantees NFT metadata forever",
        "_source": "zabal-dispatch-ardrive-permastorage-integration-with-distrokid-20260524"
      }
    },
    {
      "from": "zora-1155",
      "to": "0xsplits",
      "type": "routes_revenue_to",
      "properties": {
        "mechanism": "payoutRecipient = split contract address",
        "timing": "split MUST be deployed before NFT mint",
        "revenue_flow": "all primary + secondary sales -> split address",
        "_source": "zabal-dispatch-ardrive-permastorage-integration-with-distrokid-20260524"
      }
    },
    {
      "from": "0xsplits",
      "to": "base-chain",
      "type": "deployed_on",
      "properties": {
        "contract_type": "immutable split",
        "sdk": "@0xsplits/splits-sdk v6.4.1",
        "recipients": [
          "artist_wallet",
          "zao_treasury",
          "curator_wallet"
        ],
        "_source": "zabal-dispatch-ardrive-permastorage-integration-with-distrokid-20260524"
      }
    },
    {
      "from": "distrokid",
      "to": "bmi-registry",
      "type": "provides_isrc_to",
      "properties": {
        "isrc_timing": "assigned post-upload, available ~4 weeks pre-delivery",
        "isrc_retrieval": "DistroKid dashboard or API (JWT auth)",
        "bmi_requirement": "ISRC + composer/publisher from DistroKid",
        "_source": "zabal-dispatch-ardrive-permastorage-integration-with-distrokid-20260524"
      }
    },
    {
      "from": "bmi-registry",
      "to": "ddex-ern",
      "type": "referenced_in",
      "properties": {
        "field": "ISRC code per track",
        "purpose": "rights tracking, performance royalty registration",
        "_source": "zabal-dispatch-ardrive-permastorage-integration-with-distrokid-20260524"
      }
    },
    {
      "from": "ddex-ern",
      "to": "distrokid",
      "type": "ingested_by",
      "properties": {
        "direction": "DistroKid generates ERN from upload form, sends to DSPs",
        "_source": "zabal-dispatch-ardrive-permastorage-integration-with-distrokid-20260524"
      }
    },
    {
      "from": "zao-music-flow",
      "to": "ardrive-turbo",
      "type": "phase_2_step",
      "properties": {
        "phase": "2",
        "action": "Upload audio + metadata to Arweave",
        "_source": "zabal-dispatch-ardrive-permastorage-integration-with-distrokid-20260524"
      }
    },
    {
      "from": "zao-music-flow",
      "to": "zora-1155",
      "type": "phase_3_step",
      "properties": {
        "phase": "3",
        "action": "Deploy NFT with ar:// metadata URI",
        "_source": "zabal-dispatch-ardrive-permastorage-integration-with-distrokid-20260524"
      }
    },
    {
      "from": "zao-music-flow",
      "to": "distrokid",
      "type": "phase_4_step",
      "properties": {
        "phase": "4",
        "action": "Submit release to DistroKid API",
        "_source": "zabal-dispatch-ardrive-permastorage-integration-with-distrokid-20260524"
      }
    },
    {
      "from": "zao-music-flow",
      "to": "0xsplits",
      "type": "phase_5_step",
      "properties": {
        "phase": "5",
        "action": "Deploy 0xSplits contract with creator fund",
        "_source": "zabal-dispatch-ardrive-permastorage-integration-with-distrokid-20260524"
      }
    },
    {
      "from": "zao-music-flow",
      "to": "bmi-registry",
      "type": "phase_7_step",
      "properties": {
        "phase": "7",
        "action": "Manual BMI registration with ISRC",
        "_source": "zabal-dispatch-ardrive-permastorage-integration-with-distrokid-20260524"
      }
    },
    {
      "from": "metadata-layers",
      "to": "arweave",
      "type": "contains_layer_1",
      "properties": {
        "layer": "1",
        "content": "permanent audio master + tags",
        "_source": "zabal-dispatch-ardrive-permastorage-integration-with-distrokid-20260524"
      }
    },
    {
      "from": "metadata-layers",
      "to": "base-chain",
      "type": "contains_layer_2",
      "properties": {
        "layer": "2",
        "content": "ERC-1155 NFT + 0xSplits contracts",
        "_source": "zabal-dispatch-ardrive-permastorage-integration-with-distrokid-20260524"
      }
    },
    {
      "from": "metadata-layers",
      "to": "distrokid",
      "type": "contains_layer_3",
      "properties": {
        "layer": "3",
        "content": "DDEX ERN to DSP networks",
        "_source": "zabal-dispatch-ardrive-permastorage-integration-with-distrokid-20260524"
      }
    },
    {
      "from": "entity-ardrive-turbo-sdk",
      "to": "entity-ans104-bundling",
      "type": "uses",
      "properties": {
        "_source": "zabal-dispatch-ardrive-permastorage-music-master-pipeline-20260524"
      }
    },
    {
      "from": "entity-ardrive-turbo-sdk",
      "to": "entity-arweave-permaweb-url",
      "type": "produces",
      "properties": {
        "_source": "zabal-dispatch-ardrive-permastorage-music-master-pipeline-20260524"
      }
    },
    {
      "from": "entity-music-metadata-schema",
      "to": "entity-isrc-codes",
      "type": "contains",
      "properties": {
        "_source": "zabal-dispatch-ardrive-permastorage-music-master-pipeline-20260524"
      }
    },
    {
      "from": "entity-music-metadata-schema",
      "to": "entity-iswc-codes",
      "type": "contains",
      "properties": {
        "_source": "zabal-dispatch-ardrive-permastorage-music-master-pipeline-20260524"
      }
    },
    {
      "from": "entity-zao-release-folder-structure",
      "to": "entity-music-metadata-schema",
      "type": "references",
      "properties": {
        "_source": "zabal-dispatch-ardrive-permastorage-music-master-pipeline-20260524"
      }
    },
    {
      "from": "entity-arweave-permaweb-url",
      "to": "entity-ar-io-wayfinder",
      "type": "serves_via",
      "properties": {
        "_source": "zabal-dispatch-ardrive-permastorage-music-master-pipeline-20260524"
      }
    },
    {
      "from": "entity-arweave-graphql-indexing",
      "to": "entity-arweave-permaweb-url",
      "type": "discovers",
      "properties": {
        "_source": "zabal-dispatch-ardrive-permastorage-music-master-pipeline-20260524"
      }
    },
    {
      "from": "entity-zao-release-folder-structure",
      "to": "entity-ardrive-turbo-sdk",
      "type": "uploads_via",
      "properties": {
        "_source": "zabal-dispatch-ardrive-permastorage-music-master-pipeline-20260524"
      }
    },
    {
      "from": "entity-isrc-codes",
      "to": "entity-zao-release-folder-structure",
      "type": "tags",
      "properties": {
        "_source": "zabal-dispatch-ardrive-permastorage-music-master-pipeline-20260524"
      }
    },
    {
      "from": "entity-iswc-codes",
      "to": "entity-zao-release-folder-structure",
      "type": "tags",
      "properties": {
        "_source": "zabal-dispatch-ardrive-permastorage-music-master-pipeline-20260524"
      }
    },
    {
      "from": "zabal-games-s1-finisher-hat",
      "to": "hat-tree-structure-design-zabal-games-s1",
      "type": "is_part_of",
      "properties": {
        "_source": "zabal-dispatch-hats-protocol-zabal-games-finisher-champion-20260524"
      }
    },
    {
      "from": "zabal-games-s1-champion-hat",
      "to": "hat-tree-structure-design-zabal-games-s1",
      "type": "is_part_of",
      "properties": {
        "_source": "zabal-dispatch-hats-protocol-zabal-games-finisher-champion-20260524"
      }
    },
    {
      "from": "hat-tree-structure-design-zabal-games-s1",
      "to": "hats-protocol-base-deployment",
      "type": "uses",
      "properties": {
        "_source": "zabal-dispatch-hats-protocol-zabal-games-finisher-champion-20260524"
      }
    },
    {
      "from": "zabal-games-s1-finisher-hat",
      "to": "hat-metadata-schema",
      "type": "implements",
      "properties": {
        "_source": "zabal-dispatch-hats-protocol-zabal-games-finisher-champion-20260524"
      }
    },
    {
      "from": "zabal-games-s1-champion-hat",
      "to": "hat-metadata-schema",
      "type": "implements",
      "properties": {
        "_source": "zabal-dispatch-hats-protocol-zabal-games-finisher-champion-20260524"
      }
    },
    {
      "from": "hat-metadata-schema",
      "to": "base-network-l2-fees",
      "type": "incurs_cost_via",
      "properties": {
        "_source": "zabal-dispatch-hats-protocol-zabal-games-finisher-champion-20260524"
      }
    },
    {
      "from": "wavewarz-base-settlement-zabal-finals",
      "to": "zabal-games-s1-finisher-hat",
      "type": "triggers_issuance_of",
      "properties": {
        "_source": "zabal-dispatch-hats-protocol-zabal-games-finisher-champion-20260524"
      }
    },
    {
      "from": "wavewarz-base-settlement-zabal-finals",
      "to": "zabal-games-s1-champion-hat",
      "type": "triggers_issuance_of",
      "properties": {
        "_source": "zabal-dispatch-hats-protocol-zabal-games-finisher-champion-20260524"
      }
    },
    {
      "from": "finalist-eligibility-snapshot",
      "to": "wavewarz-base-settlement-zabal-finals",
      "type": "feeds_data_to",
      "properties": {
        "_source": "zabal-dispatch-hats-protocol-zabal-games-finisher-champion-20260524"
      }
    },
    {
      "from": "finalist-eligibility-snapshot",
      "to": "zabal-games-s1-finisher-hat",
      "type": "determines_recipients_of",
      "properties": {
        "_source": "zabal-dispatch-hats-protocol-zabal-games-finisher-champion-20260524"
      }
    },
    {
      "from": "finalist-eligibility-snapshot",
      "to": "zabal-games-s1-champion-hat",
      "type": "filters_recipients_of",
      "properties": {
        "_source": "zabal-dispatch-hats-protocol-zabal-games-finisher-champion-20260524"
      }
    },
    {
      "from": "poidh-proof-integration-zabal-games",
      "to": "finalist-eligibility-snapshot",
      "type": "could_feed_data_to",
      "properties": {
        "_source": "zabal-dispatch-hats-protocol-zabal-games-finisher-champion-20260524"
      }
    },
    {
      "from": "june-tech-delivery-hats-wavewarz",
      "to": "hat-tree-structure-design-zabal-games-s1",
      "type": "creates",
      "properties": {
        "_source": "zabal-dispatch-hats-protocol-zabal-games-finisher-champion-20260524"
      }
    },
    {
      "from": "july-mainnet-smoke-test",
      "to": "zabal-games-s1-finisher-hat",
      "type": "validates",
      "properties": {
        "_source": "zabal-dispatch-hats-protocol-zabal-games-finisher-champion-20260524"
      }
    },
    {
      "from": "july-mainnet-smoke-test",
      "to": "zabal-games-s1-champion-hat",
      "type": "validates",
      "properties": {
        "_source": "zabal-dispatch-hats-protocol-zabal-games-finisher-champion-20260524"
      }
    },
    {
      "from": "august-finals-settlement-execution",
      "to": "wavewarz-base-settlement-zabal-finals",
      "type": "executes",
      "properties": {
        "_source": "zabal-dispatch-hats-protocol-zabal-games-finisher-champion-20260524"
      }
    },
    {
      "from": "august-finals-settlement-execution",
      "to": "zabal-games-s1-finisher-hat",
      "type": "distributes",
      "properties": {
        "_source": "zabal-dispatch-hats-protocol-zabal-games-finisher-champion-20260524"
      }
    },
    {
      "from": "august-finals-settlement-execution",
      "to": "zabal-games-s1-champion-hat",
      "type": "distributes",
      "properties": {
        "_source": "zabal-dispatch-hats-protocol-zabal-games-finisher-champion-20260524"
      }
    },
    {
      "from": "hat-tree-structure-design-zabal-games-s1",
      "to": "zao-governance-hat-tree-optimism",
      "type": "is_separate_from",
      "properties": {
        "_source": "zabal-dispatch-hats-protocol-zabal-games-finisher-champion-20260524"
      }
    },
    {
      "from": "hats-protocol-base-deployment",
      "to": "base-network-l2-fees",
      "type": "operates_on_chain_with_fees",
      "properties": {
        "_source": "zabal-dispatch-hats-protocol-zabal-games-finisher-champion-20260524"
      }
    },
    {
      "from": "hats-protocol",
      "to": "zao-tree-226",
      "type": "Hosts",
      "properties": {
        "_source": "zabal-dispatch-hats-protocol-zao-governance-usage-20260524"
      }
    },
    {
      "from": "zao-tree-226",
      "to": "hat-top-hat",
      "type": "Contains top hat",
      "properties": {
        "_source": "zabal-dispatch-hats-protocol-zao-governance-usage-20260524"
      }
    },
    {
      "from": "hat-top-hat",
      "to": "hat-configurator",
      "type": "Parent of",
      "properties": {
        "_source": "zabal-dispatch-hats-protocol-zao-governance-usage-20260524"
      }
    },
    {
      "from": "hat-configurator",
      "to": "hat-governance-council",
      "type": "Parent of",
      "properties": {
        "_source": "zabal-dispatch-hats-protocol-zao-governance-usage-20260524"
      }
    },
    {
      "from": "hat-configurator",
      "to": "hat-council-members",
      "type": "Parent of",
      "properties": {
        "_source": "zabal-dispatch-hats-protocol-zao-governance-usage-20260524"
      }
    },
    {
      "from": "hat-governance-council",
      "to": "hat-coc-concertz",
      "type": "Parent of",
      "properties": {
        "_source": "zabal-dispatch-hats-protocol-zao-governance-usage-20260524"
      }
    },
    {
      "from": "hat-governance-council",
      "to": "hat-wavewarz-dao",
      "type": "Parent of",
      "properties": {
        "_source": "zabal-dispatch-hats-protocol-zao-governance-usage-20260524"
      }
    },
    {
      "from": "zao-os-gating",
      "to": "hats-protocol",
      "type": "Implements access control via",
      "properties": {
        "_source": "zabal-dispatch-hats-protocol-zao-governance-usage-20260524"
      }
    },
    {
      "from": "zao-hats-api",
      "to": "zao-os-gating",
      "type": "Uses",
      "properties": {
        "_source": "zabal-dispatch-hats-protocol-zao-governance-usage-20260524"
      }
    },
    {
      "from": "zao-hats-api",
      "to": "hat-top-hat",
      "type": "Checks hat ownership for",
      "properties": {
        "_source": "zabal-dispatch-hats-protocol-zao-governance-usage-20260524"
      }
    },
    {
      "from": "zao-hats-api",
      "to": "hat-governance-council",
      "type": "Checks hat ownership for",
      "properties": {
        "_source": "zabal-dispatch-hats-protocol-zao-governance-usage-20260524"
      }
    },
    {
      "from": "zao-os-gating",
      "to": "zao-telegram-bot",
      "type": "Gates admin access in",
      "properties": {
        "_source": "zabal-dispatch-hats-protocol-zao-governance-usage-20260524"
      }
    },
    {
      "from": "wavewarz-finals-mechanic",
      "to": "hat-governance-council",
      "type": "Uses Respect snapshot (gated by Council Members hat)",
      "properties": {
        "_source": "zabal-dispatch-hats-protocol-zao-governance-usage-20260524"
      }
    },
    {
      "from": "hat-council-members",
      "to": "wavewarz-finals-mechanic",
      "type": "Eligible for pre-funded positions in",
      "properties": {
        "_source": "zabal-dispatch-hats-protocol-zao-governance-usage-20260524"
      }
    },
    {
      "from": "zao-tree-226",
      "to": "wavewarz-finals-mechanic",
      "type": "Separate from (governance on Optimism, Finals market on Base)",
      "properties": {
        "_source": "zabal-dispatch-hats-protocol-zao-governance-usage-20260524"
      }
    },
    {
      "from": "cal-com-api-v2",
      "to": "api-key-auth",
      "type": "uses",
      "properties": {
        "fact": "All Cal.com API requests require Bearer token authentication via API key or OAuth credentials",
        "_source": "zabal-dispatch-calendar-automation-calcom-api-20260524"
      }
    },
    {
      "from": "webhook-system",
      "to": "booking-created-event",
      "type": "triggers",
      "properties": {
        "fact": "Webhook system fires BOOKING_CREATED trigger immediately upon booking submission",
        "_source": "zabal-dispatch-calendar-automation-calcom-api-20260524"
      }
    },
    {
      "from": "webhook-system",
      "to": "booking-cancelled-event",
      "type": "triggers",
      "properties": {
        "fact": "Webhook system fires BOOKING_CANCELLED trigger with cancellation reason when booking is cancelled",
        "_source": "zabal-dispatch-calendar-automation-calcom-api-20260524"
      }
    },
    {
      "from": "booking-created-event",
      "to": "webhook-payload-template",
      "type": "populates",
      "properties": {
        "fact": "BOOKING_CREATED payload is formatted according to subscriber's template configuration",
        "_source": "zabal-dispatch-calendar-automation-calcom-api-20260524"
      }
    },
    {
      "from": "booking-confirmation-workflow",
      "to": "booking-created-event",
      "type": "conditionally_emits",
      "properties": {
        "fact": "If requires_confirmation is true, BOOKING_REQUESTED fires instead; BOOKING_CREATED fires after organizer approves",
        "_source": "zabal-dispatch-calendar-automation-calcom-api-20260524"
      }
    },
    {
      "from": "event-type-api",
      "to": "booking-confirmation-workflow",
      "type": "configures",
      "properties": {
        "fact": "Event type configuration sets whether bookings require organizer confirmation before triggering webhooks",
        "_source": "zabal-dispatch-calendar-automation-calcom-api-20260524"
      }
    },
    {
      "from": "subscription-management",
      "to": "webhook-system",
      "type": "registers",
      "properties": {
        "fact": "POST /v2/webhooks endpoint registers subscriber URL and trigger selection with webhook system",
        "_source": "zabal-dispatch-calendar-automation-calcom-api-20260524"
      }
    },
    {
      "from": "webhook-payload-template",
      "to": "telegram",
      "type": "could_notify",
      "properties": {
        "fact": "Custom payload template can be used to format booking data for Telegram bot integration",
        "_source": "zabal-dispatch-calendar-automation-calcom-api-20260524"
      }
    },
    {
      "from": "webhook-payload-template",
      "to": "farcaster",
      "type": "could_notify",
      "properties": {
        "fact": "Custom payload template can be structured to post booking confirmations to Farcaster via webhook receiver",
        "_source": "zabal-dispatch-calendar-automation-calcom-api-20260524"
      }
    },
    {
      "from": "api-key-auth",
      "to": "event-type-api",
      "type": "authorizes_access_to",
      "properties": {
        "fact": "API key provides authenticated access to Event Type endpoints for CRUD operations",
        "_source": "zabal-dispatch-calendar-automation-calcom-api-20260524"
      }
    },
    {
      "from": "booking-cancelled-event",
      "to": "webhook-payload-template",
      "type": "populates",
      "properties": {
        "fact": "BOOKING_CANCELLED payload includes cancellation reason and carries booking details into template",
        "_source": "zabal-dispatch-calendar-automation-calcom-api-20260524"
      }
    },
    {
      "from": "subscription-management",
      "to": "webhook-payload-template",
      "type": "stores",
      "properties": {
        "fact": "Subscription management API persists custom payload template configuration for webhook delivery",
        "_source": "zabal-dispatch-calendar-automation-calcom-api-20260524"
      }
    },
    {
      "from": "lu-ma-platform",
      "to": "luma-plus-features",
      "type": "unlocks",
      "properties": {
        "fact": "Luma Plus subscription unlocks webhooks, Zapier, 5x weekly sends, custom URLs, tax collection, priority support",
        "_source": "zabal-dispatch-calendar-automation-luma-api-20260524"
      }
    },
    {
      "from": "lu-ma-webhooks",
      "to": "guest-registration-workflow",
      "type": "triggers",
      "properties": {
        "fact": "Guest Registered and Ticket Registered webhooks fire in real-time when attendees RSVP or buy tickets",
        "_source": "zabal-dispatch-calendar-automation-luma-api-20260524"
      }
    },
    {
      "from": "event-creation-api",
      "to": "zabal-games-workshop-calendar",
      "type": "enables",
      "properties": {
        "fact": "POST /v1/event/create allows ZABAL to programmatically schedule workshops without UI, sync with Cal.com",
        "_source": "zabal-dispatch-calendar-automation-luma-api-20260524"
      }
    },
    {
      "from": "guest-list-api",
      "to": "zabal-games-workshop-calendar",
      "type": "provides",
      "properties": {
        "fact": "GET /v1/event/get-guests returns attendee list with approval status for real-time dashboard and export",
        "_source": "zabal-dispatch-calendar-automation-luma-api-20260524"
      }
    },
    {
      "from": "lu-ma-webhooks",
      "to": "webhook-signature-verification",
      "type": "requires",
      "properties": {
        "fact": "Luma generates HMAC SHA-256 secret (wh_ prefix) for webhook endpoint validation; required before processing payloads",
        "_source": "zabal-dispatch-calendar-automation-luma-api-20260524"
      }
    },
    {
      "from": "luma-plus-features",
      "to": "zabal-games-workshop-calendar",
      "type": "empowers",
      "properties": {
        "fact": "0% platform fee on tickets, Zapier automation for email sequences, 5+ calendar admin seats, custom URLs (luma.com/zabal-workshops)",
        "_source": "zabal-dispatch-calendar-automation-luma-api-20260524"
      }
    },
    {
      "from": "lu-ma-platform",
      "to": "cal-com",
      "type": "integrates_with",
      "properties": {
        "fact": "Lu.ma can embed event links or receive attendee data from Cal.com bookings via webhook; no native Cal.com integration, manual or Zapier-driven",
        "_source": "zabal-dispatch-calendar-automation-luma-api-20260524"
      }
    },
    {
      "from": "event-creation-api",
      "to": "guest-registration-workflow",
      "type": "initiates",
      "properties": {
        "fact": "Creating an event via API opens registration; first guest registration fires Guest Registered webhook",
        "_source": "zabal-dispatch-calendar-automation-luma-api-20260524"
      }
    },
    {
      "from": "guest-registration-workflow",
      "to": "luma-plus-features",
      "type": "leverages",
      "properties": {
        "fact": "Ticket Registered webhook enables per-ticket automations (e.g., send 3 unique QR codes for 3-ticket purchase); requires Luma Plus",
        "_source": "zabal-dispatch-calendar-automation-luma-api-20260524"
      }
    },
    {
      "from": "lu-ma-platform",
      "to": "lu-ma-api",
      "type": "exposes",
      "properties": {
        "fact": "Public API at https://public-api.luma.com with 200 (calendar) or 500 (org) req/min rate limits; no usage costs",
        "_source": "zabal-dispatch-calendar-automation-luma-api-20260524"
      }
    },
    {
      "from": "workshop-lead",
      "to": "formspree-integration",
      "type": "submits_to",
      "properties": {
        "fact": "Workshop leads fill out /lead.html form, which posts to Formspree endpoint mjgajyqe",
        "_source": "zabal-dispatch-calendar-automation-zabal-games-flow-20260524"
      }
    },
    {
      "from": "formspree-integration",
      "to": "zaal-approval-gate",
      "type": "triggers",
      "properties": {
        "fact": "Formspree sends submission notification (email or future webhook) to Zaal; Zaal reviews and DMs lead",
        "_source": "zabal-dispatch-calendar-automation-zabal-games-flow-20260524"
      }
    },
    {
      "from": "zaal-approval-gate",
      "to": "workshop-lead-confirmation",
      "type": "initiates",
      "properties": {
        "fact": "Zaal DMs lead in Farcaster with questions; lead responds with confirmation",
        "_source": "zabal-dispatch-calendar-automation-zabal-games-flow-20260524"
      }
    },
    {
      "from": "workshop-lead-confirmation",
      "to": "cal-com-slot-creation",
      "type": "enables",
      "properties": {
        "fact": "Once lead confirms date, Zaal creates a Cal.com 30-min slot for that date",
        "_source": "zabal-dispatch-calendar-automation-zabal-games-flow-20260524"
      }
    },
    {
      "from": "cal-com-slot-creation",
      "to": "cal-com-workshop-slots",
      "type": "creates_in",
      "properties": {
        "fact": "Zaal or automation creates a new event in the cal.com ZABAL Gamez event type",
        "_source": "zabal-dispatch-calendar-automation-zabal-games-flow-20260524"
      }
    },
    {
      "from": "workshop-lead-confirmation",
      "to": "lu-ma-event-creation",
      "type": "enables",
      "properties": {
        "fact": "Once lead confirms date, Zaal creates a Lu.ma event for that workshop",
        "_source": "zabal-dispatch-calendar-automation-zabal-games-flow-20260524"
      }
    },
    {
      "from": "lu-ma-event-creation",
      "to": "lu-ma-workshop-calendar",
      "type": "creates_in",
      "properties": {
        "fact": "Zaal or automation creates a new event in the ZABAL Gamez Season 1 Lu.ma calendar",
        "_source": "zabal-dispatch-calendar-automation-zabal-games-flow-20260524"
      }
    },
    {
      "from": "cal-com-workshop-slots",
      "to": "workshop-lead",
      "type": "sends_booking_link_to",
      "properties": {
        "fact": "Zaal sends Cal.com booking URL to lead via Farcaster DM so they can see their locked slot",
        "_source": "zabal-dispatch-calendar-automation-zabal-games-flow-20260524"
      }
    },
    {
      "from": "lu-ma-workshop-calendar",
      "to": "workshop-lead",
      "type": "sends_rsvp_link_to",
      "properties": {
        "fact": "Zaal sends Lu.ma event URL to lead and community for RSVPs and opt-in email collection",
        "_source": "zabal-dispatch-calendar-automation-zabal-games-flow-20260524"
      }
    },
    {
      "from": "recording-session",
      "to": "magnetic-upload-clipping",
      "type": "generates_content_for",
      "properties": {
        "fact": "Lead's recorded 30-min session becomes the input for Magnetiq native hosting and clipping",
        "_source": "zabal-dispatch-calendar-automation-zabal-games-flow-20260524"
      }
    },
    {
      "from": "magnetic-upload-clipping",
      "to": "magnetic-workshop-library-portal",
      "type": "populates",
      "properties": {
        "fact": "Tyler uploads workshop videos to Magnetiq native hosting; analytics enabled per-vendor",
        "_source": "zabal-dispatch-calendar-automation-zabal-games-flow-20260524"
      }
    },
    {
      "from": "magnetic-workshop-library-portal",
      "to": "farcaster-announcement-cast",
      "type": "provides_link_for",
      "properties": {
        "fact": "Magnetiq video URL (or YouTube mirror) is linked in the /zabal announcement cast",
        "_source": "zabal-dispatch-calendar-automation-zabal-games-flow-20260524"
      }
    },
    {
      "from": "farcaster-announcement-cast",
      "to": "workshop-lead",
      "type": "announces_to",
      "properties": {
        "fact": "Zaal's cast in /zabal credits lead by handle and links to their recording",
        "_source": "zabal-dispatch-calendar-automation-zabal-games-flow-20260524"
      }
    },
    {
      "from": "magnetic-upload-clipping",
      "to": "telegram-reminder-bot",
      "type": "triggers",
      "properties": {
        "fact": "Once recording is live on Magnetiq, a T+1 reminder with the link is queued for the lead",
        "_source": "zabal-dispatch-calendar-automation-zabal-games-flow-20260524"
      }
    },
    {
      "from": "farcaster-announcement-cast",
      "to": "context-indexing-llms-txt",
      "type": "provides_cast_link_for",
      "properties": {
        "fact": "The cast hash from the announcement is stored and later used in /llms.txt as a sourced reference",
        "_source": "zabal-dispatch-calendar-automation-zabal-games-flow-20260524"
      }
    },
    {
      "from": "magnetic-analytics",
      "to": "snaps-methodology",
      "type": "feeds_into",
      "properties": {
        "fact": "Per-vendor watch-time drop-off data is used to inform Novelty/Access retention levers in SNAPS",
        "_source": "zabal-dispatch-calendar-automation-zabal-games-flow-20260524"
      }
    },
    {
      "from": "zabal-games-calendar-flow",
      "to": "formspree-integration",
      "type": "starts_at",
      "properties": {
        "fact": "The entire flow is triggered by a form submission at /lead.html going to Formspree",
        "_source": "zabal-dispatch-calendar-automation-zabal-games-flow-20260524"
      }
    },
    {
      "from": "workshop-lead-data-schema",
      "to": "zabal-games-calendar-flow",
      "type": "tracks",
      "properties": {
        "fact": "workshop-leads.json and future Supabase table track every state transition in the calendar flow",
        "_source": "zabal-dispatch-calendar-automation-zabal-games-flow-20260524"
      }
    },
    {
      "from": "supabase-workshop-table",
      "to": "formspree-integration",
      "type": "receives_webhooks_from",
      "properties": {
        "fact": "Once Formspree is configured, new submissions auto-insert into Supabase as status:submitted rows",
        "_source": "zabal-dispatch-calendar-automation-zabal-games-flow-20260524"
      }
    },
    {
      "from": "zaal",
      "to": "zabal-games-calendar-flow",
      "type": "orchestrates",
      "properties": {
        "fact": "Zaal is the primary human in the loop for approval, booking creation, announcement casting, and LLMs.txt indexing",
        "_source": "zabal-dispatch-calendar-automation-zabal-games-flow-20260524"
      }
    },
    {
      "from": "tyler-stambaugh",
      "to": "magnetic-workshop-library-portal",
      "type": "owns",
      "properties": {
        "fact": "Tyler is responsible for the Magnetiq vendor relationship, video hosting, analytics, and Zabal Connector NFT",
        "_source": "zabal-dispatch-calendar-automation-zabal-games-flow-20260524"
      }
    },
    {
      "from": "cal-com-slot-creation",
      "to": "workshop-lead-data-schema",
      "type": "populates",
      "properties": {
        "fact": "Cal.com event_id and URL are stored in workshop-leads.json or Supabase cal_com_event_id / cal_com_url fields",
        "_source": "zabal-dispatch-calendar-automation-zabal-games-flow-20260524"
      }
    },
    {
      "from": "lu-ma-event-creation",
      "to": "workshop-lead-data-schema",
      "type": "populates",
      "properties": {
        "fact": "Lu.ma event_id and URL are stored in workshop-leads.json or Supabase luma_event_id / luma_url fields",
        "_source": "zabal-dispatch-calendar-automation-zabal-games-flow-20260524"
      }
    },
    {
      "from": "spotify",
      "to": "distrokid",
      "type": "royalty-payment-flow",
      "properties": {
        "fact": "Spotify reports earnings 30-60 days after streams occur; DistroKid receives monthly from DSPs",
        "timing": "streams in January appear in DistroKid account by March/April",
        "format": "pro-rata model: artist's share = (artist streams / total DSP streams) * royalty pool",
        "_source": "zabal-dispatch-music-rights-pipeline-creator-fund-onchain-20260524"
      }
    },
    {
      "from": "distrokid",
      "to": "zao-creator-fund",
      "type": "payout-routing",
      "properties": {
        "fact": "DistroKid Musician Plus label account (BetterCallZaal Strategies) receives master royalties, deposits to 0xSplits split address",
        "mechanics": "split contract is payoutRecipient in DistroKid dashboard; all DSP payments auto-routed to split",
        "custody": "no intermediary, direct from DistroKid to contract balance",
        "_source": "zabal-dispatch-music-rights-pipeline-creator-fund-onchain-20260524"
      }
    },
    {
      "from": "0xsplits",
      "to": "artist-wallet",
      "type": "on-chain-distribution",
      "properties": {
        "fact": "PushSplit contract distributes ETH directly to sorted recipient addresses; anyone can trigger distribute() call",
        "trigger": "optional, permissionless; keeper incentive optional",
        "immutability": "80/10/10 split set once at deployment, never changes",
        "finality": "transaction confirms on Base (3-5 sec), artist sees funds in wallet immediately",
        "_source": "zabal-dispatch-music-rights-pipeline-creator-fund-onchain-20260524"
      }
    },
    {
      "from": "0xsplits",
      "to": "zao-music-treasury",
      "type": "on-chain-distribution",
      "properties": {
        "fact": "10% of split proceeds routes to ZAO Music Treasury address (ZOUNZ multi-sig governance)",
        "governance": "ZOUNZ DAO votes on treasury use via proposals",
        "use_allocation": "artist grants, curation bounties, emergency fund for members",
        "_source": "zabal-dispatch-music-rights-pipeline-creator-fund-onchain-20260524"
      }
    },
    {
      "from": "spotify",
      "to": "bmi",
      "type": "performance-royalty-payment",
      "properties": {
        "fact": "Spotify licenses all compositions from BMI blanket license; pays BMI for performance right + pays mechanical to The MLC separately",
        "split": "performance royalties go to BMI; mechanical to The MLC; both independent of sound recording payment to distributor",
        "rate_performance": "included in Spotify's license fee to BMI, not per-stream",
        "_source": "zabal-dispatch-music-rights-pipeline-creator-fund-onchain-20260524"
      }
    },
    {
      "from": "spotify",
      "to": "the-mlc",
      "type": "mechanical-royalty-payment",
      "properties": {
        "fact": "Spotify withholds mechanical royalties per-stream ($0.0008-$0.0012) and reports to The MLC monthly",
        "statutory": "rates set by Copyright Royalty Board, not negotiable",
        "timing": "reported by Spotify, MLC processes, payout typically 2 months after reporting month",
        "_source": "zabal-dispatch-music-rights-pipeline-creator-fund-onchain-20260524"
      }
    },
    {
      "from": "bmi",
      "to": "artist-songwriter",
      "type": "performance-royalty-payout",
      "properties": {
        "fact": "BMI pays songwriters quarterly (Q1, Q2, Q3, Q4) for all public performances tracked",
        "coverage": "radio, TV, live venues, streaming services (performance portion of Spotify license)",
        "artist_action": "register songwriter profile free + register compositions in BMI catalog to collect",
        "_source": "zabal-dispatch-music-rights-pipeline-creator-fund-onchain-20260524"
      }
    },
    {
      "from": "the-mlc",
      "to": "artist-songwriter",
      "type": "mechanical-royalty-payout",
      "properties": {
        "fact": "The MLC pays songwriters monthly for U.S. streaming mechanical royalties only",
        "retroactive": "new members can claim back to January 2021",
        "artist_action": "register free at themlc.com, register compositions, verify ISRCs match registration",
        "_source": "zabal-dispatch-music-rights-pipeline-creator-fund-onchain-20260524"
      }
    },
    {
      "from": "zao-music-entity",
      "to": "distrokid",
      "type": "label-account-relationship",
      "properties": {
        "fact": "BetterCallZaal Strategies LLC holds Musician Plus account; all ZAO Music releases distributed under this label",
        "ownership_clarity": "artist retains 100% master ownership; ZAO gains publishing admin + compilation rights only",
        "leave_legacy": "reserve $29-49 per release so catalog survives if ZAO membership lapses",
        "_source": "zabal-dispatch-music-rights-pipeline-creator-fund-onchain-20260524"
      }
    },
    {
      "from": "zao-music-entity",
      "to": "bmi",
      "type": "publisher-registration",
      "properties": {
        "fact": "ZAO Music DBA registers as BMI publisher ($250 one-time); all member compositions registered under ZAO Music publishing arm",
        "admin": "ZAO administers rights; artists retain songwriter status (free BMI writer registration separate)",
        "collections": "BMI pays ZAO Music Treasury for performance royalties + includes mechanical collections",
        "_source": "zabal-dispatch-music-rights-pipeline-creator-fund-onchain-20260524"
      }
    },
    {
      "from": "zao-music-entity",
      "to": "the-mlc",
      "type": "songwriter-registration-enrollment",
      "properties": {
        "fact": "Each ZAO Music member also registers individually with The MLC (free); dual registration captures U.S. mechanicals",
        "redundancy": "both BMI in-house mechanicals + MLC registration = belt-and-suspenders U.S. coverage",
        "artist_action": "DCoop walks each member through themlc.com registration during onboarding",
        "_source": "zabal-dispatch-music-rights-pipeline-creator-fund-onchain-20260524"
      }
    },
    {
      "from": "distrokid",
      "to": "0xsplits",
      "type": "payout-recipient-contract",
      "properties": {
        "fact": "In DistroKid dashboard, 0xSplits split address is set as payoutRecipient for all ZAO Music releases",
        "flow": "DistroKid receives DSP payments, automatically deposits to split contract address on Base",
        "treasury_visibility": "split balance is publicly queryable on-chain, no hidden ledgers",
        "_source": "zabal-dispatch-music-rights-pipeline-creator-fund-onchain-20260524"
      }
    },
    {
      "from": "0xsplits",
      "to": "swapper",
      "type": "optional-conversion",
      "properties": {
        "fact": "0xSplits Swapper module can auto-convert ETH payouts to USDC for artists who prefer stablecoin",
        "trigger": "artist opts in at split creation; Uniswap routes the swap",
        "cost": "minimal slippage, no platform fee",
        "_source": "zabal-dispatch-music-rights-pipeline-creator-fund-onchain-20260524"
      }
    },
    {
      "from": "zora-nft-mint",
      "to": "0xsplits",
      "type": "nft-payout-routing",
      "properties": {
        "fact": "When track minted as ERC-1155 on Zora, creator sets split address as payoutRecipient in create1155 call",
        "nft_revenue": "separate from streaming revenue; all NFT mint proceeds flow to same split",
        "unified": "streaming + NFT collecting all route through single split for easy treasury tracking",
        "_source": "zabal-dispatch-music-rights-pipeline-creator-fund-onchain-20260524"
      }
    },
    {
      "from": "songtrust",
      "to": "publishing-admin-cost",
      "type": "fee-replacement",
      "properties": {
        "fact": "Traditional indie path: pay Songtrust $100/writer + 15-20% commission for global mechanicals",
        "zao_replacement": "BMI $250 one-time + in-house mechanicals + MLC free registration = zero ongoing commission",
        "savings": "$100+ per writer per year + 15-20% of mechanical revenue",
        "_source": "zabal-dispatch-music-rights-pipeline-creator-fund-onchain-20260524"
      }
    },
    {
      "from": "25-middleman-cost",
      "to": "zao-creator-fund",
      "type": "savings-reallocation",
      "properties": {
        "fact": "Traditional stack (DistroKid 0% + ASCAP/BMI 10-15% overhead + Songtrust 20%) = ~25% total cost; ZAO eliminates percentage cuts",
        "old_structure": "artists net 75-85 cents of every earned dollar",
        "new_structure": "artists net 80-100 cents; difference flows to ZAO Creator Fund for grants/bounties",
        "philosophy_match": "Zaal's 'net benefit, not a fee' positioning from April 22 transcript",
        "_source": "zabal-dispatch-music-rights-pipeline-creator-fund-onchain-20260524"
      }
    },
    {
      "from": "creator-fund",
      "to": "artist-grants",
      "type": "treasury-allocation",
      "properties": {
        "fact": "ZAO Creator Fund, funded from 25% savings, governance votes on grant distribution",
        "use": "fund releases, music videos, studio time for members in good standing",
        "respect_weighting": "higher Respect score = larger grant eligibility",
        "_source": "zabal-dispatch-music-rights-pipeline-creator-fund-onchain-20260524"
      }
    },
    {
      "from": "first-release-the-cipher",
      "to": "summer-2026",
      "type": "timeline",
      "properties": {
        "fact": "ZAO Music Entity launches with 10-artist cipher; pure DSP distribution (no NFT yet)",
        "team": "GodCloud produces, DCoop ops, Iman brings WaveWarZ Zambia artists",
        "phase_next": "release #2+ adds on-chain NFT collecting via Zora + 0xSplits",
        "_source": "zabal-dispatch-music-rights-pipeline-creator-fund-onchain-20260524"
      }
    },
    {
      "from": "universal-music-group-umg",
      "to": "downtown-music-holdings",
      "type": "ACQUIRED",
      "properties": {
        "date": "2026-02-20",
        "value": "$775 million",
        "regulatory_path": "EU Phase II review (Jul 2025 - Feb 2026)",
        "condition": "Curve Royalty Systems must be divested",
        "timeline_to_close": "14 months from announcement (Dec 2024) to close (Feb 2026)",
        "_source": "zabal-dispatch-music-rights-pipeline-post-umg-distrokid-only-20260524"
      }
    },
    {
      "from": "downtown-music-holdings",
      "to": "cd-baby",
      "type": "SUBSIDIARY_ACQUIRED",
      "properties": {
        "creator_base": "4+ million DIY artists",
        "impact": "Independence assumption broken overnight",
        "artist_data_now": "Owned by UMG",
        "_source": "zabal-dispatch-music-rights-pipeline-post-umg-distrokid-only-20260524"
      }
    },
    {
      "from": "downtown-music-holdings",
      "to": "fuga",
      "type": "SUBSIDIARY_ACQUIRED",
      "properties": {
        "market_segment": "B2B label distribution (200+ independent labels)",
        "data_concern": "Distribution & sales data now visible to UMG",
        "_source": "zabal-dispatch-music-rights-pipeline-post-umg-distrokid-only-20260524"
      }
    },
    {
      "from": "downtown-music-holdings",
      "to": "songtrust",
      "type": "SUBSIDIARY_ACQUIRED",
      "properties": {
        "function": "Publishing royalty collection",
        "artist_impact": "Publishing data flows to UMG",
        "prior_positioning": "Indie-friendly publishing admin",
        "_source": "zabal-dispatch-music-rights-pipeline-post-umg-distrokid-only-20260524"
      }
    },
    {
      "from": "european-commission-ec",
      "to": "umg",
      "type": "FORCED_DIVESTMENT",
      "properties": {
        "target": "Curve Royalty Systems",
        "reason": "Commercially sensitive data access risk to competitors",
        "what_stayed": "CD Baby and FUGA (data concerns noted but not remedied by divestment)",
        "regulatory_signal": "Data as infrastructure receives scrutiny; distribution platforms do not",
        "_source": "zabal-dispatch-music-rights-pipeline-post-umg-distrokid-only-20260524"
      }
    },
    {
      "from": "umg",
      "to": "artist-independence-assumption",
      "type": "THREATENS",
      "properties": {
        "mechanism": "UMG now owns distribution platform + has roster of signed artists",
        "conflict_of_interest": "UMG has financial incentive to promote signed artists over CD Baby DIY artists",
        "precedent": "UMG pushed for Spotify's 1k-stream threshold that redirects royalties away from small artists",
        "structural_risk": "Distributor owned by major label has different incentive structure than neutral platform",
        "_source": "zabal-dispatch-music-rights-pipeline-post-umg-distrokid-only-20260524"
      }
    },
    {
      "from": "cd-baby",
      "to": "distrokid",
      "type": "MARKET_SHIFT_TO",
      "properties": {
        "reason": "CD Baby no longer independent; UMG acquisition breaks trust for artists seeking independence",
        "distrokid_advantage": "Structurally independent; no conflicting major label roster",
        "adoption_signal": "ZAO Music, BCZ Strategies chose DistroKid over CD Baby for this reason",
        "_source": "zabal-dispatch-music-rights-pipeline-post-umg-distrokid-only-20260524"
      }
    },
    {
      "from": "distrokid",
      "to": "spotify",
      "type": "DOMINATES_SUPPLY",
      "properties": {
        "market_share": "33% of weekly new indie music on Spotify",
        "reliability_advantage": "Scale = integrated relationships, faster delivery, issue resolution priority",
        "_source": "zabal-dispatch-music-rights-pipeline-post-umg-distrokid-only-20260524"
      }
    },
    {
      "from": "zao-music",
      "to": "distrokid-musician-plus",
      "type": "USES_FOR_DISTRIBUTION",
      "properties": {
        "cost": "$44.99/year",
        "benefit": "100% royalty retention, 24-48hr Spotify go-live, unlimited uploads",
        "rationale": "Structural independence; artist data sovereignty; aligned incentives",
        "_source": "zabal-dispatch-music-rights-pipeline-post-umg-distrokid-only-20260524"
      }
    },
    {
      "from": "zao-music",
      "to": "bmi",
      "type": "USES_FOR_PUBLISHING",
      "properties": {
        "cost": "$250 one-time LLC fee",
        "benefit": "In-house mechanicals collection (avoids Songtrust dependency)",
        "why_not_songtrust": "Songtrust now owned by UMG (major label); BMI is PRO (artist-aligned)",
        "_source": "zabal-dispatch-music-rights-pipeline-post-umg-distrokid-only-20260524"
      }
    },
    {
      "from": "zao-music",
      "to": "the-mlc",
      "type": "REGISTERS_WITH",
      "properties": {
        "cost": "Free",
        "benefit": "Redundant US mechanicals collection (statutory rights)",
        "strategy": "Belt-and-suspenders approach; BMI + MLC = maximum mechanicals capture",
        "_source": "zabal-dispatch-music-rights-pipeline-post-umg-distrokid-only-20260524"
      }
    },
    {
      "from": "zao-music",
      "to": "0xsplits-base",
      "type": "USES_FOR_REVENUE_SPLITS",
      "properties": {
        "benefit": "On-chain per-release splits (artist / collab / ZAO Treasury)",
        "wallet_payout": "Direct-to-wallet artist payments",
        "portability": "Split structure independent of any one distributor",
        "_source": "zabal-dispatch-music-rights-pipeline-post-umg-distrokid-only-20260524"
      }
    },
    {
      "from": "cd-baby-pre-umg",
      "to": "cd-baby-post-umg",
      "type": "STRUCTURAL_CHANGE",
      "properties": {
        "what_was_promised": "Neutral indie distribution, permanent catalog hosting, artist data privacy",
        "what_changed": "Now a UMG subsidiary; data flows to major label competitor",
        "artist_trust_impact": "Destroyed for artists who chose CD Baby specifically for independence",
        "_source": "zabal-dispatch-music-rights-pipeline-post-umg-distrokid-only-20260524"
      }
    },
    {
      "from": "tunecore",
      "to": "believe",
      "type": "SUBSIDIARY_OF",
      "properties": {
        "implication": "Not independent; partial consolidation risk",
        "status": "Still operational but not indie-owned",
        "for_zao": "Backup path only; preference is DistroKid",
        "_source": "zabal-dispatch-music-rights-pipeline-post-umg-distrokid-only-20260524"
      }
    },
    {
      "from": "cd-baby-umg-owned",
      "to": "artist-catalog-data",
      "type": "CONTROLS_ACCESS_TO",
      "properties": {
        "data_types": "Release schedules, streaming performance by territory, sales data, catalog composition, fan engagement metrics",
        "access_holder": "UMG (via Virgin Music Group)",
        "ec_concern": "Same data access risk that forced Curve divestment, but left with CD Baby",
        "_source": "zabal-dispatch-music-rights-pipeline-post-umg-distrokid-only-20260524"
      }
    },
    {
      "from": "umg",
      "to": "spotify-1k-stream-threshold-policy",
      "type": "ADVOCATED_FOR",
      "properties": {
        "impact": "65% of indie artists/labels experienced significant negative impact",
        "timing": "UMG pushed this policy, then acquired CD Baby (now owns the platform serving those artists)",
        "irony": "Company that advocated for threshold now owns distributor serving threshold-penalized artists",
        "_source": "zabal-dispatch-music-rights-pipeline-post-umg-distrokid-only-20260524"
      }
    },
    {
      "from": "distrokid",
      "to": "umg-owned-distribution",
      "type": "INDEPENDENT_ALTERNATIVE_TO",
      "properties": {
        "why_chosen": "Last major independently-held digital distributor at scale",
        "ecosystem_reliance": "Structurally dependent on DistroKid for artist data sovereignty",
        "risk": "UMG could acquire DistroKid (monitoring required); 0xSplits layer is portable regardless",
        "_source": "zabal-dispatch-music-rights-pipeline-post-umg-distrokid-only-20260524"
      }
    },
    {
      "from": "revelator",
      "to": "warner-music-group",
      "type": "ACQUIRED",
      "properties": {
        "date": "Mar 2026",
        "impact": "Second indie-friendly distributor (with Web3 features) acquired by major label in Q1 2026",
        "context": "Along with CD Baby/UMG, completes Q1 2026 consolidation of indie distribution infrastructure",
        "_source": "zabal-dispatch-music-rights-pipeline-post-umg-distrokid-only-20260524"
      }
    },
    {
      "from": "bcz-strategies-bettercallzaal",
      "to": "zao-music-publishing-dba",
      "type": "LEGAL_WRAPPER_FOR",
      "properties": {
        "structure": "DBA under existing LLC avoids new formation cost",
        "benefit": "Ties collective to already-operating consulting entity",
        "_source": "zabal-dispatch-music-rights-pipeline-post-umg-distrokid-only-20260524"
      }
    },
    {
      "from": "the-cipher-zao-music-release-1",
      "to": "zaostock-oct-3-2026",
      "type": "TIMED_RELEASE_FOR",
      "properties": {
        "strategy": "10-artist cipher timed to community event for promo cycle",
        "first_live_test": "0xSplits wallet payouts, DSP distribution pipeline, artist participation model",
        "_source": "zabal-dispatch-music-rights-pipeline-post-umg-distrokid-only-20260524"
      }
    },
    {
      "from": "bmi-publisher-registration",
      "to": "bmi-songwriter-affiliation",
      "type": "prerequisite",
      "properties": {
        "fact": "Songwriter must be affiliated with BMI FIRST (free) before publisher entity can be set up. Publisher application requires pre-existing songwriter account.",
        "order_dependency": "1. Songwriter affiliation (free). 2. Publisher registration ($250 LLC fee).",
        "_source": "zabal-dispatch-music-rights-pipeline-registration-order-20260524"
      }
    },
    {
      "from": "bmi-publisher-registration",
      "to": "bmi-songwriter-affiliation",
      "type": "feeds_metadata_to",
      "properties": {
        "fact": "Once publisher is registered, songwriter account is linked to that publisher entity. Future composition registrations will credit both writer and publisher shares to your account.",
        "_source": "zabal-dispatch-music-rights-pipeline-registration-order-20260524"
      }
    },
    {
      "from": "bmi-songwriter-affiliation",
      "to": "the-mlc-songwriter-registration",
      "type": "prerequisite",
      "properties": {
        "fact": "Songwriter must join BMI first (establishes IPI number and songwriter identity in global system). The MLC then uses IPI to link compositions to the correct songwriter during registration.",
        "order_dependency": "1. BMI affiliation. 2. The MLC registration (both free).",
        "_source": "zabal-dispatch-music-rights-pipeline-registration-order-20260524"
      }
    },
    {
      "from": "the-mlc-songwriter-registration",
      "to": "distrokid-upload",
      "type": "prerequisite_for_mechanical_royalties",
      "properties": {
        "fact": "Composition MUST be registered with The MLC BEFORE DistroKid upload. If composition is not in MLC database when recording goes live, DSPs have no entity to route mechanical royalties to. Unmatched.",
        "consequence_violation": "Recording streams for weeks/months before registration occurs. All mechanicals from that period are unmatched (lost to songwriter).",
        "order_dependency": "1. The MLC registration (15 days). 2. DistroKid upload (3 days later).",
        "_source": "zabal-dispatch-music-rights-pipeline-registration-order-20260524"
      }
    },
    {
      "from": "distrokid-upload",
      "to": "isrc-code-assignment",
      "type": "generates",
      "properties": {
        "fact": "DistroKid assigns unique ISRC codes during upload process (or accepts pre-assigned codes). One ISRC per recording version. ISRC is embedded in release metadata sent to DSPs.",
        "timing": "Happens simultaneously with upload.",
        "_source": "zabal-dispatch-music-rights-pipeline-registration-order-20260524"
      }
    },
    {
      "from": "isrc-code-assignment",
      "to": "isrc-to-iswc-matching",
      "type": "requires_prior_step",
      "properties": {
        "fact": "Once ISRC is assigned and released to DSPs, it must be matched to an ISWC for mechanical royalties. The matching happens in The MLC and DSP backend systems.",
        "dependency": "ISWC must already exist in The MLC database. If ISWC does not exist (because composition was not registered), matching fails and recording becomes unmatched.",
        "_source": "zabal-dispatch-music-rights-pipeline-registration-order-20260524"
      }
    },
    {
      "from": "bmi-songwriter-affiliation",
      "to": "iswc-code-assignment",
      "type": "triggers",
      "properties": {
        "fact": "When you register a composition with BMI, BMI automatically assigns an ISWC (via ASCAP, the US ISWC agency). ISWC appears in your work registration details after BMI processes the submission (3-5 days).",
        "timing": "ISWC is issued after composition registration is accepted by BMI.",
        "_source": "zabal-dispatch-music-rights-pipeline-registration-order-20260524"
      }
    },
    {
      "from": "iswc-code-assignment",
      "to": "isrc-to-iswc-matching",
      "type": "enables",
      "properties": {
        "fact": "ISWC must exist BEFORE ISRC arrives at DSPs for matching to succeed. If ISWC exists in The MLC database when DistroKid delivers ISRC, automated matching can occur.",
        "order_dependency": "ISWC must be live in The MLC database BEFORE DistroKid upload.",
        "_source": "zabal-dispatch-music-rights-pipeline-registration-order-20260524"
      }
    },
    {
      "from": "isrc-to-iswc-matching",
      "to": "unmatched-recording-problem",
      "type": "prevents",
      "properties": {
        "fact": "Successful ISRC-ISWC matching prevents recordings from entering the unmatched pool. Without matching, recording is unmatched and songwriter does not receive mechanical royalties.",
        "opposite": "If matching fails, recording becomes unmatched.",
        "_source": "zabal-dispatch-music-rights-pipeline-registration-order-20260524"
      }
    },
    {
      "from": "distrokid-upload",
      "to": "double-registration-headaches",
      "type": "can_trigger",
      "properties": {
        "fact": "If you upload to DistroKid with one set of splits, then register the same composition with BMI with different splits, The MLC flags a conflict. Royalties are held in dispute.",
        "prevention": "Lock in splits (with all collaborators) BEFORE any registration or upload.",
        "_source": "zabal-dispatch-music-rights-pipeline-registration-order-20260524"
      }
    },
    {
      "from": "late-registration-penalty-bmi-policy",
      "to": "unmatched-recording-problem",
      "type": "related_consequence",
      "properties": {
        "fact": "Late registration (after stream date) creates a window where recording is unmatched. Royalties from that period sit in unmatched pool. BMI policy allows recovery only within 9 months.",
        "_source": "zabal-dispatch-music-rights-pipeline-registration-order-20260524"
      }
    },
    {
      "from": "the-mlc-songwriter-registration",
      "to": "late-registration-penalty-bmi-policy",
      "type": "subject_to",
      "properties": {
        "fact": "The MLC registration is subject to BMI's 9-month recovery window. If registered more than 9 months after first stream, royalties from earlier periods are permanently lost.",
        "_source": "zabal-dispatch-music-rights-pipeline-registration-order-20260524"
      }
    },
    {
      "from": "distrokid-upload",
      "to": "distrokid-ai-disclosure-checkbox",
      "type": "includes_step",
      "properties": {
        "fact": "During DistroKid upload, you must complete AI disclosure checkbox. Failure to disclose AI when AI was used results in removal and account suspension risk.",
        "_source": "zabal-dispatch-music-rights-pipeline-registration-order-20260524"
      }
    },
    {
      "from": "distrokid-ai-disclosure-checkbox",
      "to": "bmi-songwriter-affiliation",
      "type": "separate_requirement_from",
      "properties": {
        "fact": "AI disclosure at DistroKid is independent of BMI registration. AI-assisted tracks with human authorship (e.g., human lyrics + AI beat) still register with BMI and collect publishing royalties. Disclosure is a DistroKid policy, not a publishing policy.",
        "_source": "zabal-dispatch-music-rights-pipeline-registration-order-20260524"
      }
    },
    {
      "from": "0xsplits-deployment",
      "to": "isrc-code-assignment",
      "type": "uses_metadata_from",
      "properties": {
        "fact": "0xSplits contracts reference ISRC and ISWC in on-chain metadata to create provenance record. Uses the same codes generated by DistroKid and BMI. Does not replace publishing registration, complements it.",
        "_source": "zabal-dispatch-music-rights-pipeline-registration-order-20260524"
      }
    },
    {
      "from": "zao-music-collective-entity",
      "to": "bmi-publisher-registration",
      "type": "implements_via",
      "properties": {
        "fact": "ZAO Music DBA is registered as BMI publisher ($250 LLC one-time fee per doc 475). All collective releases are published through this entity.",
        "_source": "zabal-dispatch-music-rights-pipeline-registration-order-20260524"
      }
    },
    {
      "from": "zao-music-collective-entity",
      "to": "the-mlc-songwriter-registration",
      "type": "requires_artist_to_do",
      "properties": {
        "fact": "Per doc 475, each artist joining ZAO Music must register with The MLC individually (free). ZAO Music provides guidance and walks artists through process. This must happen BEFORE first release upload.",
        "_source": "zabal-dispatch-music-rights-pipeline-registration-order-20260524"
      }
    },
    {
      "from": "zao-music-collective-entity",
      "to": "distrokid-upload",
      "type": "uses_service",
      "properties": {
        "fact": "ZAO Music uses DistroKid Musician Plus ($44.99/yr) as the canonical distributor for all collective releases. Leave a Legacy budget ($29-49 per item) reserved to protect catalog if payment lapses.",
        "_source": "zabal-dispatch-music-rights-pipeline-registration-order-20260524"
      }
    },
    {
      "from": "zao-music-collective-entity",
      "to": "0xsplits-deployment",
      "type": "uses_for_payouts",
      "properties": {
        "fact": "0xSplits deployed on Base for every ZAO Music release. Default split: 80% Artist / 10% ZAO Music Treasury / 10% Curator (per doc 143 and 407). Revenue from NFT sales and smart contracts flows through splits to wallets.",
        "_source": "zabal-dispatch-music-rights-pipeline-registration-order-20260524"
      }
    },
    {
      "from": "bmi-songwriter-affiliation",
      "to": "zao-music-collective-entity",
      "type": "required_for",
      "properties": {
        "fact": "All ZAO Music artists must be individually affiliated with BMI as songwriters (free). This is prerequisite for collective to register compositions under its publisher entity.",
        "_source": "zabal-dispatch-music-rights-pipeline-registration-order-20260524"
      }
    },
    {
      "from": "zora-protocol-1155-mint-contract",
      "to": "zao-music-release-split",
      "type": "routes-revenue-to",
      "properties": {
        "fact": "Zora create1155 sets payoutRecipient to split address; all mint proceeds flow to split wallet instantly",
        "field": "payoutRecipient",
        "when": "before or during mint deployment",
        "order": "split created first, then passed to create1155, then NFT launches",
        "_source": "zabal-dispatch-music-rights-pipeline-splits-architecture-20260524"
      }
    },
    {
      "from": "zao-music-release-split",
      "to": "artist-address",
      "type": "distributes-to",
      "properties": {
        "percentage": 80,
        "payment_model": "pull (recipient calls withdraw)",
        "frequency": "instant on mint (funds in split), withdraw at recipient choice",
        "token": "ETH or USDC",
        "_source": "zabal-dispatch-music-rights-pipeline-splits-architecture-20260524"
      }
    },
    {
      "from": "zao-music-release-split",
      "to": "zao-treasury",
      "type": "distributes-to",
      "properties": {
        "percentage": 10,
        "payment_model": "pull",
        "frequency": "instant on mint",
        "token": "ETH or USDC",
        "_source": "zabal-dispatch-music-rights-pipeline-splits-architecture-20260524"
      }
    },
    {
      "from": "zao-music-release-split",
      "to": "curator-address",
      "type": "distributes-to",
      "properties": {
        "percentage": 10,
        "payment_model": "pull",
        "frequency": "instant on mint",
        "token": "ETH or USDC",
        "_source": "zabal-dispatch-music-rights-pipeline-splits-architecture-20260524"
      }
    },
    {
      "from": "0xsplits-protocol",
      "to": "split-wallet-contract",
      "type": "deploys-via",
      "properties": {
        "factory_function": "createSplit() or createSplitDeterministic()",
        "pattern": "EIP-1167 clone with custom receive() handler",
        "deterministic": true,
        "immutable_splits_use": "cloneDeterministic with splitHash",
        "_source": "zabal-dispatch-music-rights-pipeline-splits-architecture-20260524"
      }
    },
    {
      "from": "0xsplits-protocol",
      "to": "splits-warehouse",
      "type": "depends-on-in-v2",
      "properties": {
        "fact": "v2 uses Warehouse for token holding and batch transfers; v1 uses direct wallets",
        "_source": "zabal-dispatch-music-rights-pipeline-splits-architecture-20260524"
      }
    },
    {
      "from": "zao-music-entity",
      "to": "distrokid-musician-plus",
      "type": "uses-for-dsp-distribution",
      "properties": {
        "purpose": "off-chain: upload music to Spotify, Apple Music, etc.",
        "account_holder": "BetterCallZaal Strategies LLC",
        "royalties_flow": "streaming royalties -> DistroKid -> ZAO Treasury bank",
        "_source": "zabal-dispatch-music-rights-pipeline-splits-architecture-20260524"
      }
    },
    {
      "from": "zao-music-entity",
      "to": "bmi-publishing",
      "type": "registers-with-for-publishing",
      "properties": {
        "fact": "BMI collects performing rights (radio, streaming) and mechanicals (streaming mechanical) for registered songs",
        "percentage_kept": "15% overhead",
        "covers": "publishing admin + international reciprocal",
        "_source": "zabal-dispatch-music-rights-pipeline-splits-architecture-20260524"
      }
    },
    {
      "from": "zao-music-entity",
      "to": "the-mlc",
      "type": "dual-registers-with",
      "properties": {
        "fact": "Every ZAO Music artist registers directly with The MLC as redundant backup for US mechanicals (free)",
        "reason": "BMI may not catch all streaming sources; MLC is statutory collector",
        "_source": "zabal-dispatch-music-rights-pipeline-splits-architecture-20260524"
      }
    },
    {
      "from": "coinflow-contract-settlement",
      "to": "zao-music-release-split",
      "type": "routes-fiat-revenue-to",
      "properties": {
        "flow": "credit card payment -> USDC on Base -> contract mint -> USDC sent to split address -> split distributes",
        "collector_experience": "zero-crypto required, receives NFT to auto-generated wallet",
        "split_setting": "USDC token address in split config",
        "_source": "zabal-dispatch-music-rights-pipeline-splits-architecture-20260524"
      }
    },
    {
      "from": "split-wallet-contract",
      "to": "splits-warehouse",
      "type": "deposits-to-in-pull-model",
      "properties": {
        "fact": "distribute() call moves funds from split to warehouse; recipients then withdraw from warehouse",
        "advantage": "enables batching multiple splits in single transaction",
        "immutable": "hash of recipients/percentages verified at distribution time",
        "_source": "zabal-dispatch-music-rights-pipeline-splits-architecture-20260524"
      }
    },
    {
      "from": "0xsplits-sdk",
      "to": "0xsplits-protocol",
      "type": "abstracts-interactions",
      "properties": {
        "functions": [
          "createSplit",
          "predictImmutableSplitAddress",
          "distributeETH",
          "getSplitBalance",
          "withdraw"
        ],
        "chain_agnostic": true,
        "_source": "zabal-dispatch-music-rights-pipeline-splits-architecture-20260524"
      }
    },
    {
      "from": "zao-music-entity",
      "to": "zao-music-release-split",
      "type": "creates-per-release",
      "properties": {
        "fact": "Each music release gets its own immutable split on Base",
        "naming": "trackId or IPFS hash for determinism",
        "deployment_cost": "~$0.50 gas on Base",
        "_source": "zabal-dispatch-music-rights-pipeline-splits-architecture-20260524"
      }
    },
    {
      "from": "split-wallet-contract",
      "to": "ardrive",
      "type": "stores-metadata-via",
      "properties": {
        "fact": "0xSplits split address can include IPFS or Arweave URI reference for release metadata",
        "storage": "ArDrive Turbo for permanent music file storage",
        "_source": "zabal-dispatch-music-rights-pipeline-splits-architecture-20260524"
      }
    },
    {
      "from": "zao-music-release-split",
      "to": "base-chain",
      "type": "deployed-on",
      "properties": {
        "fact": "All split contracts live on Base; same chain as ZOUNZ governance and Zora mints",
        "gas_cost": "$0.50-2 per transaction on Base vs $30-200 on Ethereum",
        "_source": "zabal-dispatch-music-rights-pipeline-splits-architecture-20260524"
      }
    },
    {
      "from": "bmi-publishing",
      "to": "zao-treasury",
      "type": "pays-publishing-royalties-to",
      "properties": {
        "frequency": "quarterly",
        "sources": [
          "performing-rights",
          "mechanical-royalties-international"
        ],
        "payment_method": "ACH to BetterCallZaal Strategies bank account",
        "_source": "zabal-dispatch-music-rights-pipeline-splits-architecture-20260524"
      }
    },
    {
      "from": "songjam",
      "to": "twitter-x-api",
      "type": "HISTORICALLY_SOURCES_FROM",
      "properties": {
        "mechanism": "Tweet engagement scraping",
        "endDate": "Q2 2026",
        "costReason": "X API pricing increase",
        "status": "Deprecated",
        "_source": "zabal-dispatch-songjam-x-empire-new-empire-flow-20260524"
      }
    },
    {
      "from": "songjam",
      "to": "songjam-music-engagement-api",
      "type": "NOW_SOURCES_FROM",
      "properties": {
        "mechanism": "Native SongJam platform metrics (plays, reposts, comments)",
        "startDate": "Q2 2026 (target)",
        "status": "In planning",
        "_source": "zabal-dispatch-songjam-x-empire-new-empire-flow-20260524"
      }
    },
    {
      "from": "songjam-music-engagement-api",
      "to": "empire-builder-apileaderboards",
      "type": "FEEDS_INTO",
      "properties": {
        "endpoint": "POST /api/leaderboards/update",
        "dataShape": "Array of {wallet, score}",
        "authentication": "API key (permissioned)",
        "refreshFrequency": "Real-time or batch hourly",
        "_source": "zabal-dispatch-songjam-x-empire-new-empire-flow-20260524"
      }
    },
    {
      "from": "empire-builder-apileaderboards",
      "to": "songjam-leaderboard-season-1",
      "type": "RENDERS_AS",
      "properties": {
        "slot": "Leaderboard slot 4 of 7 in ZABAL Empire",
        "publicAccess": true,
        "distributionCycle": "Weekly or bi-weekly",
        "_source": "zabal-dispatch-songjam-x-empire-new-empire-flow-20260524"
      }
    },
    {
      "from": "empire-builder-apileaderboards",
      "to": "songjam-leaderboard-season-2-episode-1",
      "type": "RENDERS_AS",
      "properties": {
        "slot": "Leaderboard slot 5 of 7 in ZABAL Empire",
        "publicAccess": true,
        "_source": "zabal-dispatch-songjam-x-empire-new-empire-flow-20260524"
      }
    },
    {
      "from": "empire-builder-apileaderboards",
      "to": "songjam-leaderboard-season-2-episode-2",
      "type": "RENDERS_AS",
      "properties": {
        "slot": "Leaderboard slot 6 of 7 in ZABAL Empire",
        "publicAccess": true,
        "_source": "zabal-dispatch-songjam-x-empire-new-empire-flow-20260524"
      }
    },
    {
      "from": "songjam-leaderboard-season-1",
      "to": "zabal-empire",
      "type": "LIVES_IN",
      "properties": {
        "slotIndex": 4,
        "visibility": "Public API + web UI",
        "rankedSpots": 250,
        "_source": "zabal-dispatch-songjam-x-empire-new-empire-flow-20260524"
      }
    },
    {
      "from": "adam-songjam-founder",
      "to": "songjam",
      "type": "OWNS",
      "properties": {
        "role": "Founder",
        "_source": "zabal-dispatch-songjam-x-empire-new-empire-flow-20260524"
      }
    },
    {
      "from": "adam-songjam-founder",
      "to": "empire-builder-apileaderboards",
      "type": "OWNS_API_KEY_FOR",
      "properties": {
        "permissions": "Write to SongJam leaderboard slots",
        "issuer": "Jordan (Empire Builder)",
        "_source": "zabal-dispatch-songjam-x-empire-new-empire-flow-20260524"
      }
    },
    {
      "from": "songjam-builder-airdrop-flow",
      "to": "songjam-leaderboard-season-1",
      "type": "CONSUMES",
      "properties": {
        "outputShape": "CSV of top 250 wallets by engagement score",
        "useCase": "Airdrop list for builder's Clanker token launch",
        "_source": "zabal-dispatch-songjam-x-empire-new-empire-flow-20260524"
      }
    },
    {
      "from": "songjam-builder-airdrop-flow",
      "to": "zabal-empire",
      "type": "UNLOCKS_ASCENSION_INTO",
      "properties": {
        "requirement": "Builder launches Clanker token in August Finals",
        "result": "New Ascended Empire with builder's own leaderboards",
        "_source": "zabal-dispatch-songjam-x-empire-new-empire-flow-20260524"
      }
    },
    {
      "from": "sang-token",
      "to": "songjam",
      "type": "IS_NATIVE_TOKEN_FOR",
      "properties": {
        "description": "SongJam's ERC-20 token on Base",
        "_source": "zabal-dispatch-songjam-x-empire-new-empire-flow-20260524"
      }
    },
    {
      "from": "sang-token",
      "to": "zabal-empire",
      "type": "STACKS_ON",
      "properties": {
        "boosterType": "ERC20",
        "multiplier": "Unknown (likely 1-5x)",
        "rationale": "Cross-protocol signal",
        "_source": "zabal-dispatch-songjam-x-empire-new-empire-flow-20260524"
      }
    },
    {
      "from": "songjam-old-x-scraper",
      "to": "x-api-v2",
      "type": "depends_on",
      "properties": {
        "fact": "scraper made continuous read/write calls to X API v2, incurring per-request costs",
        "_source": "zabal-dispatch-songjam-x-empire-old-x-scraper-20260524"
      }
    },
    {
      "from": "x-api-v2",
      "to": "songjam-old-x-scraper",
      "type": "caused_deprecation",
      "properties": {
        "fact": "X API pricing model shift to paid-only with no free tier made continuous scraping unaffordable",
        "_source": "zabal-dispatch-songjam-x-empire-old-x-scraper-20260524"
      }
    },
    {
      "from": "adam",
      "to": "songjam-old-x-scraper",
      "type": "maintains",
      "properties": {
        "fact": "Adam bore the operational and financial burden of keeping X scraper running until 2026",
        "_source": "zabal-dispatch-songjam-x-empire-old-x-scraper-20260524"
      }
    },
    {
      "from": "adam",
      "to": "empire-builder",
      "type": "migrates_to",
      "properties": {
        "fact": "April-May 2026: Adam decides to migrate SongJam leaderboard from X scraper to Empire Builder API",
        "decision_date": "2026-05-16",
        "_source": "zabal-dispatch-songjam-x-empire-old-x-scraper-20260524"
      }
    },
    {
      "from": "songjam-music-engagement-api",
      "to": "empire-builder",
      "type": "feeds",
      "properties": {
        "fact": "replacement migration: use SongJam's native music engagement data as source instead of X scrape",
        "_source": "zabal-dispatch-songjam-x-empire-old-x-scraper-20260524"
      }
    },
    {
      "from": "zabal-games",
      "to": "empire-builder",
      "type": "depends_on",
      "properties": {
        "fact": "all July Phase 1 submissions must create tokenless Empire as their build home; SongJam leaderboard migration required by June 1",
        "_source": "zabal-dispatch-songjam-x-empire-old-x-scraper-20260524"
      }
    },
    {
      "from": "songjam",
      "to": "zabal-games",
      "type": "participates_in",
      "properties": {
        "fact": "SongJam leaderboard becomes ZABAL Gamez participant surface via Empire Builder integration",
        "_source": "zabal-dispatch-songjam-x-empire-old-x-scraper-20260524"
      }
    },
    {
      "from": "adam",
      "to": "zabal-games",
      "type": "committed_to",
      "properties": {
        "fact": "committed to complete Empire Builder leaderboard migration before ZABAL Gamez June 1 launch",
        "_source": "zabal-dispatch-songjam-x-empire-old-x-scraper-20260524"
      }
    },
    {
      "from": "neynar",
      "to": "empire-builder",
      "type": "alternative_to",
      "properties": {
        "fact": "Farcaster-native data source (Neynar free tier) can replace X API for community engagement metrics",
        "_source": "zabal-dispatch-songjam-x-empire-old-x-scraper-20260524"
      }
    },
    {
      "from": "songjam-old-x-scraper",
      "to": "technical-debt",
      "type": "accumulated",
      "properties": {
        "fact": "scraper became unmaintainable due to API cost escalation + Adam's focus shift to voice spaces",
        "_source": "zabal-dispatch-songjam-x-empire-old-x-scraper-20260524"
      }
    },
    {
      "from": "sang-token",
      "to": "staking-multiplier-formula",
      "type": "powers",
      "properties": {
        "fact": "Staking SANG in a wallet drives the staking multiplier (2.1x-3.0x) in ZABAL Empire scoring",
        "_source": "zabal-dispatch-songjam-x-empire-sang-token-utility-20260524"
      }
    },
    {
      "from": "staking-multiplier-formula",
      "to": "total-multiplier-stack",
      "type": "components",
      "properties": {
        "fact": "Staking multiplier is the first multiplier in the ZABAL Empire total points formula",
        "_source": "zabal-dispatch-songjam-x-empire-sang-token-utility-20260524"
      }
    },
    {
      "from": "empire-builder-booster-system",
      "to": "total-multiplier-stack",
      "type": "components",
      "properties": {
        "fact": "Empire Builder booster multiplier (4.0x-8.6x) compounds with staking multiplier to form total effect",
        "_source": "zabal-dispatch-songjam-x-empire-sang-token-utility-20260524"
      }
    },
    {
      "from": "songjam",
      "to": "sang-token",
      "type": "issues",
      "properties": {
        "fact": "SongJam created and issues SANG token to speakers earning voice participation points",
        "_source": "zabal-dispatch-songjam-x-empire-sang-token-utility-20260524"
      }
    },
    {
      "from": "voice-participation-points-system",
      "to": "sang-token",
      "type": "rewards",
      "properties": {
        "fact": "Per-second voice participation in SongJam rooms earns SANG tokens to active speakers",
        "_source": "zabal-dispatch-songjam-x-empire-sang-token-utility-20260524"
      }
    },
    {
      "from": "sang-token",
      "to": "zabal-empire",
      "type": "boosts",
      "properties": {
        "fact": "SANG staking multiplier directly boosts scores in the ZABAL Empire leaderboard on Base",
        "_source": "zabal-dispatch-songjam-x-empire-sang-token-utility-20260524"
      }
    },
    {
      "from": "zabal-empire",
      "to": "zao-ecosystem",
      "type": "serves",
      "properties": {
        "fact": "ZABAL Empire is the token-economy infrastructure for the ZAO ecosystem",
        "_source": "zabal-dispatch-songjam-x-empire-sang-token-utility-20260524"
      }
    },
    {
      "from": "songjam",
      "to": "zao-ecosystem",
      "type": "integrates_with",
      "properties": {
        "fact": "SongJam speakers (SANG earners) often crossover into ZAO community and boost ZABAL scores via SANG stakes",
        "_source": "zabal-dispatch-songjam-x-empire-sang-token-utility-20260524"
      }
    },
    {
      "from": "sang-token",
      "to": "solana",
      "type": "originated_on",
      "properties": {
        "fact": "SANG was originally issued on Solana, now bridged to Base for ZABAL Empire integration",
        "_source": "zabal-dispatch-songjam-x-empire-sang-token-utility-20260524"
      }
    },
    {
      "from": "staking-multiplier-formula",
      "to": "250000-sang",
      "type": "references",
      "properties": {
        "fact": "250k SANG is the minimum stake threshold in the formula; the inflection point for maximum 3.0x multiplier",
        "_source": "zabal-dispatch-songjam-x-empire-sang-token-utility-20260524"
      }
    },
    {
      "from": "empire-builder-booster-system",
      "to": "zabal-empire",
      "type": "implements",
      "properties": {
        "fact": "Empire Builder v3 houses the booster stacking system that compounds with SANG staking multiplier",
        "_source": "zabal-dispatch-songjam-x-empire-sang-token-utility-20260524"
      }
    },
    {
      "from": "empire-builder",
      "to": "nft-booster",
      "type": "supports",
      "properties": {
        "fact": "Empire Builder API can configure NFT contract holdings as booster type",
        "_source": "zabal-dispatch-talent-vs-quotient-empire-integration-20260524"
      }
    },
    {
      "from": "empire-builder",
      "to": "erc20-booster",
      "type": "supports",
      "properties": {
        "fact": "Empire Builder API can configure ERC20 token balance checks as booster type",
        "_source": "zabal-dispatch-talent-vs-quotient-empire-integration-20260524"
      }
    },
    {
      "from": "empire-builder",
      "to": "quotient-booster-2",
      "type": "supports",
      "properties": {
        "fact": "QUOTIENT is native booster type, uses zero address (0x0000...) for contractAddress field, requires minAmount reputation threshold",
        "_source": "zabal-dispatch-talent-vs-quotient-empire-integration-20260524"
      }
    },
    {
      "from": "quotient-2",
      "to": "farcaster",
      "type": "built_on",
      "properties": {
        "fact": "QUOTIENT is Farcaster reputation infrastructure measuring engagement quality and momentum with pagerank-style scoring",
        "_source": "zabal-dispatch-talent-vs-quotient-empire-integration-20260524"
      }
    },
    {
      "from": "talent-protocol",
      "to": "empire-builder",
      "type": "can_integrate_with",
      "properties": {
        "fact": "Talent Protocol Builder Score available via API integration, not native booster type; apps use external API calls for reputation-based gating",
        "_source": "zabal-dispatch-talent-vs-quotient-empire-integration-20260524"
      }
    },
    {
      "from": "jordan-oram",
      "to": "empire-builder",
      "type": "founded",
      "properties": {
        "fact": "Co-founder of Empire Builder, ecosystem architect specializing in onchain token systems and community design",
        "_source": "zabal-dispatch-talent-vs-quotient-empire-integration-20260524"
      }
    },
    {
      "from": "quotient-booster-2",
      "to": "leaderboard-points",
      "type": "multiplies",
      "properties": {
        "fact": "When user meets reputation threshold, multiplier compounds with other active boosters additively (e.g. 2x + 4x = 6x total)",
        "_source": "zabal-dispatch-talent-vs-quotient-empire-integration-20260524"
      }
    },
    {
      "from": "talent-protocol",
      "to": "builder-score",
      "type": "calculates",
      "properties": {
        "fact": "Builder Score aggregates 11M+ accounts across blockchains, GitHub, Twitter; 20pt Identity + 40pt Activity + unlimited Skills = total score",
        "_source": "zabal-dispatch-talent-vs-quotient-empire-integration-20260524"
      }
    },
    {
      "from": "quotient-2",
      "to": "pagerank-style-scoring",
      "type": "uses_algorithm",
      "properties": {
        "fact": "Scores engagement quality and momentum, ignores raw metrics; similar to OpenRank reputation infrastructure on Farcaster",
        "_source": "zabal-dispatch-talent-vs-quotient-empire-integration-20260524"
      }
    },
    {
      "from": "etherscan",
      "to": "talent-protocol",
      "type": "integrates",
      "properties": {
        "fact": "Uses Builder Score to curate and personalize top talent visibility",
        "_source": "zabal-dispatch-talent-vs-quotient-empire-integration-20260524"
      }
    },
    {
      "from": "amphib0ly",
      "to": "quotient-2",
      "type": "founded",
      "properties": {
        "fact": "Founder of QUOTIENT reputation infrastructure; incubated by Skycastle Tokens; upcoming TGE on Base",
        "_source": "zabal-dispatch-talent-vs-quotient-empire-integration-20260524"
      }
    },
    {
      "from": "talent-protocol",
      "to": "builder-score",
      "type": "computes",
      "properties": {
        "fact": "Builder Score aggregates credentials into reputation metric",
        "_source": "zabal-dispatch-talent-vs-quotient-scoring-methodology-20260524"
      }
    },
    {
      "from": "builder-score",
      "to": "identity-credentials",
      "type": "includes",
      "properties": {
        "fact": "Identity Credentials contribute max 20 points to Builder Score",
        "_source": "zabal-dispatch-talent-vs-quotient-scoring-methodology-20260524"
      }
    },
    {
      "from": "builder-score",
      "to": "activity-credentials",
      "type": "includes",
      "properties": {
        "fact": "Activity Credentials contribute max 40 points to Builder Score",
        "_source": "zabal-dispatch-talent-vs-quotient-scoring-methodology-20260524"
      }
    },
    {
      "from": "builder-score",
      "to": "skills-credentials",
      "type": "includes",
      "properties": {
        "fact": "Skills Credentials uncapped, all count toward Builder Score",
        "_source": "zabal-dispatch-talent-vs-quotient-scoring-methodology-20260524"
      }
    },
    {
      "from": "activity-credentials",
      "to": "github-commits",
      "type": "measures",
      "properties": {
        "fact": "GitHub commit activity tracked as Activity credential signal",
        "_source": "zabal-dispatch-talent-vs-quotient-scoring-methodology-20260524"
      }
    },
    {
      "from": "activity-credentials",
      "to": "farcaster-integration",
      "type": "measures",
      "properties": {
        "fact": "Farcaster posts and interactions tracked; Power Badges (FID < 20k) bonus",
        "_source": "zabal-dispatch-talent-vs-quotient-scoring-methodology-20260524"
      }
    },
    {
      "from": "quotient",
      "to": "quotient-scoring-engine",
      "type": "implements",
      "properties": {
        "fact": "Quotient uses PageRank-style algorithm for reputation scoring",
        "_source": "zabal-dispatch-talent-vs-quotient-scoring-methodology-20260524"
      }
    },
    {
      "from": "quotient-scoring-engine",
      "to": "farcaster-integration",
      "type": "analyzes",
      "properties": {
        "fact": "PageRank algorithm applied to Farcaster social graph to measure engagement quality and momentum",
        "_source": "zabal-dispatch-talent-vs-quotient-scoring-methodology-20260524"
      }
    },
    {
      "from": "talent-protocol",
      "to": "zabal",
      "type": "reputation_feed_for",
      "properties": {
        "fact": "Builder Score available via API for integration with Empire Builder projects",
        "_source": "zabal-dispatch-talent-vs-quotient-scoring-methodology-20260524"
      }
    },
    {
      "from": "quotient",
      "to": "farcaster",
      "type": "powers",
      "properties": {
        "fact": "Quotient provides allowlist and leaderboard infrastructure for Farcaster apps",
        "_source": "zabal-dispatch-talent-vs-quotient-scoring-methodology-20260524"
      }
    },
    {
      "from": "the-zao",
      "to": "quotient",
      "type": "aligns_with",
      "properties": {
        "fact": "ZAO is Farcaster-native; Quotient is Farcaster-native reputation, exact medium match",
        "_source": "zabal-dispatch-talent-vs-quotient-zao-fit-20260524"
      }
    },
    {
      "from": "quotient",
      "to": "zabal-empire",
      "type": "powers_leaderboard_booster_for",
      "properties": {
        "fact": "Quotient booster type native to Empire Builder V3, already configured for ZABAL leaderboard via zero-address contract field",
        "_source": "zabal-dispatch-talent-vs-quotient-zao-fit-20260524"
      }
    },
    {
      "from": "respect",
      "to": "the-zao",
      "type": "governs",
      "properties": {
        "fact": "ZAO's internal peer-validated reputation system (OG Respect ERC-20 + ZOR ERC-1155), gates governance and contributor ranking",
        "_source": "zabal-dispatch-talent-vs-quotient-zao-fit-20260524"
      }
    },
    {
      "from": "talent-protocol",
      "to": "the-zao",
      "type": "misaligns_with",
      "properties": {
        "fact": "Talent Protocol over-weights GitHub (40/100 Activity pts) and onchain activity (20/100 Identity pts); secondary signals for music-first community",
        "_source": "zabal-dispatch-talent-vs-quotient-zao-fit-20260524"
      }
    },
    {
      "from": "quotient",
      "to": "respect",
      "type": "compounds_with",
      "properties": {
        "fact": "If ZABAL Empire weights both Quotient booster + Respect leaderboard, multiplies Farcaster-aligned signals (engagement quality + peer consensus)",
        "_source": "zabal-dispatch-talent-vs-quotient-zao-fit-20260524"
      }
    },
    {
      "from": "zabal-games-season-1",
      "to": "respect",
      "type": "uses_for_voter_eligibility",
      "properties": {
        "fact": "Finals voting pre-funds baseline positions for Respect-holders in WaveWarZ-Base markets, anchoring governance to peer consensus",
        "_source": "zabal-dispatch-talent-vs-quotient-zao-fit-20260524"
      }
    },
    {
      "from": "talent-protocol",
      "to": "zabal-games-season-1",
      "type": "optional_integration_for",
      "properties": {
        "fact": "Use Talent Protocol Builder Score only for recruitment/visibility (external builder discovery), NOT for contributor ranking within ZAO",
        "_source": "zabal-dispatch-talent-vs-quotient-zao-fit-20260524"
      }
    },
    {
      "from": "quotient",
      "to": "zabal-games-season-1",
      "type": "recommended_for_booster_gating",
      "properties": {
        "fact": "Quotient Empire booster aligns with ZAO's Farcaster-native culture; layers with Respect as double-signal for inclusive, consensus-driven ranking",
        "_source": "zabal-dispatch-talent-vs-quotient-zao-fit-20260524"
      }
    },
    {
      "from": "tip-token",
      "to": "zabal-token-2",
      "type": "potential_ecosystem_relation",
      "properties": {
        "fact": "If $TIP deploys, it would operate alongside ZABAL as utility token (tipping) vs governance (ZABAL illiquid)",
        "source": "ZAO whitepaper governance design, Spaces fee split architecture",
        "_source": "zabal-dispatch-tip-zols-architecture-tip-token-mechanics-20260524"
      }
    },
    {
      "from": "zols-ledger",
      "to": "songjam-leaderboard",
      "type": "recognition_mechanism",
      "properties": {
        "fact": "ZOLs awarded monthly to top 3 leaderboard participants; 12 total awarded Q1 2026",
        "source": "research/events/241-q1-2026-big-wins/README.md, ZAO Brand Kit",
        "_source": "zabal-dispatch-tip-zols-architecture-tip-token-mechanics-20260524"
      }
    },
    {
      "from": "zabal-empire",
      "to": "zols-ledger",
      "type": "token_distribution_for",
      "properties": {
        "fact": "ZABAL Empire distributes ZABAL rewards to top SongJam performers who earn ZOL recognition status",
        "source": "doc 361 Empire Builder deep dive, doc 626 Empire airdrop",
        "_source": "zabal-dispatch-tip-zols-architecture-tip-token-mechanics-20260524"
      }
    },
    {
      "from": "zoe-bot",
      "to": "tip-token",
      "type": "messaging_collision",
      "properties": {
        "fact": "ZOE sends [ZOE TIP] messages (Task Insight Prompts) hourly; creates terminology confusion if $TIP token launches",
        "source": "bot/src/zoe/scheduler.ts, bot/src/zoe/nudges.ts",
        "confusion_risk": "CRITICAL - ZOE TIP predates token, but users may conflate 'tip' messages with 'tip' token",
        "_source": "zabal-dispatch-tip-zols-architecture-tip-token-mechanics-20260524"
      }
    },
    {
      "from": "sang-token",
      "to": "zabal-empire",
      "type": "multiplier_requires",
      "properties": {
        "fact": "Empire stake multiplier requires 250k SANG minimum stake; ZABAL rewards scale with SANG holdings",
        "source": "doc 626, ZABAL Empire profile, Empire Builder staking contracts",
        "_source": "zabal-dispatch-tip-zols-architecture-tip-token-mechanics-20260524"
      }
    },
    {
      "from": "zao-treasury",
      "to": "zabal-token-2",
      "type": "buyback_accumulation",
      "properties": {
        "fact": "Treasury executes weekly $50-100 ZABAL buyback via 1inch on Base; stores in multisig cold storage",
        "source": "doc 258 ZABAL/SANG buyback, project decisions tracked in research",
        "_source": "zabal-dispatch-tip-zols-architecture-tip-token-mechanics-20260524"
      }
    },
    {
      "from": "fishbowlz-token",
      "to": "zao-treasury",
      "type": "fee_routing",
      "properties": {
        "fact": "FISHBOWLZ room tips split: 70% speaker, 20% to ZABAL buyback treasury, 10% protocol",
        "source": "doc 298 FISHBOWLZ tokenization, PaymentSplitter contract design",
        "_source": "zabal-dispatch-tip-zols-architecture-tip-token-mechanics-20260524"
      }
    },
    {
      "from": "zao-respect-token",
      "to": "tip-token",
      "type": "separate_token_category",
      "properties": {
        "fact": "Respect is governance (soulbound), TIP would be utility (tipping). Both are conceptual/planned systems",
        "source": "ZAO whitepaper, doc 289 ZOE dashboard design",
        "_source": "zabal-dispatch-tip-zols-architecture-tip-token-mechanics-20260524"
      }
    },
    {
      "from": "zols-ledger",
      "to": "zabal-token-2",
      "type": "potential_nft_companion",
      "properties": {
        "fact": "ZOLs mentioned with 'NFT perks' but on-chain representation UNKNOWN; could mint ZOL holders as role NFTs",
        "source": "research/events/241, research/business/695",
        "_source": "zabal-dispatch-tip-zols-architecture-tip-token-mechanics-20260524"
      }
    },
    {
      "from": "zoe-bot",
      "to": "zao-treasury",
      "type": "autonomous_executor",
      "properties": {
        "fact": "WALLET agent (part of ZOE squad) executes ZABAL buybacks on weekly cadence via API calls",
        "source": "doc 258, doc 289 ZOE dashboard, bot/src/zoe/scheduler.ts Phase 4 planning",
        "_source": "zabal-dispatch-tip-zols-architecture-tip-token-mechanics-20260524"
      }
    },
    {
      "from": "respect-token",
      "to": "zao-fractal-governance",
      "type": "POWERS",
      "properties": {
        "fact": "Respect balance at block time determines voting weight in OREC proposals. 2/3 YES > 2*NO rule prevents 1/3 minority veto and majority tyranny simultaneously.",
        "_source": "zabal-dispatch-tip-zols-architecture-tip-vs-zol-vs-zabal-20260524"
      }
    },
    {
      "from": "respect-game",
      "to": "respect-token",
      "type": "MINTS",
      "properties": {
        "fact": "Weekly consensus ranking in 3-6 person breakout groups distributes Fibonacci tokens (110/68/42/26/16/10) to all ranked members. Execution automatic via smart contract after voting window closes.",
        "_source": "zabal-dispatch-tip-zols-architecture-tip-vs-zol-vs-zabal-20260524"
      }
    },
    {
      "from": "zabal-token",
      "to": "empire-builder-v3",
      "type": "REGISTERS_ON",
      "properties": {
        "fact": "ZABAL holds leaderboards on Empire (Holders, Farcaster-Only, Voting Miniapp, etc.). Token holdings feed leaderboard score; booster stacks multiply final rank.",
        "leaderboardCount": 7,
        "boosterCount": 5,
        "_source": "zabal-dispatch-tip-zols-architecture-tip-vs-zol-vs-zabal-20260524"
      }
    },
    {
      "from": "zabal-token",
      "to": "zabal-games-season-1",
      "type": "INCENTIVIZES",
      "properties": {
        "fact": "Monthly raffle + weighted distributions (10 random + 50-100 by score) send $ZABAL to Empire participants. ~$12-15 USD per drop drives participation.",
        "_source": "zabal-dispatch-tip-zols-architecture-tip-vs-zol-vs-zabal-20260524"
      }
    },
    {
      "from": "zols-contribution-ledger",
      "to": "zabal-games-season-1",
      "type": "DOCUMENTS",
      "properties": {
        "fact": "Each finalist's contribution history (work submissions, mentoring, docs) should be tracked in ZOLs ledger. CSV export at end of season maps contributors to airdrop recipients.",
        "_source": "zabal-dispatch-tip-zols-architecture-tip-vs-zol-vs-zabal-20260524"
      }
    },
    {
      "from": "zabal-games-season-1",
      "to": "clanker-airdrop-pattern",
      "type": "UNLOCKS",
      "properties": {
        "fact": "Phase 2 finalists launch personal Clanker token, export leaderboard CSV, airdrop token to all contributors. Creates Ascended Empire with 40 boosters.",
        "_source": "zabal-dispatch-tip-zols-architecture-tip-vs-zol-vs-zabal-20260524"
      }
    },
    {
      "from": "respect-token",
      "to": "zabal-token",
      "type": "DISTINCT_FROM",
      "properties": {
        "fact": "Respect is soulbound, decays 2%/week, earned via consensus. $ZABAL is tradable, minted via raffle/weighted, stacks on leaderboards. No direct conversion between them.",
        "risk": "Contributor may earn high Respect but receive zero $ZABAL (low leaderboard rank), causing perceived reward mismatch.",
        "_source": "zabal-dispatch-tip-zols-architecture-tip-vs-zol-vs-zabal-20260524"
      }
    },
    {
      "from": "zols-contribution-ledger",
      "to": "respect-token",
      "type": "INFORMS",
      "properties": {
        "fact": "ZOLs entries (Doc 718b, Mentored 3 artists) provide evidence for Respect Game consensus ranking. Group references ZOL registry when deciding peer rankings.",
        "decision_rule": "UNKNOWN - unclear if ZOL entry alone guarantees Respect consideration or if peers must independently verify",
        "_source": "zabal-dispatch-tip-zols-architecture-tip-vs-zol-vs-zabal-20260524"
      }
    },
    {
      "from": "zols-contribution-ledger",
      "to": "zabal-token",
      "type": "ELIGIBLE_FOR_AIRDROP",
      "properties": {
        "fact": "ZABAL Gamez finalists export ZOL-documented contributors to CSV, airdrop personal Clanker tokens. ZOL count may influence airdrop share (UNKNOWN).",
        "pending_decision": "Should ZOL count = airdrop amount (e.g., 5 ZOLs = 5M tokens)? Or binary inclusion only?",
        "_source": "zabal-dispatch-tip-zols-architecture-tip-vs-zol-vs-zabal-20260524"
      }
    },
    {
      "from": "respect-game",
      "to": "zols-contribution-ledger",
      "type": "TRIGGERS_ENTRY",
      "properties": {
        "fact": "When contributor reaches consensus rank 1-3 in Respect Game, auto-create ZOL entry documenting the achievement (e.g., 'Rank 1 in Respect Game session 92, earning 110 Respect tokens').",
        "implementation": "UNKNOWN (not yet automated)",
        "_source": "zabal-dispatch-tip-zols-architecture-tip-vs-zol-vs-zabal-20260524"
      }
    },
    {
      "from": "contributor-ledger-entry-example",
      "to": "zols-contribution-ledger",
      "type": "IS_INSTANCE_OF",
      "properties": {
        "fact": "civilmonkey's Doc 718b entry exemplifies ZOL structure: contributor + work + type + status. Status pending means payout (Respect + $ZABAL eligibility) not yet finalized.",
        "_source": "zabal-dispatch-tip-zols-architecture-tip-vs-zol-vs-zabal-20260524"
      }
    },
    {
      "from": "zols",
      "to": "zaostock-2026-event",
      "type": "earned_at",
      "properties": {
        "fact": "Volunteers earn 1 ZOL per hour worked at ZAOstock; totals logged in /stock/team/volunteer/[id]/profile",
        "accrual_date": "Post-event (Oct 4-7 during thank-you phase)",
        "formula": "hours_volunteered * 1 = zols_earned",
        "_source": "zabal-dispatch-tip-zols-architecture-zols-credits-system-20260524"
      }
    },
    {
      "from": "zols",
      "to": "zabal-games-event",
      "type": "earned_at",
      "properties": {
        "fact": "Mentors, volunteers, and team members earn ZOLs for ZABAL Gamez event work (June prep, July judge, August Finals support)",
        "status": "Mechanism planned but not yet documented (Doc 701 Part 4: 'mentor incentive is Hats Protocol role NFT + status, no cash or ZOLs specified for mentors')",
        "note": "Different from Respect earned by builders who submit (Respect is automatic for all July submissions)",
        "_source": "zabal-dispatch-tip-zols-architecture-zols-credits-system-20260524"
      }
    },
    {
      "from": "zols",
      "to": "songjam-leaderboard",
      "type": "awarded_via",
      "properties": {
        "fact": "Top 3 monthly SongJam performers get ZOL status as ZABAL Opinion Leaders",
        "monthly_recognition": "Doc 241: 12 ZOLs awarded in Q1 2026 (Jan-Mar, 3 winners per month)",
        "winners_q1": [
          "GodFactor",
          "wildermax",
          "Preshzinobabe",
          "tabbytheblack",
          "ohnahji",
          "akele",
          "jason alder",
          "collinsxweb3",
          "metamu",
          "candytoybox"
        ],
        "repeat_winners": [
          "ohnahji (2x)",
          "candytoybox",
          "jason alder (2x)"
        ],
        "_source": "zabal-dispatch-tip-zols-architecture-zols-credits-system-20260524"
      }
    },
    {
      "from": "zols",
      "to": "zaondz-nft",
      "type": "unlocks_permission",
      "properties": {
        "fact": "Monthly ZOL winners earn ability to create art for ZAOndz NFTs; goal is to merge ZOL program with ZAOndz governance",
        "mechanism": "NFT perk + co-creation rights; braided with ZAOndz 20% treasury governance",
        "status": "Active (Q1 2026) - some ZOL winners appearing in ZAOndz auction participation",
        "_source": "zabal-dispatch-tip-zols-architecture-zols-credits-system-20260524"
      }
    },
    {
      "from": "zols",
      "to": "respect",
      "type": "parallel_reputation_to",
      "properties": {
        "fact": "Both are soulbound peer-validated reputation; ZOLs are event-scoped, Respect is ongoing governance-scoped",
        "overlap": "ZAOstock volunteers can earn both ZOLs (for hours) and Respect (if they propose a project or lead a session)",
        "usage_parallel": "Both signal peer-validated standing in ZAO ecosystem; Respect heavier weight in voting",
        "_source": "zabal-dispatch-tip-zols-architecture-zols-credits-system-20260524"
      }
    },
    {
      "from": "respect",
      "to": "zabal-games-event",
      "type": "voting_power_for",
      "properties": {
        "fact": "August Finals voted on by Respect-earning members, 1-person-1-vote (not token-weighted)",
        "voter_eligibility": "Decision #8 (Doc 701): 'Respect threshold N for voter eligibility still undecided'",
        "voting_snapshot": "Taken at T+0 (Finals start)",
        "vote_count": "Assumed 188 ZAO members on Base (as of May 2026), but actual finalists judges count TBD",
        "_source": "zabal-dispatch-tip-zols-architecture-zols-credits-system-20260524"
      }
    },
    {
      "from": "respect",
      "to": "zao-fund-for-emerging-culture",
      "type": "voting_power_for",
      "properties": {
        "fact": "ZAO Fund (Artizen Season 6) curated by ZAO community members using Respect votes",
        "mechanism": "One person one vote; Respect balance determines voting weight or eligibility (UNKNOWN which)",
        "outcome": "33 submissions, 20 curated projects",
        "_source": "zabal-dispatch-tip-zols-architecture-zols-credits-system-20260524"
      }
    },
    {
      "from": "zabal-token-2",
      "to": "empire-builder",
      "type": "distributed_via",
      "properties": {
        "fact": "Empire Builder is primary ZABAL distribution layer; manual v1 (top 50 RaidSharks raiders weekly)",
        "q1_distributed": "$168 USD",
        "distribution_method": "Manual UI - Zaal exports RaidSharks CSV, selects top 50, distributes weekly",
        "future_method": "V3 API distribute endpoint - automated batch distribution via BANKER agent",
        "_source": "zabal-dispatch-tip-zols-architecture-zols-credits-system-20260524"
      }
    },
    {
      "from": "zabal-token-2",
      "to": "songjam-leaderboard",
      "type": "distributed_via",
      "properties": {
        "fact": "SongJam leaderboard top performers get ZABAL monthly airdrops",
        "q1_campaign": "1000+ participants in SongJam ZABAL campaign",
        "multiplier_integration": "Empire Builder empireMultiplier (4.0x-8.6x) feeds into SongJam scoring",
        "_source": "zabal-dispatch-tip-zols-architecture-zols-credits-system-20260524"
      }
    },
    {
      "from": "zabal-token-2",
      "to": "incented-campaigns",
      "type": "distributed_via",
      "properties": {
        "fact": "Q1 2026: 6 campaigns with total $260+ USDC + 485M ZABAL",
        "campaign_types": [
          "Clips",
          "Playlists",
          "Merch design",
          "Meme creation",
          "Builder challenge"
        ],
        "distribution": "Per-campaign pool divided among winners",
        "_source": "zabal-dispatch-tip-zols-architecture-zols-credits-system-20260524"
      }
    },
    {
      "from": "empire-builder",
      "to": "zabal-games-event",
      "type": "optional_tool_for",
      "properties": {
        "fact": "Builders can use Empire Builder Clanker integration to launch optional per-project tokens",
        "mechanic": "Build contribution leaderboard during ZABAL Gamez -> export CSV -> use as airdrop list -> launch token via Clanker/Empire -> distribute to contributors",
        "design_principle": "Token is an assist, not a gate. Default = no token. Anti-pattern: launch token first, figure out project later.",
        "status": "Documented in Doc 646 / Doc 701 Part 6; not yet live in ZABAL Gamez play",
        "_source": "zabal-dispatch-tip-zols-architecture-zols-credits-system-20260524"
      }
    },
    {
      "from": "fractal-governance-sessions",
      "to": "respect",
      "type": "generates",
      "properties": {
        "fact": "Weekly Monday 6pm EST fractals are the sole mechanism for earning Respect",
        "cadence": "Every Monday, 90+ weeks running",
        "mechanism": "3-6 person breakout groups peer-evaluate contributions; top contributor earns 13 Respect, 2nd 8, etc. (Fibonacci)",
        "facilitators": "Dan + Tadas",
        "_source": "zabal-dispatch-tip-zols-architecture-zols-credits-system-20260524"
      }
    },
    {
      "from": "zoe-bot",
      "to": "zaostock-2026-event",
      "type": "automates_followup_for",
      "properties": {
        "fact": "ZOE generates personalized volunteer thank-you emails with ZOL logging instructions within 48h of event",
        "process": "Claude reads attendance data, generates 5 templates (attendee/artist/sponsor/volunteer/press), personalizes with volunteer hours, outputs draft for Zaal approval, scheduled sends via Paragraph",
        "zol_logging_line": "Volunteer email includes: 'ZAO contribution: We're logging [X] ZOLs (ZAO contribution credits) to your profile. [Link to /stock/team/volunteer/[id]/profile]'",
        "automation_savings": "40 emails x 5min manual = 200min -> 10min Claude = 190min saved per event",
        "_source": "zabal-dispatch-tip-zols-architecture-zols-credits-system-20260524"
      }
    },
    {
      "from": "zaostock-2026-event",
      "to": "zols",
      "type": "primary_accrual_venue_for",
      "properties": {
        "fact": "1,865 volunteer hours tracked in Q1 2026 events; ZAOstock Oct 3 will generate another cohort of ZOL accruals",
        "post_event_workflow": "Oct 4-7 follow-up phase logs hours in /stock/team/volunteer/[id]/profile",
        "december_recognition": "Volunteer appreciation event + gifts to top ZOL contributors",
        "_source": "zabal-dispatch-tip-zols-architecture-zols-credits-system-20260524"
      }
    },
    {
      "from": "zabal-games-event",
      "to": "respect",
      "type": "earner_of",
      "properties": {
        "fact": "Decision #4 (Doc 701): Every July submission that hits the bar earns Respect in ZAO governance (not just finalists)",
        "mechanism": "Builders earn automatic Respect for participation; governance tracks this separately from prize voting",
        "finalists_earn_additional": "August Finals participants earn additional Respect during the event",
        "_source": "zabal-dispatch-tip-zols-architecture-zols-credits-system-20260524"
      }
    },
    {
      "from": "zabal-games-event",
      "to": "hats-protocol-nft",
      "type": "awards_collectible",
      "properties": {
        "fact": "Decision #9 (Doc 701, locked 2026-05-22): Every July finisher + August finalist gets Hats Protocol role NFT on Base",
        "role_name": "TBD - part of 'participation collectible'",
        "chain": "Base",
        "standard": "Hats Protocol role (similar to mentor S1 role)",
        "usage": "Portfolio credential + proof of participation",
        "_source": "zabal-dispatch-tip-zols-architecture-zols-credits-system-20260524"
      }
    },
    {
      "from": "claude-code-max-plan",
      "to": "hermes-pattern",
      "type": "spawns",
      "properties": {
        "fact": "Hermes Coder and Critic run as Claude Code CLI subprocesses, authenticated via Claude Code Max OAuth",
        "mechanism": "bot/src/hermes/runner.ts spawns subprocess with --append-system-prompt + --output-format json",
        "cost_implications": "No per-token API charges; flat $200/mo covers both tools",
        "_source": "zabal-dispatch-tool-stack-deep-dive-agent-infra-tools-20260524"
      }
    },
    {
      "from": "claude-code-max-plan",
      "to": "zoe-concierge-bot",
      "type": "powers",
      "properties": {
        "fact": "ZOE Telegram concierge runs as Claude Code subprocess, queries Bonfire for recall, uses Sonnet/Opus per task",
        "cost": "Subsumed in Claude Code Max $200/mo",
        "invocation_volume": "3000+ monthly",
        "_source": "zabal-dispatch-tool-stack-deep-dive-agent-infra-tools-20260524"
      }
    },
    {
      "from": "hermes-pattern",
      "to": "bonfire-nerddao",
      "type": "logs_to",
      "properties": {
        "fact": "Hermes PR fixes + quality scores can be logged to Bonfire graph as entities for historical decision-making",
        "optional": true,
        "use_case": "Audit trail of agent code quality over time",
        "_source": "zabal-dispatch-tool-stack-deep-dive-agent-infra-tools-20260524"
      }
    },
    {
      "from": "zoe-concierge-bot",
      "to": "bonfire-nerddao",
      "type": "queries",
      "properties": {
        "fact": "ZOE calls Bonfire SDK (tnt-v2.api.bonfires.ai) to fetch entity relationships + reputation scores for memory-enriched responses",
        "mechanism": "await bonfire.getScore({address: '0x...'}); for per-address recall",
        "data_freshness": "Real-time Farcaster + GitHub + Twitch + ZAO Respect signals",
        "_source": "zabal-dispatch-tool-stack-deep-dive-agent-infra-tools-20260524"
      }
    },
    {
      "from": "ollama",
      "to": "zoe-concierge-bot",
      "type": "supports",
      "properties": {
        "fact": "Ollama llama3.1:8b on VPS port 11434 classifies ZOE inbox messages + first-pass entity scoring (non-public work only)",
        "wrapper": "bot/src/zoe/ollama.ts exports ollamaChat, ollamaClassify, ollamaHealth",
        "cost": "Zero marginal (amortized VPS + GPU hardware cost)",
        "_source": "zabal-dispatch-tool-stack-deep-dive-agent-infra-tools-20260524"
      }
    },
    {
      "from": "anthropic-api",
      "to": "openrouter",
      "type": "pricing_parity_with",
      "properties": {
        "fact": "OpenRouter passes through Anthropic API pricing with 5.5% platform fee; Claude Sonnet/Opus identical cost to direct API",
        "trade_off": "OpenRouter offers 25+ free models as convenience layer, but ZAO avoids for secret safety (prefers Claude Code subprocess OAuth)",
        "_source": "zabal-dispatch-tool-stack-deep-dive-agent-infra-tools-20260524"
      }
    },
    {
      "from": "bonfire-nerddao",
      "to": "zabal-bonfires-ai",
      "type": "instance_at",
      "properties": {
        "fact": "ZAO live Bonfire graph queryable at zabal.bonfires.ai - 254 entities, 322+ edges as of 2026-05-24",
        "sync_mechanism": "node scripts/push-to-bonfire.mjs syncs local data/bonfire-graph.json to Bonfire API (requires BONFIRE_API_KEY env)",
        "access": "Natural language chat (DM Bonfire agent on Telegram or public dashboard)",
        "_source": "zabal-dispatch-tool-stack-deep-dive-agent-infra-tools-20260524"
      }
    },
    {
      "from": "hermes-pattern",
      "to": "ollama",
      "type": "may_delegate_to",
      "properties": {
        "fact": "Hermes can call Ollama for low-stakes fact-check (ZOE audit subagent pattern) but never for code review or public output",
        "constraint": "Ollama only for non-deterministic, non-branded work",
        "_source": "zabal-dispatch-tool-stack-deep-dive-agent-infra-tools-20260524"
      }
    },
    {
      "from": "claude-code-max-plan",
      "to": "anthropic-api",
      "type": "alternative_to",
      "properties": {
        "fact": "Claude Code Max ($200/mo) avoids direct Anthropic API billing; Claude Code CLI subprocess handles auth + cost",
        "why": "Zero marginal cost, stable pricing, OAuth secrets safer than ANTHROPIC_API_KEY in environment",
        "_source": "zabal-dispatch-tool-stack-deep-dive-agent-infra-tools-20260524"
      }
    },
    {
      "from": "openrouter",
      "to": "25-free-models",
      "type": "provides",
      "properties": {
        "fact": "OpenRouter free models (Google, Meta, Mistral, NVIDIA) useful for testing before Bonfire-backed agent deployment",
        "throughput_limit": "100 requests per 60 seconds per connection",
        "zao_adoption": "Secondary option for rapid prototyping, not production",
        "_source": "zabal-dispatch-tool-stack-deep-dive-agent-infra-tools-20260524"
      }
    },
    {
      "from": "zao-ecosystem",
      "to": "bonfire-nerddao",
      "type": "memory_backbone",
      "properties": {
        "fact": "Bonfire ingest pipeline connects Farcaster (casts, follows), GitHub (commits, PRs), Twitch (streams), ZAO Respect (internal scoring)",
        "multi_hop": "Agent queries can traverse tool relationships, person->org->reputation in single graph walk",
        "governance": "Hats Protocol (ERC-1155 role NFTs) integrates with Bonfire scores for voting weight",
        "_source": "zabal-dispatch-tool-stack-deep-dive-agent-infra-tools-20260524"
      }
    },
    {
      "from": "helius",
      "to": "wavewarz",
      "type": "powers",
      "properties": {
        "fact": "Solana RPC provider for on-demand token reads; free tier adequate for WaveWarZ leaderboard",
        "_source": "zabal-dispatch-tool-stack-deep-dive-crypto-infra-tools-20260524"
      }
    },
    {
      "from": "alchemy",
      "to": "zabal",
      "type": "powers",
      "properties": {
        "fact": "Base mainnet RPC for ZABAL token, SANG, and 0xSplits contract reads",
        "_source": "zabal-dispatch-tool-stack-deep-dive-crypto-infra-tools-20260524"
      }
    },
    {
      "from": "coinflow",
      "to": "bettercallzaal",
      "type": "integrates",
      "properties": {
        "fact": "Farcaster Mini App checkout for one-time purchases and recurring payments in USDC",
        "_source": "zabal-dispatch-tool-stack-deep-dive-crypto-infra-tools-20260524"
      }
    },
    {
      "from": "x402",
      "to": "neynar",
      "type": "enables_payment_for",
      "properties": {
        "fact": "Protects Neynar Farcaster API calls with per-request USDC micropayments; agents settle on same HTTP round-trip",
        "_source": "zabal-dispatch-tool-stack-deep-dive-crypto-infra-tools-20260524"
      }
    },
    {
      "from": "empire-builder",
      "to": "zabal-empire",
      "type": "provides_infrastructure",
      "properties": {
        "fact": "ZABAL leaderboard instance at songjam.space/zabal with SANG booster mechanics",
        "_source": "zabal-dispatch-tool-stack-deep-dive-crypto-infra-tools-20260524"
      }
    },
    {
      "from": "poidh",
      "to": "zabal-games-adoptable-projects",
      "type": "funds",
      "properties": {
        "fact": "9 adoptable projects funded via POIDH bounty adoption; poidh-sentinel monitors claimants on 1m cron",
        "_source": "zabal-dispatch-tool-stack-deep-dive-crypto-infra-tools-20260524"
      }
    },
    {
      "from": "hats-protocol",
      "to": "zao",
      "type": "governs_via",
      "properties": {
        "fact": "Optimism tree ID 226 manages ZAO governance roles; non-transferable role NFTs",
        "_source": "zabal-dispatch-tool-stack-deep-dive-crypto-infra-tools-20260524"
      }
    },
    {
      "from": "hats-protocol",
      "to": "zabal-games",
      "type": "mints_nfts_for",
      "properties": {
        "fact": "Base-deployed Hats roles for WaveWarZ tournament participants and COC Concertz contributors",
        "_source": "zabal-dispatch-tool-stack-deep-dive-crypto-infra-tools-20260524"
      }
    },
    {
      "from": "clanker",
      "to": "wavewarz",
      "type": "launched_token_for",
      "properties": {
        "fact": "AI-powered Base token creation on Farcaster; WaveWarZ community owns creator fees",
        "_source": "zabal-dispatch-tool-stack-deep-dive-crypto-infra-tools-20260524"
      }
    },
    {
      "from": "poidh-sentinel",
      "to": "poidh",
      "type": "monitors",
      "properties": {
        "fact": "Autonomous agent deployed May 2026 by 0x94t3z; monitors bounty claims, evaluates submissions, pays winners atomically",
        "_source": "zabal-dispatch-tool-stack-deep-dive-crypto-infra-tools-20260524"
      }
    },
    {
      "from": "coinflow",
      "to": "x402",
      "type": "complements",
      "properties": {
        "fact": "Coinflow handles fiat entry; x402 handles API micropayments. Both settle USDC on-chain.",
        "_source": "zabal-dispatch-tool-stack-deep-dive-crypto-infra-tools-20260524"
      }
    },
    {
      "from": "empire-builder",
      "to": "talent-protocol",
      "type": "integrates_with",
      "properties": {
        "fact": "ZABAL Empire uses Talent Protocol boosters for reputation-weighted leaderboards",
        "_source": "zabal-dispatch-tool-stack-deep-dive-crypto-infra-tools-20260524"
      }
    },
    {
      "from": "alchemy",
      "to": "0xsplits",
      "type": "reads_from",
      "properties": {
        "fact": "Base RPC queries 0xSplits revenue routing contracts for ZAO Music distribution",
        "_source": "zabal-dispatch-tool-stack-deep-dive-crypto-infra-tools-20260524"
      }
    },
    {
      "from": "helius",
      "to": "sang",
      "type": "indexes",
      "properties": {
        "fact": "Solana RPC provides SANG token holdings data for WaveWarZ leaderboard booster calculations",
        "_source": "zabal-dispatch-tool-stack-deep-dive-crypto-infra-tools-20260524"
      }
    },
    {
      "from": "x402",
      "to": "coc-content-pipeline",
      "type": "protects",
      "properties": {
        "fact": "Micropayment gate for AI-generated video descriptions (MiniMax + YouTube integration)",
        "_source": "zabal-dispatch-tool-stack-deep-dive-crypto-infra-tools-20260524"
      }
    },
    {
      "from": "distrokid",
      "to": "bmi",
      "type": "feeds_isrc_to",
      "properties": {
        "fact": "DistroKid assigns ISRC codes post-upload (~4 weeks pre-delivery). BMI registration uses ISRC as canonical identifier for the master recording.",
        "timing": "ISRC available before delivery, must be entered into BMI portal for composition registration to link ISRC to ISWC",
        "_source": "zabal-dispatch-tool-stack-deep-dive-music-infra-tools-20260524"
      }
    },
    {
      "from": "bmi",
      "to": "the-mlc",
      "type": "redundant_with",
      "properties": {
        "fact": "Both BMI and The MLC collect mechanicals from US streaming services. ZAO Music registers same composition with both for belt-and-suspenders coverage.",
        "reason": "BMI in-house collection + MLC statutory collection prevents unmatched recording problem. If one misses registration, other catches it.",
        "_source": "zabal-dispatch-tool-stack-deep-dive-music-infra-tools-20260524"
      }
    },
    {
      "from": "the-mlc",
      "to": "distrokid",
      "type": "requires_prior_registration_before",
      "properties": {
        "fact": "Composition must be registered with The MLC BEFORE DistroKid upload goes live. MLC needs ISRC + ISWC pairing in database to match recordings.",
        "consequence": "If uploaded to DistroKid first and registered with MLC later, recording is unmatched until registration completes (9-month recovery window per BMI policy)",
        "_source": "zabal-dispatch-tool-stack-deep-dive-music-infra-tools-20260524"
      }
    },
    {
      "from": "0xsplits",
      "to": "distrokid",
      "type": "orthogonal_to",
      "properties": {
        "fact": "0xSplits handles on-chain NFT revenue (Zora mints). DistroKid handles off-chain DSP revenue (Spotify, Apple Music streaming). Both revenue streams flow through separate channels.",
        "zao_architecture": "BMI/DistroKid -> ZAO Treasury bank account (streaming royalties). 0xSplits -> artist/curator wallets on Base (NFT primary/secondary).",
        "_source": "zabal-dispatch-tool-stack-deep-dive-music-infra-tools-20260524"
      }
    },
    {
      "from": "ardrive-turbo",
      "to": "distrokid",
      "type": "precedes",
      "properties": {
        "fact": "Master audio uploaded to ArDrive Turbo (permanent ar:// URI) before DistroKid upload. This ensures canonical immutable master exists independent of DSP distribution.",
        "reason": "Archive-first prevents loss if DistroKid account suspended or service terminated. ar:// URI persists forever.",
        "_source": "zabal-dispatch-tool-stack-deep-dive-music-infra-tools-20260524"
      }
    },
    {
      "from": "ardrive-turbo",
      "to": "0xsplits",
      "type": "provides_metadata_to",
      "properties": {
        "fact": "ar:// URIs from ArDrive uploads are embedded in 0xSplits split contract metadata. Zora 1155 NFT tokenURI references ar:// URI for immutable audio + metadata.",
        "flow": "master.wav -> ArDrive Turbo -> ar://txId -> Zora 1155 tokenURI -> 0xSplits split address",
        "_source": "zabal-dispatch-tool-stack-deep-dive-music-infra-tools-20260524"
      }
    },
    {
      "from": "ar-io",
      "to": "ardrive-turbo",
      "type": "serves",
      "properties": {
        "fact": "AR.IO gateway network serves ar:// content (music masters, metadata) stored via ArDrive Turbo. 650+ gateways provide redundant CDN access to Arweave content.",
        "x402_integration": "AR.IO x402 payment protocol enables micropayment-per-GB-served, can trigger ZAO split withdrawals on every stream",
        "_source": "zabal-dispatch-tool-stack-deep-dive-music-infra-tools-20260524"
      }
    },
    {
      "from": "bmi",
      "to": "0xsplits",
      "type": "feeds_publishing_royalties_to",
      "properties": {
        "fact": "BMI collects publishing rights and mechanicals, pays out quarterly to BMI-registered publisher entity (ZAO Music DBA). Those funds can seed 0xSplits distributions if routed through smart contract.",
        "note": "Current architecture: BMI -> bank, 0xSplits -> wallets. Future: could trigger splits via webhook on BMI payment notification.",
        "_source": "zabal-dispatch-tool-stack-deep-dive-music-infra-tools-20260524"
      }
    },
    {
      "from": "distrokid",
      "to": "0xsplits",
      "type": "independent_revenue_stream_from",
      "properties": {
        "fact": "DistroKid streaming royalties are separate from 0xSplits NFT revenue. Artist receives streaming royalties via BMI/DistroKid, NFT revenue via 0xSplits pull-withdrawal.",
        "zao_model": "dual revenue: 80% artist on 0xSplits NFT + streaming mechanical/publishing via BMI",
        "_source": "zabal-dispatch-tool-stack-deep-dive-music-infra-tools-20260524"
      }
    },
    {
      "from": "the-mlc",
      "to": "0xsplits",
      "type": "feeds_data_to",
      "properties": {
        "fact": "The MLC registration captures songwriter splits and publisher entity. 0xSplits split percentages should mirror songwriter splits from MLC registration for on-chain consistency.",
        "requirement": "lock splits with all collaborators BEFORE The MLC registration to avoid conflict.",
        "_source": "zabal-dispatch-tool-stack-deep-dive-music-infra-tools-20260524"
      }
    },
    {
      "from": "ardrive-turbo",
      "to": "ar-io",
      "type": "integration_point",
      "properties": {
        "fact": "ArDrive CLI/SDK uses AR.IO gateways as default content delivery layer (since Irys deprecation 2025). Wayfinder SDK selects optimal AR.IO gateway per user geography.",
        "note": "End users fetch ar:// URIs from nearest AR.IO gateway, not direct Arweave nodes",
        "_source": "zabal-dispatch-tool-stack-deep-dive-music-infra-tools-20260524"
      }
    },
    {
      "from": "zaal",
      "to": "lu-ma",
      "type": "uses-for",
      "properties": {
        "fact": "Zaal manages ZAO workshop calendar and community event signups on Lu.ma; potential API integration for agent-driven event creation",
        "_source": "zabal-dispatch-tool-stack-deep-dive-ops-infra-tools-20260524"
      }
    },
    {
      "from": "zaal",
      "to": "cal-com",
      "type": "uses-for",
      "properties": {
        "fact": "Zaal schedules one-on-ones and workshop slot booking via Cal.com; AI agents can query availability and auto-book via API v2",
        "_source": "zabal-dispatch-tool-stack-deep-dive-ops-infra-tools-20260524"
      }
    },
    {
      "from": "tyler-stambaugh",
      "to": "magnetic",
      "type": "founder-of",
      "properties": {
        "fact": "Tyler Stambaugh is Chief Product Officer and co-founder at MAGNETIQ, the company behind Magnetiq portal platform",
        "_source": "zabal-dispatch-tool-stack-deep-dive-ops-infra-tools-20260524"
      }
    },
    {
      "from": "zabal",
      "to": "magnetic",
      "type": "uses-for",
      "properties": {
        "fact": "ZABAL uses Magnetiq portal for workshop discovery and opt-in event library; integrates with Cal.com booking via Magnetiq workflows",
        "_source": "zabal-dispatch-tool-stack-deep-dive-ops-infra-tools-20260524"
      }
    },
    {
      "from": "zao-devz-bot",
      "to": "telegram",
      "type": "runs-on",
      "properties": {
        "fact": "@ZAODevZBot operates on Telegram Bot API (free); relays /fix, /help, /status commands to Hermes Runner in ZAO Devz private group",
        "_source": "zabal-dispatch-tool-stack-deep-dive-ops-infra-tools-20260524"
      }
    },
    {
      "from": "hermes-narrator",
      "to": "telegram",
      "type": "reports-via",
      "properties": {
        "fact": "@HermesZAOdevzbot posts phase narration updates (Coder started, Critic done, PR opened) to ZAO Devz group via Telegram polling API",
        "_source": "zabal-dispatch-tool-stack-deep-dive-ops-infra-tools-20260524"
      }
    },
    {
      "from": "bettercallzaal",
      "to": "farcaster",
      "type": "deployed-as",
      "properties": {
        "fact": "BetterCallZaal mini app enables Farcaster users to interact with Zaal's profile; uses SDK and composeCast for share-to-cast",
        "_source": "zabal-dispatch-tool-stack-deep-dive-ops-infra-tools-20260524"
      }
    },
    {
      "from": "coc-concertz",
      "to": "riverside",
      "type": "records-with",
      "properties": {
        "fact": "COC Concertz uses Riverside for 4K local recording with uncompressed audio tracks, then distributes to YouTube, Spotify, Apple via Riverside",
        "_source": "zabal-dispatch-tool-stack-deep-dive-ops-infra-tools-20260524"
      }
    },
    {
      "from": "coc-concertz",
      "to": "descript",
      "type": "edits-via",
      "properties": {
        "fact": "COC Concertz content pipeline uses Descript for transcription, audio editing, AI-powered clip generation, and filler word removal",
        "_source": "zabal-dispatch-tool-stack-deep-dive-ops-infra-tools-20260524"
      }
    },
    {
      "from": "zabal-games",
      "to": "magnetic",
      "type": "distributes-via",
      "properties": {
        "fact": "ZABAL Gamez uses Magnetiq portal for workshop registration and opt-in discovery; integrates brand activation with blockchain loyalty",
        "_source": "zabal-dispatch-tool-stack-deep-dive-ops-infra-tools-20260524"
      }
    },
    {
      "from": "magnetic",
      "to": "cal-com",
      "type": "integrates-with",
      "properties": {
        "fact": "Magnetiq portal can webhook into Cal.com slot booking; users opt-in on Magnetiq and auto-book slots via Cal.com API",
        "_source": "zabal-dispatch-tool-stack-deep-dive-ops-infra-tools-20260524"
      }
    },
    {
      "from": "zaal",
      "to": "farcaster",
      "type": "identity-on",
      "properties": {
        "fact": "Zaal's Farcaster identity (FID 19640, @zaal) is protocol-level; BetterCallZaal mini app signs operations under this ID",
        "_source": "zabal-dispatch-tool-stack-deep-dive-ops-infra-tools-20260524"
      }
    },
    {
      "from": "zabal-games",
      "to": "x-spaces",
      "type": "announces-via",
      "properties": {
        "fact": "ZABAL Gamez announcements and live producer interviews broadcast on X Spaces; free audio channel for community engagement",
        "_source": "zabal-dispatch-tool-stack-deep-dive-ops-infra-tools-20260524"
      }
    },
    {
      "from": "magnetic",
      "to": "composio",
      "type": "mcp-powered-by",
      "properties": {
        "fact": "Magnetiq MCP server bridges AI agents (Claude, AutoGen, Pydantic AI) to Magnetiq portal via Composio Tool Router; enables agent-driven contact search, follow-up management, and workflow automation",
        "_source": "zabal-dispatch-tool-stack-deep-dive-ops-infra-tools-20260524"
      }
    },
    {
      "from": "hermes-runner",
      "to": "cal-com",
      "type": "can-integrate-with",
      "properties": {
        "fact": "Hermes Runner could use Cal.com API v2 to auto-book workshop slots after code review passes; webhook-driven workflow",
        "_source": "zabal-dispatch-tool-stack-deep-dive-ops-infra-tools-20260524"
      }
    },
    {
      "from": "zao-domains",
      "to": "cloudflare-cdn",
      "type": "currently_uses",
      "properties": {
        "fact": "Cloudflare provides default DNS/CDN layer for ZAO sites",
        "coverage": "Johannesburg, Cairo, Lagos PoPs",
        "status": "active",
        "_source": "zabal-dispatch-africa-cdn-routing-alternative-cdns-20260524"
      }
    },
    {
      "from": "zao-domains",
      "to": "vercel",
      "type": "hosted_on",
      "properties": {
        "fact": "ZAO sites run on Vercel origin",
        "can_keep_origin": true,
        "cdn_can_layer_on_top": true,
        "_source": "zabal-dispatch-africa-cdn-routing-alternative-cdns-20260524"
      }
    },
    {
      "from": "bunnycdn",
      "to": "cloudflare-cdn",
      "type": "cost_comparison",
      "properties": {
        "recommendation": "BunnyCDN cheaper for pay-as-you-go, Cloudflare better for free tier",
        "breakeven": "Around $20/mo Cloudflare Pro tier",
        "_source": "zabal-dispatch-africa-cdn-routing-alternative-cdns-20260524"
      }
    },
    {
      "from": "aws-cloudfront",
      "to": "african-network-access-problem",
      "type": "solves_with",
      "properties": {
        "fact": "Offers 4 African PoPs (most of any major CDN)",
        "tradeoff": "Complex pricing, overkill for 1k/mo visitors",
        "_source": "zabal-dispatch-africa-cdn-routing-alternative-cdns-20260524"
      }
    },
    {
      "from": "fastly",
      "to": "african-network-access-problem",
      "type": "unsuitable_for",
      "properties": {
        "reason": "Premium pricing + Africa traffic penalty + limited PoPs",
        "estimated_cost": "$50+/month for ZAO scale",
        "_source": "zabal-dispatch-africa-cdn-routing-alternative-cdns-20260524"
      }
    },
    {
      "from": "netlify-edge-functions",
      "to": "vercel",
      "type": "alternative_to",
      "properties": {
        "fact": "Can replace Vercel for static/edge compute stacks",
        "tradeoff": "16 PoPs vs Vercel's 126, slower Africa latency",
        "setup": "No origin migration needed, different CDN",
        "_source": "zabal-dispatch-africa-cdn-routing-alternative-cdns-20260524"
      }
    },
    {
      "from": "vultr-vps",
      "to": "african-network-access-problem",
      "type": "solves_with",
      "properties": {
        "fact": "Johannesburg region + manual nginx caching = local serving",
        "tradeoff": "Requires ops expertise, no built-in DDoS mitigation",
        "cost": "$2.50/month + bandwidth",
        "_source": "zabal-dispatch-africa-cdn-routing-alternative-cdns-20260524"
      }
    },
    {
      "from": "bunnycdn",
      "to": "zao-domains",
      "type": "recommended_for",
      "properties": {
        "fact": "3 African PoPs, transparent $0.06/GB pricing, Vercel origin compatible",
        "estimated_cost": "$0.50-$2/month at 1k visitors",
        "setup_effort": "Medium - DNS/origin configuration",
        "_source": "zabal-dispatch-africa-cdn-routing-alternative-cdns-20260524"
      }
    },
    {
      "from": "cloudflare-cdn",
      "to": "zao-domains",
      "type": "default_and_best_for",
      "properties": {
        "fact": "Already in place, free tier sufficient, no setup needed",
        "reason": "Lowest setup friction for ZAO scale",
        "alternative": "Only switch if cost or performance becomes issue",
        "_source": "zabal-dispatch-africa-cdn-routing-alternative-cdns-20260524"
      }
    },
    {
      "from": "aws-cloudfront",
      "to": "bunnycdn",
      "type": "cost_comparison",
      "properties": {
        "fact": "CloudFront 4 African PoPs vs BunnyCDN 3, but BunnyCDN cheaper at small scale",
        "cloudfront_advantage": "AWS ecosystem integration, high-volume discounts",
        "_source": "zabal-dispatch-africa-cdn-routing-alternative-cdns-20260524"
      }
    },
    {
      "from": "vercel",
      "to": "cloudflare-cdn",
      "type": "can_layer_with",
      "properties": {
        "fact": "Keep Vercel origin, add Cloudflare/BunnyCDN/CloudFront in front",
        "no_migration": true,
        "dns_swap_only": true,
        "_source": "zabal-dispatch-africa-cdn-routing-alternative-cdns-20260524"
      }
    },
    {
      "from": "zao-domains",
      "to": "african-network-access-problem",
      "type": "experiences",
      "properties": {
        "symptom": "Likely latency from limited edge coverage in Johannesburg/Lagos",
        "solution_tier": "Upgrade CDN PoP coverage or add edge compute layer",
        "_source": "zabal-dispatch-africa-cdn-routing-alternative-cdns-20260524"
      }
    },
    {
      "from": "cloudflare-african-pop-network",
      "to": "lagos-data-center",
      "type": "contains",
      "properties": {
        "role": "West Africa hub",
        "undersea_cables": "multiple",
        "_source": "zabal-dispatch-africa-cdn-routing-cloudflare-setup-20260524"
      }
    },
    {
      "from": "cloudflare-african-pop-network",
      "to": "cairo-egypt",
      "type": "contains",
      "properties": {
        "partner": "Telecom Egypt",
        "position_in_history": "3rd Africa POP",
        "_source": "zabal-dispatch-africa-cdn-routing-cloudflare-setup-20260524"
      }
    },
    {
      "from": "cloudflare-in-front-of-vercel",
      "to": "dns-only-mode",
      "type": "requires",
      "properties": {
        "reason": "Orange cloud breaks Vercel SSL",
        "_source": "zabal-dispatch-africa-cdn-routing-cloudflare-setup-20260524"
      }
    },
    {
      "from": "dns-only-mode",
      "to": "cname-flattening",
      "type": "uses",
      "properties": {
        "apex_support": "true",
        "_source": "zabal-dispatch-africa-cdn-routing-cloudflare-setup-20260524"
      }
    },
    {
      "from": "full-strict-tls-mode",
      "to": "vercel-deployment-protection",
      "type": "compatible_with",
      "properties": {
        "caveat": "Only if hostname validation passes",
        "_source": "zabal-dispatch-africa-cdn-routing-cloudflare-setup-20260524"
      }
    },
    {
      "from": "vercel-deployment-protection",
      "to": "argo-smart-routing",
      "type": "conflict_with",
      "properties": {
        "issue": "Proxy hides signals, Argo needs real network data",
        "_source": "zabal-dispatch-africa-cdn-routing-cloudflare-setup-20260524"
      }
    },
    {
      "from": "argo-smart-routing",
      "to": "cloudflare-african-pop-network",
      "type": "leverages",
      "properties": {
        "benefit": "Real-time routing through Africa PoPs",
        "_source": "zabal-dispatch-africa-cdn-routing-cloudflare-setup-20260524"
      }
    },
    {
      "from": "lagos-data-center",
      "to": "west-african-undersea-cables",
      "type": "interconnected_to",
      "properties": {
        "strategic_value": "All West African traffic passes through",
        "_source": "zabal-dispatch-africa-cdn-routing-cloudflare-setup-20260524"
      }
    },
    {
      "from": "cloudflare-pricing-tiers",
      "to": "argo-smart-routing",
      "type": "gates_access_to",
      "properties": {
        "minimum": "Business $200/month for practical Africa routing",
        "_source": "zabal-dispatch-africa-cdn-routing-cloudflare-setup-20260524"
      }
    },
    {
      "from": "dns-migration-vercel-to-cloudflare",
      "to": "cloudflare-in-front-of-vercel",
      "type": "prerequisite",
      "properties": {
        "timing": "48 hours max propagation",
        "_source": "zabal-dispatch-africa-cdn-routing-cloudflare-setup-20260524"
      }
    },
    {
      "from": "zao-bettercallzaal-deployment",
      "to": "argo-smart-routing",
      "type": "needs",
      "properties": {
        "reason": "Only viable path for Africa latency without breaking Vercel protections",
        "_source": "zabal-dispatch-africa-cdn-routing-cloudflare-setup-20260524"
      }
    },
    {
      "from": "vercel-deployment-protection",
      "to": "bot-protection",
      "type": "provides",
      "properties": {
        "loss_when_proxied": "Signals obscured by reverse proxy",
        "_source": "zabal-dispatch-africa-cdn-routing-cloudflare-setup-20260524"
      }
    },
    {
      "from": "cloudflare-pricing-tiers",
      "to": "cloudflare-african-pop-network",
      "type": "determines_latency_access",
      "properties": {
        "free": "DNS management only",
        "business_plus": "Argo Smart Routing enabled",
        "_source": "zabal-dispatch-africa-cdn-routing-cloudflare-setup-20260524"
      }
    },
    {
      "from": "dns-only-mode",
      "to": "vercel-edge-network",
      "type": "preserves",
      "properties": {
        "benefit": "Allows Vercel optimizations (Edge Middleware, routing)",
        "_source": "zabal-dispatch-africa-cdn-routing-cloudflare-setup-20260524"
      }
    },
    {
      "from": "full-strict-tls-mode",
      "to": "origin-certificate",
      "type": "requires",
      "properties": {
        "options": "Public CA or Cloudflare Origin CA",
        "critical": "hostname must match CN/SAN",
        "_source": "zabal-dispatch-africa-cdn-routing-cloudflare-setup-20260524"
      }
    },
    {
      "from": "zabalgames-migration-plan",
      "to": "dns-migration-step1-prepare",
      "type": "first_step",
      "properties": {
        "sequence": 1,
        "_source": "zabal-dispatch-africa-cdn-routing-fix-plan-20260524"
      }
    },
    {
      "from": "dns-migration-step1-prepare",
      "to": "dns-migration-step2-add-cloudflare",
      "type": "precedes",
      "properties": {
        "sequence": 2,
        "wait_time_hours": 6,
        "_source": "zabal-dispatch-africa-cdn-routing-fix-plan-20260524"
      }
    },
    {
      "from": "dns-migration-step2-add-cloudflare",
      "to": "dns-migration-step3-nameserver-switch",
      "type": "precedes",
      "properties": {
        "sequence": 3,
        "wait_time_hours": 0,
        "_source": "zabal-dispatch-africa-cdn-routing-fix-plan-20260524"
      }
    },
    {
      "from": "dns-migration-step3-nameserver-switch",
      "to": "dns-migration-step4-verification",
      "type": "precedes",
      "properties": {
        "sequence": 4,
        "wait_time_hours": 0.5,
        "_source": "zabal-dispatch-africa-cdn-routing-fix-plan-20260524"
      }
    },
    {
      "from": "zabalgames-migration-plan",
      "to": "cloudflare-free-tier",
      "type": "requires",
      "properties": {
        "fact": "Free tier has sufficient global coverage for launch scale",
        "_source": "zabal-dispatch-africa-cdn-routing-fix-plan-20260524"
      }
    },
    {
      "from": "cloudflare-free-tier",
      "to": "vercel-origin-config",
      "type": "compatible_with",
      "properties": {
        "fact": "Cloudflare proxies Vercel origin without TLS issues in Full mode",
        "_source": "zabal-dispatch-africa-cdn-routing-fix-plan-20260524"
      }
    },
    {
      "from": "dns-migration-step1-prepare",
      "to": "porkbun-registrar",
      "type": "operates_on",
      "properties": {
        "fact": "TTL reduction must occur at registrar before nameserver change",
        "_source": "zabal-dispatch-africa-cdn-routing-fix-plan-20260524"
      }
    },
    {
      "from": "dns-migration-step3-nameserver-switch",
      "to": "porkbun-registrar",
      "type": "final_action_at",
      "properties": {
        "fact": "Nameserver replacement is the critical DNS cutover point",
        "_source": "zabal-dispatch-africa-cdn-routing-fix-plan-20260524"
      }
    },
    {
      "from": "rollback-procedure",
      "to": "dns-migration-step3-nameserver-switch",
      "type": "emergency_response_to",
      "properties": {
        "fact": "Revert nameservers immediately if outage detected",
        "_source": "zabal-dispatch-africa-cdn-routing-fix-plan-20260524"
      }
    },
    {
      "from": "launch-timing-decision",
      "to": "zabalgames-migration-plan",
      "type": "governs_schedule_for",
      "properties": {
        "decision_date": "2026-05-24",
        "execute_by": "2026-05-25",
        "_source": "zabal-dispatch-africa-cdn-routing-fix-plan-20260524"
      }
    },
    {
      "from": "zabalgames-migration-plan",
      "to": "launch-timing-decision",
      "type": "requires_execution_before",
      "properties": {
        "event": "May 31 ZABAL Gamez launch",
        "buffer_days": 5,
        "_source": "zabal-dispatch-africa-cdn-routing-fix-plan-20260524"
      }
    },
    {
      "from": "dns-migration-step4-verification",
      "to": "cloudflare-free-tier",
      "type": "monitors",
      "properties": {
        "tool": "Cloudflare dashboard analytics for traffic routing confirmation",
        "_source": "zabal-dispatch-africa-cdn-routing-fix-plan-20260524"
      }
    },
    {
      "from": "bettercallzaal-com",
      "to": "vercel-ip-216-198-79-1",
      "type": "DNS resolves to",
      "properties": {
        "fact": "Both domains resolve to same single IP; no geographic failover or load balancing",
        "implication": "Single point of failure; no regional redundancy",
        "_source": "zabal-dispatch-africa-cdn-routing-live-test-20260524"
      }
    },
    {
      "from": "vercel-ip-216-198-79-1",
      "to": "yul1-montreal-canada",
      "type": "edge location is",
      "properties": {
        "fact": "Consistently serves from Montreal edge regardless of simulated client origin",
        "_source": "zabal-dispatch-africa-cdn-routing-live-test-20260524"
      }
    },
    {
      "from": "bettercallzaal-com",
      "to": "porkbun-dns-nameservers",
      "type": "authoritative nameservers",
      "properties": {
        "fact": "All four NS records point to Brazil-hosted servers, creating additional latency for African DNS queries",
        "_source": "zabal-dispatch-africa-cdn-routing-live-test-20260524"
      }
    },
    {
      "from": "african-network-routing-test-gap",
      "to": "porkbun-dns-nameservers",
      "type": "potential bottleneck",
      "properties": {
        "concern": "Brazil-hosted DNS may experience higher latency from African regions; no direct Africa presence documented",
        "_source": "zabal-dispatch-africa-cdn-routing-live-test-20260524"
      }
    },
    {
      "from": "african-network-routing-test-gap",
      "to": "vercel-yul1-montreal",
      "type": "long haul latency risk",
      "properties": {
        "fact": "Montreal to Lagos ~9000km, Montreal to Cape Town ~10500km, Montreal to Nairobi ~9500km; typical submarine cable latency 150-300ms plus potential IXP congestion",
        "_source": "zabal-dispatch-africa-cdn-routing-live-test-20260524"
      }
    },
    {
      "from": "bettercallzaal-com",
      "to": "http-2-without-quic",
      "type": "connection protocol limitation",
      "properties": {
        "risk": "No HTTP/3 QUIC advertised; HTTP/2 over TCP susceptible to packet loss on poor connections common in African networks",
        "_source": "zabal-dispatch-africa-cdn-routing-live-test-20260524"
      }
    },
    {
      "from": "vercel-ip-216-198-79-1",
      "to": "ipv4-only",
      "type": "protocol support",
      "properties": {
        "fact": "No AAAA (IPv6) records; some African ISPs may be IPv6-first",
        "_source": "zabal-dispatch-africa-cdn-routing-live-test-20260524"
      }
    },
    {
      "from": "zabalgames-com",
      "to": "vercel-ip-216-198-79-1",
      "type": "DNS resolves to",
      "properties": {
        "fact": "Same single Vercel IP as BetterCallZaal",
        "_source": "zabal-dispatch-africa-cdn-routing-live-test-20260524"
      }
    },
    {
      "from": "vercel-african-edge-coverage",
      "to": "bettercallzaal-unreachable-in-most-african-nations",
      "type": "CAUSES_FAILURE_FOR",
      "properties": {
        "fact": "Single Cape Town compute region serves 53+ African countries; no edge nodes in Nigeria, Kenya, Tanzania, Egypt, Ethiopia, Senegal",
        "mechanism": "Traffic routed to distant PoP or non-African region by default",
        "_source": "zabal-dispatch-africa-cdn-routing-root-cause-20260524"
      }
    },
    {
      "from": "african-isp-bgp-peering-gaps",
      "to": "vercel-traffic-forced-off-continent",
      "type": "CAUSES_FAILURE_FOR",
      "properties": {
        "fact": "Safaricom, MTN, Airtel do not peer with Vercel at local IXPs; traffic routes via slower intercontinental backbone",
        "latency_cost": "50-100ms+ additional delay vs direct local handoff",
        "_source": "zabal-dispatch-africa-cdn-routing-root-cause-20260524"
      }
    },
    {
      "from": "transparent-tls-proxy-interception",
      "to": "https-certificate-validation-failures-on-vercel-domains",
      "type": "CAUSES_FAILURE_FOR",
      "properties": {
        "fact": "Carrier re-encrypts traffic; if client OS does not trust carrier CA or SNI mismatch occurs, connection is refused",
        "user_experience": "Connection fails silently or shows untrusted cert warning",
        "_source": "zabal-dispatch-africa-cdn-routing-root-cause-20260524"
      }
    },
    {
      "from": "http-3-quic-blocking-uganda-east-africa",
      "to": "20-30s-latency-increase-before-tcp-fallback",
      "type": "CAUSES_SLOWDOWN_FOR",
      "properties": {
        "fact": "Browser attempts QUIC on UDP 443, times out, falls back to HTTP/2. Repeat for each connection.",
        "applicable_regions": "Uganda, possibly other East African carriers",
        "_source": "zabal-dispatch-africa-cdn-routing-root-cause-20260524"
      }
    },
    {
      "from": "ipv6-only-carrier-networks-with-broken-aaaa-records",
      "to": "happy-eyeballs-timeout-delays-on-dual-stack-domains",
      "type": "CAUSES_SLOWDOWN_FOR",
      "properties": {
        "fact": "Client gets AAAA record, attempts IPv6, times out after 300-500ms, retries on IPv4. Doubles connection time.",
        "affected_carriers": "Safaricom, MTN, Vodacom if running IPv6-only core with broken external routes",
        "_source": "zabal-dispatch-africa-cdn-routing-root-cause-20260524"
      }
    },
    {
      "from": "cloudflare-african-pop-density",
      "to": "cloudflare-sites-load-faster-in-africa-than-vercel-sites",
      "type": "OUTPERFORMS",
      "properties": {
        "fact": "32 African data centers vs Vercel 1 compute region = higher cache hit ratio, local peering, lower latency",
        "impact": "Same-continent CDN ~100-150ms faster than trans-continental routing",
        "_source": "zabal-dispatch-africa-cdn-routing-root-cause-20260524"
      }
    },
    {
      "from": "dns-resolver-peering-issues-quad9-vs-cloudflare",
      "to": "slow-or-failed-dns-resolution-in-africa",
      "type": "CAUSES_SLOWDOWN_FOR",
      "properties": {
        "fact": "ISP peering or resolver anycast routing may send queries far from user, causing timeouts or incorrect IPs",
        "symptom": "First byte latency inflated by 500ms-2s due to DNS lookup",
        "_source": "zabal-dispatch-africa-cdn-routing-root-cause-20260524"
      }
    },
    {
      "from": "vercel-default-failover-priority-iad1-primary",
      "to": "african-users-get-routed-to-distant-us-origin-under-load",
      "type": "CAUSES_SLOWDOWN_FOR",
      "properties": {
        "fact": "P20 priority for cpt1 means European/US regions exhausted first before Cape Town handles traffic",
        "latency_cost": "250ms vs 30ms for same-country access",
        "_source": "zabal-dispatch-africa-cdn-routing-root-cause-20260524"
      }
    },
    {
      "from": "transparent-tls-proxy-interception",
      "to": "vercel-pop-tls-handshake-failures",
      "type": "INTERFERES_WITH",
      "properties": {
        "fact": "If carrier SNI inspection broken or cert chain incomplete, handshake fails before data transfer begins",
        "_source": "zabal-dispatch-africa-cdn-routing-root-cause-20260524"
      }
    },
    {
      "from": "certificate-chain-tls-1-2-downgrade-issues",
      "to": "connection-refused-on-carriers-with-old-tls-max-version",
      "type": "CAUSES_FAILURE_FOR",
      "properties": {
        "fact": "Carriers forcing TLS 1.2 or without full cert chain fail Vercel certificate validation",
        "_source": "zabal-dispatch-africa-cdn-routing-root-cause-20260524"
      }
    },
    {
      "from": "african-isp-bgp-peering-gaps",
      "to": "dns-resolver-also-routed-off-continent",
      "type": "CAUSES_SLOWDOWN_FOR",
      "properties": {
        "fact": "Peering gaps affect both origin CDN and resolver routing; compound latency",
        "_source": "zabal-dispatch-africa-cdn-routing-root-cause-20260524"
      }
    },
    {
      "from": "vercel-african-edge-coverage",
      "to": "vpn-becomes-essential-workaround-for-african-users",
      "type": "FORCES_WORKAROUND",
      "properties": {
        "fact": "Users bypass carrier inspection and poor routing by VPN to US/EU, defeating all local optimization attempts",
        "cost": "VPN overhead ~50-100ms + $ for users",
        "_source": "zabal-dispatch-africa-cdn-routing-root-cause-20260524"
      }
    },
    {
      "from": "http-3-quic-blocking-uganda-east-africa",
      "to": "browsers-degrade-to-http-2-losing-latency-gains",
      "type": "DEGRADES_PROTOCOL",
      "properties": {
        "fact": "Modern HTTP/3 benefits (QUIC 0-RTT, connection migration) unavailable when UDP blocked",
        "_source": "zabal-dispatch-africa-cdn-routing-root-cause-20260524"
      }
    },
    {
      "from": "ipv6-only-carrier-networks-with-broken-aaaa-records",
      "to": "vercel-s-ipv6-support-becomes-liability-instead-of-advantage",
      "type": "CAUSES_NEGATIVE_IMPACT",
      "properties": {
        "fact": "Publishing AAAA record without guaranteed good route causes slow connections on carriers with broken IPv6",
        "_source": "zabal-dispatch-africa-cdn-routing-root-cause-20260524"
      }
    },
    {
      "from": "dns-resolver-peering-issues-quad9-vs-cloudflare",
      "to": "isp-default-resolver-better-than-public-alternative-for-some",
      "type": "CREATES_ASYMMETRY",
      "properties": {
        "fact": "ISP resolver may have better local peering despite security trade-offs; Quad9/Cloudflare may route slower",
        "_source": "zabal-dispatch-africa-cdn-routing-root-cause-20260524"
      }
    },
    {
      "from": "bcz-yapz",
      "to": "zabal-games",
      "type": "FEEDS",
      "properties": {
        "fact": "Episode transcripts surface the people, tools, and threads moving through the ZAO ecosystem. BCZ YapZ already generates content/bonfire-ingest/ files from each transcript, so it is a native Bonfire feeder - the same memory layer ZABAL Gamez runs on.",
        "_source": "zabal-dispatch-streams-2026-05-29"
      }
    },
    {
      "from": "farcaster-agentic-bootcamp",
      "to": "zabal-games",
      "type": "FEEDS",
      "properties": {
        "fact": "This is the origin thread. The bootcamp fed FarHack, where Zaal/Zlank won the Snap category ($1,000), and that prize money went to ZAOstock. The agent + miniapp patterns taught here are the same rails ZABAL Gamez builds on.",
        "_source": "zabal-dispatch-streams-2026-05-29"
      }
    },
    {
      "from": "zao-festivals-500-bounty",
      "to": "zabal-games",
      "type": "FEEDS",
      "properties": {
        "fact": "This is the prize pool itself. Every finalist who ships gets paid from it. Sponsor inquiries to grow the v1 pool: info@thezao.com.",
        "_source": "zabal-dispatch-streams-2026-05-29"
      }
    },
    {
      "from": "farcaster-batches",
      "to": "zabal-games",
      "type": "FEEDS",
      "properties": {
        "fact": "A new rail to design around. ZABAL Gamez builds that batch onchain or social actions get cheaper / more composable when Batches ships. Tracked here so builders catch it the week it lands.",
        "_source": "zabal-dispatch-streams-2026-05-29"
      }
    },
    {
      "from": "zabal-games-workshops",
      "to": "zabal-games",
      "type": "FEEDS",
      "properties": {
        "fact": "The workshops are the deep-context onboarding for builders. Raw session recordings + transcripts + summaries are the richest ZABAL Gamez data stream - they directly seed what people build in July.",
        "_source": "zabal-dispatch-streams-2026-05-29"
      }
    }
  ]
}
