@sellable/install 0.1.281 → 0.1.282

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.
@@ -37,7 +37,7 @@ function getInstallVersion() {
37
37
  }
38
38
  }
39
39
 
40
- const CODEX_PLUGIN_VERSION = "0.1.52";
40
+ const CODEX_PLUGIN_VERSION = "0.1.53";
41
41
  const CODEX_PLUGIN_COMPAT_VERSIONS = [
42
42
  "0.1.8",
43
43
  "0.1.9",
@@ -74,6 +74,7 @@ const CODEX_PLUGIN_COMPAT_VERSIONS = [
74
74
  "0.1.40",
75
75
  "0.1.41",
76
76
  "0.1.51",
77
+ "0.1.52",
77
78
  ];
78
79
  const RAW_INSTALL_PACKAGE_SPEC =
79
80
  process.env.SELLABLE_INSTALL_PACKAGE_SPEC || "@sellable/install@latest";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sellable/install",
3
- "version": "0.1.281",
3
+ "version": "0.1.282",
4
4
  "type": "module",
5
5
  "description": "One-command installer for Sellable MCP in Claude Code and Codex",
6
6
  "bin": {
@@ -572,8 +572,15 @@ response, run a local file-existence and JSON self-check for
572
572
  receipt there; if any postcondition, quality gate, verifier schema, or file
573
573
  write blocks, write a canonical blocked receipt there with `status:"blocked"`,
574
574
  `blocker`, `campaignId`, `tableId`, `actionId`, `laneKey`, `planRevision`, and
575
- the latest product readback. The terminal condition is filesystem proof that
576
- <receiptArtifactPath> exists.
575
+ the latest product readback. For Post Engagers lanes, no sender-authored posts
576
+ or no sender-owned post-engager source is an acceptable terminal blocked/no-op
577
+ receipt, not a worker crash: use one of
578
+ `post_engagers_no_sender_posts`, `post_engagers_no_recent_sender_posts`,
579
+ `post_engagers_no_sender_owned_posts`, or
580
+ `post_engagers_source_author_mismatch`, include the source/readback evidence,
581
+ and stop without scraping third-party authors or generating misleading warm
582
+ copy. The terminal condition is filesystem proof that <receiptArtifactPath>
583
+ exists.
577
584
  WORKER_PROMPT
578
585
 
579
586
  # Multi-worker launcher equivalent:
@@ -816,6 +823,17 @@ the lane is complete. Do not use `status:"passed"` or
816
823
  in a separate `warnings` array, but the completion status stays canonical.
817
824
  The backend verifier rejects `status:"passed"`, `status:"pass"`, and
818
825
  `status:"passed_with_warnings"` as primary completion statuses.
826
+ Exception: a Post Engagers lane may write `status:"blocked"` when Sellable MCP
827
+ sender-post/source readback proves there are no recent sender-authored posts to
828
+ scrape, no sender-owned post-engager source, or the current source is authored
829
+ by someone else. Use the explicit blocker codes
830
+ `post_engagers_no_sender_posts`, `post_engagers_no_recent_sender_posts`,
831
+ `post_engagers_no_sender_owned_posts`, or
832
+ `post_engagers_source_author_mismatch`. Parent verify treats these as
833
+ `acceptedLaneBlockers`, so the parent can report the truthful no-op instead of
834
+ retrying invalid source repair. This exception does not apply to shared lanes,
835
+ bad generated copy, stale plans, target mismatch, missing receipt files, launch
836
+ or schedule side effects, or arbitrary worker failures.
819
837
 
820
838
  All step proof objects must live under `createCampaignStepReceipt`. Do not put
821
839
  `createCampaignWorkflowReceipt`, `campaignBriefReceipt`,
@@ -1097,8 +1115,13 @@ The parent then calls
1097
1115
  `setup_evergreen_campaigns({ mode:"verify", postEngagerSenderIds,
1098
1116
  sharedSenderIds, planRevision, selectedActionIds, receipts })` using the same
1099
1117
  sender scopes as the plan call and the original execution planRevision/actionIds,
1100
- and reports only verified completion. Do not include `yolo` in the verify call;
1101
- `yolo` is plan-mode only. A verify call without the same sender scopes can recompute an empty or different plan and is invalid proof. A verify call that uses a later reuse planRevision instead of the original execution planRevision is also invalid proof. Only after verify succeeds, rerun
1118
+ and reports only verified completion. If verify returns `verified:true` with
1119
+ `acceptedLaneBlockers`, report those lanes as accepted blocked/no-op lanes, not
1120
+ completed campaigns. Do not include `yolo` in the verify call; `yolo` is
1121
+ plan-mode only. A verify call without the same sender scopes can recompute an
1122
+ empty or different plan and is invalid proof. A verify call that uses a later
1123
+ reuse planRevision instead of the original execution planRevision is also
1124
+ invalid proof. Only after verify succeeds, rerun
1102
1125
  `setup_evergreen_campaigns({ mode:"plan", postEngagerSenderIds,
1103
1126
  sharedSenderIds, yolo:true })` without explicit campaign/table bindings. That
1104
1127
  idempotency rerun must return `intent:"reuse"` for every completed lane and no
@@ -1530,7 +1553,7 @@ Message, and verify current-revision sample messages before final completion.
1530
1553
  internal-only objects, verify the active waterfall linkage, table ID,
1531
1554
  source type, and priority, and label them `internal source pool` rather
1532
1555
  than treating them as completed campaigns.
1533
- - Post Engagers lanes are sender-owned source lanes. The selected/source LinkedIn posts must be authored by that exact sender (for example, Thomas post-engager source posts must visibly be Thomas-authored posts). If selected/source posts include another person or company author, mark the slot `blocked`/`flagged` for source repair; do not scrape/import engagers or report completion until the source is sender-owned. Shared Signal Discovery lanes are the only evergreen lanes allowed to mix authors.
1556
+ - Post Engagers lanes are sender-owned source lanes. The selected/source LinkedIn posts must be authored by that exact sender (for example, Thomas post-engager source posts must visibly be Thomas-authored posts). If Sellable MCP readback proves the sender has no recent posts to scrape, no sender-authored posts with usable engagers, no sender-owned post-engager source, or the selected/source posts include another person or company author, write a blocked receipt with the matching accepted blocker code and report that back to the parent as an accepted no-op. Do not scrape/import engagers from third-party authors and do not report completion until the source is sender-owned. Shared Signal Discovery lanes are the only evergreen lanes allowed to mix authors.
1534
1557
  5. **Interactive polish mode only: confirm the message template with the user — and check it reads chat-native.** Show the exact first-message template each created campaign's brief carries and ask the user to confirm or adjust it before moving on. Because DM copy may send paragraph-by-paragraph (each blank-line block becomes its own message), every paragraph must read like something a human literally typed as a separate chat message:
1535
1558
  - **No letter punctuation.** `Hey {{first_name}}` — never `Hey {{first_name}},` (nobody types a trailing comma and hits send). No `Dear`, no sign-offs, no `Best,`.
1536
1559
  - Each paragraph stands alone as a message — short, lowercase-casual is fine, sentence fragments are fine.