@sellable/mcp 0.1.272 → 0.1.273

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sellable/mcp",
3
- "version": "0.1.272",
3
+ "version": "0.1.273",
4
4
  "type": "module",
5
5
  "description": "Sellable MCP server for Claude Code and Codex campaign workflows",
6
6
  "main": "dist/index.js",
@@ -606,6 +606,7 @@ Visible Flow Trace
606
606
  - worker status per person:
607
607
  - recent posts sampled:
608
608
  - voice model:
609
+ - mechanics receipts:
609
610
  - complete voice variants:
610
611
  - follower-adjusted signal when available:
611
612
  - hook/body moves worth stealing:
@@ -623,6 +624,11 @@ Visible Flow Trace
623
624
  - proof gate:
624
625
  - voice gate:
625
626
  - anti-AI gate:
627
+ - local finalizer pass:
628
+ - turn separators added:
629
+ - contractions applied:
630
+ - lowercase pass:
631
+ - abstract-to-concrete rewrites:
626
632
  - mobile preview gate:
627
633
  - template adaptation gate:
628
634
  - hook-to-body repayment:
@@ -1242,6 +1248,42 @@ either completed for every active configured influencer or the validation
1242
1248
  receipt has an explicit user opt-out reason. A light source-research summary
1243
1249
  does not satisfy this gate.
1244
1250
 
1251
+ ## Step 3.5: Local Finalizer Pass
1252
+
1253
+ Run this pass after the canonical draft exists and before validation and save.
1254
+
1255
+ 1. Add `--` between each major turn in the post so the story is easier to read.
1256
+ Use it to separate turns such as hook, context, problem, mechanism, product
1257
+ proof, concrete example, and CTA. Do not add `--` inside a tight list where
1258
+ it would make the post harder to scan.
1259
+ 2. Use contractions in the draft body by default: `don't`, `isn't`, `that's`,
1260
+ `it's`, `can't`, `we're`, `you're`, and similar natural phrasing. Keep the
1261
+ non-contracted form only when the user explicitly wrote it that way, when a
1262
+ quoted line must stay exact, or when the contraction would sound unnatural.
1263
+ 3. Keep optional headings, section labels, and line starts lowercase by default
1264
+ when the post still reads naturally. Preserve proper nouns, acronyms, product
1265
+ names, and required capitalization such as `Claude`, `LinkedIn`, `Codex`,
1266
+ `Sellable.dev`, `Clay`, `HeyReach`, and `ICP`.
1267
+ 4. Run a Harry Dry-style concrete-language audit:
1268
+ - highlight every abstract or vague word/phrase in the validation receipt
1269
+ before saving
1270
+ - replace each one in the draft with a concrete object, action, number,
1271
+ example, screen, list, person, place, or visible workflow step
1272
+ - prefer words a reader can picture, such as `lead list`, `send settings`,
1273
+ `reply inbox`, `follow-up`, `team post`, `warm LinkedIn prospect`,
1274
+ `reply handling`, or `one sentence in Claude Code`
1275
+ - do not make a phrase concrete by inventing proof, metrics, customers, or
1276
+ product behavior the user did not provide
1277
+ 5. Record this pass in the validation receipt as `localFinalizerPass` with:
1278
+ - `turnSeparatorsAdded: yes | no` and a short reason
1279
+ - `contractionsApplied: yes | no`
1280
+ - `lowercasePass: yes | no` with preserved proper nouns listed
1281
+ - `abstractToConcreteRewrites`, listing each abstract phrase, why it was
1282
+ weak, and the concrete replacement used
1283
+
1284
+ If this pass cannot be completed, save the draft as `needs_revision` instead of
1285
+ `ready`, and explain which finalizer requirement failed.
1286
+
1245
1287
  ## Step 4: Validation
1246
1288
 
1247
1289
  Use `references/post-validation.md`.
@@ -1280,6 +1322,8 @@ Every saved draft needs a validation receipt with:
1280
1322
  - outbound AI-tell audit findings
1281
1323
  - hook preview pass/warn/fail status and compact fallback when warned
1282
1324
  - finalizer changes
1325
+ - local finalizer pass with turn separators, contractions, lowercase pass, and
1326
+ abstract-to-concrete rewrites
1283
1327
  - blocked/retry-needed reasons, if any
1284
1328
 
1285
1329
  If validation fails, do not save the draft as `ready`. Save as `needs_revision` or return blocked/retry-needed.
@@ -118,6 +118,10 @@ Draft files must preserve:
118
118
  promise, concrete examples, abstractions to remove, and draft risks
