Pipeline Hub

workflow-combo-loop

The standing creative feedback loop for every pipeline (format-* skills, cartoon-h3, ugc-omni, vo-broll, dawn-statics, Dawn natives): PLAN the next concepts as combos from what is winning (stakes x emotion x payoff x root cause x mechanism x authority/POV x angle x device), TAG each pack/job at creation with combo_* keys, LAUNCH under that ad-name prefix, READ Meta weekly (read-only), RECODE only new concepts against the fixed codebook, UPDATE the map, recipes and the diff (incl. song vs static frequency/decay).

Lane: strategy (feeds every format-* pack) · not built yet: 0 (see below) · source: /Users/ayden/.openclaw/workspace/skills/workflow-combo-loop

SKILL.mdprocedure.mdsources.mdEvals (6)Learnings (3)

workflow-combo-loop — procedure detail

Commands

python3 scripts/combo_loop/refresh.py --brand dawn                # READ + RECODE + UPDATE (Meta GET, Sonnet on new concepts, cap 40)
python3 scripts/combo_loop/refresh.py --brand dawn --no-code      # read + aggregate only
python3 scripts/combo_loop/refresh.py --brand dawn --offline      # re-aggregate today's saved ads.json/weekly.json (no network)
python3 scripts/combo_loop/plan.py --format format-song --brand dawn --n 4
python3 scripts/combo_loop/tags.py keys
python3 scripts/combo_loop/tags.py check output/concept-packs/<slug>.md
python3 scripts/combo_loop/tags.py register --prefix N1006-A combo_avatar=parent-teen combo_angle=reframe ...

Files

Path What
scripts/combo_loop/brands.json per brand: ad account, breakeven ROAS, purchase action, codebook, stake bank, baseline dir, pack globs, hub sessions
scripts/combo_loop/codebook_dawn.md 14 fields; the table is parsed for allowed values (tags.py, coding validation)
output/combo-loop/dawn/codes.json cumulative codes; each has match.concept_keys (body hash) or match.ad_bases (ad base names) and source
output/combo-loop/dawn/<date>/ snapshot: MAP.md, recipes.json, units.json, agg.json, family.json, ads.json, weekly.json
output/combo-loop/dawn/2026-10-05/ baseline rebuilt from the 10-05 codes (spend/ROAS as coded that day) so the first diff is apples to apples

Ad ↔ code assignment (per ad, first match wins)

  1. Tag prefix: normalized ad name (strip LP Split ·, LW ·, · …, - Copy…, - SCALE…) starts with a tagged combo_ad_prefix (longest prefix wins). Tag sources: pack front matter, job.json/spec.json (combo_* keys or a "combo" block), hub ads.json entries (combo_* + meta_ad_name), output/combo-loop/<brand>/tagged/*.md.
  2. Ad base name in a code's match.ad_bases (the 10-05 songs were coded by base name).
  3. Concept key (ads ≥$100): S:/V: + md5 of the first 400 chars of the primary text (+ post id for video), as 10-05 group.py.
  4. Else: ads ≥$100 form NEW concepts (grouped by key); concepts ≥$100 go to Sonnet, biggest spend first, cap 40.

Launch scripts name ads ad hoc (sl0926-<slug>, 9-30 it · <id>, N1002-A1…): the tag's prefix must be set to what the launch script will write. Hub sessions already carry meta_ad_name on some ads (25 on 10-06); those scripts are fed to the coder.

Classification + recipes

Plan logic

ILLUSTRATIVE run (shape only; numbers come from the live refresh)

$ python3 scripts/combo_loop/plan.py --format format-courtroom --brand dawn --n 3
## Combo plan — format-courtroom · dawn · <date>
> Family `video` has N coded units and 0 paying parents: planning from the `song` recipe as the story proxy …
### C1 [exploit] stake_category: FAMILY/RELATIONSHIP → LEGAL
- Parent: <paying song> ($…, ROAS …, CPA $…)
```yaml
combo_avatar: parent-teen
...
combo_variable: stake
combo_ad_prefix: ""

`` Then: paste intooutput/concept-packs/.mdfront matter, setcombo_ad_prefix,tags.py check`, continue with the format skill.