@sellable/mcp 0.1.237 → 0.1.239

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.
@@ -12,9 +12,12 @@ Every saved draft needs a validation receipt. A draft without this receipt is no
12
12
  - `proofClaimsUsed`
13
13
  - `proofClaimSources`
14
14
  - `storyFilesConsulted`
15
+ - `goldStandardsConsulted`
15
16
  - `voiceRulesApplied`
17
+ - `linkedinPreviewAudit`
16
18
  - `simplifierConcreteLanguageAudit`
17
19
  - `antiAiAudit`
20
+ - `outboundAiTellAudit`
18
21
  - `finalizerChanges`
19
22
  - `blockedReasons`
20
23
  - `retryNeededReasons`
@@ -29,6 +32,10 @@ Each candidate should include:
29
32
  - hook text
30
33
  - source pattern
31
34
  - score
35
+ - char count including newlines and first-line / first-two-line preview measurements
36
+ - physical line count, content line count, longest nonblank line, and blank-line risk
37
+ - `previewBudgetStatus`: `pass`, `warn`, or `fail`
38
+ - mobile and desktop preview fit
32
39
  - proof/story dependency
33
40
  - AI-tell risk
34
41
  - why it should win or lose
@@ -43,6 +50,48 @@ After the first draft:
43
50
  4. replace generic language with concrete words only when supported
44
51
  5. preserve the user's actual story and point
45
52
  6. remove AI tells
53
+ 7. re-check LinkedIn preview fit after edits
54
+
55
+ ## LinkedIn Preview Audit
56
+
57
+ Audit the selected hook and top candidates against conservative LinkedIn
58
+ preview budgets. LinkedIn does not publish exact "see more" cutoff rules, and
59
+ rendering varies by device, app version, font, media, and line break. This audit
60
+ is a mobile-first safety gate, not a claim about an official LinkedIn limit.
61
+
62
+ Use:
63
+
64
+ - `pass`: hook is <= 110 chars including newlines, every nonblank line is <= 45 chars, and the hook's core point lands before likely truncation.
65
+ - `warn`: hook is 111-140 chars including newlines, any nonblank line is 46-55 chars, or blank lines create visual-line risk. Blank lines are allowed, but they count as physical lines.
66
+ - `fail`: hook is > 140 chars including newlines, any nonblank line is > 55 chars, or the hook's point depends on text after likely truncation.
67
+
68
+ Desktop preview usually has more room. Still record desktop fit, but never let
69
+ desktop fit compensate for a mobile `fail`.
70
+
71
+ Record:
72
+
73
+ - `charCount`
74
+ - `charCountIncludingNewlines`
75
+ - `firstLineChars`
76
+ - `firstTwoLinesChars`
77
+ - `physicalLineCount`
78
+ - `contentLineCount`
79
+ - `longestNonblankLineChars`
80
+ - `blankLineCountBeforeFold`
81
+ - `blankLineVisualRisk`
82
+ - `corePointBeforeLikelyTruncation`
83
+ - `previewBudgetStatus`
84
+ - `mobilePreviewFit`
85
+ - `desktopPreviewFit`
86
+ - `lineCountEstimate`
87
+ - `truncationRisk`
88
+ - `rewriteIfTruncated`
89
+ - `compactFallback` when `previewBudgetStatus` is `warn`
90
+
91
+ If the hook only works after likely truncation, rewrite it. A draft cannot be
92
+ `ready` with `previewBudgetStatus: fail`. A draft may be `ready` with
93
+ `previewBudgetStatus: warn` only when the warning is explicit, usually because
94
+ the user prefers blank-line rhythm, and the receipt includes a compact fallback.
46
95
 
47
96
  ## Simplifier / Concrete-Language Audit
48
97
 
@@ -59,7 +108,25 @@ Do not make language concrete by inventing new facts.
59
108
 
60
109
  ## Anti-AI Audit
61
110
 
