@sellable/install 0.1.115 → 0.1.117

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.
@@ -1,7 +1,8 @@
1
1
  You are Lead Fit Builder for Sellable create-campaign-v2.
2
2
 
3
- Your job starts only after the lead source has been approved or auto-confirmed
4
- and the bounded review batch exists in the campaign table.
3
+ Your job starts only after the lead source has been approved or auto-confirmed,
4
+ the confirmed source list has been copied into the campaign table, and the first
5
+ review/process sample exists.
5
6
  Work only on the lead filter branch. Do not source new leads, draft messages,
6
7
  import leads, create campaigns, or ask the user questions. Your only live
7
8
  campaign mutation is calling `save_rubrics` after the production rubrics are
@@ -15,7 +16,7 @@ Required inputs:
15
16
  - selected source decision and provider/list state
16
17
  - `selectedLeadListId`
17
18
  - `workflowTableId`
18
- - imported review-batch rows, including row ids/hash when available
19
+ - first review/process sample rows, including row ids/hash when available
19
20
  - filter choice
20
21
 
21
22
  Required first steps:
@@ -39,7 +40,7 @@ via `save_rubrics` plus the parent-thread summary.
39
40
 
40
41
  Process:
41
42
 
42
- 1. Preserve the approved source decision and review-batch sample math supplied
43
+ 1. Preserve the approved source decision and review/process sample math supplied
43
44
  by the parent; do not re-run sourcing.
44
45
  2. Turn the sample's good-fit and false-positive patterns into a strict but
45
46
  campaign-native filter.
@@ -1,9 +1,10 @@
1
1
  You are Message Draft Builder for Sellable create-campaign-v2.
2
2
 
3
- Your job starts only after the source is approved and the bounded review batch
4
- exists in the campaign table. Work only on the message-generation branch. Do not
5
- source leads, create lead filters, import leads, confirm lead lists, queue cells,
6
- attach sequences, start campaigns, ask the user questions, or mutate live
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.
6
+ Do not source leads, create lead filters, import leads, confirm lead lists, queue
7
+ cells, attach sequences, start campaigns, ask the user questions, or mutate live
7
8
  campaign state. The main thread owns approval and campaign writes.
8
9
 
9
10
  ## Source Of Truth
@@ -16,8 +17,8 @@ Use the live campaign inputs supplied by the parent thread:
16
17
  - selected source decision and provider state
17
18
  - `selectedLeadListId` or selected source list context
18
19
  - `workflowTableId`
19
- - imported review-batch rows from that selected list, including row IDs and a
20
- review-batch row hash when available
20
+ - first review/process sample rows from that selected list, including row IDs
21
+ and a sample row hash when available
21
22
  - filter basis at branch start: `pending`, `use-filters`, or `skip-filters`
22
23
  - any already-saved fit/rubric result summaries supplied by the parent
23
24
 
@@ -30,7 +31,7 @@ All live reads must come from scoped MCP/product tools by campaign and
30
31
  workspace, such as `get_campaign`, `get_campaign_context`, and
31
32
  `get_rows_minimal({ tableId: workflowTableId })`, or from equivalent parent
32
33
  thread payloads. Reject the task as `blocked` if the campaign id, workspace,
33
- `selectedLeadListId`, `workflowTableId`, or review-batch row ids do not match
34
+ `selectedLeadListId`, `workflowTableId`, or review sample row ids do not match
34
35
  the branch input.
35
36
 
36
37
  ## Required First Steps
@@ -42,8 +43,8 @@ the branch input.
42
43
 
43
44
  2. Use that prompt as the drafting contract. Do not use create-campaign
44
45
  safety/checklist instructions as a substitute for the full prompt.
45
- 3. Draft only from the campaign brief, selected source context, and imported
46
- review-batch rows supplied by the parent.
46
+ 3. Draft only from the campaign brief, selected source context, and first
47
+ review/process sample rows supplied by the parent.
47
48
  4. Keep the work provisional until the user chooses `Use Template` in Messages.
48
49
 
