@sellable/mcp 0.1.22 → 0.1.24

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/README.md CHANGED
@@ -83,14 +83,14 @@ The token is provided when you generate it. Use `list_workspaces` +
83
83
  For customer/package installs, use the public installer:
84
84
 
85
85
  ```bash
86
- npx -y @sellable/install@0.1.22 --host codex --token skt_live_your_token_here --workspace-id your_workspace_id
86
+ npx -y @sellable/install@0.1.24 --host codex --token skt_live_your_token_here --workspace-id your_workspace_id
87
87
  ```
88
88
 
89
89
  If you already have `~/.sellable/config.json`, rerun/verify without rewriting
90
90
  auth:
91
91
 
92
92
  ```bash
93
- npx -y @sellable/install@0.1.22 --host codex
93
+ npx -y @sellable/install@0.1.24 --host codex
94
94
  sellable --verify-only --host codex
95
95
  ```
96
96
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sellable/mcp",
3
- "version": "0.1.22",
3
+ "version": "0.1.24",
4
4
  "type": "module",
5
5
  "description": "Sellable MCP server for Claude Code and Codex campaign workflows",
6
6
  "main": "dist/index.js",
@@ -869,8 +869,8 @@ Orchestration requirements:
869
869
  user-facing review. The review must use this exact label shape so the gate can
870
870
  be parsed: `Subject: ...`, `Tokenized template: ...`, `Sample prospect fill:
871
871
  ...`, `Rendered examples: ...`, `Good token fill: ...`, `Good omit: ...`,
872
- `Bad token fill: ...`, `Why bad: ...`, `Token notes: ...`, `My take: ...`,
873
- `Suggested adjustment: ...`,
872
+ `Bad token fill: ...`, `Why bad: ...`, `Fallback if missing: ...`,
873
+ `Token notes: ...`, `My take: ...`, `Suggested adjustment: ...`,
874
874
  `Question: approve-message or revise-messaging?`, `Recommendation:
875
875
  approve-message|revise-messaging`.
876
876
  - Never ask the message approval question until the full message review is
@@ -878,8 +878,8 @@ approve-message|revise-messaging`.
878
878
  avoids a generic pitch` is not enough. The user must see the actual subject,
879
879
  the actual tokenized message template, one filled sample prospect version, at
880
880
  least one good filled example, one good omit example, one bad fill example,
881
- why the bad fill is wrong, token notes, your take, and the suggested
882
- adjustment before any `approve-message` /
881
+ why the bad fill is wrong, fallback rules for missing row data, token notes,
882
+ your take, and the suggested adjustment before any `approve-message` /
883
883
  `revise-messaging` question appears. If you catch yourself wanting to offer
884
884
  `show me message` as a choice, stop: render the message review first, then ask
885
885
  only `approve-message` or `revise-messaging`.
@@ -922,10 +922,16 @@ template:`, `Sample prospect fill:`, rendered examples, `Token notes:`,
922
922
  - `Bad token fill:` must show at least one realistic wrong fill for the current
923
923
  campaign, followed by `Why bad:`. This teaches the user and the live campaign
924
924
  runtime what not to do. Examples: overclaiming signal intent (`you are
925
- evaluating Clay` when the only evidence is a post reaction), using forbidden
925
+ evaluating Clay` when the only evidence is a post reaction), using forbidden
926
926
  phrasing (`you engaged with content...` when the approved voice is `raised
927
927
  your hand in a conversation around...`), forcing a weak optional token,
928
928
  lowercasing proper nouns, or making row signal sound like AI mail merge.
929
+ - `Fallback if missing:` is required for every token in the template. Each
930
+ fallback must say exactly what to do when the row lacks clean data: use a
931
+ safe segment-level phrase, omit the sentence/line, or route to
932
+ `revise-messaging` if omission would break the message. Never leave a token
933
+ with "N/A", "unknown", empty braces, bracketed instructions, or a generic
934
+ fill that sounds robotic or creepy.
929
935
  - rendered examples may only use token values that exist in `lead-sample.json`,
930
936
  `lead-review.md`, `lead-filter.md`, or the selected winner's documented
931
937
  supported-token plan. Do not invent example values to make the template look
@@ -1020,8 +1026,8 @@ proof:`, `p.s. useful proof:`, `p.s. proof:`, or `p.s. social proof:`.
1020
1026
  inside the approval packet before `## Approved Message Template`. It should
1021
1027
  summarize the customer checkpoint from `message-review.md` and preserve the
1022
1028
  same literal `My take:`, `Suggested adjustment:`, `Good token fill:`,
1023
- `Good omit:`, `Bad token fill:`, `Why bad:`, `Token fill basis:`, and
1024
- `Recommendation:` labels.
1029
+ `Good omit:`, `Bad token fill:`, `Why bad:`, `Fallback if missing:`,
1030
+ `Token fill basis:`, and `Recommendation:` labels.
1025
1031
  Include `Open artifacts:` links to `approval-packet.md`,
1026
1032
  `message-review.md`, `lead-review.md`, and `brief.md` before the commit-gate
1027
1033
  question.
@@ -1043,9 +1049,9 @@ proof:`, `p.s. useful proof:`, `p.s. proof:`, or `p.s. social proof:`.
1043
1049
  must include `## Approved Message Template`, `## Token Fill Rules`, and
1044
1050
  `## Token Fill Examples`. `## Token Fill Examples` must copy the approved
1045
1051
  examples from `message-review.md` / `message-validation.md`, including
