@sellable/mcp 0.1.258 → 0.1.260

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.
@@ -61,23 +61,15 @@ Hook research files must preserve:
61
61
  - engagement totals
62
62
  - author follower counts when available, target follower band, follower-band
63
63
  fit, engagement per 1k followers, weighted engagement per 1k followers,
64
- reach penalty multiplier, reach-adjusted score, baseline lift when available,
65
- why the hook carries independent of creator reach, and normalization
66
- confidence notes
64
+ reach-adjusted score, and normalization confidence notes when reach
65
+ normalization was used
67
66
  - full-text availability
68
67
  - source hook preview measurements, including text basis, char count including
69
68
  newlines, physical/content line counts, longest nonblank line, blank-line
70
69
  visual risk, and mobile/desktop preview budget status
71
- - rendered preview records for every kept source hook and adapted hook block,
72
- including literal mobile/desktop preview blocks, rendered line wraps, render
73
- basis, CSS contract version, text widths, first-screen promise visibility,
74
- core point visibility, and whether the point lands after the mobile clamp
75
- - hook reverse-engineering autopsies for kept source hooks, including source
76
- mechanism, open-loop type, click question, promised payoff, specificity
77
- anchor, source shape to keep, source words not to copy, and adaptation rule
78
- - hook angle matrix summary, including angle territories tested, top generated
79
- hooks, winning territory, runner-up territories, and why the winning angle
80
- beat the alternatives
70
+ - rendered preview records for kept source hooks and adapted hook blocks,
71
+ including literal mobile/desktop preview blocks and whether the first-screen
72
+ promise is visible
81
73
  - extracted hook patterns
82
74
  - selected hook basis
83
75
 
@@ -96,11 +88,11 @@ Draft files must preserve:
96
88
  - score fields for hook, proof, voice, specificity, skimmability, and publish confidence
97
89
  - `verdict`: `baseline`, `keep`, `revise`, `reject`, `publish_candidate`, or a similarly explicit state
98
90
  - draft body
91
+ - pre-draft structure brief: hook, thesis, reader, core mechanism, key
92
+ definitions, proof claims, mobile scan path, section outline, body promise,
93
+ concrete examples, abstractions to remove, and draft risks
99
94
  - validation receipt, including LinkedIn preview pass/warn/fail status and
100
95
  compact fallback when the selected hook carries a warning
101
- - selected hook reverse-engineering audit, hook angle matrix summary, and
102
- see-more click audit when the selected hook intentionally hides the payoff
103
- after the mobile fold
104
96
  - rendered mobile and desktop preview blocks for the selected hook; drafts
105
97
  cannot be ready when this rendered-preview audit is missing or fails mobile
106
98
  visibility
@@ -11,10 +11,13 @@ Every saved draft needs a validation receipt. A draft without this receipt is no
11
11
  - `candidateHooksConsidered`
12
12
  - `selectedHook`
13
13
  - `selectedHookWhy`
14
- - `sourceHookReachAudit`
15
- - `hookReverseEngineeringAudit`
16
- - `hookAngleMatrix`
17
- - `seeMoreClickAudit`
14
+ - `preDraftStructureBrief`
15
+ - `selectedSourceTemplate`
16
+ - `postPositioningBreakdown`
17
+ - `viralPostOutline`
18
+ - `hookToBodyPromiseMap`
19
+ - `bodyExpressionCandidates`
20
+ - `combinedBodyPlan`
18
21
  - `proofClaimsUsed`
19
22
  - `proofClaimSources`
20
23
  - `storyFilesConsulted`
@@ -22,6 +25,9 @@ Every saved draft needs a validation receipt. A draft without this receipt is no
22
25
  - `voiceRulesApplied`
23
26
  - `marketBeliefAudit`
24
27
  - `premiseValueAudit`
28
+ - `mobileScanabilityAudit`
29
+ - `templateAdaptationAudit`
30
+ - `abstractionToConcreteRewriteAudit`
25
31
  - `linkedinPreviewAudit`
