@sellable/mcp 0.1.154 → 0.1.156

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (35) hide show
  1. package/agents/post-find-leads-filter-scout.md +6 -6
  2. package/agents/post-find-leads-message-scout.md +12 -11
  3. package/agents/source-scout-linkedin-engagement.md +29 -24
  4. package/agents/source-scout-prospeo-contact.md +3 -3
  5. package/agents/source-scout-sales-nav.md +3 -3
  6. package/dist/index-dev.js +0 -0
  7. package/dist/index.js +0 -0
  8. package/dist/tools/cells.js +1 -1
  9. package/dist/tools/leads.d.ts +1 -0
  10. package/dist/tools/leads.js +43 -25
  11. package/dist/tools/navigation.js +2 -2
  12. package/dist/tools/prompts.js +7 -7
  13. package/dist/tools/readiness.js +2 -2
  14. package/dist/tools/rubrics.js +1 -1
  15. package/package.json +1 -1
  16. package/skills/create-campaign/SKILL.md +37 -28
  17. package/skills/create-campaign-v2/SKILL.md +39 -50
  18. package/skills/create-campaign-v2/SOUL.md +4 -4
  19. package/skills/create-campaign-v2/core/auto-execute.README.md +9 -9
  20. package/skills/create-campaign-v2/core/flow.v2.json +7 -7
  21. package/skills/create-campaign-v2/core/policy.md +1 -1
  22. package/skills/create-campaign-v2/references/approval-gate-framing.md +2 -2
  23. package/skills/create-campaign-v2/references/filter-leads.md +11 -11
  24. package/skills/create-campaign-v2/references/final-handoff-contract.md +4 -4
  25. package/skills/create-campaign-v2/references/sample-validation-loop.md +8 -8
  26. package/skills/create-campaign-v2/references/step-13-import-leads.md +19 -18
  27. package/skills/create-campaign-v2/references/step-15-re-cascade.md +2 -2
  28. package/skills/create-campaign-v2/references/watch-guide-narration.md +15 -15
  29. package/skills/create-campaign-v2-tail/SKILL.md +27 -27
  30. package/skills/create-rubric/SKILL.md +1 -1
  31. package/skills/find-leads/SKILL.md +2 -2
  32. package/skills/providers/prospeo.md +1 -1
  33. package/skills/providers/sales-nav.md +1 -1
  34. package/skills/providers/signal-discovery.md +31 -27
  35. package/skills/research/config.json +9 -0
@@ -70,8 +70,10 @@ CampaignOffer state and the watch link are the customer-facing source of truth.
70
70
  Disk artifacts are optional debug/UAT diagnostics; normal customer runs should
71
71
  not create, link, or surface local draft files unless the user explicitly asks
72
72
  for them. Resume, gating, and handoff read campaign state first. The
73
- watchable campaign exists after the short brief; lead import is bounded to the
74
- first review batch. After that, the user chooses whether to use filters or skip.
73
+ watchable campaign exists after the short brief; source import copies the
74
+ confirmed list into the campaign, then an internal first campaign-table
75
+ execution slice configures filters and messages. After that, the user chooses
76
+ whether to use filters or skip.
75
77
  When filters are chosen, save rubrics, get filter approval, then wait for
76
78
  message-template approval before enrichment/filtering or Generate Message cells.
77
79
  Use Template is the default message path; AI Generated is only an explicit
@@ -159,15 +161,17 @@ precision, and referral paths, but it does not provide hiring-by-role filters;
159
161
  say that distinction plainly in the source-plan gate.
160
162
 
161
163
  After scouting, ask for a second approval on the concrete source action. For
162
- Signal Discovery, name how many selected posts will be scraped, the target
163
- engager/source-candidate volume, and the 15-row review/process sample size. For Sales
164
- Nav or Prospeo, name the specific approved import lane and source lead count.
164
+ Signal Discovery, name how many selected posts will be scraped and the
165
+ target engager/source-candidate volume. For Sales Nav or Prospeo, name the
166
+ specific approved import lane and source lead count. Keep the internal
167
+ 15-row campaign-table execution slice separate from source sampling.
165
168
 
166
169
  Do not call `import_leads` or `confirm_lead_list` until this second approval is
167
170
  granted.
168
171
 
169
172
  For Sales Nav and Prospeo, the second gate approves materializing the source
170
- lead list, not importing only the review batch. Use the first-page/sample review
173
+ lead list, not importing only the internal execution slice. Use the provider
174
+ first-page/source sample
171
175
  to calculate projected good fits: sampled fit rate after conservative cleanup,
172
176
  raw pool size, source target, and expected good-fit count. If the projected
173
177
  good-fit pool is below the campaign target, keep refining/broadening filters
@@ -175,27 +179,32 @@ granted.
175
179
  with a source-list `targetLeadCount` around 1,000 by default (provider cap is
176
180
  internal when the raw pool is larger). Only after the source list is ready
177
181
  should `confirm_lead_list({ reviewBatchLimit: 15 })` copy confirmed rows into
