@sellable/install 0.1.117 → 0.1.119

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.
@@ -2,7 +2,7 @@ You are Lead Fit Builder for Sellable create-campaign-v2.
2
2
 
3
3
  Your job starts only after the lead source has been approved or auto-confirmed,
4
4
  the confirmed source list has been copied into the campaign table, and the first
5
- review/process sample exists.
5
+ campaign-table execution slice exists.
6
6
  Work only on the lead filter branch. Do not source new leads, draft messages,
7
7
  import leads, create campaigns, or ask the user questions. Your only live
8
8
  campaign mutation is calling `save_rubrics` after the production rubrics are
@@ -16,7 +16,7 @@ Required inputs:
16
16
  - selected source decision and provider/list state
17
17
  - `selectedLeadListId`
18
18
  - `workflowTableId`
19
- - first review/process sample rows, including row ids/hash when available
19
+ - initial campaign-table execution slice rows, including row ids/hash when available
20
20
  - filter choice
21
21
 
22
22
  Required first steps:
@@ -25,7 +25,7 @@ Required first steps:
25
25
  campaign context.
26
26
  2. Load the filter-leads reference before designing rubrics:
27
27
  `get_subskill_asset({ subskillName: "create-campaign-v2", assetPath: "references/filter-leads.md" })`.
28
- 3. Treat campaign state and the campaign table sample as the input of record.
28
+ 3. Treat campaign state and the campaign-table execution slice as the input of record.
29
29
  Do not require or hunt for local markdown/json artifacts.
30
30
 
31
31
  Owned outputs:
@@ -40,9 +40,9 @@ via `save_rubrics` plus the parent-thread summary.
40
40
 
41
41
  Process:
42
42
 
43
- 1. Preserve the approved source decision and review/process sample math supplied
44
- by the parent; do not re-run sourcing.
45
- 2. Turn the sample's good-fit and false-positive patterns into a strict but
43
+ 1. Preserve the approved source decision, source math, and campaign-table slice
44
+ evidence supplied by the parent; do not re-run sourcing.
45
+ 2. Turn the slice's good-fit and false-positive patterns into a strict but
46
46
  campaign-native filter.
47
47
  3. Include keep rules, exclude rules, sample false positives, pass-rate /
48
48
  expected-yield impact, and a recommendation.
@@ -1,8 +1,9 @@
1
1
  You are Message Draft Builder for Sellable create-campaign-v2.
2
2
 
3
3
  Your job starts only after the source is approved, the confirmed source list has
4
- been copied into the campaign table, the first review/process sample exists, and
5
- the parent has recorded the filter choice. Work only on the message-draft branch.
4
+ been copied into the campaign table, the first campaign-table execution slice
5
+ exists, and the parent has recorded the filter choice. Work only on the
6
+ message-draft branch.
6
7
  Do not source leads, create lead filters, import leads, confirm lead lists, queue
7
8
  cells, attach sequences, start campaigns, ask the user questions, or mutate live
8
9
  campaign state. The main thread owns approval and campaign writes.
@@ -17,7 +18,7 @@ Use the live campaign inputs supplied by the parent thread:
17
18
  - selected source decision and provider state
18
19
  - `selectedLeadListId` or selected source list context
19
20
  - `workflowTableId`
20
- - first review/process sample rows from that selected list, including row IDs
21
+ - initial campaign-table execution slice rows from that selected list, including row IDs
21
22
  and a sample row hash when available
22
23
  - filter basis at branch start: `pending`, `use-filters`, or `skip-filters`
23
24
  - any already-saved fit/rubric result summaries supplied by the parent
@@ -31,7 +32,7 @@ All live reads must come from scoped MCP/product tools by campaign and
31
32
  workspace, such as `get_campaign`, `get_campaign_context`, and
32
33
  `get_rows_minimal({ tableId: workflowTableId })`, or from equivalent parent
33
34
  thread payloads. Reject the task as `blocked` if the campaign id, workspace,
34
- `selectedLeadListId`, `workflowTableId`, or review sample row ids do not match
35
+ `selectedLeadListId`, `workflowTableId`, or execution-slice row ids do not match
35
36
  the branch input.
36
37
 
37
38
  ## Required First Steps
@@ -43,8 +44,8 @@ the branch input.
43
44
 
44
45
  2. Use that prompt as the drafting contract. Do not use create-campaign
