@sellable/mcp 0.1.214 → 0.1.215

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.
@@ -26,11 +26,14 @@ Sellable MCP/product reads:
26
26
  - optional `campaignName`
27
27
  - optional workspace id when known
28
28
  - selected source decision and source-use rule
29
+ - source ownership classification: `sender-owned-single`,
30
+ `sender-owned-ambiguous`, or `third-party`
31
+ - source post author/sender match when known
29
32
  - `selectedLeadListId` or selected source list context
30
33
  - filter choice at branch start
31
34
  - concise brief summary: offer, buyer, safe proof, blocked claims
32
35
  - 3-5 sample workflow-table rows with `rowId`, name, title, company when
33
- available, and signal
36
+ available, signal, engagement type, and whether comment text exists
34
37
 
35
38
  Do not require campaign revision, brief hash, copied row count, review-batch
36
39
  count, row hash, or a long review-batch row-id list in the handoff. Use live
@@ -222,13 +225,27 @@ own revision. The parent renders the revised template and waits for
222
225
  low-certainty, such as `found you in a thread about [topic], so may be off,
223
226
  but this seemed relevant`.
224
227
  - Sender-owned post sources are different: if the source post was authored by
225
- the sender/client and the row proves a reaction/comment, a light first-person
226
- acknowledgment is allowed, but it must be followed by a soft
228
+ the sender/client and the row proves a reaction/comment, classify it as
229
+ `sender-owned-single` only when the final sender/source-owner match is known.
230
+ A light first-person acknowledgment is allowed for `sender-owned-single`, but
231
+ it must be followed by a soft
227
232
  relevance bridge before broad problem or product copy. Use a bridge like
228
233
  `figured this might be relevant if LinkedIn is becoming more of a GTM
229
234
  channel for [company]` before any broader `a lot of B2B teams...` claim. Do
230
235
  not jump straight from `appreciate you showing some love...` to
231
236
  `a lot of B2B teams...` or `most teams...`.
237
+ - For sender-owned sources, `found you in a thread`, `saw you in a thread`, and
238
+ `saw you in conversations` are blocked unless the source is truly third-party.
239
+ The branch-level template must either use the first-person acknowledgment plus
240
+ bridge, or omit the source line.
241
+ - If multiple senders may send the campaign, or the final sender/source-owner
242
+ match is ambiguous, do not assume `my post`, `Grace's post`, or any specific
243
+ first-person post voice. Omit the sender-owned source line until row-level
244
+ sender ownership is proven. Neutral low-certainty thread/source language is
245
+ only for truly third-party sources.
246
+ - Do not say `you commented` or name/comment on a comment unless comment text is
247
+ present in row data. If only reaction/support is known, use `showing some
248
+ love` or `showing support`.
232
249
  - Every line must make the next
233
250
  line feel earned: source/post signal -> relevance bridge -> product/problem
234
251
  -> next step. If adjacent lines could be swapped, deleted, or joined with
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sellable/mcp",
3
- "version": "0.1.214",
3
+ "version": "0.1.215",
4
4
  "type": "module",
5
5
  "description": "Sellable MCP server for Claude Code and Codex campaign workflows",
6
6
  "main": "dist/index.js",
@@ -6,7 +6,7 @@ visibility: internal
6
6
 
7
7
  # Create Campaign Workflow
8
8
 
9
- Fast entry point. Run the active state machine in `core/flow.v2.json`;
9
+ Fast entry point. This is the fast entry point. Run the active state machine in `core/flow.v2.json`;
10
10
  load deeper references only at the stage that needs them.
11
11
  Load the compact flow for exact gates:
12
12
 
@@ -75,6 +75,7 @@ Revise or reject the sample when any of these happen.
75
75
  - **category-level opener used when a per-lead signal exists** — if `lead-sample.json` carries any per-lead signal (post, hire, visible tool, topic engagement), the opener must reference it. Category-level openers of shape `"Most [category] teams still do X by hand"` are only acceptable when zero per-lead signal is in the sample. When a category-level opener is used as fallback, Findings must flag it explicitly