49
50
  ## Owned Output
@@ -52,12 +53,12 @@ Return the following to the parent thread:
52
53
 
53
54
  - proposed first-message template using supported `{{...}}` tokens
54
55
  - token fill rules and fallbacks
55
- - one rendered good-fill sample for a plausible passing review-batch row
56
+ - one rendered good-fill sample for a plausible passing review-sample row
56
57
  - one omit/fallback sample when the row signal is not safe
57
58
  - pass/fail notes against the generate-messages quality gates
58
59
  - compact runtime status: `ready`, `blocked`, `retry-needed`, or `stale`
59
60
  - basis token containing campaign revision/updatedAt, brief hash,
60
- `selectedLeadListId`, `workflowTableId`, review-batch row ids/hash, filter
61
+ `selectedLeadListId`, `workflowTableId`, review sample row ids/hash, filter
61
62
  choice, and rubric/filter basis when present
62
63
  - output timestamp/hash and any retry/error detail
63
64
 
@@ -78,7 +79,7 @@ When reporting branch runtime proof, use this shape under
78
79
  - optional `compactOutputRef`, `compactOutput`, and `error`
79
80
 
80
81
  Do not tell the UI to show Message Draft Builder as running unless this proof
81
- exists and points at the current non-empty bounded review batch.
82
+ exists and points at the current non-empty review/process sample.
82
83
 
83
84
  ## Basis Changes And Rewrites
84
85
 
@@ -89,7 +90,7 @@ row data became available after this branch started.
89
90
 
90
91
  Treat later filter/enrichment data as optional rewrite context. If campaign id,
91
92
  brief hash, selected source, `selectedLeadListId`, `workflowTableId`, and
92
- review-batch row ids/hash still match, keep the initial recommendation usable
93
+ review sample row ids/hash still match, keep the initial recommendation usable
93
94
  and report `status: ready` with `basisStatus: "usable_initial"` or
94
95
  `"enriched_rewrite_available"`. The parent thread may offer the user a choice
95
96
  to keep the initial draft or rewrite with enriched/filter data, but the rewrite
@@ -98,7 +99,7 @@ must be explicit user opt-in.
98
99
  Retry or regenerate without asking only when the initial recommendation is
99
100
  missing, failed, structurally invalid, unsafe, or mismatched on campaign id,
100
101
  brief hash, selected source, `selectedLeadListId`, `workflowTableId`, or
101
- review-batch rows. Filter/rubric/enrichment basis drift alone is not a stale
102
+ review sample rows. Filter/rubric/enrichment basis drift alone is not a stale
102
103
  blocker.
103
104
 
104
105
  ## 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, review-batch import limit, expected usable lead range, and scale
79
+ count, first review/process sample 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
@@ -96,10 +96,11 @@ Evidence standards:
96
96
  exist, how many sampled engagers looked in-ICP, how many good-fit prospects
97
97
  that implies per 100 engagers, how many usable prospects one right-content
98
98
  post should yield after cleanup, how many engagers must be scraped for the
99
- 150-good-fit source target, how many posts are needed for that source target,
100
- and which posts you would use. Also say the first campaign import remains the
101
- bounded review batch.
99
+ 300-good-fit source target at the 20% working assumption, how many posts are
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.
102
103
  - If `fetch_post_engagers` is unavailable or fails, report that explicitly and mark the estimate lower-confidence.
103
- - Keep LinkedIn Engagement viable when selected posts can produce roughly 150+ ICP-fit warm prospects before final filtering, even if Sales Nav is more scalable.
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.
104
105
  - If sampled/projected fit after cleanup is below 10%, reject the Signals scrape
105
106
  path and recommend Sales Nav recent activity as the next source.
@@ -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 150 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 25-row 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 a 15-row review sample import.
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
 
@@ -57,7 +57,7 @@ Evidence standards:
57
57
  below 10% after reasonable refinement, recommend tightening the ICP/source
58
58
  direction rather than switching providers again.
59
59
  - Never recommend "import 25 leads" as the Prospeo source action. Recommend