26
32
  - `simplifierConcreteLanguageAudit`
27
33
  - `antiAiAudit`
@@ -72,46 +78,20 @@ set the verdict to `revise` or `reject`.
72
78
 
73
79
  ## Candidate Set
74
80
 
75
- Generate many hook candidates before drafting. Do not lock onto the first draft.
76
-
77
- Minimum candidate set:
78
-
79
- - normal drafting: at least 8 angle territories and 24 hook candidates
80
- - hook-critical requests: at least 12 angle territories and 40 hook candidates
81
- - smaller set only when the user explicitly asks for fewer options
82
-
83
- An angle territory is a distinct reason the reader might care, such as hidden
84
- asset, tool/enemy contrast, first-person build proof, workflow reveal,
85
- contrarian category claim, mistake/confession, market timing, operator pain,
86
- specific person/company signal, before/after transformation, or question hook.
81
+ Generate multiple hook candidates before drafting. Do not lock onto the first draft.
87
82
 
88
83
  Each candidate should include:
89
84
 
90
85
  - hook text
91
86
  - selected premise
92
- - angle territory
87
+ - selected source template or no-template rationale
93
88
  - premise tension opened
94
89
  - reader value implied
95
90
  - source pattern
96
- - source shape kept
97
- - source words not copied
98
- - source pattern reach signals: author follower count when available, target
99
- follower band, follower-band fit, engagement per 1k followers, weighted
100
- engagement per 1k followers, reach-adjusted score, baseline lift, and
101
- confidence
91
+ - hook-to-body promise
92
+ - see-more tension
93
+ - curiosity debt
102
94
  - score
103
- - `renderedPreview` using `references/linkedin-preview-rendering.md`
104
- - literal mobile and desktop rendered preview blocks
105
- - mobile and desktop rendered line wraps
106
- - first-screen promise: pain, proof, or curiosity visible by the mobile clamp
107
- - `intentionalOpenLoop`
108
- - `specificClickQuestionVisible`
109
- - `seeMoreClickReason`
110
- - `clickQuestion`
111
- - `payoffAfterFold`
112
- - `bodyProofObligation`
113
- - whether the core point is visible in the mobile rendered preview
114
- - whether the point lands after the mobile clamp
115
95
  - char count including newlines and first-line / first-two-line preview measurements
116
96
  - physical line count, content line count, longest nonblank line, and blank-line risk
117
97
  - `previewBudgetStatus`: `pass`, `warn`, or `fail`
@@ -120,55 +100,6 @@ Each candidate should include:
120
100
  - AI-tell risk
121
101
  - why it should win or lose
122
102
 
123
- ## Hook Reverse Engineering Audit
124
-
125
- Before a draft can be `ready`, validate that the selected hook came from a real
126
- source-shape analysis, not from generic brainstorming.
127
-
128
- Record:
129
-
130
- - `sourceHooksStudied`
131
- - `sourceHookAutopsies`
132
- - `selectedSourceShape`
133
- - `sourceShapeKept`
134
- - `sourceWordsNotCopied`
135
- - `whyItWorks`
136
- - `openLoopType`: `none`, `hidden_payoff`, `contradiction`, `proof_gap`,
137
- `workflow_reveal`, `asset_reveal`, or `story_gap`
138
- - `clickQuestion`
139
- - `promisedPayoff`
140
- - `specificityAnchor`
141
- - `tensionOpened`
142
- - `proofImplied`
143
- - `adaptationRule`
144
- - `bodyPayoffObligation`
145
-
146
- The selected draft cannot be `ready` if the hook was copied verbatim from
147
- another creator, if the receipt only says "contrarian" or "curiosity" without
148
- the concrete shape, or if the body does not pay off the hook quickly.
149
-
150
- ## Hook Angle Matrix Audit
151
-
152
- Before a draft can be `ready`, validate that the hook was chosen after exploring
153
- materially different angles.
154
-
155
- Record:
156
-
157
- - `angleTerritoriesTested`
158
- - `hookCandidatesGenerated`
159
- - `winningTerritory`
160
- - `runnerUpTerritories`
161
- - `whyWinningAngleBeatsAlternatives`
162
- - `whyRejectedHooksLost`
163
- - `mobileRenderedPreviewBlocksForTopCandidates`
164
- - `desktopRenderedPreviewBlocksForTopCandidates`
165
- - `proofNeededByWinningAngle`
166
-
167
- If the user asked to "nail the hook," "focus on hooks," or explore "a ton of
168
- angles," the draft cannot be `ready` unless at least 12 territories and 40 hook
169
- candidates were considered or the receipt explains why the user explicitly
170
- requested fewer.
171
-
172
103
  ## Finalizer Pass