76
76
  - **mind-reading from engagement signals** — a topic engagement, post, public activity, role, company, or hiring trigger does not prove buyer intent. Reject phrases like `"AI-GTM stack is clearly on your mind"`, `"you're clearly focused on..."`, `"obviously relevant"`, or `"already thinking about..."` unless that exact priority is explicitly present in `lead-sample.json`. Translate to low-certainty buyer context or omit the signal from copy.
77
77
  - **source-y signal narration** — reject `"saw you on..."`, `"saw you engaging with..."`, `"you commented on..."`, `"your LinkedIn activity..."`, `"you might not remember the thread..."`, `"found you through [source] and your role looked close..."`, or any line that makes the recipient feel watched unless the chosen archived motion is intentionally self-aware about the signal. For sender-owned LinkedIn post sources, a light first-person acknowledgment is allowed when row data proves a reaction/comment: `"appreciate you showing some love on my post about [topic]"` or `"thanks for showing support on my [topic] post"`. Do not name a comment unless comment text is present. Follow the acknowledgment with a soft relevance bridge before broad pain/product copy, e.g. `"figured this might be relevant if LinkedIn is becoming more of a GTM channel for [company]"`. For third-party LinkedIn-post-sourced campaigns, a topic-level bridge is allowed when it explains why the note exists and stays apologetically uncertain: `"saw you in a few conversations about [topic], so may be off, but this seemed relevant."`, `"saw you in a few conversations around [topic], so hope this is relevant."`, or `"found you in a thread about [topic], so may be off, but this seemed relevant."` Reserve `"raise your hand"` language for explicit lead-magnet comments, replies, or opt-ins. Translate the signal into natural buyer context or omit it.
78
+ - **sender-owned source rendered as third-party** — hard fail when the source post is sender-owned and the draft says `"found you in a thread"`, `"saw you in a thread"`, `"saw you in conversations"`, or `"saw you in a few conversations"` as if the post were third-party. For sender-owned sources, the copy must either use a light first-person acknowledgment plus a soft relevance bridge, or omit the source line. If multiple senders may send the campaign, or the final sender/source-owner match is ambiguous, do not assume a specific `my post` voice or name a specific sender; omit the sender-owned source line until row-level sender ownership is proven. Neutral low-certainty thread/source language is only for truly third-party sources.
78
79
  - **fake line-to-line continuity** — reject line stacks where the source acknowledgment, relevance bridge, product line, and CTA do not actually build on each other. Each line must make the next line feel earned. If two adjacent lines could be swapped, deleted, or joined with `"anyway"` without changing the meaning, the transition is fake. In sender-owned post campaigns, the chain should be: support on my post -> why this topic may matter for the company -> what the product/problem does about that same topic -> low-friction next step.
79
80
  - **assumptive title-fit opener** — reject `"Your [role] role at [company] looked close to this problem"` or `"looked close to this outbound campaign problem"`. This asserts fit from title/company. Keep the apologetic uncertainty instead: `"may be off, but if [workflow] is relevant to what you're working on..."`.
80
81
  - **internal-metric flex** — reject compute time, token/cache details, model names, agent-counts, orchestration internals, or similar process metrics unless the brief proves the buyer cares about that exact detail. `~5 min of compute per message` is not buyer value by itself.
@@ -230,8 +230,17 @@ Orchestration requirements:
230
230
  before broad problem or product copy (`figured this might be relevant if
231
231
  LinkedIn is becoming more of a GTM channel for [company/team]`). Block drafts
232
232
  that jump straight from the acknowledgment into generic `a lot of teams...` or