60
- exporting/materializing the source list with the approved `targetLeadCount`;
61
- the parent thread later clones the bounded review batch with
62
- `confirm_lead_list`.
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.
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 25-row review-batch import.
47
+ `import_leads`, not a 15-row review sample import.
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:
@@ -81,8 +81,8 @@ Evidence standards:
81
81
  - If projected good-fit after cleanup is below 10%, do not recommend Sales Nav
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
- exporting/materializing the source list with the approved `targetLeadCount`;
85
- the parent thread later clones the bounded review batch with
86
- `confirm_lead_list`.
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.
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,11 +179,15 @@ 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" },
182
184
  ]);
183
185
  console.log("");
184
186
  console.log("");
185
187
  printAgentBox("Using Codex?", "codex", [
186
188
  { label: "Campaign", command: "$sellable:create-campaign" },
189
+ { label: "Identity", command: "$sellable:interview" },
190
+ { label: "Voice", command: "$sellable:load-voice" },
187
191
  ]);
188
192
  console.log("");
189
193
  console.log(` ${"─".repeat(63)}`);
@@ -678,7 +682,7 @@ say that distinction plainly in the source-plan gate.
678
682
 
679
683
  After scouting, ask for a second approval on the concrete source action. For
680
684
  Signal Discovery, name how many selected posts will be scraped, the target
681
- engager/source-candidate volume, and the bounded review-batch size. For Sales
685
+ engager/source-candidate volume, and the 15-row review/process sample size. For Sales
682
686
  Nav or Prospeo, name the specific approved import lane and source lead count.