178
- the campaign table and return the first 15 review/process rows.
182
+ the campaign table and return the initial campaign-table execution slice rows.
179
183
 
180
184
  For Signal Discovery, the customer-facing approval card must use the exact
181
185
  action shape "Approve scraping N Signal Discovery posts?" and the chat summary
182
186
  should be a compact `## Source Recommendation` block with:
183
187
 
184
- - goal: about 300 good-fit prospects after cleanup, enrichment, and filters
185
- - source-candidate plan: about 1,500 raw engagers using a 20% working fit-rate
186
- assumption unless sampled data supports a different number
188
+ - goal: about 300 headline-fit prospects that pass the Signal Discovery
189
+ headline criteria for now
190
+ - source-candidate plan: use sample math first: target headline-fit prospects
191
+ divided by sampled headline-pass rate. If there is no stronger sample, use
192
+ about 1,500 raw engagers from the 20% working headline-pass assumption.
187
193
  - planning floor: continue with Signal Discovery only when sampled/projected
188
- fit is at least 10% after cleanup; below that, move to Sales Nav recent
189
- activity instead of scraping noisy engagers
190
- - review checkpoint: after the source list exists, copy confirmed source rows
191
- into the campaign and process only the first 15 for fit and message review
194
+ headline-fit rate is at least 10%; below that, move to Sales Nav recent
195
+ activity instead of scraping noisy engagers. Do not use the 10% floor as the
196
+ scrape-count denominator when the actual sample rate is higher.
197
+ - campaign setup checkpoint: after the source list exists, copy confirmed source rows
198
+ into the campaign and internally process the first execution slice for fit and message setup
192
199
  - a selected-post table with post author/topic, why it fits, and visible
193
200
  engagement
194
- - total visible pool and estimated good-fit pool
195
- - first pass: build the source list, copy all confirmed source rows into the
196
- campaign, then process only the first 15 rows before scaling
197
- - fallback: switch to Sales Nav recent activity if sampled/projected fit falls
198
- below 10%, or if the review batch is vendor-heavy, agency-heavy, or off-ICP
201
+ - total visible pool and estimated headline-fit pool
202
+ - first pass: build the source list and copy all confirmed source rows into the
203
+ campaign; the campaign table then internally processes its first execution
204
+ slice before scaling
205
+ - fallback: switch to Sales Nav recent activity if sampled/projected
206
+ headline-fit rate falls below 10%, or if the source sample is vendor-heavy,
207
+ agency-heavy, or off-ICP
199
208
 
200
209
  When the user has not supplied a source and multiple source angles are viable,
201
210
  scout those angles as independent branches when the host can actually do it:
@@ -288,7 +297,7 @@ After every `update_campaign({ campaignId, currentStep })`, use
288
297
  `get_campaign_navigation_state` when available as a compact orientation check:
289
298
  match the saved campaign state to the expected watch-link step, explain the
290
299
  current state in one sentence, and only then continue. Sender selection belongs
291
- at Settings after message approval and review-batch validation. After message
300
+ at Settings after message approval and campaign setup validation. After message
292
301
  validation, use Settings to help the user connect or select a LinkedIn sender.
293
302
  Explain Slack reply review before launch. After sender selection, attach the
294
303
  recommended sequence and move the watched UI to Send. Do not start the campaign
@@ -393,7 +402,7 @@ the brief. This is only the client-prospect/bootstrap identity for
393
402
  Do not call `mcp__sellable__list_senders`, `mcp__sellable__get_sender`, or
394
403
  surface connected/missing sender state during setup, brief, source, filter, or
395
404
  message review. Sender availability belongs only to the Settings/final launch
396
- handoff after message approval and the review-batch validation sample.
405
+ handoff after message approval and the campaign setup validation slice.
397
406
 
398
407
  If the invocation or user answer includes an existing `clientProspectId`, keep
399
408
  it as the preferred `create_campaign` identity input. If it includes a LinkedIn
@@ -677,13 +686,13 @@ updates.
677
686
  until `hasMore=false`. Message review requires Message Draft Builder output:
678
687
  do not draft from a checklist, local markdown artifact, or parent-thread
679
688
  intuition. Use campaign state, campaign brief content, selected source state, and
680
- first review/process sample rows as the source of truth; do not read stale local
689
+ initial campaign-table execution slice rows as the source of truth; do not read stale local
681
690
  markdown such as `message-validation.md`, inspect the database directly, or
682
691
  synthesize local validation artifacts from general knowledge.
683
692
  5. Create the campaign shell early with the v1 brief so the user can open the
684
693
  watch link and see useful setup state immediately. Materialize the approved
685
- source list, copy confirmed rows into the campaign, and process only the
686
- first 15 review rows after the source is attached to the campaign; do not
694
+ source list, copy confirmed rows into the campaign, and internally process the
695
+ first campaign-table execution slice after the source is attached to the campaign; do not
687
696
  queue workflow cells, attach a sequence, or start until saved filters and the
688
697
  message template/token rules are approved. When filters are chosen, immediately