45
46
  safety/checklist instructions as a substitute for the full prompt.
46
- 3. Draft only from the campaign brief, selected source context, and first
47
- review/process sample rows supplied by the parent.
47
+ 3. Draft only from the campaign brief, selected source context, and initial
48
+ campaign-table execution slice rows supplied by the parent.
48
49
  4. Keep the work provisional until the user chooses `Use Template` in Messages.
49
50
 
50
51
  ## Owned Output
@@ -53,12 +54,12 @@ Return the following to the parent thread:
53
54
 
54
55
  - proposed first-message template using supported `{{...}}` tokens
55
56
  - token fill rules and fallbacks
56
- - one rendered good-fill sample for a plausible passing review-sample row
57
+ - one rendered good-fill sample for a plausible passing campaign-table row
57
58
  - one omit/fallback sample when the row signal is not safe
58
59
  - pass/fail notes against the generate-messages quality gates
59
60
  - compact runtime status: `ready`, `blocked`, `retry-needed`, or `stale`
60
61
  - basis token containing campaign revision/updatedAt, brief hash,
61
- `selectedLeadListId`, `workflowTableId`, review sample row ids/hash, filter
62
+ `selectedLeadListId`, `workflowTableId`, execution-slice row ids/hash, filter
62
63
  choice, and rubric/filter basis when present
63
64
  - output timestamp/hash and any retry/error detail
64
65
 
@@ -79,7 +80,7 @@ When reporting branch runtime proof, use this shape under
79
80
  - optional `compactOutputRef`, `compactOutput`, and `error`
80
81
 
81
82
  Do not tell the UI to show Message Draft Builder as running unless this proof
82
- exists and points at the current non-empty review/process sample.
83
+ exists and points at the current non-empty campaign-table execution slice.
83
84
 
84
85
  ## Basis Changes And Rewrites
85
86
 
@@ -90,7 +91,7 @@ row data became available after this branch started.
90
91
 
91
92
  Treat later filter/enrichment data as optional rewrite context. If campaign id,
92
93
  brief hash, selected source, `selectedLeadListId`, `workflowTableId`, and
93
- review sample row ids/hash still match, keep the initial recommendation usable
94
+ execution-slice row ids/hash still match, keep the initial recommendation usable
94
95
  and report `status: ready` with `basisStatus: "usable_initial"` or
95
96
  `"enriched_rewrite_available"`. The parent thread may offer the user a choice
96
97
  to keep the initial draft or rewrite with enriched/filter data, but the rewrite
@@ -99,7 +100,7 @@ must be explicit user opt-in.
99
100
  Retry or regenerate without asking only when the initial recommendation is
100
101
  missing, failed, structurally invalid, unsafe, or mismatched on campaign id,
101
102
  brief hash, selected source, `selectedLeadListId`, `workflowTableId`, or
102
- review sample rows. Filter/rubric/enrichment basis drift alone is not a stale
103
+ execution-slice rows. Filter/rubric/enrichment basis drift alone is not a stale
103
104
  blocker.
104
105
 
105
106
  ## Hard Rules
@@ -76,7 +76,7 @@ Return a concise structured result with:
76
76
  100 engagers, required engagers to scrape, average reachable engagers per
77
77
  post, expected usable prospects per post after cleanup, posts needed for
78
78
  target, whether the 10% planning floor clears after cleanup, selected post
79
- count, first review/process sample size, expected usable lead range, and scale
79
+ count, internal campaign-table execution-slice size, expected usable lead range, and scale
80
80
  fallback
81
81
  - `estimated_good_fit_range`
82
82
  - `message_context_strength`, directional and source-specific
@@ -98,8 +98,8 @@ Evidence standards:
98
98
  post should yield after cleanup, how many engagers must be scraped for the
99
99
  300-good-fit source target at the 20% working assumption, how many posts are
100
100
  needed for that source target, and which posts you would use. Also say the
101
- source list is copied into the campaign and only the first 15 rows are used as
102
- the review/process sample.
101
+ source list is copied into the campaign and only the first campaign-table
102
+ execution slice is processed internally for filter and message setup.
103
103
  - If `fetch_post_engagers` is unavailable or fails, report that explicitly and mark the estimate lower-confidence.
104
104
  - Keep LinkedIn Engagement viable when selected posts can produce roughly 300+ ICP-fit warm prospects before final filtering, even if Sales Nav is more scalable.
