@sellable/mcp 0.1.269 → 0.1.272
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 +7 -8
- package/dist/tools/content-posts.d.ts +421 -1
- package/dist/tools/content-posts.js +802 -0
- package/dist/tools/engage-discovery.d.ts +24 -0
- package/dist/tools/engage-discovery.js +114 -9
- package/dist/tools/leads.js +1 -1
- package/dist/tools/registry.d.ts +76 -47
- package/dist/tools/registry.js +0 -2
- package/package.json +1 -1
- package/skills/create-campaign/SKILL.md +0 -10
- package/skills/create-campaign/core/providers/prospeo.json +2 -5
- package/skills/create-post/SKILL.md +768 -36
- package/skills/create-post/references/hook-research-playbook.md +509 -31
- package/skills/create-post/references/linkedin-preview-rendering.md +221 -0
- package/skills/create-post/references/post-file-contract.md +41 -0
- package/skills/create-post/references/post-validation.md +297 -27
- package/skills/create-post/references/premise-development.md +298 -7
- package/skills/providers/prospeo.md +0 -21
- package/skills/research/config.json +9 -0
- package/dist/tools/harvest-jobs.d.ts +0 -182
- package/dist/tools/harvest-jobs.js +0 -429
|
@@ -6,18 +6,37 @@ Every saved draft needs a validation receipt. A draft without this receipt is no
|
|
|
6
6
|
|
|
7
7
|
- `sourceIdeaId`
|
|
8
8
|
- `hookResearchId`
|
|
9
|
+
- `transcriptWorldviewPacket`
|
|
9
10
|
- `iteration`
|
|
10
11
|
- `selectedPremiseCard`
|
|
11
12
|
- `candidateHooksConsidered`
|
|
12
13
|
- `selectedHook`
|
|
13
14
|
- `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
|
|
14
27
|
- `proofClaimsUsed`
|
|
15
28
|
- `proofClaimSources`
|
|
29
|
+
- `worldviewSource`
|
|
30
|
+
- `hotTakeSource`
|
|
16
31
|
- `storyFilesConsulted`
|
|
17
32
|
- `goldStandardsConsulted`
|
|
18
33
|
- `voiceRulesApplied`
|
|
19
|
-
- `
|
|
34
|
+
- `audienceTensionAudit`
|
|
35
|
+
- `thoughtLeaderInspirationLab`
|
|
20
36
|
- `premiseValueAudit`
|
|
37
|
+
- `mobileScanabilityAudit`
|
|
38
|
+
- `templateAdaptationAudit`
|
|
39
|
+
- `abstractionToConcreteRewriteAudit`
|
|
21
40
|
- `linkedinPreviewAudit`
|
|
22
41
|
- `simplifierConcreteLanguageAudit`
|
|
23
42
|
- `antiAiAudit`
|
|
@@ -74,9 +93,13 @@ Each candidate should include:
|
|
|
74
93
|
|
|
75
94
|
- hook text
|
|
76
95
|
- selected premise
|
|
96
|
+
- selected source template or no-template rationale
|
|
77
97
|
- premise tension opened
|
|
78
98
|
- reader value implied
|
|
79
99
|
- source pattern
|
|
100
|
+
- hook-to-body promise
|
|
101
|
+
- see-more tension
|
|
102
|
+
- curiosity debt
|
|
80
103
|
- score
|
|
81
104
|
- char count including newlines and first-line / first-two-line preview measurements
|
|
82
105
|
- physical line count, content line count, longest nonblank line, and blank-line risk
|
|
@@ -91,14 +114,50 @@ Each candidate should include:
|
|
|
91
114
|
After the first draft:
|
|
92
115
|
|
|
93
116
|
1. remove unsupported claims
|
|
94
|
-
2. verify the draft is anchored to the selected
|
|
117
|
+
2. verify the draft is anchored to the selected audience tension and credible angle
|
|
95
118
|
3. verify the real story/scene, tension, and reader value are visible early
|
|
96
|
-
4.
|
|
97
|
-
5.
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
119
|
+
4. verify the body repays the selected hook's curiosity debt
|
|
120
|
+
5. verify the final post follows the selected positioning sequence or explains
|
|
121
|
+
why it departed from the template
|
|
122
|
+
6. tighten the hook
|
|
123
|
+
7. simplify abstract phrasing
|
|
124
|
+
8. replace generic language with concrete words only when supported
|
|
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.
|
|
102
161
|
|
|
103
162
|
## Premise Value Audit
|
|
104
163
|
|
|
@@ -116,55 +175,262 @@ Record:
|
|
|
116
175
|
- `readerValue`: what the reader learns, sees differently, or can do
|
|
117
176
|
- `proofAvailable`: source-backed proof used
|
|
118
177
|
- `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`
|
|
119
192
|
- `premiseQualityGates`: pass/fail for `specific_scene_or_pattern`,
|
|
120
193
|
`clear_reader`, `visible_tension`, `reader_value`, `credible_speaker`,
|
|
121
|
-
`proof_safety`, and `
|
|
194
|
+
`proof_safety`, `audience_tension`, and `pre_draft_narrative_outline`
|
|
122
195
|
- `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
|
|
123
199
|
|
|
124
200
|
If the draft has no specific scene or observed pattern, no visible tension, or
|
|
125
201
|
no reader value beyond "this is interesting," save as `needs_revision`. Do not
|
|
126
202
|
mark it `ready` because the hook passes preview limits.
|
|
127
203
|
|
|
128
|
-
|
|
204
|
+
Save as `needs_revision` when the post claims a worldview or hot take but the
|
|
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
|
|
129
314
|
|
|
130
315
|
Before a draft can be `ready`, validate that it is not merely an internally
|
|
131
|
-
coherent idea. It must be anchored to the saved research's
|
|
316
|
+
coherent idea. It must be anchored to the saved research's audience tension
|
|
317
|
+
snapshot.
|
|
132
318
|
|
|
133
319
|
Record:
|
|
134
320
|
|
|
135
321
|
- `resonatingIdea`: the current-space idea this draft enters
|
|
136
|
-
- `
|
|
322
|
+
- `visibleAudienceTension`: the contradiction, tradeoff, cost, or unfinished
|
|
323
|
+
question readers are reacting to
|
|
137
324
|
- `audienceWant`: what the audience wants permission, leverage, proof, or a new
|
|
138
325
|
category for
|
|
139
|
-
- `
|
|
140
|
-
- `
|
|
326
|
+
- `audienceObjectionOrFear`: what skepticism, frustration, or risk gives the post tension
|
|
327
|
+
- `selectedAngle`: the claim the post is testing
|
|
141
328
|
- `credibleWhyUs`: why the user can credibly say this from raw idea, memory,
|
|
142
329
|
story, proof, or product mechanism
|
|
143
330
|
- `engagementReason`: why someone would react, comment, repost, or argue
|
|
144
331
|
- `unsupportedHypeRemoved`: unsupported claims removed during finalizer
|
|
145
332
|
|
|
146
|
-
If `
|
|
147
|
-
|
|
148
|
-
|
|
333
|
+
If `selectedAngle` is missing, if the audience tension is only a generic label
|
|
334
|
+
like "founders want growth," or if `credibleWhyUs` depends on borrowed proof
|
|
335
|
+
from another creator, save as `needs_revision`.
|
|
336
|
+
|
|
337
|
+
## Thought Leader Voice Variant Audit
|
|
338
|
+
|
|
339
|
+
For draft-producing create-post flows, validate the configured thought-leader
|
|
340
|
+
voice variant lab by default. If it was skipped, record the explicit opt-out
|
|
341
|
+
reason. When thought leaders or creators were used, validate that background
|
|
342
|
+
workers produced complete role-play variants before final prose was synthesized.
|
|
343
|
+
|
|
344
|
+
This audit is a ready-status gate. It is not enough to mention that creators
|
|
345
|
+
were reviewed. The receipt must prove that the configured influencer workflow
|
|
346
|
+
ran before prose was drafted.
|
|
347
|
+
|
|
348
|
+
Record:
|
|
349
|
+
|
|
350
|
+
- `activeInfluencerSource`: `discovery/influencers.md` | named subset | user
|
|
351
|
+
opt-out
|
|
352
|
+
- `expectedActiveInfluencerCount`
|
|
353
|
+
- `actualVoiceVariantCount`
|
|
354
|
+
- `missingVoiceVariants`
|
|
355
|
+
- `weakVoiceVariants`
|
|
356
|
+
- `workerExecutionMode`: `background_agents` | `sequential_fallback`
|
|
357
|
+
- `backgroundWorkerIds`: worker IDs or labels when available
|
|
358
|
+
- `thoughtLeaderList`: names and profile URLs or handles
|
|
359
|
+
- `voiceModels`: inferred target length, rhythm, vocabulary, formatting, proof
|
|
360
|
+
style, and close style per person
|
|
361
|
+
- `mechanicsReceipts`: target word-count band, actual word count, line rhythm,
|
|
362
|
+
vocabulary markers, formatting markers, close style, and
|
|
363
|
+
`mechanics_match: pass | weak | fail` per person
|
|
364
|
+
- `voiceVariants`: one representative-length role-played post per person, or
|
|
365
|
+
`not_available` with reason
|
|
366
|
+
- `normalizationConfidence`: high | medium | low
|
|
367
|
+
- `selectedSynthesisIngredients`: hooks, body moves, proof order, rhythm, close
|
|
368
|
+
- `finalVoice`: usually `Christian/Sellable`
|
|
369
|
+
- `forbiddenBorrowingAvoided`: exact outside wording, proof, jokes, personal
|
|
370
|
+
stories, status, and fake user facts avoided
|
|
371
|
+
- `voiceVariantsGeneratedBeforeFinalProse`: yes | no
|
|
372
|
+
- `selectedSynthesis`: what won and why
|
|
373
|
+
- `styleSimulationRisk`: pass | needs_revision | blocked
|
|
374
|
+
|
|
375
|
+
Save as `needs_revision` when a final draft copies exact outside wording,
|
|
376
|
+
borrows another creator's proof/status as if it were the user's, invents user
|
|
377
|
+
facts, or lets a creator with a giant audience win without any
|
|
378
|
+
confidence-adjusted reason.
|
|
379
|
+
|
|
380
|
+
Save as `needs_revision` when `actualVoiceVariantCount` is lower than
|
|
381
|
+
`expectedActiveInfluencerCount`, when the active configured list was not loaded,
|
|
382
|
+
when variants are replaced by a generic influencer summary, or when voice
|
|
383
|
+
variants were generated after final prose instead of before final prose. Return
|
|
384
|
+
`retry-needed` when a tool/package/search failure prevents fetching configured
|
|
385
|
+
profiles or posts.
|
|
386
|
+
|
|
387
|
+
Save as `needs_revision` when the variants do not demonstrate person-specific
|
|
388
|
+
writing mechanics, when `mechanicsReceipts` are missing, or when multiple
|
|
389
|
+
variants are effectively the same long LinkedIn essay with different creator
|
|
390
|
+
labels.
|
|
391
|
+
|
|
392
|
+
Only mark `thought_leader_adaptation: not_used` when the user explicitly opted
|
|
393
|
+
out before drafting.
|
|
394
|
+
|
|
395
|
+
Save as `needs_revision` when the host supports background agents but the
|
|
396
|
+
configured influencers were processed sequentially without a recorded fallback
|
|
397
|
+
reason. The default expected value is `workerExecutionMode:
|
|
398
|
+
background_agents`.
|
|
149
399
|
|
|
150
400
|
## LinkedIn Preview Audit
|
|
151
401
|
|
|
152
|
-
Audit the selected hook and top candidates against
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
is a mobile-first safety gate, not a claim about an
|
|
402
|
+
Audit the selected hook and top candidates against the rendered-preview
|
|
403
|
+
contract. LinkedIn does not publish exact "see more" cutoff rules, and rendering
|
|
404
|
+
varies by device, app version, font, media, line break, and whether the post has
|
|
405
|
+
media attached. This audit is a mobile-first safety gate, not a claim about an
|
|
406
|
+
official LinkedIn limit.
|
|
407
|
+
|
|
408
|
+
Treat character counts as diagnostics only. The gate is the literal rendered
|
|
409
|
+
mobile and desktop visible block from `references/linkedin-preview-rendering.md`
|
|
410
|
+
or an authenticated LinkedIn screenshot.
|
|
156
411
|
|
|
157
412
|
Use:
|
|
158
413
|
|
|
159
|
-
- `pass`:
|
|
160
|
-
|
|
161
|
-
|
|
414
|
+
- `pass`: the rendered mobile preview shows the pain, proof, or curiosity by the
|
|
415
|
+
end of the first 3 rendered lines, and either the core point is visible or a
|
|
416
|
+
specific intentional open loop is visible with immediate body payoff planned
|
|
417
|
+
- `warn`: the rendered mobile preview creates useful curiosity but wrapping,
|
|
418
|
+
blank-line rhythm, media risk, or one missing context word weakens it; include
|
|
419
|
+
a compact fallback
|
|
420
|
+
- `fail`: the hook's real point appears after the rendered mobile review clamp,
|
|
421
|
+
the visible open loop is vague, blank lines consume the preview before the
|
|
422
|
+
point, or desktop fit is the only reason it looks good
|
|
162
423
|
|
|
163
424
|
Desktop preview usually has more room. Still record desktop fit, but never let
|
|
164
425
|
desktop fit compensate for a mobile `fail`.
|
|
165
426
|
|
|
166
427
|
Record:
|
|
167
428
|
|
|
429
|
+
- `renderedPreview`
|
|
430
|
+
- `renderedPreviewBasis`: `linkedin_css_contract` |
|
|
431
|
+
`authenticated_linkedin_screenshot` | `manual_user_source`
|
|
432
|
+
- literal mobile visible block
|
|
433
|
+
- literal desktop visible block
|
|
168
434
|
- `charCount`
|
|
169
435
|
- `charCountIncludingNewlines`
|
|
170
436
|
- `firstLineChars`
|
|
@@ -184,9 +450,11 @@ Record:
|
|
|
184
450
|
- `compactFallback` when `previewBudgetStatus` is `warn`
|
|
185
451
|
|
|
186
452
|
If the hook only works after likely truncation, rewrite it. A draft cannot be
|
|
187
|
-
`ready` with `previewBudgetStatus: fail
|
|
453
|
+
`ready` with `previewBudgetStatus: fail`, with no rendered preview block, or
|
|
454
|
+
with only a character-count claim. A draft may be `ready` with
|
|
188
455
|
`previewBudgetStatus: warn` only when the warning is explicit, usually because
|
|
189
|
-
the user prefers blank-line rhythm,
|
|
456
|
+
the user prefers blank-line rhythm, separators, or a deliberate open loop, and
|
|
457
|
+
the receipt includes a compact fallback.
|
|
190
458
|
|
|
191
459
|
## Simplifier / Concrete-Language Audit
|
|
192
460
|
|
|
@@ -259,7 +527,9 @@ If the necessary proof or story is missing, ask the user or return blocked/retry
|
|
|
259
527
|
|
|
260
528
|
Use:
|
|
261
529
|
|
|
262
|
-
- `ready` only when proof, voice, anti-AI,
|
|
530
|
+
- `ready` only when proof, voice, anti-AI, concrete-language, pre-draft
|
|
531
|
+
structure, mobile-scanability, hook-to-body repayment, and
|
|
532
|
+
template-adaptation gates pass
|
|
263
533
|
- `needs_revision` when a draft exists but a gate failed
|
|
264
534
|
- `blocked` when required context is missing
|
|
265
535
|
- `retry-needed` when a tool/package/search failure blocked the pipeline
|