1046
- `Good token fill:`, `Good omit:`, `Bad token fill:`, `Why bad:`, and
1047
- `Token fill basis:`. Do not call `create_campaign` if these sections are
1048
- missing from the campaign brief.
1052
+ `Good token fill:`, `Good omit:`, `Bad token fill:`, `Why bad:`,
1053
+ `Fallback if missing:`, and `Token fill basis:`. Do not call
1054
+ `create_campaign` if these sections are missing from the campaign brief.
1049
1055
  - `message-validation.md` must not call the winner a canonical template or
1050
1056
  hide per-row generation in bracketed body text. `## Selected Winner` must
1051
1057
  be a real sendable message that could be approved as-is.
@@ -1125,6 +1131,8 @@ Do not:
1125
1131
  - `Bad token fill:` with a realistic wrong fill for the current campaign
1126
1132
  - `Why bad:` explaining the exact overclaim, unsupported token, weak signal,
1127
1133
  casing mistake, or mail-merge phrasing that makes the bad fill unacceptable
1134
+ - `Fallback if missing:` with one fallback or omit rule for every token in the
1135
+ template
1128
1136
  - `Token notes:` naming which tokens are safe to fill, which optional token line
1129
1137
  should be omitted when absent, and whether the message uses standard sentence
1130
1138
  case or casual lowercase static words
@@ -1259,8 +1267,8 @@ mutation)`, a `Selected Winner`, and a non-empty `Token Adherence Table`
1259
1267
  `Sample prospect fill:` with a complete rendered subject + body and
1260
1268
  `Token fill basis:`, `Rendered examples:`, `Good token fill:` with a complete
1261
1269
  rendered subject + body, `Good omit:` with a complete rendered subject + body,
1262
- `Bad token fill:`, `Why bad:`, `Token notes:`, `My take:`,
1263
- `Suggested adjustment:`, `Question:
1270
+ `Bad token fill:`, `Why bad:`, `Fallback if missing:`, `Token notes:`,
1271
+ `My take:`, `Suggested adjustment:`, `Question:
1264
1272
  approve-message or revise-messaging?`, and
1265
1273
  `Recommendation: approve-message`
1266
1274
  - `message-review-decision.md` is exactly `approve-message`
@@ -1372,9 +1380,10 @@ Exact sequence:
1372
1380
  `{{closeLine}}`, or `{{psLine}}`.
1373
1381
  Include `## Token Fill Examples` copied from the approved message review and
1374
1382
  validation artifacts. It must preserve `Good token fill:`, `Good omit:`,
1375
- `Bad token fill:`, `Why bad:`, and `Token fill basis:` so the minted campaign
1376
- brief teaches future row generation how to fill tokens and what fills are
1377
- blocked. If the brief does not contain `## Token Fill Rules` and
1383
+ `Bad token fill:`, `Why bad:`, `Fallback if missing:`, and
1384
+ `Token fill basis:` so the minted campaign brief teaches future row
1385
+ generation how to fill tokens, what fills are blocked, and what to do when
1386
+ row data is missing. If the brief does not contain `## Token Fill Rules` and
1378
1387
  `## Token Fill Examples`, do not call `create_campaign`; route back to
1379
1388
  message review or approval packet generation.
1380
1389
  3. Call `bootstrap_create_campaign({ flowVersion: "v2" })`. Respect
@@ -72,10 +72,15 @@ The user should be able to compare "here is the template" against "here is what
72
72
  one real prospect would receive" before approving, and understand exactly how
73
73
  the tokens should and should not be filled.
74
74
 
75
+ Every token needs a fallback. If the row does not have clean data for a token,
76
+ the approval view should say whether to use a safe segment-level phrase, omit
77
+ the sentence, or revise the message. Missing data should never produce robotic
78
+ or creepy copy.
79
+
75
80
  Approved token guidance is part of the campaign, not just the review. When a
76
81
  campaign is minted, the approved brief should carry forward the token fill
77
- rules and examples: good fills, good omits, bad fills, and why the bad fills are
78
- blocked.
82
+ rules and examples: good fills, good omits, bad fills, fallback rules, and why
83
+ the bad fills are blocked.
79
84
 
80
85
  ## Progress Updates
81
86
 
@@ -629,6 +629,7 @@
629
629
  "Good omit:",
630
630
  "Bad token fill:",
631
631
  "Why bad:",
632
+ "Fallback if missing:",
632
633
  "Token notes:",
633
634
  "My take:",
634
635
  "Suggested adjustment:",
@@ -647,6 +648,7 @@
647
648
  "tokenized template with rendered examples",
648
649
  "tokenized template plus filled sample prospect",
649
650
  "good and bad token-fill examples",
651
+ "per-token fallback rules for missing row data",
650
652
  "complete rendered subject plus body examples",
651
653
  "message-review hard-fail preflight",
652
654
  "A + B + C subject quality",
@@ -672,6 +674,7 @@
672
674
  "Good omit:",
673
675
  "Bad token fill:",
674
676
  "Why bad:",
677
+ "Fallback if missing:",
675
678
  "Token notes:",
676
679
  "My take:",
677
680
  "Suggested adjustment:",
@@ -948,6 +951,7 @@
948
951
  "Good omit:",
949
952
  "Bad token fill:",
950
953
  "Why bad:",
954
+ "Fallback if missing:",
951
955
  "Token fill basis:"
952
956
  ],
953
957
  "capture": ["campaignId", "watchUrl"],