689
698
  call `mcp__sellable__update_campaign({ campaignId, enableICPFilters: true, currentStep: "create-icp-rubric", watchNarration })`
@@ -691,7 +700,7 @@ updates.
691
700
  After rubrics save, keep Filter Rules visible for approval; after approval,
692
701
  move to Filter Leads and wait there for the background message recommendation.
693
702
  If filters are skipped, move to Messages/message review. Queue the bounded
694
- review-batch `enrichCellId` cells only after message approval. Move to
703
+ campaign-table execution-slice `enrichCellId` cells only after message approval. Move to
695
704
  Messages only after at least one review row passes and one generated message
696
705
  is ready.
697
706
  Do not ask the user to approve the brief before shell creation unless they
@@ -700,14 +709,14 @@ updates.
700
709
  `mcp__sellable__update_campaign({ campaignId, currentStep })` before major
701
710
  visible work so the user can watch progress in the app: `create-offer` for
702
711
  the brief, `pick-provider` or the selected provider step while sourcing,
703
- `filter-choice` after the review batch, `create-icp-rubric` as soon
712
+ `filter-choice` after source rows are copied into the campaign table, `create-icp-rubric` as soon
704
713
  as filters are chosen and while saved filters await approval,
705
714
  `apply-icp-rubric` after filter approval and message approval while bounded
706
715
  enrichment/filter scoring runs, `validate-sample` only as a recovery/legacy
707
716
  observation state,
708
- `auto-execute-messaging` after at least one row passes and review-batch
717
+ `auto-execute-messaging` after at least one row passes and initial campaign-row
709
718
  messages are being generated or reviewed, `awaiting-user-greenlight` only
710
- after generated review-batch messages are approved, `settings` for sender
719
+ after generated campaign-row messages are approved, `settings` for sender
711
720
  selection, `sequence` after sender attach, and `send` once the recommended
712
721
  sequence is attached. Do not advance the step backward.
713
722
  7. Keep `selectedLeadListId` as the source list and `workflowTableId` as the
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: create-campaign-v2
3
- description: Execute the compact JSON-gated shell-first campaign flow: resolve campaign identity, create a watchable CampaignOffer shell with the brief, attach and approve the source, copy the confirmed source list into the campaign, process the first 15 review rows, persist rubrics and approved message template, validate the first passing generated message, then hand off to Settings, sequence, and start.
3
+ description: Execute the compact JSON-gated shell-first campaign flow: resolve campaign identity, create a watchable CampaignOffer shell with the brief, attach and approve the source, copy the confirmed source list into the campaign, internally process the first campaign-table execution slice, persist rubrics and approved message template, validate the first passing generated message, then hand off to Settings, sequence, and start.
4
4
  visibility: internal
5
5
  ---
6
6
 
@@ -40,8 +40,10 @@ for debug output.
40
40
  4. Create the watchable campaign shell with `create_campaign` and the v1 brief.
41
41
  5. Surface the direct watch link.
42
42
  6. Choose and approve the lead source.
43
- 7. Materialize the approved source list, confirm/copy it into the campaign, and
44
- use only the first 15 rows as the initial review/process sample.
43
+ 7. Materialize the approved source list and confirm/copy it into the campaign.
44
+ Internally use the first 15 imported campaign-table rows as the initial
45
+ execution slice for filter/message setup; do not present that as source
46
+ sampling.
45
47
  8. Ask whether to use filters or skip them.
46
48
  9. Persist lead rubrics when filters are enabled, then ask approval while the
47
49
  app remains on Filter Rules.
@@ -74,7 +76,7 @@ offers are plausible, ask one campaign-focus choice before buyer/offer/proof.
74
76
 
75
77
  Do not call `list_senders`, do not infer the campaign from connected senders,
76
78
  and do not show a sender picker during setup. Sender availability belongs only
77
- to Settings after message approval and review-batch validation.
79
+ to Settings after message approval and campaign setup validation.
78
80
 
79
81
  Use `research-sender` for concise identity/proof research and call
80
82
  `complete_sender_research` before shell creation. If WebSearch is unavailable,
@@ -178,33 +180,27 @@ reasonable refinement, move to Prospeo. Prospeo is the terminal fallback; if it
178
180
  also falls below 10%, tighten the ICP/source direction instead of inventing
179
181
  another provider.
180
182
 
