@sellable/mcp 0.1.48 → 0.1.50
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/package.json +1 -1
- package/skills/create-campaign/SKILL.md +6 -3
- package/skills/create-campaign-v2/SKILL.md +31 -43
- package/skills/create-campaign-v2/SOUL.md +22 -7
- package/skills/create-campaign-v2/core/flow.v2.json +9 -59
- package/skills/create-campaign-v2/core/policy.md +0 -1
- package/skills/create-campaign-v2/references/approval-gate-framing.md +8 -7
- package/skills/create-campaign-v2/references/validation-criteria.md +12 -0
package/package.json
CHANGED
|
@@ -92,14 +92,17 @@ clear business decisions, tradeoffs, and approval gates. Use product language:
|
|
|
92
92
|
When explaining lead-source decisions, show the concrete counts behind the
|
|
93
93
|
logic: lanes searched, timeframe, raw result counts, finalist posts or preview
|
|
94
94
|
rows, sampled people, sampled fits as n/N (%), estimated usable people, and the
|
|
95
|
-
confidence basis.
|
|
96
|
-
|
|
95
|
+
confidence basis. Break estimates out by provider/source angle in bullet form
|
|
96
|
+
instead of showing only one raw total. Each angle should show raw pool, sampled
|
|
97
|
+
fits as n/N, estimated good-fit range after cleanup, expected reply-rate range,
|
|
98
|
+
and confidence basis. Never show a percent like "73% match" without the
|
|
99
|
+
numerator, denominator, and sample basis.
|
|
97
100
|
|
|
98
101
|
Every approval gate must include artifact access after the readable inline
|
|
99
102
|
content. Show an `Open artifact:` line with the one key clickable markdown link
|
|
100
103
|
for that stage. Do not show raw filesystem paths unless links cannot be created
|
|
101
104
|
or the user asks. Do this for brief approval, lead-source approval/review,
|
|
102
|
-
lead-filter review, message review,
|
|
105
|
+
lead-filter review, message review, and final approval
|
|
103
106
|
packet. The link is for deeper inspection; never use it as a substitute for
|
|
104
107
|
showing the decision in chat.
|
|
105
108
|
|
|
@@ -56,7 +56,6 @@ Validated draft directory:
|
|
|
56
56
|
lead-review.md
|
|
57
57
|
lead-sample.json
|
|
58
58
|
lead-filter.md
|
|
59
|
-
sequence-settings.md
|
|
60
59
|
message-prep.md # optional speed artifact
|
|
61
60
|
message-candidate-drafts.md # optional provisional message artifact
|
|
62
61
|
message-validation.md
|
|
@@ -139,9 +138,9 @@ Validated draft directory:
|
|
|
139
138
|
content. Show a short `Open artifact:` line with the one key clickable
|
|
140
139
|
markdown link for that stage. Do not show raw filesystem paths unless links
|
|
141
140
|
cannot be created or the user asks. Do this for brief approval, lead-source
|
|
142
|
-
approval/review, lead-filter review, message review,
|
|
143
|
-
|
|
144
|
-
|
|
141
|
+
approval/review, lead-filter review, message review, and final approval
|
|
142
|
+
packet. Do not use the link as a substitute for rendering the decision in
|
|
143
|
+
chat; links are for deeper inspection.
|
|
145
144
|
- Do not treat the active Sellable workspace as the campaign subject. The
|
|
146
145
|
workspace only tells you where the campaign will be saved. Before buyer, CTA,
|
|
147
146
|
proof, or source questions, identify two things:
|
|
@@ -329,7 +328,7 @@ me`, `I’ll paste a different sender profile`, and `Other / custom`.
|
|
|
329
328
|
Campaign brief
|
|
330
329
|
|
|
331
330
|
Target:
|
|
332
|
-
...
|
|
331
|
+
... (include concrete role/title names, not just a broad persona)
|
|
333
332
|
|
|
334
333
|
Core pain:
|
|
335
334
|
...
|
|
@@ -423,10 +422,6 @@ should test for this campaign. Those can run in parallel and usually take
|
|
|
423
422
|
- `lead-review.md` and `lead-sample.json` are the required outputs of `find leads`.
|
|
424
423
|
- `lead-filter.md` is the primary output of `filter leads`.
|
|
425
424
|
- `rubric.json` is optional and secondary to `lead-filter.md`.
|
|
426
|
-
- `sequence-settings.md` is a cheap pre-mint preview artifact. It summarizes
|
|
427
|
-
recommended sequence/settings for the user's approval packet. It must not call
|
|
428
|
-
sequence tools or rerun research; actual sequence attachment still happens
|
|
429
|
-
after campaign creation via `attach_recommended_sequence`.
|
|
430
425
|
- `message-prep.md` is an optional speed artifact produced by the explicit
|
|
431
426
|
message path after find-leads. It can prepare proof inventory, buyer
|
|
432
427
|
objections, CTA options, gold-standard strategy maps, and candidate angles
|
|
@@ -696,12 +691,17 @@ table with one row per selected or finalist post:
|
|
|
696
691
|
`## Evidence Snapshot` must include a compact numbers-first table:
|
|
697
692
|
|
|
698
693
|
- source lane / keyword or filter
|
|
694
|
+
- provider/source angle label, e.g. `Signals / AI outbound posts`,
|
|
695
|
+
`Sales Nav / active SaaS founders + GTM leaders`, or
|
|
696
|
+
`Prospeo / domain-filtered agencies`
|
|
699
697
|
- timeframe searched
|
|
700
698
|
- raw results found
|
|
701
699
|
- finalist posts or preview rows reviewed
|
|
702
700
|
- sampled people
|
|
703
701
|
- sampled fits, shown as `n/N (%)`
|
|
704
702
|
- estimated usable people
|
|
703
|
+
- estimated good-fit range after cleanup
|
|
704
|
+
- expected reply-rate range
|
|
705
705
|
- confidence note (`sample-backed`, `directional`, or `needs more sample`)
|
|
706
706
|
|
|
707
707
|
For Signals-first campaigns, `## Sample Leads` must group representative sample
|
|
@@ -719,8 +719,9 @@ chat, not the full evidence table. The visible response must include:
|
|
|
719
719
|
- `Lead source decision`
|
|
720
720
|
- `Chosen source`
|
|
721
721
|
- `Why it won`
|
|
722
|
-
- `
|
|
723
|
-
|
|
722
|
+
- `Quick numbers` as bullet points, with one provider/source angle per bullet.
|
|
723
|
+
Each bullet must include raw volume, sampled fit rate as `n/N`, estimated
|
|
724
|
+
good-fit range after cleanup, and expected reply-rate range when available.
|
|
724
725
|
- `Sample leads` with 3-5 representative `Name — Title, Company` rows
|
|
725
726
|
- `Tradeoff`
|
|
726
727
|
- `Open artifact: lead-review.md`
|
|
@@ -729,6 +730,20 @@ Keep `## Evidence Snapshot`, selected posts, discarded paths, full sample rows,
|
|
|
729
730
|
and `lead-sample.json` details in artifacts. Do not show raw filesystem paths
|
|
730
731
|
unless links cannot be created or the user asks.
|
|
731
732
|
|
|
733
|
+
Use this chat shape for the quick-number bullets:
|
|
734
|
+
|
|
735
|
+
```text
|
|
736
|
+
Quick numbers:
|
|
737
|
+
- Signals / AI outbound posts: 249 posts found. Sampled 40 engagers; 18/40
|
|
738
|
+
looked usable. Estimate: 100-250 good warm fits. Expected reply: 6-12%.
|
|
739
|
+
- Sales Nav / active SaaS founders + GTM leaders: 27,454 active profiles before
|
|
740
|
+
filtering. First 25 had 12 strong/probable fits. Estimate: 300-800 good fits
|
|
741
|
+
after title/company cleanup. Expected reply: 4-9%.
|
|
742
|
+
- Prospeo / domain-filtered agencies: 1,000+ likely contacts if we need scale,
|
|
743
|
+
but weaker LinkedIn activity. Estimate: 500-1,000 contacts. Expected reply:
|
|
744
|
+
2-5%.
|
|
745
|
+
```
|
|
746
|
+
|
|
732
747
|
After the lead source is set, use this progress copy before the parallel
|
|
733
748
|
filter/message work:
|
|
734
749
|
|
|
@@ -890,52 +905,25 @@ Keep tokenized templates, token fill basis, rendered examples, good/bad token
|
|
|
890
905
|
fill examples, validation notes, and `message-validation.md` details in
|
|
891
906
|
artifacts.
|
|
892
907
|
|
|
893
|
-
## Step 4:
|
|
894
|
-
|
|
895
|
-
Before the final approval packet, write a cheap `sequence-settings.md` preview.
|
|
896
|
-
This is a planning artifact only. Do not call `attach_sequence` or
|
|
897
|
-
`attach_recommended_sequence` here, and do not rerun research or message
|
|
898
|
-
generation. Actual sequence attachment happens after campaign creation at
|
|
899
|
-
`awaiting-user-greenlight`.
|
|
900
|
-
|
|
901
|
-
Show this slim chat summary:
|
|
902
|
-
|
|
903
|
-
```text
|
|
904
|
-
Sequence + settings
|
|
905
|
-
|
|
906
|
-
Recommended sequence:
|
|
907
|
-
Recommended LinkedIn sequence based on the connected sender’s tier and limits.
|
|
908
|
-
|
|
909
|
-
Review batch:
|
|
910
|
-
First review batch only.
|
|
911
|
-
|
|
912
|
-
Launch state:
|
|
913
|
-
Paused / review-gated. Nothing sends live until final greenlight.
|
|
914
|
-
|
|
915
|
-
Safety checks:
|
|
916
|
-
Sender and workspace will be checked again before start.
|
|
917
|
-
|
|
918
|
-
Open artifact: sequence-settings.md
|
|
919
|
-
```
|
|
920
|
-
|
|
921
|
-
## Step 5: Final Approval Packet
|
|
908
|
+
## Step 4: Final Approval Packet
|
|
922
909
|
|
|
923
910
|
When showing the final approval packet, render a slim "ready to create" summary
|
|
924
911
|
in chat. The visible response must include:
|
|
925
912
|
|
|
926
913
|
- `Ready to create campaign`
|
|
927
914
|
- `Campaign`
|
|
928
|
-
- `Target`
|
|
915
|
+
- `Target` with concrete role/title names
|
|
929
916
|
- `Lead source` with one key metric
|
|
930
917
|
- `Filter`
|
|
931
918
|
- `Sample message` with one fully filled sample and no `{{tokens}}`
|
|
932
|
-
- `Sequence/settings`
|
|
933
919
|
- `What approval creates`
|
|
934
920
|
- `Safety`
|
|
935
921
|
- `Open artifact: approval-packet.md`
|
|
936
922
|
|
|
937
923
|
Keep tokenized templates, evidence tables, rubrics, validation notes, and long
|
|
938
|
-
implementation details in `approval-packet.md`.
|
|
924
|
+
implementation details in `approval-packet.md`. Do not include
|
|
925
|
+
sequence/settings in the final approval packet; sequence attachment and launch
|
|
926
|
+
settings happen after campaign creation and before the later greenlight.
|
|
939
927
|
|
|
940
928
|
## Tail (MANDATORY TOOL ORDER + Steps 13-16 + Threshold Trips + Hard Rules)
|
|
941
929
|
|
|
@@ -122,17 +122,32 @@ sampled engagers; 31 looked like real ICP fits, so I’d treat this as direction
|
|
|
122
122
|
usable people if the remaining engagers behave similarly.
|
|
123
123
|
```
|
|
124
124
|
|
|
125
|
-
Lead review chat should be short and numeric
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
125
|
+
Lead review chat should be short and numeric. It must include bullet-pointed
|
|
126
|
+
provider/source-angle estimates, one bullet per angle, so the sourcing logic is
|
|
127
|
+
easy to scan:
|
|
128
|
+
|
|
129
|
+
```text
|
|
130
|
+
Quick numbers:
|
|
131
|
+
- Signals / AI outbound posts: 249 posts found. Sampled 40 engagers; 18/40
|
|
132
|
+
looked usable. Estimate: 100-250 good warm fits.
|
|
133
|
+
- Sales Nav / active SaaS founders + GTM leaders: 27,454 active profiles before
|
|
134
|
+
filtering. First 25 had 12 strong/probable fits. Estimate: 300-800 good fits.
|
|
135
|
+
- Sales Nav / agencies + GTM consultants: smaller but higher intent. Estimate:
|
|
136
|
+
150-400 good fits.
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
Then show chosen source, why it won, expected connection acceptance, expected
|
|
140
|
+
reply rate, 3-5 sample leads, and one tradeoff. Full tables belong in
|
|
141
|
+
`lead-review.md`.
|
|
129
142
|
|
|
130
143
|
Lead filter chat should always show what changed: keep, exclude, why, expected
|
|
131
144
|
impact, and `Open artifact: lead-filter.md`.
|
|
132
145
|
|
|
133
|
-
Final approval chat should be a ready-to-create summary: campaign, target
|
|
134
|
-
source, filter,
|
|
135
|
-
creates, and the safety note that nothing sends live until greenlight.
|
|
146
|
+
Final approval chat should be a ready-to-create summary: campaign, target with
|
|
147
|
+
concrete role/title names, lead source, filter, one filled sample message, what
|
|
148
|
+
approval creates, and the safety note that nothing sends live until greenlight.
|
|
149
|
+
Do not include sequence/settings in final approval; that belongs after campaign
|
|
150
|
+
creation.
|
|
136
151
|
|
|
137
152
|
Avoid:
|
|
138
153
|
|
|
@@ -385,6 +385,7 @@
|
|
|
385
385
|
"why use or discard"
|
|
386
386
|
],
|
|
387
387
|
"evidenceSnapshotRequiredFields": [
|
|
388
|
+
"provider/source angle label",
|
|
388
389
|
"source lane or keyword",
|
|
389
390
|
"timeframe searched",
|
|
390
391
|
"raw results found",
|
|
@@ -392,12 +393,14 @@
|
|
|
392
393
|
"sampled people",
|
|
393
394
|
"sampled fits as n/N (%)",
|
|
394
395
|
"estimated usable people",
|
|
396
|
+
"estimated good-fit range after cleanup",
|
|
397
|
+
"expected reply-rate range",
|
|
395
398
|
"confidence note"
|
|
396
399
|
],
|
|
397
400
|
"forbidPercentOnlyFitRates": true,
|
|
398
401
|
"requiredArtifactLinks": ["lead-review.md"],
|
|
399
402
|
"artifactLinkTiming": "before_next_step_or_revision_question",
|
|
400
|
-
"chatRenderRule": "Show a slim decision summary only: chosen source, why it won, raw volume, sampled fit rate as n/N, estimated
|
|
403
|
+
"chatRenderRule": "Show a slim decision summary only: chosen source, why it won, bullet-pointed Quick numbers with one provider/source angle per bullet, raw volume, sampled fit rate as n/N, estimated good-fit range after cleanup, expected connection acceptance range, expected reply rate range, 3-5 representative sample leads, and one tradeoff. Keep evidence tables, selected posts, discarded paths, full sample rows, and lead-sample.json details in lead-review.md. Do not show plain filesystem paths unless links cannot be created."
|
|
401
404
|
},
|
|
402
405
|
{
|
|
403
406
|
"action": "render_post_lead_parallel_progress",
|
|
@@ -727,60 +730,11 @@
|
|
|
727
730
|
"watchRequired": false,
|
|
728
731
|
"waitFor": ["message_approved", "revise_messaging"],
|
|
729
732
|
"transitions": {
|
|
730
|
-
"message_approved": "
|
|
733
|
+
"message_approved": "approval-packet",
|
|
731
734
|
"revise_messaging": "message-generation"
|
|
732
735
|
},
|
|
733
736
|
"interruptOnly": true
|
|
734
737
|
},
|
|
735
|
-
{
|
|
736
|
-
"id": "sequence-settings-preview",
|
|
737
|
-
"label": "Sequence and settings preview",
|
|
738
|
-
"normalFlow": true,
|
|
739
|
-
"resumeOnly": false,
|
|
740
|
-
"onEnter": [
|
|
741
|
-
{
|
|
742
|
-
"action": "write_sequence_settings_preview",
|
|
743
|
-
"artifact": "sequence-settings.md",
|
|
744
|
-
"requiredInlineMarker": "Status: sequence-settings-preview",
|
|
745
|
-
"inputs": ["brief.md", "lead-review.md", "lead-filter.md", "message-review.md"],
|
|
746
|
-
"mustBeFast": true,
|
|
747
|
-
"doNotCallTailTools": true,
|
|
748
|
-
"requiredSections": [
|
|
749
|
-
"Recommended sequence",
|
|
750
|
-
"Review batch",
|
|
751
|
-
"Launch state",
|
|
752
|
-
"Safety checks"
|
|
753
|
-
],
|
|
754
|
-
"chatRenderRule": "Show a slim sequence/settings summary: recommended LinkedIn sequence based on connected sender tier and limits, first review batch only, paused/review-gated launch state, nothing sends live until final greenlight, and sender/workspace checked again before start. Keep any details in sequence-settings.md. Do not show plain filesystem paths unless links cannot be created."
|
|
755
|
-
}
|
|
756
|
-
],
|
|
757
|
-
"requiredArtifacts": [
|
|
758
|
-
"brief.md",
|
|
759
|
-
"lead-review.md",
|
|
760
|
-
"lead-filter.md",
|
|
761
|
-
"message-review.md",
|
|
762
|
-
"message-review-decision.md"
|
|
763
|
-
],
|
|
764
|
-
"producesArtifacts": ["sequence-settings.md"],
|
|
765
|
-
"allowedTools": ["AskUserQuestion", "request_user_input"],
|
|
766
|
-
"doNotAllow": [
|
|
767
|
-
"attach_sequence",
|
|
768
|
-
"attach_recommended_sequence",
|
|
769
|
-
"create_campaign",
|
|
770
|
-
"save_rubrics",
|
|
771
|
-
"import_leads",
|
|
772
|
-
"confirm_lead_list",
|
|
773
|
-
"update_campaign",
|
|
774
|
-
"queue_cells",
|
|
775
|
-
"start_campaign"
|
|
776
|
-
],
|
|
777
|
-
"watchRequired": false,
|
|
778
|
-
"waitFor": "sequence_settings_ready",
|
|
779
|
-
"transitions": {
|
|
780
|
-
"sequence_settings_ready": "approval-packet"
|
|
781
|
-
},
|
|
782
|
-
"interruptOnly": true
|
|
783
|
-
},
|
|
784
738
|
{
|
|
785
739
|
"id": "approval-packet",
|
|
786
740
|
"label": "Approval packet",
|
|
@@ -796,8 +750,7 @@
|
|
|
796
750
|
"lead-filter.md",
|
|
797
751
|
"message-validation.md",
|
|
798
752
|
"message-review.md",
|
|
799
|
-
"message-review-decision.md"
|
|
800
|
-
"sequence-settings.md"
|
|
753
|
+
"message-review-decision.md"
|
|
801
754
|
],
|
|
802
755
|
"optionalFiles": ["rubric.json"]
|
|
803
756
|
},
|
|
@@ -816,14 +769,13 @@
|
|
|
816
769
|
"campaign direction",
|
|
817
770
|
"lead source",
|
|
818
771
|
"filter",
|
|
819
|
-
"sequence and settings",
|
|
820
772
|
"sample message",
|
|
821
773
|
"what approval creates"
|
|
822
774
|
],
|
|
823
775
|
"minimumVisibleDetail": "slim_final_approval_summary",
|
|
824
776
|
"requiredArtifactLinks": ["approval-packet.md"],
|
|
825
777
|
"artifactLinkTiming": "before_commit_gate_question",
|
|
826
|
-
"chatRenderRule": "Show a slim final approval packet only. Include target, lead source with one key metric, filter summary,
|
|
778
|
+
"chatRenderRule": "Show a slim final approval packet only. Include target with concrete role/title names, lead source with one key metric, filter summary, one fully filled sample message with no {{tokens}}, what approval creates, and safety note that nothing sends live until the review/greenlight step. Keep tokenized templates, evidence tables, rubrics, and validation details in approval-packet.md. Do not show sequence/settings in final approval; that comes after campaign creation. Do not show plain filesystem paths unless links cannot be created.",
|
|
827
779
|
"userFacing": true,
|
|
828
780
|
"doNotUseWords": ["anchor", "validation anchor", "lane"]
|
|
829
781
|
},
|
|
@@ -841,8 +793,7 @@
|
|
|
841
793
|
"lead-filter.md",
|
|
842
794
|
"message-validation.md",
|
|
843
795
|
"message-review.md",
|
|
844
|
-
"message-review-decision.md"
|
|
845
|
-
"sequence-settings.md"
|
|
796
|
+
"message-review-decision.md"
|
|
846
797
|
],
|
|
847
798
|
"producesArtifacts": ["approval-packet.md"],
|
|
848
799
|
"optionalProducesArtifacts": ["customer-roleplay.md"],
|
|
@@ -919,12 +870,11 @@
|
|
|
919
870
|
"campaign direction",
|
|
920
871
|
"lead source",
|
|
921
872
|
"filter",
|
|
922
|
-
"sequence and settings",
|
|
923
873
|
"sample message",
|
|
924
874
|
"what approval creates"
|
|
925
875
|
],
|
|
926
876
|
"requiredArtifactLinks": ["approval-packet.md"],
|
|
927
|
-
"chatRenderRule": "Same slim approval packet as approval-packet. Include one fully filled sample message without tokens. Do not repeat tokenized template or long evidence tables in chat.",
|
|
877
|
+
"chatRenderRule": "Same slim approval packet as approval-packet. Include target with concrete role/title names and one fully filled sample message without tokens. Do not include sequence/settings. Do not repeat tokenized template or long evidence tables in chat.",
|
|
928
878
|
"artifactLinkTiming": "same_turn_before_commit_question"
|
|
929
879
|
},
|
|
930
880
|
{
|
|
@@ -126,19 +126,20 @@ decision, not an internal validation report. Chat should show a slim approval
|
|
|
126
126
|
surface only:
|
|
127
127
|
|
|
128
128
|
1. **campaign** — company + sender
|
|
129
|
-
2. **target** — concise ICP summary from `brief.md
|
|
129
|
+
2. **target** — concise ICP summary from `brief.md`, including concrete
|
|
130
|
+
role/title names so the user can verify we are aiming at the right buyers
|
|
130
131
|
3. **lead source** — selected source plus one key metric from `lead-review.md`
|
|
131
132
|
(for example `17/25 sampled fits`, `520 active profiles`, or estimated usable
|
|
132
133
|
leads). Put the full evidence table in `lead-review.md`, not chat.
|
|
133
134
|
4. **filter** — one-line keep/exclude summary from `lead-filter.md`
|
|
134
|
-
5. **
|
|
135
|
-
|
|
136
|
-
nothing sends live until greenlight, sender/workspace checked again before
|
|
137
|
-
start
|
|
138
|
-
6. **sample message** — one fully filled sample message with no `{{tokens}}`
|
|
139
|
-
7. **what approval creates** — campaign draft + review batch preparation, not
|
|
135
|
+
5. **sample message** — one fully filled sample message with no `{{tokens}}`
|
|
136
|
+
6. **what approval creates** — campaign draft + review batch preparation, not
|
|
140
137
|
live sending
|
|
141
138
|
|
|
139
|
+
Do not include sequence/settings in the pre-mint final approval packet. Sequence
|
|
140
|
+
attachment and launch settings happen after campaign creation and before the
|
|
141
|
+
later greenlight.
|
|
142
|
+
|
|
142
143
|
Keep implementation details, tokenized templates, lead tables, rubric JSON, and
|
|
143
144
|
validation notes available in `approval-packet.md` and the supporting artifacts.
|
|
144
145
|
Do not show raw filesystem paths unless links cannot be created or the user asks.
|
|
@@ -131,6 +131,18 @@ usable leads after filtering, likely connection acceptance range, likely reply
|
|
|
131
131
|
range, and estimate basis. If exact performance data is unavailable, use a
|
|
132
132
|
directional range and label it `directional`, not definitive.
|
|
133
133
|
|
|
134
|
+
`## Evidence Snapshot` and the visible lead-review chat must break estimates out
|
|
135
|
+
by provider/source angle. Do not collapse everything into one raw count. Use
|
|
136
|
+
one row or bullet per angle, for example:
|
|
137
|
+
|
|
138
|
+
- `Signals / AI outbound posts`
|
|
139
|
+
- `Sales Nav / active SaaS founders + GTM leaders`
|
|
140
|
+
- `Sales Nav / agencies + GTM consultants`
|
|
141
|
+
- `Prospeo / domain-filtered agencies`
|
|
142
|
+
|
|
143
|
+
Each angle must show raw pool, sampled fits as `n/N`, estimated good-fit range
|
|
144
|
+
after cleanup, expected reply-rate range, and confidence basis.
|
|
145
|
+
|
|
134
146
|
`lead-sample.json` must include enough structured lead data for downstream
|
|
135
147
|
filtering:
|
|
136
148
|
|