@sellable/install 0.1.115 → 0.1.116
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.
- package/agents/post-find-leads-filter-scout.md +5 -4
- package/agents/post-find-leads-message-scout.md +15 -14
- package/agents/source-scout-linkedin-engagement.md +6 -5
- package/agents/source-scout-prospeo-contact.md +4 -4
- package/agents/source-scout-sales-nav.md +4 -4
- package/bin/sellable-install.mjs +20 -11
- package/package.json +1 -1
- package/skill-templates/create-campaign.md +28 -25
|
@@ -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
|
-
|
|
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
|
-
-
|
|
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
|
|
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
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
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
|
-
-
|
|
20
|
-
|
|
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
|
|
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
|
|
46
|
-
review
|
|
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-
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
-
|
|
100
|
-
and which posts you would use. Also say the
|
|
101
|
-
|
|
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
|
|
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
|
|
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
|
|
61
|
-
the
|
|
62
|
-
|
|
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
|
|
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
|
|
85
|
-
the
|
|
86
|
-
|
|
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.
|
package/bin/sellable-install.mjs
CHANGED
|
@@ -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
|
|
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
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
|
|
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
|
-
|
|
985
|
-
|
|
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.
|
|
990
|
-
|
|
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
|
@@ -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
|
|
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
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
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
|
-
-
|
|
184
|
-
- source-candidate plan: about 1,
|
|
185
|
-
|
|
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,
|
|
190
|
-
|
|
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
|
|
195
|
-
then
|
|
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
|
|
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
|
|
@@ -649,12 +651,13 @@ updates.
|
|
|
649
651
|
until `hasMore=false`. Message review requires Message Draft Builder output:
|
|
650
652
|
do not draft from a checklist, local markdown artifact, or parent-thread
|
|
651
653
|
intuition. Use campaign state, campaign brief content, selected source state, and
|
|
652
|
-
|
|
654
|
+
first review/process sample rows as the source of truth; do not read stale local
|
|
653
655
|
markdown such as `message-validation.md`, inspect the database directly, or
|
|
654
656
|
synthesize local validation artifacts from general knowledge.
|
|
655
657
|
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.
|
|
657
|
-
|
|
658
|
+
watch link and see useful setup state immediately. Materialize the approved
|
|
659
|
+
source list, copy confirmed rows into the campaign, and process only the
|
|
660
|
+
first 15 review rows after the source is attached to the campaign; do not
|
|
658
661
|
queue workflow cells, attach a sequence, or start until saved filters and the
|
|
659
662
|
message template/token rules are approved. When filters are chosen, immediately
|
|
660
663
|
call `mcp__sellable__update_campaign({ campaignId, enableICPFilters: true, currentStep: "create-icp-rubric", watchNarration })`
|