181
- After scouting, show a second approval gate for the concrete source action. For
182
- Signal Discovery, this gate must say how many selected posts will be scraped,
183
- the target engager/source-candidate volume, the bounded campaign review-batch
184
- size, the cleanup risk, and the fallback if the selected posts look wrong. The
185
- approval label must describe the action with the count, such as "Approve
186
- scraping 3 Signal Discovery posts?" For Sales Nav or Prospeo, the label should
187
- name the specific search/import lane and source lead count. Do not call
188
- `import_leads` or `confirm_lead_list` until this second source-action approval
189
- is granted.
190
-
191
- For Sales Nav and Prospeo, do not ask to import only the 15-row review sample at
192
- the source-action gate. First-page samples are for source math: compute sampled
193
- fit after conservative cleanup, project how many good-fit prospects the raw
194
- pool can yield, and keep refining filters while the projected good-fit pool is
195
- below the campaign target. Once the lane clears the target, ask
196
- approval to materialize the source list with
197
- `targetLeadCount` around 1,000 source contacts by default (use the provider cap
198
- internally when the raw pool is larger). After that source list is ready,
199
- `confirm_lead_list({ reviewBatchLimit: 15 })` copies confirmed source rows into
200
- the campaign table and returns the first 15 review/process row ids for fit and
201
- message review.
183
+ After scouting, show a second approval gate for the concrete source action.
184
+ For Signal Discovery, state selected-post count, target engager/source-candidate
185
+ volume, internal campaign-table execution-slice size, cleanup risk, and fallback;
186
+ label the approval like "Approve scraping 3 Signal Discovery posts?" For Sales
187
+ Nav or Prospeo, name the specific search/import lane and source lead count. Do
188
+ not call `import_leads` or `confirm_lead_list` until this gate is approved.
189
+
190
+ For Sales Nav and Prospeo, do not ask to import only the internal 15-row
191
+ campaign-table execution slice at the source-action gate. First-page samples are
192
+ source math: sampled fit after cleanup, projected good-fit prospects, and
193
+ whether the lane clears the campaign target. Once it clears, ask approval to
194
+ materialize the source list with `targetLeadCount` around 1,000 source contacts
195
+ by default. After that, `confirm_lead_list({ reviewBatchLimit: 15 })` copies
196
+ confirmed source rows into the campaign table and returns the initial
197
+ campaign-table execution slice row ids for filter and message setup.
202
198
 
203
199
  After the user approves this concrete source-action gate, do not show the
204
200
  Source Recommendation again and do not ask another source approval question.
205
201
  Acknowledge once, then call `import_leads` immediately with the approved source
206
202
  math. For Sales Nav/Prospeo, pass `targetLeadCount` as the approved source-list
207
- export count, not the review-batch size. For Signal Discovery, pass
203
+ export count, not the campaign execution-slice size. For Signal Discovery, pass
208
204
  `provider: "signal-discovery"`, `targetEngagerCount`, `maxPostsToScrape`, and
209
205
  `confirmed: true`; the tool owns moving the watch UI to source-list progress
210
206
  after a lead-list/job id exists.
@@ -217,36 +213,28 @@ selected posts exist:
217
213
 
218
214
  Use Signal Discovery first.
219
215
 
220
- **Goal:** ~300 good-fit prospects after cleanup, enrichment, and filters<br>
221
- **Working assumption:** ~20% of raw post engagers become good-fit prospects<br>
216
+ **Goal:** ~300 headline-fit prospects that pass the Signal Discovery headline criteria<br>
217
+ **Working assumption:** ~20% of raw post engagers pass headline filtering unless a real sample supports a different rate<br>
222
218
  **Engagers needed:** ~1,500 raw engagers<br>
223
- **Planning floor:** continue only when sampled/projected fit is at least 10% after cleanup; below that, switch to Sales Nav recent activity<br>
224
- **Review checkpoint:** after the source list exists, copy the entire confirmed source list into the campaign and process only the first 15 rows for fit and message review<br>
219
+ **Planning floor:** continue only when sampled/projected headline-fit rate is at least 10%; below that, switch to Sales Nav recent activity<br>
220
+ **Campaign setup checkpoint:** after the source list exists, copy the entire confirmed source list into the campaign and internally process only the first execution slice for filter and message setup<br>
225
221
 
226
222
  ### Selected posts
227
223
 
228
- | Post | Why it fits | Visible engagement |
229
- | ---------------- | ----------------------------------------------- | -----------------: |
230
- | Dylan Power | Claude outbound system | ~1,571 |
231
- | Fivos Aresti | Replacing Clay outbound with Claude Code | ~734 |
232
- | Divyanshi Sharma | LinkedIn lead-gen system built with Claude Code | ~508 |
224
+ Show author/topic, why it fits, and visible engagement.
233
225
 
234
- **Total visible pool:** ~2,813 engagers<br>
235
- **Estimated good-fit pool at 20%:** ~560 prospects before dedupe/risk cleanup
226
+ **Total visible pool:** ~2,800 engagers<br>
227
+ **Estimated good-fit pool at 20%:** ~560 prospects before cleanup
236
228
 
237
229
  ### Recommendation
238
230
 
239
231
  Approve scraping these 3 posts.
240
232
 
241
- This gives enough volume to target ~300 good-fit prospects after cleanup, while
242
- keeping the source tied to people already engaging with Claude Code outbound /
243
- AI-native sales workflows.
233
+ **First pass:** build the source list and copy all confirmed source rows into
234
+ the campaign. The campaign table then internally processes its first execution
235
+ slice so filters and generated copy are configured before scaling.
244
236
 
245
- **First pass:** build the source list, copy all confirmed source rows into the
246
- campaign, then process only the first 15 rows so we can inspect quality before
247
- scaling.
248
-
249
- **Fallback:** if sampled/projected fit falls below 10%, or if the review batch
237
+ **Fallback:** if sampled/projected fit falls below 10%, or if the source sample
250
238
  is too vendor-heavy, agency-heavy, or off-ICP, switch to Sales Nav recent
251
239
  activity.
252
240
  ```
@@ -258,7 +246,8 @@ authorizes. For Sales Nav/Prospeo it must also show source export math:
258
246
  `rawResultCount`, `sampledFitRate`, conservative projected fit rate,
259
247
  `targetLeadCount` for the source list, and projected good-fit count from that
260
248
  export. If projected good-fit count is below target, the recommendation is to
261
- refine or broaden filters, not to run a 15-row review sample.
249
+ refine or broaden filters, not to run the internal campaign-table execution slice
250
+ as if it were source sampling.
262
251
 
263
252
  Supplied profile CSVs, company/domain CSVs, pasted domains, and existing
264
253
  Sellable lead lists are supported, but keep provider mechanics out of the first
@@ -271,7 +260,7 @@ After `confirm_lead_list` copies a non-empty confirmed source into the campaign
271
260
  filter-choice question immediately. Do not call
272
261
  `get_post_find_leads_scout_registry`, load filter/message subskill prompts, or
273
262
  spawn post-lead workers before that question. The only customer-facing work
274
- before the question should be a short review-batch summary and the choice:
263
+ before the question should be a short campaign setup summary and the choice:
275
264
  add filters, skip filters, or revise source.
276
265
 
277
266
  If the user chooses filters, then load the post-lead registry/reference needed
@@ -305,7 +294,7 @@ get_subskill_prompt({ subskillName: "generate-messages", offset, limit }) until
305
294
  No shortcut message instructions are valid. If the host cannot launch the
306
295
  agent, the parent fallback must run the same full prompt from live campaign
307
296
  state before drafting. Do not render message review until
308
- `messageDraftRecommendation` proves current campaign/table/review-batch
297
+ `messageDraftRecommendation` proves current campaign/table/execution-slice
309
298
  `generate-messages` basis.
310
299
 
311
300
  ## Hard Gates
@@ -314,7 +303,7 @@ state before drafting. Do not render message review until
314
303
  - Do not call `import_leads` or `confirm_lead_list` until the lead source is
315
304
  approved.
316
305
  - Do not queue enrichment, ICP scoring, filtering, or product Generate Message
317
- cells until the review batch exists and the required message/filter approvals
306
+ cells until the campaign-table execution slice exists and the required message/filter approvals
318
307
  are complete.
319
308
  - Do not call `check_rubric`; persist production rubrics with `save_rubrics`.
320
309
  - Do not call `start_campaign` until the user explicitly confirms launch after
@@ -330,6 +319,6 @@ Load references only when needed:
330
319
  - `references/lead-validation-preview.md` for legacy/debug preview shapes.
331
320
  - `references/filter-leads.md` for rubric design and `save_rubrics` rules.
332
321
  - `references/step-13-import-leads.md` before source copy.
333
- - `references/sample-validation-loop.md` before review-batch validation.
322
+ - `references/sample-validation-loop.md` before campaign setup validation.
334
323
  - `references/final-handoff-contract.md` for Settings, sender, sequence, and
335
324
  start.
@@ -52,8 +52,8 @@ turn anchored to that:
52
52
  4. Ask for brief approval before any lead import or sending-adjacent work.
53
53
  5. Find likely responders and approve the source.
54
54
  6. Copy the confirmed source list into the campaign and use the first 15 rows as
55
- the review/process sample.
56
- 7. Filter for fit and draft the reusable message template from the same sample.
55
+ the internal campaign-table execution slice for setup.
56
+ 7. Filter for fit and draft the reusable message template from the same slice.
57
57
  8. Queue the bounded fit cascade from saved rubrics/run conditions only after the
58
58
  message template is approved.
59
59
  9. Use Settings for sender selection, sequence attach, and final launch handoff.
@@ -83,7 +83,7 @@ example, like `omit the noticed... line` or `use "operators"`. Missing data
83
83
  should never produce robotic or creepy copy.
84
84
 
85
85
  Approved token guidance is part of the campaign, not just the review. After the
86
- first review/process sample exists and message generation has a selected
86
+ initial campaign-table execution slice exists and message generation has a selected
87
87
  template, the campaign brief should carry forward the token fill rules and examples before any
88
88
  workflow-table cascade is queued: good fills, good omits, bad fills, fallback
89
89
  rules, and why the bad fills are blocked.
@@ -243,7 +243,7 @@ For Signal Discovery, the second gate is not "approve source" in the abstract.
243
243
  It is a concrete scrape approval: show a compact `## Source Recommendation`
244
244
  with the ~150 good-fit prospect goal, 15% raw-engager assumption, selected-post
245
245
  table, total visible pool, estimated good-fit pool, 10% planning floor,
246
- first-pass review batch, and fallback. The approval question should be "Approve
246
+ first-pass campaign setup, and fallback. The approval question should be "Approve
247
247
  scraping N Signal Discovery posts?"