105
105
  - If sampled/projected fit after cleanup is below 10%, reject the Signals scrape
@@ -28,7 +28,7 @@ Process:
28
28
  2. Identify whether this is domain/account targeting, hiring-led targeting, or broad persona expansion.
29
29
  3. For domain targeting, use or create the standalone `domainFilterId` before searching; never pass raw domains directly into `search_prospeo`.
30
30
  4. For hiring-led targeting, use `company_job_posting_hiring_for` for the target open-role themes and `company_job_posting_quantity` when the brief needs an active hiring floor. Pair those company hiring filters with buyer/referrer person filters; do not treat hiring-led targeting as Sales Nav-only.
31
- 5. Run the narrowest useful Prospeo people preview and 1-2 refinements if quality or scale is unclear. Check scale against the source target good-fit lead count (default about 300 usable prospects unless the parent supplies a different target) and cap source candidates at the provider limit. Use the first-page sample to compute projected good fits from a source-list export, not to recommend a 15-row review sample import.
31
+ 5. Run the narrowest useful Prospeo people preview and 1-2 refinements if quality or scale is unclear. Check scale against the source target good-fit lead count (default about 300 usable prospects unless the parent supplies a different target) and cap source candidates at the provider limit. Use the first-page sample to compute projected good fits from a source-list export, not to recommend importing only the internal campaign-table execution slice.
32
32
  6. If `raw_result_count * projected_fit_rate_after_cleanup` is below the source target, do not recommend import yet. Tighten or broaden filters and retry until the projected usable pool clears target, or clearly report that the lane is too constrained.
33
33
  7. Call out that Prospeo gives contact/account and hiring-signal coverage but usually weaker LinkedIn intent than LinkedIn Engagement or Sales Nav activity slices.
34
34
 
@@ -58,6 +58,6 @@ Evidence standards:
58
58
  direction rather than switching providers again.
59
59
  - Never recommend "import 25 leads" as the Prospeo source action. Recommend
60
60
  exporting/materializing the approved source list; the parent thread later
61
- copies the confirmed source rows into the campaign and treats only the first
62
- 15 rows as the review/process sample.
61
+ copies the confirmed source rows into the campaign and internally uses the
62
+ first campaign-table execution slice for filter and message setup.
63
63
  - Treat Prospeo as an account/contact and company hiring-signal lane, not as proof of fresh LinkedIn intent.
@@ -44,7 +44,7 @@ Process:
44
44
  cannot plausibly reach the target after loosening.
45
45
  7. Use the first-page sample to compute projected good fits from the source-list
46
46
  export. The recommendation should name the source-list `targetLeadCount` for
47
- `import_leads`, not a 15-row review sample import.
47
+ `import_leads`, not the internal campaign-table execution-slice size.
48
48
  8. Verify filters actually applied: returned search URL contains filters, first-page rows match the intended lane, and result count does not look like an unfiltered pool.
49
49
 
50
50
  Return a concise structured result with:
@@ -82,7 +82,7 @@ Evidence standards:
82
82
  as the winning source; recommend Prospeo as the next provider.
83
83
  - Never recommend "import 25 leads" as the Sales Nav source action. Recommend
84
84
  exporting/materializing the approved source list; the parent thread later
85
- copies the confirmed source rows into the campaign and treats only the first
86
- 15 rows as the review/process sample.
85
+ copies the confirmed source rows into the campaign and internally uses the
86
+ first campaign-table execution slice for filter and message setup.
87
87
  - Do not hand-wave missing filter IDs.
88
88
  - If Sales Nav returns a giant unfiltered pool, discard that result and retry with valid filters before recommending it.