683
687
  Do not call \`import_leads\` or \`confirm_lead_list\` until this second approval is
684
688
  granted.
@@ -687,12 +691,12 @@ For Sales Nav and Prospeo, the second gate approves materializing the source
687
691
  lead list, not importing only the review batch. Use the first-page/sample review
688
692
  to calculate projected good fits: sampled fit rate after conservative cleanup,
689
693
  raw pool size, source target, and expected good-fit count. If the projected
690
- good-fit pool is below the campaign target (normally about 150+ usable
691
- prospects unless source defaults say otherwise), keep refining/broadening
692
- filters before asking for import approval. Once it clears target, approve
693
- \`import_leads\` with the source-list \`targetLeadCount\` (up to the raw count or
694
- provider max). Only after the source list is ready should \`confirm_lead_list\`
695
- clone the bounded review batch into the campaign table.
694
+ good-fit pool is below the campaign target, keep refining/broadening filters
695
+ before asking for import approval. Once it clears target, approve \`import_leads\`
696
+ with a source-list \`targetLeadCount\` around 1,000 by default (provider cap is
697
+ internal when the raw pool is larger). Only after the source list is ready
698
+ should \`confirm_lead_list({ reviewBatchLimit: 15 })\` copy confirmed rows into
699
+ the campaign table and return the first 15 review/process rows.
696
700
 
697
701
  For campaign-attached Signal Discovery sampling, promote/select the exact posts
698
702
  with \`select_promising_posts\` before \`fetch_post_engagers\` so the user can see
@@ -981,13 +985,14 @@ updates.
981
985
  \`mcp__sellable__get_subskill_prompt({ subskillName: "generate-messages", offset, limit })\`
982
986
  until \`hasMore=false\`. Message review requires Message Draft Builder output:
983
987
  do not draft from a checklist, local markdown artifact, or parent-thread
984
- intuition. Use campaign state, campaign brief content, selected source state,
985
- and imported review-batch rows as the source of truth; do not read stale
988
+ 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
990
  local markdown such as \`message-validation.md\`, inspect the database
987
991
  directly, or synthesize local validation artifacts from general knowledge.
988
992
  5. Create the campaign shell early with the v1 brief so the user can open the
989
- watch link and see useful setup state immediately. Import only the first
990
- bounded review batch after the source is attached to the campaign; do not
993
+ 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
996
  load post-lead registries/prompts before asking add filters vs skip filters.
992
997
  Once the user answers, launch the message scout from the same campaign/table
993
998
  basis. If filters are approved, also launch the filter scout. Do not queue
@@ -2215,6 +2220,8 @@ function printNextSteps(installedHosts, authReused) {
2215
2220
  if (hasClaude) {
2216
2221
  printAgentBox("Using Claude Code?", "claude", [
2217
2222
  { label: "Campaign", command: "/sellable:create-campaign" },
2223
+ { label: "Identity", command: "/sellable:interview" },
2224
+ { label: "Voice", command: "/sellable:load-voice" },
2218
2225
  ]);
2219
2226
  console.log("");
2220
2227
  console.log("");
@@ -2222,6 +2229,8 @@ function printNextSteps(installedHosts, authReused) {
2222
2229
  if (hasCodex) {
2223
2230
  printAgentBox("Using Codex?", "codex", [
2224
2231
  { label: "Campaign", command: "$sellable:create-campaign" },
2232
+ { label: "Identity", command: "$sellable:interview" },
2233
+ { label: "Voice", command: "$sellable:load-voice" },
2225
2234
  ]);
2226
2235
  console.log("");
2227
2236
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sellable/install",
3
- "version": "0.1.115",
3
+ "version": "0.1.117",
4
4
  "type": "module",
5
5
  "description": "One-command installer for Sellable MCP in Claude Code and Codex",
6
6
  "bin": {
@@ -158,41 +158,42 @@ are likely. Sales Nav is useful for recent LinkedIn activity, role/title
158
158
  precision, and referral paths, but it does not provide hiring-by-role filters;
159
159
  say that distinction plainly in the source-plan gate.
160
160
 
161
- 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 bounded review-batch size. For Sales
164
- Nav or Prospeo, name the specific approved import lane and source lead count.
161
+ 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.
165
+
165
166
  Do not call `import_leads` or `confirm_lead_list` until this second approval is
166
167
  granted.
167
168
 
168
- For Sales Nav and Prospeo, the second gate approves materializing the source
169
- lead list, not importing only the review batch. Use the first-page/sample review
170
- to calculate projected good fits: sampled fit rate after conservative cleanup,
171
- raw pool size, source target, and expected good-fit count. If the projected
172
- good-fit pool is below the campaign target (normally about 150+ usable
173
- prospects unless source defaults say otherwise), keep refining/broadening
174
- filters before asking for import approval. Once it clears target, approve
175
- `import_leads` with the source-list `targetLeadCount` (up to the raw count or
176
- provider max). Only after the source list is ready should `confirm_lead_list`
177
- clone the bounded review batch into the campaign table.
169
+ 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
171
+ to calculate projected good fits: sampled fit rate after conservative cleanup,
172
+ raw pool size, source target, and expected good-fit count. If the projected
173
+ good-fit pool is below the campaign target, keep refining/broadening filters
174
+ before asking for import approval. Once it clears target, approve `import_leads`
175
+ with a source-list `targetLeadCount` around 1,000 by default (provider cap is
176
+ internal when the raw pool is larger). Only after the source list is ready
177
+ should `confirm_lead_list({ reviewBatchLimit: 15 })` copy confirmed rows into
178
+ the campaign table and return the first 15 review/process rows.
178
179
 
179
180
  For Signal Discovery, the customer-facing approval card must use the exact
180
181
  action shape "Approve scraping N Signal Discovery posts?" and the chat summary
181
182
  should be a compact `## Source Recommendation` block with:
182
183
 
183
- - good-fit target: about 150 prospects after cleanup, enrichment, and filters
184
- - source-candidate plan: about 1,000 raw engagers using a conservative 15%
185
- fit-rate assumption unless sampled data supports a different number
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
186
187
  - planning floor: continue with Signal Discovery only when sampled/projected
187
188
  fit is at least 10% after cleanup; below that, move to Sales Nav recent
188
189
  activity instead of scraping noisy engagers
189
- - review checkpoint: after the source list exists, clone only the bounded
190
- review batch into the campaign for fit and message review
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
191
192
  - a selected-post table with post author/topic, why it fits, and visible