119
119
  - validation receipt, including LinkedIn preview pass/warn/fail status and
120
120
  compact fallback when the selected hook carries a warning
121
+ - local finalizer pass: whether `--` turn separators were added, whether
122
+ contractions were applied, whether lowercase style was applied where safe,
123
+ preserved proper nouns/acronyms, and abstract-to-concrete rewrites with the
124
+ before/after phrases used in the final draft
121
125
  - visible flow trace when the user asked for whole-flow, debug, or step-by-step
122
126
  mode, including checkpoint statuses, quality break, downstream effect, and
123
127
  whether the trace was shown before saving
@@ -125,6 +125,41 @@ After the first draft:
125
125
  9. preserve the user's actual story and point
126
126
  10. remove AI tells
127
127
  11. re-check LinkedIn preview fit after edits
128
+ 12. add `--` between major story turns when it improves scanability
129
+ 13. use natural contractions by default
130
+ 14. keep optional headings, section labels, and line starts lowercase when safe
131
+ 15. run the concrete-language audit below and replace abstract phrasing before
132
+ saving
133
+
134
+ ### Local Finalizer Pass
135
+
136
+ Before a draft can be saved as `ready`, record a local finalizer pass. This is
137
+ the last copy pass after the draft body exists and before `save_post_draft`.
138
+
139
+ Record:
140
+
141
+ - `turnSeparatorsAdded`: yes | no
142
+ - `turnSeparatorReason`: where `--` was inserted or why it was skipped
143
+ - `contractionsApplied`: yes | no
144
+ - `contractionsChanged`: examples such as `do not -> don't`, `is not -> isn't`,
145
+ `that is -> that's`, or `it is -> it's`
146
+ - `lowercasePass`: yes | no
147
+ - `preservedCapitalization`: proper nouns, acronyms, product names, and required
148
+ capitalization such as `Claude`, `LinkedIn`, `Codex`, `Sellable.dev`, `Clay`,
149
+ `HeyReach`, and `ICP`
150
+ - `abstractToConcreteRewrites`: every abstract phrase flagged, why it was weak,
151
+ and the concrete replacement used
152
+
153
+ Save as `needs_revision` when:
154
+
155
+ - major story turns are visually hard to follow and no `--` separators or other
156
+ clear turn markers were added
157
+ - the draft keeps stiff non-contracted phrasing without a user/source reason
158
+ - optional headings or labels stay title-cased in a way that clashes with the
159
+ user's lowercase post style
160
+ - meaningful abstract phrases remain in the draft after the concrete-language
161
+ audit
162
+ - the validation receipt does not show what changed during this finalizer pass
128
163
 
129
164
  ## Visible Flow Trace Audit
130
165
 
@@ -260,7 +295,9 @@ or practical next action.
260
295
  ## Abstraction-To-Concrete Rewrite Audit
261
296
 
262
297
  Record every meaningful abstraction found in the draft and the concrete
263
- replacement. Do not merely say "made concrete."
298
+ replacement. Do not merely say "made concrete." Use a Harry Dry-style standard:
299
+ if the reader cannot picture the word on a screen, in a list, in a sentence they
300
+ would type, or as a workflow step someone could perform, make it more concrete.
264
301
 
265
302
  Use this format:
266
303
 
@@ -279,11 +316,25 @@ Common abstractions to flag:
279
316
  - vague nouns such as `signal`, `market`, `attention`, `system`, `quality`,
280
317
  `context`, `machine`, or `workflow` when the sentence does not name the actual
281
318
  source, action, number, or object
319
+ - vague product words such as `orchestrator`, `campaign object`, `GTM
320
+ superpowers`, `agentic`, `AI-native`, or `platform` when the sentence does not
321
+ name the visible work being done
282
322
  - broad persona labels used as lead sources
283
323
  - "warm" without explaining what made the source warm
284
324
  - "offer" without explaining why the recipient would believe or want it
285
325
  - "learning" without naming what metric changes the next decision
286
326
 
327
+ Concrete replacements should name visible things, for example:
328
+
329
+ - `lead list`
330
+ - `send settings`
331
+ - `reply inbox`
332
+ - `follow-up`
333
+ - `team post`
334
+ - `warm LinkedIn prospect`
335
+ - `reply handling`
336
+ - `one sentence in Claude Code`
337
+
287
338
  Do not make language concrete by inventing facts. If the concrete replacement
288
339
  requires missing proof, ask the user or save as `needs_revision`.
289
340