173
104
 
174
105
  After the first draft:
@@ -176,12 +107,15 @@ After the first draft:
176
107
  1. remove unsupported claims
177
108
  2. verify the draft is anchored to the selected market belief and controversy
178
109
  3. verify the real story/scene, tension, and reader value are visible early
179
- 4. tighten the hook
180
- 5. simplify abstract phrasing
181
- 6. replace generic language with concrete words only when supported
182
- 7. preserve the user's actual story and point
183
- 8. remove AI tells
184
- 9. re-render the selected hook on mobile and desktop after edits
110
+ 4. verify the body repays the selected hook's curiosity debt
111
+ 5. verify the final post follows the selected positioning sequence or explains
112
+ why it departed from the template
113
+ 6. tighten the hook
114
+ 7. simplify abstract phrasing
115
+ 8. replace generic language with concrete words only when supported
116
+ 9. preserve the user's actual story and point
117
+ 10. remove AI tells
118
+ 11. re-check LinkedIn preview fit after edits
185
119
 
186
120
  ## Premise Value Audit
187
121
 
@@ -199,15 +133,117 @@ Record:
199
133
  - `readerValue`: what the reader learns, sees differently, or can do
200
134
  - `proofAvailable`: source-backed proof used
201
135
  - `proofMissing`: claims intentionally avoided or requiring user input
136
+ - `preDraftStructureBrief`: hook, thesis, reader, core mechanism, definitions,
137
+ proof claims, mobile scan path, section outline, and abstractions to remove
202
138
  - `premiseQualityGates`: pass/fail for `specific_scene_or_pattern`,
203
139
  `clear_reader`, `visible_tension`, `reader_value`, `credible_speaker`,
204
- `proof_safety`, and `market_heat`
140
+ `proof_safety`, `market_heat`, and `pre_draft_structure`
205
141
  - `bodyOutline`: how the body delivers the premise before prose
142
+ - `viralPostOutline`: the selected narrative structure, including beat jobs
143
+ - `hookToBodyPromiseMap`: how the body repays the hook's open loop
144
+ - `combinedBodyPlan`: which body-expression lines were kept, rewritten, or cut
206
145
 
207
146
  If the draft has no specific scene or observed pattern, no visible tension, or
208
147
  no reader value beyond "this is interesting," save as `needs_revision`. Do not
209
148
  mark it `ready` because the hook passes preview limits.
210
149
 
150
+ ## Pre-Draft Structure Audit
151
+
152
+ Before a draft can be `ready`, validate that the structure was locked before the
153
+ body was written.
154
+
155
+ Record:
156
+
157
+ - `hook`: selected hook plus mobile/desktop rendered preview verdict
158
+ - `thesis`: one sentence the post defends
159
+ - `readerBeingTaught`: specific reader and why the post is written for them
160
+ - `coreEquationOrMechanism`: the operating idea being taught
161
+ - `keyDefinitions`: concrete definitions and examples for terms the reader
162
+ could misunderstand
163
+ - `proofClaims`: claims, sources, and public-safety status
164
+ - `sourceTemplateOrNoTemplateRationale`
165
+ - `mobileScanPath`: what a skimmer understands from the hook, separators,
166
+ section labels, numbers, and close
167
+ - `sectionOutline`: section order plus the job of each section
168
+ - `bodyPromiseAfterSeeMore`: what the body immediately repays
169
+ - `abstractionsToRemove`: abstract phrases and their concrete replacements
170
+ - `userCorrectionsApplied`: user corrections applied to the brief before prose
171
+
172
+ Save as `needs_revision` when the draft was written before the structure brief,
173
+ when the brief does not match the final prose, when the mobile scan path is
174
+ unclear, or when key terms are left abstract.
175
+
176
+ ## Mobile Scanability Audit
177
+
178
+ A LinkedIn post must still teach the main idea when a reader scans it.
179
+
180
+ Record:
181
+
182
+ - `scanVisibleFrom`: hook, separators, numbered labels, ranges/numbers, example
183
+ prompts, and close
184
+ - `readerGetsWithoutReadingEveryWord`: the specific takeaway a skimmer gets
185
+ - `sectionSeparators`: present | absent | not_needed
186
+ - `sectionLabels`: concrete | abstract | missing
187
+ - `numbersOrProofVisible`: yes | no
188
+ - `mobileLineLengthRisk`: pass | warn | fail
189
+ - `skimVerdict`: pass | needs_revision
190
+
191
+ Save as `needs_revision` when a skimmer cannot understand the thesis, hierarchy,
192
+ or practical next action.
193
+
194
+ ## Abstraction-To-Concrete Rewrite Audit
195
+
196
+ Record every meaningful abstraction found in the draft and the concrete
197
+ replacement. Do not merely say "made concrete."
198
+
199
+ Use this format:
200
+
201
+ ```text
202
+ abstractionToConcreteRewriteAudit:
203
+ 1.
204
+ original:
205
+ issue:
206
+ replacement:
207
+ source:
208
+ kept_or_cut:
209
+ ```
210
+
211
+ Common abstractions to flag:
212
+
213
+ - vague nouns such as `signal`, `market`, `attention`, `system`, `quality`,
214
+ `context`, `machine`, or `workflow` when the sentence does not name the actual
215
+ source, action, number, or object
216
+ - broad persona labels used as lead sources
217
+ - "warm" without explaining what made the source warm
218
+ - "offer" without explaining why the recipient would believe or want it
219
+ - "learning" without naming what metric changes the next decision
220
+
221
+ Do not make language concrete by inventing facts. If the concrete replacement
222
+ requires missing proof, ask the user or save as `needs_revision`.
223
+
224
+ ## Template Adaptation Audit
225
+
226
+ Before a draft can be `ready`, validate that source posts were converted into
227
+ templates rather than copied.
228
+
229
+ Record:
230
+
231
+ - `selectedSourceTemplate`: source, template name, and why it fits
232
+ - `positioningSequenceBorrowed`: category sequence being adapted
233
+ - `viralPostOutlineBorrowed`: beat sequence being adapted
234
+ - `lineShapesBorrowed`: reusable line shapes, not copied wording
235
+ - `userStoryInputsUsed`: source-backed user facts filling the template
236
+ - `userProofInputsUsed`: source-backed user proof filling the template
237
+ - `forbiddenBorrowingAvoided`: source proof, jokes, personal context, status,
238
+ phrases, or examples not used
239
+ - `hookToBodyRepayment`: whether the body answers the hook's curiosity debt
240
+ - `bodyExpressionCandidatesReviewed`: which variants were tested and what won
241
+ - `copyingRisk`: pass | needs_revision | blocked
242
+
243
+ Save as `needs_revision` when the draft copies outside wording, borrows outside
244
+ proof, keeps a source template's status without equivalent user authority, or
245
+ uses a hook whose promised body payoff is not delivered.
246
+
211
247
  ## Market Belief Audit
212
248
 
213
249
  Before a draft can be `ready`, validate that it is not merely an internally
@@ -230,104 +266,24 @@ If `selectedControversy` is missing, if the audience belief is only a generic
230
266
  label like "founders want growth," or if `credibleWhyUs` depends on borrowed
231
267
  proof from another creator, save as `needs_revision`.
232
268
 
233
- ## Source Hook Reach Audit
234
-
235
- Before a draft can be `ready`, validate that the selected source hook pattern
236
- was chosen for a reach-normalized reason, not raw audience size.
237
-
238
- Record:
239
-
240
- - `targetFollowerBand`
241
- - `authorFollowerCount` for each source pattern when available
242
- - `followerBandFit`: `in_target_band`, `below_target_band`,
243
- `above_target_band`, or `unknown`
244
- - `engagementPer1kFollowers`
245
- - `weightedEngagementPer1kFollowers`
246
- - `reachAdjustedScore`
247
- - `reachPenaltyMultiplier`
248
- - `creatorBaselineMedianEngagement` or `creator_baseline_unavailable`
249
- - `baselineLift` or `creator_baseline_unavailable`
250
- - `bigAccountPenaltyApplied`
251
- - `whyTheHookCarries`
252
- - `followerCountUnavailableSources`
253
- - `whyThisHookIsAReachAdjustedSignal`
254
-
255
- If the user asked for a follower range and the selected source pattern is from a
256
- large account above the target range, the receipt must explain why it survived
257
- the celebrity reach penalty. Use large-account hooks as secondary pattern
258
- evidence unless they clearly overperform the creator's baseline or the hook
259
- itself carries after reach is controlled. A draft cannot be `ready` when the
260
- selected hook is justified only by raw total engagement or follower count.
261
-
262
269
  ## LinkedIn Preview Audit
263
270
 
264
- Audit the selected hook and top candidates against
265
- `references/linkedin-preview-rendering.md`. LinkedIn does not publish exact
266
- "see more" cutoff rules, and rendering varies by device, app version, font,
267
- media, and line break. This audit is a mobile-first rendered-preview safety
268
- gate, not a claim about an official LinkedIn limit.
271
+ Audit the selected hook and top candidates against conservative LinkedIn
272
+ preview budgets. LinkedIn does not publish exact "see more" cutoff rules, and
273
+ rendering varies by device, app version, font, media, and line break. This audit
274
+ is a mobile-first safety gate, not a claim about an official LinkedIn limit.
269
275
 
270
- Character budgets are secondary diagnostics. They cannot be the only evidence
271
- that a hook works. Every selected hook must include literal rendered mobile and
272
- desktop preview blocks.
273
-
274
- Default deterministic renderer when no authenticated LinkedIn screenshot is
275
- available:
276
-
277
- ```text
278
- cssContractVersion: linkedin-preview-rendering/v1
279
- font size: 14px
280
- line height: 21px
281
- white space: pre-wrap
282
- overflow wrap: break-word
283
- mobile text width: 308px
284
- desktop text width: 582px
285
- review clamp: first 3 rendered text lines
286
- ```
276
+ Use:
287
277
 
