--- name: reddit-creator-deploy description: Turn a KOL roster + subreddit brand-fit analysis into a deployable creator network. Splits creators into KOL (authority) and KOC (grassroots) layers, matches each to a main + secondary subreddits by real gear/shooting-type ∩ community fit, and emits an account×subreddit deployment_matrix (with a ≤3-per-sub ceiling + no-cross-interaction rule) plus per-creator persona_cards. Route A disclosed-compliance baked into every card (FTC disclosure required on any material connection). Consumes reddit-kol-finder's kol_roster.json natively. READ-ONLY, deterministic, no LLM key needed. --- # reddit-creator-deploy ## 用途 / Purpose The packaging step between "who could post" (reddit-kol-finder) and "who posts what, where" (reddit-content-brief). Takes real creators + real subreddit brand-fit and produces the **deployment plan**: KOL/KOC two-layer split, an account×subreddit matrix, and per-creator persona cards — all under Route A disclosed-creator compliance (no sockpuppets, disclosure mandatory, ≤3 of our creators per sub, no cross-creator interaction). Generalised from the AcmeGear campaign (`创作者花名册` + `部署矩阵`). ## 输入 / Inputs | arg | required? | type | where it comes from | error if missing | |---|---|---|---|---| | `--roster` | yes | file | `kol_roster.json` from reddit-kol-finder (uses `reddit_native[]`), or a plain `[{handle,subreddits,tier,gear,shooting_types,geo,profession}]` list | `ERROR: --roster file not found` (exit 2); 0 creators → exit 3 | | `--subs` | yes | file | subreddit brand-fit map `{"":{"fit_score":N,"tolerance":".."}}` or sweep jsonl (`{"sub":..,"verdict":{"fit_score":..}}`) | `ERROR: --subs file not found` (exit 2) | | `--brand` | yes | string | brand name (used in disclosure lines) | `ERROR: the following arguments are required: --brand` | | `--products` | no | comma list | product lines (for context) | — | | `--out-dir` | no | dir | output dir (default `out`) | — | ## 输出 / Outputs - **`deployment_matrix.json`** — `{brand, n_creators, n_kol, n_koc, max_per_sub, saturated_subs, rows[]}`; each row `{handle, layer(KOL/KOC), geo, main_sub, secondary_subs[], cadence, disclosure}`. - **`deployment_matrix.md`** — the human table + 合规底线 block; flags any subreddit over the ≤3-creator ceiling. - **`persona_cards.md`** — one card per creator (真实身份 / 主副场 / 社区匹配逻辑 / 披露式品牌关系 / 节奏), labelled 招募画像 (real people fill in later). ## 逻辑 / How it decides - **Layer**: roster `tier` A → KOL; B/C → KOC; else infer from `signals.upvotes_total` (≥200 → KOL). - **Main/secondary subs**: rank the creator's own subreddits by real `fit_score` from `--subs`; top = main, next 1-2 = secondary. A creator only ever lands in communities they actually belong to. - **Cadence**: KOL = 1 post/2-3wk + weekly comments; KOC = comment-led + 1 post/3wk. - **Compliance (baked, not optional)**: every card carries the FTC disclosure requirement; matrix enforces ≤3 of our creators per sub (flags saturation), no cross-creator interaction, no same-content multi-sub. Route A only — no fabricated personas. ## Usage ``` $ python3 scripts/generate.py --roster kol_roster.json --subs subs_fit.json \ --brand "AcmeGear" --products "兔笼,快装板,监视器支架" --out-dir out {"n_creators": 5, "n_kol": 2, "n_koc": 3, "saturated_subs": {}, "out_dir": "out"} ``` Test: `python3 scripts/test.py` (real fixture in `fixtures/`, asserts layer split + fit-ranked mains + disclosure on every row). ## Pipeline position Runs after `reddit-kol-finder` (consumes its `kol_roster.json`) and before `reddit-content-brief` (which writes what each deployed creator posts). Front-end recon comes from `subreddit-deep-research` (community universe + high-upvote logic + rules) → its `--subs` fit output feeds this skill.