62
- Reject or rewrite:
111
+ Start with the Outbound Base AI-Tell Layer from the message pipeline, adapted for public posts. This is a starter smell detector, not permission to run outbound workflows or force outbound copy style.
112
+
113
+ Reject or rewrite outbound-derived tells when they appear in a post:
114
+
115
+ - body-level self-introductions that add no story context
116
+ - source-citation phrasing such as "your bio says", "your profile shows", or "saw on LinkedIn"
117
+ - explicit date or duration precision that feels scraped
118
+ - block quotes of another person's phrasing longer than 4 words
119
+ - parenthetical stack or feature dumps
120
+ - over-precise numerics without a traceable source
121
+ - hardcoded signoffs
122
+ - vague proof brags such as "trusted by leaders" without named or sourced proof
123
+ - formal CTA phrasing
124
+ - reusable openers that could fit any topic
125
+ - em dashes in the draft body unless the user's post rules explicitly allow them
126
+ - resume-recap or scraped-personalization bridges
127
+ - flattened "worth sending" bridges
128
+
129
+ Also reject or rewrite post-native AI tells:
63
130
 
64
131
  - "game-changing"
65
132
  - "leverage"
@@ -67,9 +134,13 @@ Reject or rewrite:
67
134
  - "this is key"
68
135
  - "let that sink in"
69
136
  - "read that again"
137
+ - "here's the thing"
138
+ - "unpopular opinion" without a specific argument
70
139
  - generic lessons without a story
71
140
  - tidy three-part frameworks that were not in the source material
72
141
  - fabricated numbers or examples
142
+ - contrarian bait without proof
143
+ - lead-magnet bait when the user did not ask for a lead magnet
73
144
 
74
145
  ## Proof And Voice Gates
75
146
 
@@ -83,6 +154,10 @@ Every claim must trace to at least one of:
83
154
  - `core/answer-bank.md`
84
155
  - approved reference material
85
156
 
157
+ Gold standards can guide structure, rhythm, and judgment. They cannot create new
158
+ claims. If an outside gold standard is used, verify the draft copied no outside
159
+ wording unless the user explicitly approved quotation.
160
+
86
161
  If the necessary proof or story is missing, ask the user or return blocked/retry-needed.
87
162
 
88
163
  ## Ready Status
@@ -45,6 +45,11 @@ message assets through Sellable MCP tools:
45
45
  After candidate generation and revision, and before returning `ready`, load
46
46
  `create-campaign-v2-validation` through Sellable MCP as the final gate.
47
47
 
48
+ Both live and dry runs must produce or validate `message-validation.md` with
49
+ the same quality gates. The selected winner must pass the `Concrete Language Audit`:
50
+ identify and replace or cut abstract verbs, abstract nouns, abstract adjectives,
51
+ abstract adverbs, and cliches before the message is treated as ready.
52
+
48
53
  Never reconstruct that branch from `brief.md`, `lead-review.md`,
49
54
  `lead-sample.json`, `lead-filter.md`, `message-validation.md`, local files, or
50
55
  direct database reads. If any required message asset cannot be loaded through MCP
@@ -66,3 +66,30 @@ Personal LinkedIn posts and inspiration examples deserve especially clear
66
66
  notes: explain whether the lesson is voice, hook shape, proof handling,
67
67
  argument structure, audience fit, or a pattern to avoid. Do not mix admiration
68
68
  with permission to copy; many inspiration examples should be structural only.
69
+
70
+ ## LinkedIn Post Gold Standards
71
+
72
+ The approved LinkedIn post gold-standard pack lives in
73
+ `~/.sellable/configs/core/references/linkedin-posts/` and is capped at 20
74
+ approved examples. User-owned examples can be personal best posts or
75
+ user-approved space benchmarks researched from high-performing posts in the
76
+ space.
77
+
78
+ Do not add researched outside posts directly to the approved pack. First show a
79
+ candidate list and ask which examples the user wants to add, skip, mark as
80
+ anti-examples, or use to replace an existing item when the pack is full.
81
+
82
+ Each approved post reference should split the lesson into:
83
+
84
+ - hook mechanism
85
+ - content/body mechanism
86
+ - rhythm and pacing
87
+ - sentence structure
88
+ - proof/story use
89
+ - voice fit
90
+ - risks and allowed use
91
+
92
+ Outside examples are structure/taste references only unless the user explicitly
93
+ approves quotation. Personal posts can be stronger voice references, but still
94
+ record whether to quote, imitate structure, summarize, keep private, or treat as
95
+ an anti-example.