Skip to content

runneth-classic: infer + confirm naming conventions during onboarding - #100

Open
rezakhadjavi wants to merge 1 commit into
mainfrom
runneth/runneth-classic-naming-conventions
Open

runneth-classic: infer + confirm naming conventions during onboarding#100
rezakhadjavi wants to merge 1 commit into
mainfrom
runneth/runneth-classic-naming-conventions

Conversation

@rezakhadjavi

Copy link
Copy Markdown
Contributor

What this PR adds

Naming convention inference + confirmation as part of runneth-classic setup.

Performance creative work lives or dies on naming conventions. Customers say "the May ads" or "the lip balm launch" or "the question hooks from the UGC test" — and the agent needs to translate those phrases into exact campaignName / adsetName / adName filters. Without a captured convention, the orchestrator either guesses (sometimes wrong) or runs motion meta filter-reference round-trips on every turn that contains a fuzzy phrase. Neither is great.

This PR makes naming convention discovery part of the standard onboarding flow.

Phase 0 addition

During the 365-day creative library pull (the same one that powers graveyard inference), Phase 0 also extracts structural patterns in:

  • campaignName
  • adsetName
  • adName

It looks for common separators (_, -, |, /), consistent positional segments, repeated prefixes, and abbreviations. The goal is to decode each segment: market code, objective, product line, audience, hook tactic, format, iteration number, date code, persona, anything else encoded in names.

Saved to /agent/brain/runneth-classic/workspaces/<slug>/naming-conventions.md so the orchestrator's Step 0 re-anchor reads it on every future chain run.

Phase 1 addition — Turn 4d

Surface the inferred decoding as questions, using real examples from the workspace's actual data:

"Looking at your campaigns and ads, I think I'm seeing a pattern. Here's my read:

  • Campaign names look like <MARKET>_<OBJECTIVE>_<PRODUCT>_<DATE> — e.g., US_Conv_LipBalm_0526 means US market, conversion campaign, lip balm product, May 2026.
  • Ad set names seem to encode audience: <INTEREST>_<AGE>_<GENDER> — e.g., Wellness_25-34_F is the wellness-interest ad set targeting women 25-34.
  • Ad names look like <HOOK_TACTIC>_<FORMAT>_<ITERATION> — e.g., Question_UGC_v3 is a question-hook UGC creative, third iteration.

Am I reading this right? Anything I'm missing — segments that mean something I haven't decoded, or codes that aren't obvious from the names alone?"

Customer corrects what we got wrong and fills in segments that data alone couldn't decode (e.g., "P1/P2/P3 = persona 1/2/3 in our strategy matrix").

The turn only fires if Phase 0 surfaced confident structural patterns. If names look random or human-readable, skip silently and note the absence in naming-conventions.md so the orchestrator knows to fall back to motion meta filter-reference for fuzzy phrases rather than guessing at structure.

How the orchestrator uses it

  • Step 0 re-anchor reads naming-conventions.md on every chain run.
  • Slice-integrity user.md rule references it when interpreting user filter phrases:
    • "the May ads" → campaignName includes "0526"
    • "the lip balm launch" → campaignName includes "LipBalm"
    • "the question hooks from the UGC test" → adName includes "Question" AND adName includes "UGC"
  • Filter construction skips motion meta filter-reference round-trips when the convention decodes the user's phrase directly. Filter-reference becomes a fallback for cases the convention doesn't cover, not a default path.

Files changed

Only runneth-classic/setup-runneth-classic/SKILL.md. Adds 53 lines covering the Phase 0 extraction step and the new Turn 4d.

Cumulative iteration progress

This is the third PR layering improvements onto the original runneth-classic install after real test installs:

All against the same runneth-classic/setup-runneth-classic/SKILL.md. Each builds on the last.

Performance creative work depends on naming conventions to translate user phrases
like 'the May ads' or 'the Q4 launch campaigns' into exact campaignName /
adsetName / adName filters. Without a captured convention, the orchestrator
either guesses or runs filter-reference round-trips on every turn.

Phase 0 additions:

- During the 365-day creative library pull (the same one that powers the
  graveyard inference), extract structural patterns in campaignName, adsetName,
  and adName fields. Identify separators (_, -, |, /), positional segments,
  prefixes, and abbreviations.
- Decode each position: market code, objective, product line, audience,
  hook tactic, format, iteration number, date code, persona.
- Save inference to workspaces/<slug>/naming-conventions.md so the
  orchestrator's slice-integrity rule reads it on every chain run.

Phase 1 additions:

- New Turn 4d — surface the inferred decoding with real examples from the
  workspace's actual data, ask the customer to confirm and fill in segments
  that weren't obvious from names alone. Update the file with the confirmed
  convention.
- Only fires if Phase 0 surfaced confident structural patterns. If names look
  random or human-readable, skip and note the absence so the orchestrator
  knows to fall back to motion meta filter-reference for fuzzy phrases.

How the orchestrator uses it:

- Step 0 re-anchor reads naming-conventions.md on every chain run
- Slice-integrity user.md rule references it when interpreting user filter
  phrases — 'May ads' becomes campaignName includes '0526' automatically,
  'lip balm launch' becomes campaignName includes 'LipBalm', 'question hooks
  from UGC test' becomes adName includes 'Question' AND adName includes 'UGC'
- Filter construction skips filter-reference round-trips when the convention
  decodes the user's phrase directly
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant