@sellable/mcp 0.1.267 → 0.1.269
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/dist/index-dev.js +0 -0
- package/dist/index.js +0 -0
- package/dist/server.js +8 -7
- package/dist/tools/content-posts.d.ts +1 -421
- package/dist/tools/content-posts.js +0 -802
- package/dist/tools/engage-discovery.d.ts +0 -24
- package/dist/tools/engage-discovery.js +9 -114
- package/dist/tools/harvest-jobs.d.ts +182 -0
- package/dist/tools/harvest-jobs.js +429 -0
- package/dist/tools/leads.js +1 -1
- package/dist/tools/registry.d.ts +47 -76
- package/dist/tools/registry.js +2 -0
- package/package.json +1 -1
- package/skills/create-campaign/SKILL.md +10 -0
- package/skills/create-campaign/core/providers/prospeo.json +5 -2
- package/skills/create-post/SKILL.md +32 -605
- package/skills/create-post/references/hook-research-playbook.md +31 -460
- package/skills/create-post/references/post-file-contract.md +0 -36
- package/skills/create-post/references/post-validation.md +27 -258
- package/skills/create-post/references/premise-development.md +7 -298
- package/skills/providers/prospeo.md +21 -0
- package/skills/create-post/references/linkedin-preview-rendering.md +0 -221
- package/skills/research/config.json +0 -9
|
@@ -50,38 +50,19 @@ Idea files must preserve:
|
|
|
50
50
|
- `updatedAt`
|
|
51
51
|
- exact raw source between raw-source markers
|
|
52
52
|
- optional distilled brief that does not add new claims
|
|
53
|
-
- transcript worldview packet when create-post has mined relevant
|
|
54
|
-
transcript/content-memory material for this idea
|
|
55
53
|
|
|
56
54
|
Hook research files must preserve:
|
|
57
55
|
|
|
58
56
|
- source idea ID
|
|
59
|
-
- transcript/content-memory match status and transcript worldview packet
|
|
60
57
|
- keywords searched
|
|
61
58
|
- filters used
|
|
62
59
|
- source post URLs
|
|
63
60
|
- author/profile URLs
|
|
64
61
|
- engagement totals
|
|
65
|
-
- author follower counts when available, target follower band, follower-band
|
|
66
|
-
fit, engagement per 1k followers, weighted engagement per 1k followers,
|
|
67
|
-
reach-adjusted score, and normalization confidence notes when reach
|
|
68
|
-
normalization was used
|
|
69
62
|
- full-text availability
|
|
70
63
|
- source hook preview measurements, including text basis, char count including
|
|
71
64
|
newlines, physical/content line counts, longest nonblank line, blank-line
|
|
72
65
|
visual risk, and mobile/desktop preview budget status
|
|
73
|
-
- audience tension snapshot and selected angle
|
|
74
|
-
- rendered preview records for kept source hooks and adapted hook blocks,
|
|
75
|
-
including literal mobile/desktop preview blocks and whether the first-screen
|
|
76
|
-
promise is visible
|
|
77
|
-
- thought leader inspiration packets when the user supplied creators, including
|
|
78
|
-
worker status, profile URL/handle, recent posts reviewed, weighted winners,
|
|
79
|
-
follower-adjusted signal when available, allowed mechanics to adapt, and
|
|
80
|
-
forbidden borrowing
|
|
81
|
-
- source-message outlines for keeper posts, preserving source paragraph order
|
|
82
|
-
and branching each paragraph, line, or phrase into high-level goal, reader
|
|
83
|
-
effect, reusable move, and adaptation guard without reproducing the full
|
|
84
|
-
outside source post
|
|
85
66
|
- extracted hook patterns
|
|
86
67
|
- selected hook basis
|
|
87
68
|
|
|
@@ -89,8 +70,6 @@ Draft files must preserve:
|
|
|
89
70
|
|
|
90
71
|
- source idea ID
|
|
91
72
|
- hook research ID
|
|
92
|
-
- transcript worldview packet used to build the premise, worldview, and hot
|
|
93
|
-
take
|
|
94
73
|
- versioned draft ID, normally ending in `_v1`, `_v2`, `_v3`, etc.
|
|
95
74
|
- iteration metadata when there is a prior or baseline draft:
|
|
96
75
|
- `version`
|
|
@@ -102,23 +81,8 @@ Draft files must preserve:
|
|
|
102
81
|
- score fields for hook, proof, voice, specificity, skimmability, and publish confidence
|
|
103
82
|
- `verdict`: `baseline`, `keep`, `revise`, `reject`, `publish_candidate`, or a similarly explicit state
|
|
104
83
|
- draft body
|
|
105
|
-
- source-message outline for any outside post being adapted, when the draft's
|
|
106
|
-
body shape was learned from a specific source post
|
|
107
|
-
- thought leader inspiration lab when used, including the selected inspiration
|
|
108
|
-
adapter, variants considered, Christian/Sellable voice layer, and
|
|
109
|
-
copying/voice-clone risk
|
|
110
|
-
- pre-draft narrative outline: hierarchical `I.`, `A.`, `i.` outline covering
|
|
111
|
-
hook debt, thesis, reader, core mechanism, definitions, proof claims,
|
|
112
|
-
working body patterns adapted, narrative beats, mobile scan path, body
|
|
113
|
-
promise, concrete examples, abstractions to remove, and draft risks
|
|
114
84
|
- validation receipt, including LinkedIn preview pass/warn/fail status and
|
|
115
85
|
compact fallback when the selected hook carries a warning
|
|
116
|
-
- visible flow trace when the user asked for whole-flow, debug, or step-by-step
|
|
117
|
-
mode, including checkpoint statuses, quality break, downstream effect, and
|
|
118
|
-
whether the trace was shown before saving
|
|
119
|
-
- rendered mobile and desktop preview blocks for the selected hook; drafts
|
|
120
|
-
cannot be ready when this rendered-preview audit is missing or fails mobile
|
|
121
|
-
visibility
|
|
122
86
|
- status: `draft`, `ready`, `needs_revision`, `published`, or `archived`
|
|
123
87
|
|
|
124
88
|
Multiple drafts for the same idea are expected. Keep the `ideaId` stable and
|
|
@@ -6,37 +6,18 @@ Every saved draft needs a validation receipt. A draft without this receipt is no
|
|
|
6
6
|
|
|
7
7
|
- `sourceIdeaId`
|
|
8
8
|
- `hookResearchId`
|
|
9
|
-
- `transcriptWorldviewPacket`
|
|
10
9
|
- `iteration`
|
|
11
10
|
- `selectedPremiseCard`
|
|
12
11
|
- `candidateHooksConsidered`
|
|
13
12
|
- `selectedHook`
|
|
14
13
|
- `selectedHookWhy`
|
|
15
|
-
- `sourceMessageOutline`
|
|
16
|
-
- `preDraftNarrativeOutline`
|
|
17
|
-
- `preDraftStructureBrief` as a legacy compatibility alias when older drafts or
|
|
18
|
-
downstream readers still expect it
|
|
19
|
-
- `selectedSourceTemplate`
|
|
20
|
-
- `postPositioningBreakdown`
|
|
21
|
-
- `viralPostOutline`
|
|
22
|
-
- `hookToBodyPromiseMap`
|
|
23
|
-
- `bodyExpressionCandidates`
|
|
24
|
-
- `combinedBodyPlan`
|
|
25
|
-
- `visibleFlowTrace` when the user asked for whole-flow, debug, or
|
|
26
|
-
step-by-step mode
|
|
27
14
|
- `proofClaimsUsed`
|
|
28
15
|
- `proofClaimSources`
|
|
29
|
-
- `worldviewSource`
|
|
30
|
-
- `hotTakeSource`
|
|
31
16
|
- `storyFilesConsulted`
|
|
32
17
|
- `goldStandardsConsulted`
|
|
33
18
|
- `voiceRulesApplied`
|
|
34
|
-
- `
|
|
35
|
-
- `thoughtLeaderInspirationLab`
|
|
19
|
+
- `marketBeliefAudit`
|
|
36
20
|
- `premiseValueAudit`
|
|
37
|
-
- `mobileScanabilityAudit`
|
|
38
|
-
- `templateAdaptationAudit`
|
|
39
|
-
- `abstractionToConcreteRewriteAudit`
|
|
40
21
|
- `linkedinPreviewAudit`
|
|
41
22
|
- `simplifierConcreteLanguageAudit`
|
|
42
23
|
- `antiAiAudit`
|
|
@@ -93,13 +74,9 @@ Each candidate should include:
|
|
|
93
74
|
|
|
94
75
|
- hook text
|
|
95
76
|
- selected premise
|
|
96
|
-
- selected source template or no-template rationale
|
|
97
77
|
- premise tension opened
|
|
98
78
|
- reader value implied
|
|
99
79
|
- source pattern
|
|
100
|
-
- hook-to-body promise
|
|
101
|
-
- see-more tension
|
|
102
|
-
- curiosity debt
|
|
103
80
|
- score
|
|
104
81
|
- char count including newlines and first-line / first-two-line preview measurements
|
|
105
82
|
- physical line count, content line count, longest nonblank line, and blank-line risk
|
|
@@ -114,50 +91,14 @@ Each candidate should include:
|
|
|
114
91
|
After the first draft:
|
|
115
92
|
|
|
116
93
|
1. remove unsupported claims
|
|
117
|
-
2. verify the draft is anchored to the selected
|
|
94
|
+
2. verify the draft is anchored to the selected market belief and controversy
|
|
118
95
|
3. verify the real story/scene, tension, and reader value are visible early
|
|
119
|
-
4.
|
|
120
|
-
5.
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
9. preserve the user's actual story and point
|
|
126
|
-
10. remove AI tells
|
|
127
|
-
11. re-check LinkedIn preview fit after edits
|
|
128
|
-
|
|
129
|
-
## Visible Flow Trace Audit
|
|
130
|
-
|
|
131
|
-
When the user asks to see the whole flow, run the process step by step, validate
|
|
132
|
-
that it is working, or debug a bad output, the validation receipt must preserve a
|
|
133
|
-
`visibleFlowTrace`.
|
|
134
|
-
|
|
135
|
-
Record:
|
|
136
|
-
|
|
137
|
-
- `mode`: visible_whole_flow_debug
|
|
138
|
-
- `checkpointStatuses`: each checkpoint marked `pass`, `weak`, `fail`, or
|
|
139
|
-
`blocked`
|
|
140
|
-
- `checkpointOutputs`: the concrete output shown to the user for each
|
|
141
|
-
checkpoint
|
|
142
|
-
- `qualityBreak`: the first checkpoint that made the draft weak, if any
|
|
143
|
-
- `downstreamEffect`: how that break affected the hook, premise, body, or ready
|
|
144
|
-
status
|
|
145
|
-
- `userVisibleBeforeSave`: yes | no
|
|
146
|
-
- `draftSavedDespiteWeakness`: yes | no
|
|
147
|
-
- `reasonDraftSaved`: why a `needs_revision` draft was still worth saving, if
|
|
148
|
-
it was saved
|
|
149
|
-
|
|
150
|
-
Save as `needs_revision` when:
|
|
151
|
-
|
|
152
|
-
- the trace was not shown before draft prose in visible debug mode
|
|
153
|
-
- the body-expression lab was summarized after the fact instead of generating
|
|
154
|
-
real candidates before prose
|
|
155
|
-
- a weak premise, missing proof, or wrong source template produced a bad body
|
|
156
|
-
- the final response claims the workflow worked only because artifacts were
|
|
157
|
-
saved
|
|
158
|
-
|
|
159
|
-
Do not mark a run successful unless the visible trace, final draft, and saved
|
|
160
|
-
receipt all agree on the same quality state.
|
|
96
|
+
4. tighten the hook
|
|
97
|
+
5. simplify abstract phrasing
|
|
98
|
+
6. replace generic language with concrete words only when supported
|
|
99
|
+
7. preserve the user's actual story and point
|
|
100
|
+
8. remove AI tells
|
|
101
|
+
9. re-check LinkedIn preview fit after edits
|
|
161
102
|
|
|
162
103
|
## Premise Value Audit
|
|
163
104
|
|
|
@@ -175,223 +116,55 @@ Record:
|
|
|
175
116
|
- `readerValue`: what the reader learns, sees differently, or can do
|
|
176
117
|
- `proofAvailable`: source-backed proof used
|
|
177
118
|
- `proofMissing`: claims intentionally avoided or requiring user input
|
|
178
|
-
- `transcriptWorldviewPacket`: clusters, transcript references, cards, repeated
|
|
179
|
-
phrasing, worldview ingredients, hot-take ingredients, proof/story available,
|
|
180
|
-
proof/story missing, private exclusions, and confidence
|
|
181
|
-
- `worldviewSource`: the source-backed belief that makes the post feel earned
|
|
182
|
-
- `hotTakeSource`: the source-backed disagreement or operating lesson behind
|
|
183
|
-
the hook/premise
|
|
184
|
-
- `sourceMessageOutline`: source post decomposition in original order, with
|
|
185
|
-
paragraph/line/phrase branches, high-level goal of each branch, reader effect,
|
|
186
|
-
reusable move, and adaptation guard
|
|
187
|
-
- `preDraftNarrativeOutline`: hierarchical `I.`, `A.`, `i.` outline showing
|
|
188
|
-
hook debt, thesis, operating model, working body patterns adapted, narrative
|
|
189
|
-
beats, scan path, proof claims, and abstractions to remove
|
|
190
|
-
- `preDraftStructureBrief`: legacy compatibility alias only; the canonical
|
|
191
|
-
artifact is `preDraftNarrativeOutline`
|
|
192
119
|
- `premiseQualityGates`: pass/fail for `specific_scene_or_pattern`,
|
|
193
120
|
`clear_reader`, `visible_tension`, `reader_value`, `credible_speaker`,
|
|
194
|
-
`proof_safety`,
|
|
121
|
+
`proof_safety`, and `market_heat`
|
|
195
122
|
- `bodyOutline`: how the body delivers the premise before prose
|
|
196
|
-
- `viralPostOutline`: the selected narrative structure, including beat jobs
|
|
197
|
-
- `hookToBodyPromiseMap`: how the body repays the hook's open loop
|
|
198
|
-
- `combinedBodyPlan`: which body-expression lines were kept, rewritten, or cut
|
|
199
123
|
|
|
200
124
|
If the draft has no specific scene or observed pattern, no visible tension, or
|
|
201
125
|
no reader value beyond "this is interesting," save as `needs_revision`. Do not
|
|
202
126
|
mark it `ready` because the hook passes preview limits.
|
|
203
127
|
|
|
204
|
-
|
|
205
|
-
receipt cannot trace it to raw source, transcript/content-memory, core memory,
|
|
206
|
-
or a current user answer.
|
|
207
|
-
|
|
208
|
-
## Pre-Draft Narrative Outline Audit
|
|
209
|
-
|
|
210
|
-
Before a draft can be `ready`, validate that the narrative outline was locked
|
|
211
|
-
before the body was written.
|
|
212
|
-
|
|
213
|
-
Record:
|
|
214
|
-
|
|
215
|
-
- `hook`: selected hook plus mobile/desktop rendered preview verdict
|
|
216
|
-
- `thesis`: one sentence the post defends
|
|
217
|
-
- `readerBeingTaught`: specific reader and why the post is written for them
|
|
218
|
-
- `coreEquationOrMechanism`: the operating idea being taught
|
|
219
|
-
- `keyDefinitions`: concrete definitions and examples for terms the reader
|
|
220
|
-
could misunderstand
|
|
221
|
-
- `proofClaims`: claims, sources, and public-safety status
|
|
222
|
-
- `sourceTemplateOrNoTemplateRationale`
|
|
223
|
-
- `workingBodyPatternsAdapted`: body pattern name, beat order, why it worked,
|
|
224
|
-
what gets borrowed, and what must not be copied
|
|
225
|
-
- `hierarchicalNarrativeBeats`: `I.`, `A.`, `i.` outline of the final post's
|
|
226
|
-
argument, examples, proof, and line/section shapes
|
|
227
|
-
- `mobileScanPath`: what a skimmer understands from the hook, separators,
|
|
228
|
-
section labels, numbers, and close
|
|
229
|
-
- `sectionOutline`: legacy summary of section order plus the job of each
|
|
230
|
-
section; do not substitute this for `hierarchicalNarrativeBeats`
|
|
231
|
-
- `bodyPromiseAfterSeeMore`: what the body immediately repays
|
|
232
|
-
- `abstractionsToRemove`: abstract phrases and their concrete replacements
|
|
233
|
-
- `userCorrectionsApplied`: user corrections applied to the outline before
|
|
234
|
-
prose
|
|
235
|
-
|
|
236
|
-
Save as `needs_revision` when the draft was written before the narrative
|
|
237
|
-
outline, when the outline is a flat checklist instead of hierarchical
|
|
238
|
-
`I.`, `A.`, `i.` notation, when the outline does not match the final prose, when
|
|
239
|
-
working body patterns are unnamed or vaguely borrowed, when the mobile scan path
|
|
240
|
-
is unclear, or when key terms are left abstract.
|
|
241
|
-
|
|
242
|
-
## Mobile Scanability Audit
|
|
243
|
-
|
|
244
|
-
A LinkedIn post must still teach the main idea when a reader scans it.
|
|
245
|
-
|
|
246
|
-
Record:
|
|
247
|
-
|
|
248
|
-
- `scanVisibleFrom`: hook, separators, numbered labels, ranges/numbers, example
|
|
249
|
-
prompts, and close
|
|
250
|
-
- `readerGetsWithoutReadingEveryWord`: the specific takeaway a skimmer gets
|
|
251
|
-
- `sectionSeparators`: present | absent | not_needed
|
|
252
|
-
- `sectionLabels`: concrete | abstract | missing
|
|
253
|
-
- `numbersOrProofVisible`: yes | no
|
|
254
|
-
- `mobileLineLengthRisk`: pass | warn | fail
|
|
255
|
-
- `skimVerdict`: pass | needs_revision
|
|
256
|
-
|
|
257
|
-
Save as `needs_revision` when a skimmer cannot understand the thesis, hierarchy,
|
|
258
|
-
or practical next action.
|
|
259
|
-
|
|
260
|
-
## Abstraction-To-Concrete Rewrite Audit
|
|
261
|
-
|
|
262
|
-
Record every meaningful abstraction found in the draft and the concrete
|
|
263
|
-
replacement. Do not merely say "made concrete."
|
|
264
|
-
|
|
265
|
-
Use this format:
|
|
266
|
-
|
|
267
|
-
```text
|
|
268
|
-
abstractionToConcreteRewriteAudit:
|
|
269
|
-
1.
|
|
270
|
-
original:
|
|
271
|
-
issue:
|
|
272
|
-
replacement:
|
|
273
|
-
source:
|
|
274
|
-
kept_or_cut:
|
|
275
|
-
```
|
|
276
|
-
|
|
277
|
-
Common abstractions to flag:
|
|
278
|
-
|
|
279
|
-
- vague nouns such as `signal`, `market`, `attention`, `system`, `quality`,
|
|
280
|
-
`context`, `machine`, or `workflow` when the sentence does not name the actual
|
|
281
|
-
source, action, number, or object
|
|
282
|
-
- broad persona labels used as lead sources
|
|
283
|
-
- "warm" without explaining what made the source warm
|
|
284
|
-
- "offer" without explaining why the recipient would believe or want it
|
|
285
|
-
- "learning" without naming what metric changes the next decision
|
|
286
|
-
|
|
287
|
-
Do not make language concrete by inventing facts. If the concrete replacement
|
|
288
|
-
requires missing proof, ask the user or save as `needs_revision`.
|
|
289
|
-
|
|
290
|
-
## Template Adaptation Audit
|
|
291
|
-
|
|
292
|
-
Before a draft can be `ready`, validate that source posts were converted into
|
|
293
|
-
templates rather than copied.
|
|
294
|
-
|
|
295
|
-
Record:
|
|
296
|
-
|
|
297
|
-
- `selectedSourceTemplate`: source, template name, and why it fits
|
|
298
|
-
- `positioningSequenceBorrowed`: category sequence being adapted
|
|
299
|
-
- `viralPostOutlineBorrowed`: beat sequence being adapted
|
|
300
|
-
- `lineShapesBorrowed`: reusable line shapes, not copied wording
|
|
301
|
-
- `userStoryInputsUsed`: source-backed user facts filling the template
|
|
302
|
-
- `userProofInputsUsed`: source-backed user proof filling the template
|
|
303
|
-
- `forbiddenBorrowingAvoided`: source proof, jokes, personal context, status,
|
|
304
|
-
phrases, or examples not used
|
|
305
|
-
- `hookToBodyRepayment`: whether the body answers the hook's curiosity debt
|
|
306
|
-
- `bodyExpressionCandidatesReviewed`: which variants were tested and what won
|
|
307
|
-
- `copyingRisk`: pass | needs_revision | blocked
|
|
308
|
-
|
|
309
|
-
Save as `needs_revision` when the draft copies outside wording, borrows outside
|
|
310
|
-
proof, keeps a source template's status without equivalent user authority, or
|
|
311
|
-
uses a hook whose promised body payoff is not delivered.
|
|
312
|
-
|
|
313
|
-
## Audience Tension Audit
|
|
128
|
+
## Market Belief Audit
|
|
314
129
|
|
|
315
130
|
Before a draft can be `ready`, validate that it is not merely an internally
|
|
316
|
-
coherent idea. It must be anchored to the saved research's
|
|
317
|
-
snapshot.
|
|
131
|
+
coherent idea. It must be anchored to the saved research's market belief map.
|
|
318
132
|
|
|
319
133
|
Record:
|
|
320
134
|
|
|
321
135
|
- `resonatingIdea`: the current-space idea this draft enters
|
|
322
|
-
- `
|
|
323
|
-
question readers are reacting to
|
|
136
|
+
- `implicitBelief`: the belief the audience likely already holds
|
|
324
137
|
- `audienceWant`: what the audience wants permission, leverage, proof, or a new
|
|
325
138
|
category for
|
|
326
|
-
- `
|
|
327
|
-
- `
|
|
139
|
+
- `audienceResentmentOrFear`: what frustration or risk gives the post tension
|
|
140
|
+
- `selectedControversy`: the claim the post is testing
|
|
328
141
|
- `credibleWhyUs`: why the user can credibly say this from raw idea, memory,
|
|
329
142
|
story, proof, or product mechanism
|
|
330
143
|
- `engagementReason`: why someone would react, comment, repost, or argue
|
|
331
144
|
- `unsupportedHypeRemoved`: unsupported claims removed during finalizer
|
|
332
145
|
|
|
333
|
-
If `
|
|
334
|
-
like "founders want growth," or if `credibleWhyUs` depends on borrowed
|
|
335
|
-
from another creator, save as `needs_revision`.
|
|
336
|
-
|
|
337
|
-
## Thought Leader Inspiration Audit
|
|
338
|
-
|
|
339
|
-
When the user supplied thought leaders or creators, validate that inspiration
|
|
340
|
-
was used as structural adaptation, not persona cloning.
|
|
341
|
-
|
|
342
|
-
Record:
|
|
343
|
-
|
|
344
|
-
- `thoughtLeaderList`: names and profile URLs or handles
|
|
345
|
-
- `workerPackets`: one packet per person, or `not_available` with reason
|
|
346
|
-
- `weightedWinners`: best posts used, with follower-adjusted signal when
|
|
347
|
-
available
|
|
348
|
-
- `normalizationConfidence`: high | medium | low
|
|
349
|
-
- `inspirationAdapters`: hook/body mechanics selected for adaptation
|
|
350
|
-
- `voiceLayer`: must be `Christian/Sellable`
|
|
351
|
-
- `forbiddenBorrowingAvoided`: source wording, proof, jokes, personal stories,
|
|
352
|
-
status, and persona markers avoided
|
|
353
|
-
- `variantsConsidered`: adapted variants generated from the selected premise
|
|
354
|
-
- `selectedVariant`: winning adapter and why
|
|
355
|
-
- `copyingOrVoiceCloneRisk`: pass | needs_revision | blocked
|
|
356
|
-
|
|
357
|
-
Save as `needs_revision` when a draft imitates a living person's voice, borrows
|
|
358
|
-
their proof/status, copies outside wording, or lets a creator with a giant
|
|
359
|
-
audience win without any follower-adjusted or confidence-adjusted signal.
|
|
146
|
+
If `selectedControversy` is missing, if the audience belief is only a generic
|
|
147
|
+
label like "founders want growth," or if `credibleWhyUs` depends on borrowed
|
|
148
|
+
proof from another creator, save as `needs_revision`.
|
|
360
149
|
|
|
361
150
|
## LinkedIn Preview Audit
|
|
362
151
|
|
|
363
|
-
Audit the selected hook and top candidates against
|
|
364
|
-
|
|
365
|
-
varies by device, app version, font, media, line break
|
|
366
|
-
|
|
367
|
-
official LinkedIn limit.
|
|
368
|
-
|
|
369
|
-
Treat character counts as diagnostics only. The gate is the literal rendered
|
|
370
|
-
mobile and desktop visible block from `references/linkedin-preview-rendering.md`
|
|
371
|
-
or an authenticated LinkedIn screenshot.
|
|
152
|
+
Audit the selected hook and top candidates against conservative LinkedIn
|
|
153
|
+
preview budgets. LinkedIn does not publish exact "see more" cutoff rules, and
|
|
154
|
+
rendering varies by device, app version, font, media, and line break. This audit
|
|
155
|
+
is a mobile-first safety gate, not a claim about an official LinkedIn limit.
|
|
372
156
|
|
|
373
157
|
Use:
|
|
374
158
|
|
|
375
|
-
- `pass`:
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
- `warn`: the rendered mobile preview creates useful curiosity but wrapping,
|
|
379
|
-
blank-line rhythm, media risk, or one missing context word weakens it; include
|
|
380
|
-
a compact fallback
|
|
381
|
-
- `fail`: the hook's real point appears after the rendered mobile review clamp,
|
|
382
|
-
the visible open loop is vague, blank lines consume the preview before the
|
|
383
|
-
point, or desktop fit is the only reason it looks good
|
|
159
|
+
- `pass`: hook is <= 110 chars including newlines, every nonblank line is <= 45 chars, and the hook's core point lands before likely truncation.
|
|
160
|
+
- `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.
|
|
161
|
+
- `fail`: hook is > 140 chars including newlines, any nonblank line is > 55 chars, or the hook's point depends on text after likely truncation.
|
|
384
162
|
|
|
385
163
|
Desktop preview usually has more room. Still record desktop fit, but never let
|
|
386
164
|
desktop fit compensate for a mobile `fail`.
|
|
387
165
|
|
|
388
166
|
Record:
|
|
389
167
|
|
|
390
|
-
- `renderedPreview`
|
|
391
|
-
- `renderedPreviewBasis`: `linkedin_css_contract` |
|
|
392
|
-
`authenticated_linkedin_screenshot` | `manual_user_source`
|
|
393
|
-
- literal mobile visible block
|
|
394
|
-
- literal desktop visible block
|
|
395
168
|
- `charCount`
|
|
396
169
|
- `charCountIncludingNewlines`
|
|
397
170
|
- `firstLineChars`
|
|
@@ -411,11 +184,9 @@ Record:
|
|
|
411
184
|
- `compactFallback` when `previewBudgetStatus` is `warn`
|
|
412
185
|
|
|
413
186
|
If the hook only works after likely truncation, rewrite it. A draft cannot be
|
|
414
|
-
`ready` with `previewBudgetStatus: fail
|
|
415
|
-
with only a character-count claim. A draft may be `ready` with
|
|
187
|
+
`ready` with `previewBudgetStatus: fail`. A draft may be `ready` with
|
|
416
188
|
`previewBudgetStatus: warn` only when the warning is explicit, usually because
|
|
417
|
-
the user prefers blank-line rhythm,
|
|
418
|
-
the receipt includes a compact fallback.
|
|
189
|
+
the user prefers blank-line rhythm, and the receipt includes a compact fallback.
|
|
419
190
|
|
|
420
191
|
## Simplifier / Concrete-Language Audit
|
|
421
192
|
|
|
@@ -488,9 +259,7 @@ If the necessary proof or story is missing, ask the user or return blocked/retry
|
|
|
488
259
|
|
|
489
260
|
Use:
|
|
490
261
|
|
|
491
|
-
- `ready` only when proof, voice, anti-AI, concrete-language
|
|
492
|
-
structure, mobile-scanability, hook-to-body repayment, and
|
|
493
|
-
template-adaptation gates pass
|
|
262
|
+
- `ready` only when proof, voice, anti-AI, and concrete-language gates pass
|
|
494
263
|
- `needs_revision` when a draft exists but a gate failed
|
|
495
264
|
- `blocked` when required context is missing
|
|
496
265
|
- `retry-needed` when a tool/package/search failure blocked the pipeline
|