248
248
 
249
249
  That scrape approval is single-use. Once the user approves it, do not replay
@@ -20,7 +20,7 @@ into the campaign).
20
20
 
21
21
  ### `import`
22
22
 
23
- - **`importLimit`** — Review/process sample size used after Step 13 copies the
23
+ - **`importLimit`** — Internal execution-slice size used after Step 13 copies the
24
24
  confirmed source rows into the campaign. The tail MUST NOT exceed this cap
25
25
  before the message template is approved and at least one generated passing
26
26
  message is reviewed.
@@ -31,18 +31,18 @@ into the campaign).
31
31
 
32
32
  ### `sample`
33
33
 
34
- - **`sampleSize`** — How many rows the validation loop pulls from the first
35
- review/process sample. In v2 this matches the process cap (default 15), so the
34
+ - **`sampleSize`** — How many rows the validation loop pulls from the initial
35
+ campaign-table execution slice. In v2 this matches the process cap (default 15), so the
36
36
  user sees enough real rows to judge the campaign without spending credits on
37
37
  hundreds more.
38
38
  - **`minProjectedPass`** — Passing-message floor required before handoff.
39
- The default requires one passing example from the 15-row review sample.
39
+ The default requires one passing example from the 15-row internal slice.
40
40
  Math:
41
41
  ```text
42
42
  projectedPass = round(passInSample / sampleSize * importLimit)
43
43
  ```
44
44
  With defaults (sampleSize=15, importLimit=15), `projectedPass` equals the
45
- actual review sample pass count. One passing row is exactly at the floor.
45
+ actual initial-slice pass count. One passing row is exactly at the floor.
46
46
  - **`maxRevisionRounds`** — Hard cap before escalating to the user. A
47
47
  revision round is one full sample pass that triggered brief revision
48
48
  and retried. On stale resume the counter does NOT reset.
@@ -50,7 +50,7 @@ into the campaign).
50
50
  ### `messaging`
51
51
 
52
52
  - **`tokenContract`** — `strict` rejects unresolved/unsupported tokens
53
- before handing the review batch to the user. `relaxed` logs warnings but
53
+ before handing generated copy to the user. `relaxed` logs warnings but
54
54
  proceeds.
55
55
  Default `strict` because live campaign state shouldn't ship messages
56
56
  with unresolved templating.
@@ -125,9 +125,9 @@ into the campaign).
125
125
  After 3-5 real campaigns complete the tail, review the threshold-trip
126
126
  logs and adjust:
127
127
 
128
- - `importLimit` higher only if users consistently ask for larger review
129
- batches and credit spend is acceptable.
130
- - `sampleSize` higher if a 15-row review sample is not enough to judge
128
+ - `importLimit` higher only if users consistently ask for larger initial
129
+ setup slices and credit spend is acceptable.
130
+ - `sampleSize` higher if a 15-row internal slice is not enough to judge
131
131
  quality for a specific market.
132
132
  - `minProjectedPass` lower only if fewer than 3 passing examples is still
133
133
  enough for a confident user decision.
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": "v2.1-compact",
3
3
  "workflow": "create-campaign-v2",
4
- "principle": "CampaignOffer state and watch link are canonical. Create the watched shell, approve source, materialize and confirm the source list, process the first 15 review rows, save rubrics for approval, approve the message template, then run the bounded filter/message cascade before Settings, sequence, and explicit start.",
4
+ "principle": "CampaignOffer state and watch link are canonical. Create the watched shell, approve source, materialize and confirm the source list, internally process the first campaign-table execution slice, save rubrics for approval, approve the message template, then run the bounded filter/message cascade before Settings, sequence, and explicit start.",
5
5
  "normalCustomerPath": "Use campaign state, MCP responses, and concise watchNarration. Do not create, read, link, or surface local draft files.",
6
6
  "legacyCompatibility": {
7
7
  "validationSubskill": "create-campaign-v2-validation",
@@ -494,7 +494,7 @@
494
494
  "specific source action awaiting approval",
495
495
  "for Signal Discovery: compact Source Recommendation with target, raw-engager math, selected-post table, review checkpoint, estimated fit, and fallback",
496
496
  "for Signal Discovery: selected post count and target engager/source-candidate volume",
497
- "15-row review/process sample size",
497
+ "internal campaign-table execution slice size, clearly separate from source sampling",
498
498
  "runner-up and why it lost",
499
499
  "raw volume",
500
500
  "sampled people",
@@ -923,7 +923,7 @@
923
923
  "run background post-find-leads-message-scout when available",
924
924
  "get_subskill_prompt({ subskillName: \"generate-messages\", offset, limit }) until hasMore=false"
925
925
  ],
926
- "stateSource": "campaignBrief, source, selectedLeadListId, workflowTableId, review-batch row ids/hash",
926
+ "stateSource": "campaignBrief, source, selectedLeadListId, workflowTableId, execution-slice row ids/hash",
927
927
  "outputState": "messageDraftRecommendation"
928
928
  }
929
929
  ],