233
- `most teams...` pain. For third-party post sources, keep source references
234
- topic-level and low-certainty.
233
+ `most teams...` pain. For sender-owned sources, third-party thread framing is
234
+ blocked unless the source is truly third-party: reject `found you in a thread`,
235
+ `saw you in a thread`, `saw you in conversations`, or `saw you in a few
236
+ conversations`. The message must either use the first-person acknowledgment
237
+ plus bridge or omit the source line. Use the first-person acknowledgment plus
238
+ bridge only when the final sender and source owner are proven to match. If
239
+ multiple senders may send the campaign, or the final sender/source-owner match
240
+ is ambiguous, do not assume `my post` or name a specific sender; omit the
241
+ sender-owned source line until row-level sender ownership is proven. Neutral
242
+ low-certainty source language is only for truly third-party post sources; keep
243
+ those source references topic-level and low-certainty.
235
244
  - pass the line-continuity gate before writing findings. Each message line must
236
245
  make the next line feel earned: source/post signal -> relevance bridge ->
237
246
  product/problem -> next step. If two adjacent lines could be swapped, deleted,
@@ -407,11 +407,42 @@ artifact.**
407
407
  - `saw you raise your hand for {{signal_topic}}, so figured this was (hopefully) worth sending` only when the source was an explicit lead-magnet comment, reply, or opt-in. The parenthetical uncertainty is load-bearing; do not flatten it to `so figured this was worth sending`.
408
408
  - `saw you raise your hand for {{signal_topic}} (creepy to reach out based on that, i know) - but this felt too on the nose to ignore` only when the source was an explicit lead-magnet comment, reply, or opt-in and the sender's voice can carry the cheekier aside
409
409
 
410
- For sender-owned LinkedIn-post-sourced campaigns, it is acceptable to thank
411
- the recipient for showing some love/support on the sender's post when the row
412
- proves a reaction or comment. Keep it first-person, light, and non-assumptive:
413
- `appreciate you showing some love on my post about {{signal_topic}}` is
414
- acceptable; do not say `you commented` unless the row proves comment text.
410
+ Before choosing the source opener, classify source ownership:
411
+
412
+ - `sender-owned-single`: one sender/client is known, the selected source post
413
+ was authored by that same person, and the row/list proves a reaction or
414
+ comment.
415
+ - `sender-owned-ambiguous`: the source appears sender-owned but the final
416
+ sender is not known, multiple senders may be used, or the source author does
417
+ not clearly match the specific sender voice.
418
+ - `third-party`: the source post/thread/conversation was authored by someone
419
+ other than the sender/client.
420
+
421
+ For `sender-owned-single` LinkedIn-post-sourced campaigns, it is acceptable to
422
+ thank the recipient for showing some love/support on the sender's post when
423
+ the row proves a reaction or comment. Keep it first-person, light, and
424
+ non-assumptive: `appreciate you showing some love on my post about
425
+ {{signal_topic}}` is acceptable; do not say `you commented` unless the row
426
+ proves comment text. If meaningful comment text exists in the row, a comment
427
+ callout is allowed only at topic level; do not quote or paraphrase the comment
428
+ unless the row text is available and the wording materially improves the
429
+ opener.
430
+
431
+ For `sender-owned-single`, third-party thread framing is a hard failure:
432
+ do not write `found you in a thread`, `saw you in a thread`, `saw you in
433
+ conversations`, or `saw you in a few conversations` unless the source is
434
+ truly third-party. The branch-level reusable template must either use the
435
+ first-person acknowledgment plus bridge, or omit the source line.
436
+
437
+ For `sender-owned-ambiguous` or multi-sender campaigns, do not assume the
438
+ message is from a specific person. Do not write `my post`, `Grace's post`, or
439
+ any first-person post acknowledgment unless the final sender/source-owner
440
+ match is proven for that row. Omit the sender-owned source line until row
441
+ generation can safely fill it. Neutral thread/source language is only for
442
+ truly third-party sources.
443
+ In short: do not assume the message is from a specific person when the final
444
+ sender/source-owner match is ambiguous.
445
+
415
446
  Do not let the acknowledgment dead-end. Follow it with a soft post-topic to
416
447
  buyer-context bridge before broad pain or product copy. Prefer:
417
448
  `figured this might be relevant if {{channel_context}} is becoming more of a