288
- Use rendered gates:
289
-
290
- - `pass`: the mobile rendered preview shows the pain, proof, or curiosity by
291
- the end of the first 3 rendered lines, and either the core point is
292
- understandable without opening "see more" or an intentional open loop creates
293
- a specific click question with an immediate planned payoff.
294
- - `warn`: the mobile rendered preview creates useful curiosity but the core
295
- point or click question is slightly softened by wrapping, blank-line rhythm,
296
- or one missing context word. A compact fallback is required.
297
- - `fail`: the hook's real point appears after the first 3 mobile rendered
298
- lines without an intentional open-loop plan, the visible open loop is vague,
299
- the first rendered line is generic setup, blank lines consume the preview
300
- before the reader sees the point, or desktop fit is the only reason it looks
301
- good.
278
+ - `pass`: hook is <= 110 chars including newlines, every nonblank line is <= 45 chars, and the hook's core point lands before likely truncation.
279
+ - `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.
280
+ - `fail`: hook is > 140 chars including newlines, any nonblank line is > 55 chars, or the hook's point depends on text after likely truncation.
302
281
 
303
282
  Desktop preview usually has more room. Still record desktop fit, but never let
304
283
  desktop fit compensate for a mobile `fail`.
305
284
 
306
285
  Record:
307
286
 
308
- - `renderedPreview`
309
- - `renderBasis`: `linkedin_css_contract`, `authenticated_linkedin_screenshot`,
310
- or `manual_user_source`
311
- - `cssContractVersion`
312
- - `mobileRenderedPreviewBlock`
313
- - `desktopRenderedPreviewBlock`
314
- - `mobileRenderedLines`
315
- - `desktopRenderedLines`
316
- - `mobileTextWidthPx`
317
- - `desktopTextWidthPx`
318
- - `mobileRenderedLineCount`
319
- - `desktopRenderedLineCount`
320
- - `corePainProofOrCuriosityVisibleMobile`
321
- - `corePainProofOrCuriosityVisibleDesktop`
322
- - `corePointVisibleMobile`
323
- - `corePointVisibleDesktop`
324
- - `intentionalOpenLoop`
325
- - `specificClickQuestionVisible`
326
- - `payoffPlannedImmediatelyAfterClamp`
327
- - `seeMoreClickReason`
328
- - `clickQuestion`
329
- - `payoffAfterFold`
330
- - `pointAfterMobileClamp`
331
287
  - `charCount`
332
288
  - `charCountIncludingNewlines`
333
289
  - `firstLineChars`
@@ -346,37 +302,10 @@ Record:
346
302
  - `rewriteIfTruncated`
347
303
  - `compactFallback` when `previewBudgetStatus` is `warn`
348
304
 
349
- If the hook only works after the rendered mobile clamp, rewrite it. A draft
350
- cannot be `ready` with `previewBudgetStatus: fail`,
351
- `mobilePreviewFit: fail`, missing `renderedPreview`,
352
- `corePainProofOrCuriosityVisibleMobile: false`,
353
- `corePointVisibleMobile: false` unless the receipt has
354
- `intentionalOpenLoop: true`, `specificClickQuestionVisible: true`, and
355
- `payoffPlannedImmediatelyAfterClamp: true`, or `pointAfterMobileClamp: true`
356
- unless the post is intentionally hiding the payoff for a specific see-more
357
- click. A draft may be `ready` with `previewBudgetStatus: warn` only when the
358
- warning is explicit, usually because the user prefers blank-line rhythm, and
359
- the receipt includes a compact fallback.
360
-
361
- ## See-More Click Audit
362
-
363
- When the selected hook intentionally hides the payoff after the mobile fold,
364
- record:
365
-
366
- - `intentionalOpenLoop: true`
367
- - `openLoopType`
368
- - `visibleBeforeFold`
369
- - `clickQuestion`
370
- - `payoffAfterFold`
371
- - `firstPayoffLine`
372
- - `payoffArrivesWithinFirstBodySection`
373
- - `readerValueAfterClick`
374
- - `baitRisk`
375
- - `baitRiskMitigation`
376
-
377
- Open loops are allowed only when the body actually delivers the promised payoff.
378
- If the hook withholds the answer but the body switches topics, save as
379
- `needs_revision`.
305
+ If the hook only works after likely truncation, rewrite it. A draft cannot be
306
+ `ready` with `previewBudgetStatus: fail`. A draft may be `ready` with
307
+ `previewBudgetStatus: warn` only when the warning is explicit, usually because
308
+ the user prefers blank-line rhythm, and the receipt includes a compact fallback.
380
309
 
381
310
  ## Simplifier / Concrete-Language Audit
382
311
 
@@ -449,7 +378,9 @@ If the necessary proof or story is missing, ask the user or return blocked/retry
449
378
 
450
379
  Use:
451
380
 
452
- - `ready` only when proof, voice, anti-AI, and concrete-language gates pass
381
+ - `ready` only when proof, voice, anti-AI, concrete-language, pre-draft
382
+ structure, mobile-scanability, hook-to-body repayment, and
383
+ template-adaptation gates pass
453
384
  - `needs_revision` when a draft exists but a gate failed
454
385
  - `blocked` when required context is missing
455
386
  - `retry-needed` when a tool/package/search failure blocked the pipeline