@@ -945,7 +945,7 @@
945
945
  "Run post-find-leads-message-scout when available; otherwise parent fallback must load get_subskill_prompt({ subskillName: \"generate-messages\" }) from live state.",
946
946
  "brief.md, lead-review.md, and lead-sample.json are optional debug context only.",
947
947
  "messageDraftRecommendation returns templateRecommendation, tokenFillRules, renderedSample, concerns, status, basisToken, outputAt, outputHash, and error/retry detail.",
948
- "If campaign/source/table/review-batch basis does not match, classify the output stale or blocked."
948
+ "If campaign/source/table/execution-slice basis does not match, classify the output stale or blocked."
949
949
  ],
950
950
  "doNotAllow": [
951
951
  "create_campaign",
@@ -1052,7 +1052,7 @@
1052
1052
  },
1053
1053
  {
1054
1054
  "id": "validate-sample",
1055
- "label": "Validate first review/process sample",
1055
+ "label": "Validate campaign-table execution slice",
1056
1056
  "currentStepValue": "apply-icp-rubric",
1057
1057
  "reference": "references/sample-validation-loop.md",
1058
1058
  "visibleStepRule": "Filter Leads is reached only after saved-filter approval. On approve-message, save the template, refresh apply-icp-rubric narration, then queue bounded Enrich Prospect cells.",
@@ -1068,7 +1068,7 @@
1068
1068
  },