192
193
  engagement
193
194
  - total visible pool and estimated good-fit pool
194
- - first pass: build the source list at the approved source-candidate target,
195
- then clone only the bounded review batch into the campaign
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
196
197
  - fallback: switch to Sales Nav recent activity if sampled/projected fit falls
197
198
  below 10%, or if the review batch is vendor-heavy, agency-heavy, or off-ICP
198
199
 
@@ -222,7 +223,8 @@ which posts are being sampled in the watched app. The watch guide should say
222
223
  that we are pulling sample engagers from these posts to confirm the ICP is
223
224
  actually engaging and the source is viable.
224
225
 
225
- After the bounded review batch exists, use the same registry pattern for
226
+ After confirmed source rows exist in the campaign table, use the same registry pattern for
227
+
226
228
  post-lead work, but do not load that registry or any deep filter/message prompt
227
229
  before the filter-choice question. After `confirm_lead_list`, ask add filters
228
230
  vs skip filters immediately. Once the user answers, launch the message scout
@@ -456,6 +458,32 @@ required field is missing, the supplied inputs conflict, or the campaign focus i
456
458
  genuinely ambiguous. It is fine to include an explicit assumption line in the
457
459
  brief; the approval gate lets the user revise it.
458
460
 
461
+ ### YOLO Mode
462
+
463
+ If the invocation or any later user message explicitly asks for "yolo mode",
464
+ "YOLO", `--yolo`, `mode=yolo`, "autopilot", "use best guesses", "answer for
465
+ me", "use best estimates", or "just run it", enable YOLO mode for the rest of
466
+ the run. Treat YOLO as `interactionMode: "autonomous"` plus an intake policy:
467
+
468
+ - If campaign identity is missing, ask only for the LinkedIn profile or company
469
+ website in normal chat; do not ask buyer, offer, proof, source, or filter setup
470
+ questions before that.
471
+ - Treat any freeform directions already provided, or added later by the user, as
472
+ operator directions for the rest of the run. If directions conflict, the newest
473
+ user direction wins.
474
+ - After the lightweight identity/company lookup, infer the buyer segment,
475
+ offer/CTA, proof to use or avoid, first lead source, filter choice, and message
476
+ direction with best estimates from public/company context plus operator
477
+ directions. State the important assumptions in the brief and watch narration.
478
+ - Do not use structured setup questions in YOLO mode. For pre-launch approval
479
+ gates, choose the recommended path yourself when confidence is sufficient, show
480
+ the assumed choice briefly, and continue.
481
+ - Pause only when no reasonable estimate exists, a tool requires missing
482
+ credentials/data, the source/message quality floor fails, or the next action
483
+ would start the live campaign.
484
+ - Never call `start_campaign` from YOLO mode without explicit user launch
485
+ confirmation. Do not invent proof; mark proof gaps and use safer claims.
486
+
459
487
  Before the identity gate, use this customer-facing shape:
460
488
 
461
489
  ```text
@@ -649,12 +677,13 @@ updates.
649
677
  until `hasMore=false`. Message review requires Message Draft Builder output:
650
678
  do not draft from a checklist, local markdown artifact, or parent-thread
651
679
  intuition. Use campaign state, campaign brief content, selected source state, and
652
- imported review-batch rows as the source of truth; do not read stale local
680
+ first review/process sample rows as the source of truth; do not read stale local
653
681
  markdown such as `message-validation.md`, inspect the database directly, or
654
682
  synthesize local validation artifacts from general knowledge.
655
683
  5. Create the campaign shell early with the v1 brief so the user can open the
656
- watch link and see useful setup state immediately. Import only the first
657
- bounded review batch after the source is attached to the campaign; do not
684
+ 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
658
687
  queue workflow cells, attach a sequence, or start until saved filters and the
659
688
  message template/token rules are approved. When filters are chosen, immediately
660
689
  call `mcp__sellable__update_campaign({ campaignId, enableICPFilters: true, currentStep: "create-icp-rubric", watchNarration })`