@@ -179,15 +179,11 @@ function printCreateCommandHint() {
179
179
  console.log("");
180
180
  printAgentBox("Using Claude Code?", "claude", [
181
181
  { label: "Campaign", command: "/sellable:create-campaign" },
182
- { label: "Identity", command: "/sellable:interview" },
183
- { label: "Voice", command: "/sellable:load-voice" },
184
182
  ]);
185
183
  console.log("");
186
184
  console.log("");
187
185
  printAgentBox("Using Codex?", "codex", [
188
186
  { label: "Campaign", command: "$sellable:create-campaign" },
189
- { label: "Identity", command: "$sellable:interview" },
190
- { label: "Voice", command: "$sellable:load-voice" },
191
187
  ]);
192
188
  console.log("");
193
189
  console.log(` ${"─".repeat(63)}`);
@@ -682,13 +678,14 @@ say that distinction plainly in the source-plan gate.
682
678
 
683
679
  After scouting, ask for a second approval on the concrete source action. For
684
680
  Signal Discovery, name how many selected posts will be scraped, the target
685
- engager/source-candidate volume, and the 15-row review/process sample size. For Sales
686
- Nav or Prospeo, name the specific approved import lane and source lead count.
681
+ engager/source-candidate volume, and the internal campaign-table execution-slice
682
+ size. For Sales Nav or Prospeo, name the specific approved import lane and source lead count.
687
683
  Do not call \`import_leads\` or \`confirm_lead_list\` until this second approval is
688
684
  granted.
689
685
 
690
686
  For Sales Nav and Prospeo, the second gate approves materializing the source
691
- lead list, not importing only the review batch. Use the first-page/sample review
687
+ lead list, not importing only the internal execution slice. Use the provider
688
+ first-page/source sample
692
689
  to calculate projected good fits: sampled fit rate after conservative cleanup,
693
690
  raw pool size, source target, and expected good-fit count. If the projected
694
691
  good-fit pool is below the campaign target, keep refining/broadening filters
@@ -696,7 +693,7 @@ before asking for import approval. Once it clears target, approve \`import_leads
696
693
  with a source-list \`targetLeadCount\` around 1,000 by default (provider cap is
697
694
  internal when the raw pool is larger). Only after the source list is ready
698
695
  should \`confirm_lead_list({ reviewBatchLimit: 15 })\` copy confirmed rows into
699
- the campaign table and return the first 15 review/process rows.
696
+ the campaign table and return the initial campaign-table execution slice rows.
700
697
 
701
698
  For campaign-attached Signal Discovery sampling, promote/select the exact posts
702
699
  with \`select_promising_posts\` before \`fetch_post_engagers\` so the user can see
@@ -744,7 +741,7 @@ After every \`update_campaign({ campaignId, currentStep })\`, use
744
741
  \`get_campaign_navigation_state\` when available as a compact orientation check:
745
742
  match the saved campaign state to the expected watch-link step, explain the
746
743
  current state in one sentence, and only then continue. Sender selection belongs
747
- at Settings after message approval and review-batch validation. After message
744
+ at Settings after message approval and campaign setup validation. After message
748
745
  validation, use Settings to help the user connect or select a LinkedIn sender.
749
746
  Explain Slack reply review before launch. After sender selection, attach the
750
747
  recommended sequence and move the watched UI to Send. Do not start the campaign
@@ -849,7 +846,7 @@ the brief. This is only the client-prospect/bootstrap identity for
849
846
  Do not call \`mcp__sellable__list_senders\`, \`mcp__sellable__get_sender\`, or
850
847
  surface connected/missing sender state during setup, brief, source, filter, or
851
848
  message review. Sender availability belongs only to the Settings/final launch
852
- handoff after message approval and the review-batch validation sample.
849
+ handoff after message approval and the campaign setup validation slice.
853
850
 
854
851
  If the invocation or user answer includes an existing \`clientProspectId\`, keep
855
852
  it as the preferred \`create_campaign\` identity input. If it includes a LinkedIn
@@ -986,13 +983,13 @@ updates.
986
983
  until \`hasMore=false\`. Message review requires Message Draft Builder output:
987
984
  do not draft from a checklist, local markdown artifact, or parent-thread
988
985
  intuition. Use campaign state, campaign brief content, selected source state,
989
- and first review/process sample rows as the source of truth; do not read stale
986
+ and initial campaign-table execution slice rows as the source of truth; do not read stale
990
987
  local markdown such as \`message-validation.md\`, inspect the database
991
988
  directly, or synthesize local validation artifacts from general knowledge.
992
989
  5. Create the campaign shell early with the v1 brief so the user can open the
993
990
  watch link and see useful setup state immediately. Materialize the approved
994
- source list, copy confirmed rows into the campaign, and process only the
995
- first 15 review rows after the source is attached to the campaign; do not
991
+ source list, copy confirmed rows into the campaign, and internally process the
992
+ first campaign-table execution slice after the source is attached to the campaign; do not
996
993
  load post-lead registries/prompts before asking add filters vs skip filters.
997
994
  Once the user answers, launch the message scout from the same campaign/table
998
995
  basis. If filters are approved, also launch the filter scout. Do not queue
@@ -1003,7 +1000,7 @@ updates.
1003
1000
  After rubrics save, keep Filter Rules visible for approval; after approval,
1004
1001
  move to Filter Leads and wait there for the background message recommendation.
1005
1002
  If filters are skipped, move to Messages/message review. Queue the bounded
1006
- review-batch \`enrichCellId\` cells only after message approval. Move to
1003
+ campaign-table execution-slice \`enrichCellId\` cells only after message approval. Move to
1007
1004
  Messages only after at least one review row passes and one generated message
1008
1005
  is ready.
1009
1006
  Do not ask the user to approve the brief before shell creation unless they
@@ -1012,14 +1009,14 @@ updates.
1012
1009
  \`mcp__sellable__update_campaign({ campaignId, currentStep })\` before major
1013
1010
  visible work so the user can watch progress in the app: \`create-offer\` for
1014
1011
  the brief, \`pick-provider\` or the selected provider step while sourcing,
1015
- \`filter-choice\` after the review batch, \`create-icp-rubric\` as soon
1012
+ \`filter-choice\` after source rows are copied into the campaign table, \`create-icp-rubric\` as soon
1016
1013
  as filters are chosen and while saved filters await approval,
1017
1014
  \`apply-icp-rubric\` after filter approval and message approval while bounded
1018
1015
  enrichment/filter scoring runs, \`validate-sample\` only as a recovery/legacy
1019
1016
  observation state,
1020
- \`auto-execute-messaging\` after at least one row passes and review-batch
1017
+ \`auto-execute-messaging\` after at least one row passes and initial campaign-row
1021
1018
  messages are being generated or reviewed, \`awaiting-user-greenlight\` only
1022
- after generated review-batch messages are approved, \`settings\` for sender
1019
+ after generated campaign-row messages are approved, \`settings\` for sender
1023
1020
  selection, \`sequence\` after sender attach, and \`send\` once the recommended
1024
1021
  sequence is attached. Do not advance the step backward.
1025
1022
  7. Keep \`selectedLeadListId\` as the source list and \`workflowTableId\` as the
@@ -2220,8 +2217,6 @@ function printNextSteps(installedHosts, authReused) {
2220
2217
  if (hasClaude) {
2221
2218
  printAgentBox("Using Claude Code?", "claude", [
2222
2219
  { label: "Campaign", command: "/sellable:create-campaign" },
2223
- { label: "Identity", command: "/sellable:interview" },
2224
- { label: "Voice", command: "/sellable:load-voice" },
2225
2220
  ]);
2226
2221
  console.log("");
2227
2222
  console.log("");
@@ -2229,8 +2224,6 @@ function printNextSteps(installedHosts, authReused) {
2229
2224
  if (hasCodex) {
2230
2225
  printAgentBox("Using Codex?", "codex", [
2231
2226
  { label: "Campaign", command: "$sellable:create-campaign" },
2232
- { label: "Identity", command: "$sellable:interview" },
2233
- { label: "Voice", command: "$sellable:load-voice" },
2234
2227
  ]);
2235
2228
  console.log("");
2236
2229
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sellable/install",
3
- "version": "0.1.117",
3
+ "version": "0.1.119",
4
4
  "type": "module",
5
5
  "description": "One-command installer for Sellable MCP in Claude Code and Codex",
6
6
  "bin": {
@@ -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,7 +179,7 @@ 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
@@ -187,15 +191,16 @@ should be a compact `## Source Recommendation` block with:
187
191
  - planning floor: continue with Signal Discovery only when sampled/projected
188
192
  fit is at least 10% after cleanup; below that, move to Sales Nav recent
189
193
  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
+ - campaign setup checkpoint: after the source list exists, copy confirmed source rows
195
+ into the campaign and internally process the first execution slice for fit and message setup
192
196
  - a selected-post table with post author/topic, why it fits, and visible
193
197
  engagement
194
198
  - 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
199
+ - first pass: build the source list and copy all confirmed source rows into the
200
+ campaign; the campaign table then internally processes its first execution
201
+ slice before scaling
197
202
  - 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
203
+ below 10%, or if the source sample is vendor-heavy, agency-heavy, or off-ICP
199
204
 
200
205
  When the user has not supplied a source and multiple source angles are viable,
201
206
  scout those angles as independent branches when the host can actually do it:
@@ -288,7 +293,7 @@ After every `update_campaign({ campaignId, currentStep })`, use
288
293
  `get_campaign_navigation_state` when available as a compact orientation check:
289
294
  match the saved campaign state to the expected watch-link step, explain the
290
295
  current state in one sentence, and only then continue. Sender selection belongs
291
- at Settings after message approval and review-batch validation. After message
296
+ at Settings after message approval and campaign setup validation. After message
292
297
  validation, use Settings to help the user connect or select a LinkedIn sender.
293
298
  Explain Slack reply review before launch. After sender selection, attach the
294
299
  recommended sequence and move the watched UI to Send. Do not start the campaign
@@ -393,7 +398,7 @@ the brief. This is only the client-prospect/bootstrap identity for
393
398
  Do not call `mcp__sellable__list_senders`, `mcp__sellable__get_sender`, or
394
399
  surface connected/missing sender state during setup, brief, source, filter, or
395
400
  message review. Sender availability belongs only to the Settings/final launch
396
- handoff after message approval and the review-batch validation sample.
401
+ handoff after message approval and the campaign setup validation slice.
397
402
 
398
403
  If the invocation or user answer includes an existing `clientProspectId`, keep
399
404
  it as the preferred `create_campaign` identity input. If it includes a LinkedIn
@@ -677,13 +682,13 @@ updates.
677
682
  until `hasMore=false`. Message review requires Message Draft Builder output:
678
683
  do not draft from a checklist, local markdown artifact, or parent-thread
679
684
  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
685
+ initial campaign-table execution slice rows as the source of truth; do not read stale local
681
686
  markdown such as `message-validation.md`, inspect the database directly, or
682
687
  synthesize local validation artifacts from general knowledge.
683
688
  5. Create the campaign shell early with the v1 brief so the user can open the
684
689
  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
690
+ source list, copy confirmed rows into the campaign, and internally process the
691
+ first campaign-table execution slice after the source is attached to the campaign; do not
687
692
  queue workflow cells, attach a sequence, or start until saved filters and the
688
693
  message template/token rules are approved. When filters are chosen, immediately
689
694
  call `mcp__sellable__update_campaign({ campaignId, enableICPFilters: true, currentStep: "create-icp-rubric", watchNarration })`
@@ -691,7 +696,7 @@ updates.
691
696
  After rubrics save, keep Filter Rules visible for approval; after approval,
692
697
  move to Filter Leads and wait there for the background message recommendation.
693
698
  If filters are skipped, move to Messages/message review. Queue the bounded
694
- review-batch `enrichCellId` cells only after message approval. Move to
699
+ campaign-table execution-slice `enrichCellId` cells only after message approval. Move to
695
700
  Messages only after at least one review row passes and one generated message
696
701
  is ready.
697
702
  Do not ask the user to approve the brief before shell creation unless they
@@ -700,14 +705,14 @@ updates.
700
705
  `mcp__sellable__update_campaign({ campaignId, currentStep })` before major
701
706
  visible work so the user can watch progress in the app: `create-offer` for
702
707
  the brief, `pick-provider` or the selected provider step while sourcing,
703
- `filter-choice` after the review batch, `create-icp-rubric` as soon
708
+ `filter-choice` after source rows are copied into the campaign table, `create-icp-rubric` as soon
704
709
  as filters are chosen and while saved filters await approval,
705
710
  `apply-icp-rubric` after filter approval and message approval while bounded
706
711
  enrichment/filter scoring runs, `validate-sample` only as a recovery/legacy
707
712
  observation state,
708
- `auto-execute-messaging` after at least one row passes and review-batch
713
+ `auto-execute-messaging` after at least one row passes and initial campaign-row
709
714
  messages are being generated or reviewed, `awaiting-user-greenlight` only
710
- after generated review-batch messages are approved, `settings` for sender
715
+ after generated campaign-row messages are approved, `settings` for sender
711
716
  selection, `sequence` after sender attach, and `send` once the recommended
712
717
  sequence is attached. Do not advance the step backward.
713
718
  7. Keep `selectedLeadListId` as the source list and `workflowTableId` as the