1069
1069
  {
1070
1070
  "tool": "queue_cells",
1071
- "purpose": "queue ICP/enrichment cells for the first 15 review/process rows only",
1071
+ "purpose": "queue ICP/enrichment cells for the internal campaign-table execution slice only",
1072
1072
  "requiredFields": [
1073
1073
  "workflowTableId",
1074
1074
  "reviewBatchRowIds",
@@ -1148,7 +1148,7 @@
1148
1148
  },
1149
1149
  {
1150
1150
  "id": "auto-execute-messaging",
1151
- "label": "Generate review-batch messages",
1151
+ "label": "Generate initial campaign-row messages",
1152
1152
  "currentStepValue": "auto-execute-messaging",
1153
1153
  "references": [
1154
1154
  "references/parallel-critique-protocol.md",
@@ -71,7 +71,7 @@ Revision choices route back to the exact upstream stage:
71
71
 
72
72
  ## 6) Post-Message Tail
73
73
 
74
- After message approval, queue only the first review/process sample cells needed to move
74
+ After message approval, queue only the initial campaign-table execution-slice cells needed to move
75
75
  the watched app through enrichment, ICP filtering, and approved-template message
76
76
  generation. Keep the tail observable through watch narration.
77
77
 
@@ -49,8 +49,8 @@ gate; route back to message generation.
49
49
  the user intentionally supplied a source. If present, the approval packet must
50
50
  summarize the source type, input mode, supplied profile/domain/list count,
51
51
  sampled count, what will be materialized after approval, and that only the
52
- review batch will be enriched/messaged before greenlight.
53
- Use the phrase "only the review batch" plainly enough that the operator
52
+ initial campaign rows will be enriched/messaged before greenlight.
53
+ Use the phrase "only the initial campaign rows" plainly enough that the operator
54
54
  understands approval is not permission to process the full supplied source.
55
55
 
56
56
  If any required artifact is missing, do NOT show the gate. Route back to the
@@ -21,7 +21,7 @@ Use only live campaign inputs supplied by the parent thread or scoped MCP tools:
21
21
  - campaign brief content
22
22
  - approved source decision and selected lead list/source state
23
23
  - `workflowTableId`
24
- - first review/process sample rows, including row ids/hash when available
24
+ - initial campaign-table execution slice rows, including row ids/hash when available
25
25
  - user's filter choice and any explicit exclusions or tradeoffs
26
26
 
27
27
  The filter may inspect campaign-table rows through scoped tools such as
@@ -112,7 +112,7 @@ prospect can afford this specific offer at this specific price point. Use a
112
112
  reasonable public proxy such as funding, headcount, revenue band, team maturity,
113
113
  current tool spend, practice size, location count, consumer purchasing power,
114
114
  job-to-be-done intensity, or buyer budget ownership. If no reliable proxy exists
115
- in the review batch or normal enrichment path, return `confirm-with-user` and
115
+ in the initial campaign rows or normal enrichment path, return `confirm-with-user` and
116
116
  ask the parent to get the budget proxy before message approval.
117
117
 
118
118
  ## Table-Stakes Gates
@@ -141,7 +141,7 @@ the gate is irrelevant for this campaign:
141
141
  ## Competitor / Vendor Exclusion
142
142
 
143
143
  Every confirmed filter should include a competitor / vendor / wrong-side
144
- exclusion unless the brief and review batch make it clearly irrelevant.
144
+ exclusion unless the brief and campaign rows make it clearly irrelevant.
145
145
 
146
146
  Use this test:
147
147
 
@@ -149,11 +149,11 @@ Use this test:
149
149
  or marketplace participant appear on the same comparison page as the client?
150
150
  - Would they compete for the same customer budget, sell into the same buyer
151
151
  workflow, or sit on the wrong side of the marketplace?
152
- - Did the review batch show adjacent companies that the customer would likely
152
+ - Did the campaign rows show adjacent companies that the customer would likely
153
153
  reject only after seeing the list?
154
154
 
155
155
  If yes, add an explicit exclude rule. Include named competitors from the brief,
156
- review batch, or user context when available, plus the general category
156
+ campaign rows, or user context when available, plus the general category
157
157
  exclusion so new lookalike competitors are also blocked.
158
158
 
159
159
  ## Marketplace Safety
@@ -170,14 +170,14 @@ Examples:
170
170
  - Supply-side acquisition campaign: exclude demand-side buyers or employers when
171
171
  they are not the outbound target.
172
172
 
173
- If more than roughly 20% of the review batch appears to be the forbidden side,
173
+ If more than roughly 20% of the initial campaign rows appear to be the forbidden side,
174
174
  classify it as a list/source problem and return `revise-find-leads`; do not
175
175
  hide that problem behind narrow rubrics.
176
176
 
177
177
  ## Suppression And Relationship Safety
178
178
 
179
179
  Do not put DNC or one-off relationship-safety notes into production rubrics
180
- unless the review batch shows that the pattern will leak at meaningful volume
180
+ unless the campaign rows show that the pattern will leak at meaningful volume
181
181
  and normal DNC/domain suppression will not catch it. Former employers, existing
182
182
  customers, investors, partner lists, and one-off do-not-contact domains usually
183
183
  belong in the recommendation as DNC/suppression instructions outside the rubric JSON.
@@ -231,19 +231,19 @@ Recommended grouping:
231
231
 
232
232
  For each proposed rule:
233
233
 
234
- 1. Inspect matching and failing review-batch rows.
234
+ 1. Inspect matching and failing campaign rows.
235
235
  2. Decide whether the rule removes real noise or blocks real buyers.
236
236
  3. Mark the rule as necessary, loosen, or remove.
237
237
  4. Estimate the resulting pass rate and yield impact.
238
238
 
239
239
  Repeated false positives should become explicit exclude rules whenever the same
240
- pattern appears more than once in the review batch. Preview-card missingness is
240
+ pattern appears more than once in the campaign rows. Preview-card missingness is
241
241
  not a hard production exclusion unless the same missing evidence will remain
242
242
  missing after normal enrichment/public research.
243
243
 
244
244
  ## Source Contradictions
245
245
 
246
- If review-batch evidence contradicts the approved source thesis, do not rewrite
246
+ If campaign-row evidence contradicts the approved source thesis, do not rewrite
247
247
  the campaign brief silently. Return one of these instead:
248
248
 
249
249
  - `confirm-with-user` when a viable alternative source or filter tradeoff needs
@@ -319,7 +319,7 @@ authority, account fit, capacity, geography, and exclusions.
319
319
  - Do not save rubrics for `confirm-with-user` or `revise-find-leads`.
320
320
  - Do not loosen the filter just to preserve volume.
321
321
  - Do not make the filter so narrow that it contradicts the approved source
322
- unless review-batch evidence clearly requires it.
322
+ unless campaign-row evidence clearly requires it.
323
323
 
324
324
  ## Prohibited During Normal Create-Campaign
325
325
 
@@ -18,7 +18,7 @@ CampaignOffer state and the watch link are canonical. Disk artifacts are
18
18
  optional debug/UAT diagnostics, and normal customer runs should not expose local
19
19
  draft files. Resume, gating, and handoff read campaign state first. At this
20
20
  point, `workflowTableId` is the campaign table, while `selectedLeadListId`
21
- remains the source list that produced the review batch.
21
+ remains the source list that produced the campaign rows.
22
22
 
23
23
  ## Step 16 Setup
24
24
 
@@ -64,7 +64,7 @@ currentStep: "sequence" })` to attach the sender via the v3 senders route and
64
64
  The final handoff must answer five customer questions in plain language:
65
65
 
66
66
  - where to inspect the campaign (`watchUrl`)
67
- - what is ready now (brief, filters/rubrics, review-batch leads, messages, and
67
+ - what is ready now (brief, filters/rubrics, campaign rows, messages, and
68
68
  sequence after a sender is attached)
69
69
  - whether the next UI step is Settings, Sequence, or Send
70
70
  - why the selected LinkedIn sender and Slack reply review matter before launch
@@ -77,8 +77,8 @@ When `lead-source-intake.json` exists, also answer:
77
77
  - which source was materialized (`supplied-linkedin-profiles`,
78
78
  `supplied-domains`, or `existing-lead-list`)
79
79
  - how many rows/accounts were supplied
80
- - how many rows were imported into the first review batch
81
- - that only the first review batch was enriched and messaged before
80
+ - how many rows were imported into the initial campaign setup slice
81
+ - that only the initial campaign rows were enriched and messaged before
82
82
  greenlight, not the full supplied list
83
83
  - for `existing-lead-list`, that the source list was reused, not recreated
84
84