@sellable/install 0.1.281 → 0.1.283

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.283",
4
4
  "type": "module",
5
5
  "description": "One-command installer for Sellable MCP in Claude Code and Codex",
6
6
  "bin": {
@@ -62,13 +62,15 @@ long-form contract below:
62
62
  callable, return `blocked: missing_visible_or_durable_lane_worker_runtime`
63
63
  before mutation.
64
64
  4. Write one compact prompt file per selected lane using the matching
65
- `createCampaignGoals[].goalPrompt`, plus only the receipt path and canonical
66
- receipt requirement. Do not paste the full evergreen skill, lane packet,
67
- receipt schema, repair history, or verifier checklist into the worker prompt.
68
- The worker goal is simple: run `$sellable:create-campaign` normally for that
69
- campaign goal, use the evergreen-selected provider/source only as internal
70
- sourcing metadata, and write the receipt. The parent does not create campaign
71
- shells.
65
+ `createCampaignGoals[].goalPrompt` as the authoritative campaign task, plus
66
+ only the lane packet, receipt path, side-effect caps, and canonical receipt
67
+ requirement. Paste the goal prompt verbatim; do not replace it with a
68
+ handcrafted `Goal:` paragraph. Do not paste the full evergreen skill, receipt
69
+ schema, repair history, verifier checklist, or lane-specific copy checklist
70
+ into the worker prompt. The worker goal is simple: run
71
+ `$sellable:create-campaign` normally for that campaign goal, use the
72
+ evergreen-selected provider/source only as internal sourcing metadata, and
73
+ write the receipt. The parent does not create campaign shells.
72
74
  5. Collect fresh durable receipts, verify with the original planRevision and
73
75
  selectedActionIds, then run the idempotency plan and show sample messages.
74
76
 
@@ -497,10 +499,17 @@ path/thread id, stop with `blocked: parent_mutated_before_worker_receipt` and
497
499
  do not continue setup in the parent.
498
500
  Short form: dispatch every selected lane worker before shell creation.
499
501
  Short form: do not call `setup_evergreen_campaigns` with `mode:"apply"` from the parent.
500
- Use a compact worker prompt: include lane packet JSON, original selectedActionIds,
501
- original planRevision, parent postEngagerSenderIds, parent sharedSenderIds,
502
- receiptArtifactPath, workspace id, sender ids, side-effect caps, and the
503
- instruction to load packaged prompts through MCP.
502
+ Use a compact worker prompt: include the exact matching
503
+ `createCampaignGoals[].goalPrompt`, lane packet JSON, original
504
+ selectedActionIds, original planRevision, parent postEngagerSenderIds, parent
505
+ sharedSenderIds, receiptArtifactPath, workspace id, sender ids, side-effect
506
+ caps, and the instruction to load packaged prompts through MCP. The worker
507
+ prompt must explicitly state the authority order:
508
+ `createCampaignGoals[].goalPrompt` first, then loaded `$sellable:create-campaign`
509
+ / `create-campaign-v2` / `generate-messages` prompts and assets, then evergreen
510
+ lane/receipt proof requirements. Evergreen packet fields and receipt rules are
511
+ operational proof context only; they must not become campaign brief copy,
512
+ message-writing instructions, or generated customer-facing text.
504
513
  The worker prompt must include the exact filter status rule:
505
514
  `filterDecisionReceipt.status:"applied"` only; never `completed`, `confirmed`,
506
515
  `done`, or any other alias.
@@ -542,7 +551,9 @@ worker with stdin redirected from that file:
542
551
 
543
552
  ```
544
553
  codex -a never -s danger-full-access exec --skip-git-repo-check -m <worker-model> -C <repo> -o <worker-final-file> - <<'WORKER_PROMPT'
545
- Use $sellable:create-evergreen-campaigns as the governing skill for this one lane worker.
554
+ Use $sellable:create-campaign as the governing campaign workflow for this one lane worker.
555
+ Use the evergreen plan/packet below only for lane scope, source metadata,
556
+ postconditions, side-effect caps, and durable receipt proof.
546
557
 
547
558
  Workspace id: <workspaceId>
548
559
  Parent planRevision: <planRevision>
@@ -558,6 +569,24 @@ If your runtime exposes a goal tool, create or maintain this exact goal:
558
569
  complete action <actionId> only when <receiptArtifactPath> exists as valid JSON
559
570
  for this lane or when a blocked receipt has been written at that same path.
560
571
 
572
+ Create-campaign goal prompt (authoritative; paste verbatim from the matching
573
+ createCampaignGoals[].goalPrompt):
574
+ <createCampaignGoalPrompt>
575
+
576
+ Authority order:
577
+ 1. The create-campaign goal prompt above is the campaign task.
578
+ 2. Loaded `$sellable:create-campaign`, `create-campaign-v2`, and
579
+ `generate-messages` prompts/assets own the campaign brief and message
580
+ strategy.
581
+ 3. The evergreen lane packet and receipt rules below are operational scope and
582
+ proof requirements only.
583
+
584
+ Do not paste evergreen lane keys, provider/source names, receipt terms, setup
585
+ plan terminology, verifier fields, or workflow mechanics into the campaign
586
+ brief or generated customer-facing messages. Do not add evergreen-authored
587
+ message-writing rules to the brief; let the loaded create-campaign and
588
+ generate-messages workflow do its job.
589
+
561
590
  Worker lane packet JSON:
562
591
  <lane packet JSON>
563
592
 
@@ -572,16 +601,24 @@ response, run a local file-existence and JSON self-check for
572
601
  receipt there; if any postcondition, quality gate, verifier schema, or file
573
602
  write blocks, write a canonical blocked receipt there with `status:"blocked"`,
574
603
  `blocker`, `campaignId`, `tableId`, `actionId`, `laneKey`, `planRevision`, and
575
- the latest product readback. The terminal condition is filesystem proof that
576
- <receiptArtifactPath> exists.
604
+ the latest product readback. For Post Engagers lanes, no sender-authored posts
605
+ or no sender-owned post-engager source is an acceptable terminal blocked/no-op
606
+ receipt, not a worker crash: use one of
607
+ `post_engagers_no_sender_posts`, `post_engagers_no_recent_sender_posts`,
608
+ `post_engagers_no_sender_owned_posts`, or
609
+ `post_engagers_source_author_mismatch`, include the source/readback evidence,
610
+ and stop without scraping third-party authors or generating misleading warm
611
+ copy. The terminal condition is filesystem proof that <receiptArtifactPath>
612
+ exists.
577
613
  WORKER_PROMPT
578
614
 
579
615
  # Multi-worker launcher equivalent:
580
616
  codex -a never -s danger-full-access exec --skip-git-repo-check -m <worker-model> -C <repo> -o <worker-final-file> - < <worker-prompt-file>
581
617
  ```
582
618
 
583
- If any placeholder cannot be filled from the current lane packet, do not inspect
584
- the filesystem or rerun inventory; stop with `blocked: worker_dispatch_stalled`.
619
+ If any placeholder cannot be filled from the current plan, matching
620
+ `createCampaignGoals[]` entry, or lane packet, do not inspect the filesystem or
621
+ rerun inventory; stop with `blocked: worker_dispatch_stalled`.
585
622
  `multi_agent_v1.spawn_agent`, raw `spawn_agent`, or any opaque Task/subagent
586
623
  runtime that cannot expose a visible thread id or durable receipt artifact is
587
624
  not accepted as command-level UAT proof and must not be used for mutating
@@ -816,6 +853,17 @@ the lane is complete. Do not use `status:"passed"` or
816
853
  in a separate `warnings` array, but the completion status stays canonical.
817
854
  The backend verifier rejects `status:"passed"`, `status:"pass"`, and
818
855
  `status:"passed_with_warnings"` as primary completion statuses.
856
+ Exception: a Post Engagers lane may write `status:"blocked"` when Sellable MCP
857
+ sender-post/source readback proves there are no recent sender-authored posts to
858
+ scrape, no sender-owned post-engager source, or the current source is authored
859
+ by someone else. Use the explicit blocker codes
860
+ `post_engagers_no_sender_posts`, `post_engagers_no_recent_sender_posts`,
861
+ `post_engagers_no_sender_owned_posts`, or
862
+ `post_engagers_source_author_mismatch`. Parent verify treats these as
863
+ `acceptedLaneBlockers`, so the parent can report the truthful no-op instead of
864
+ retrying invalid source repair. This exception does not apply to shared lanes,
865
+ bad generated copy, stale plans, target mismatch, missing receipt files, launch
866
+ or schedule side effects, or arbitrary worker failures.
819
867
 
820
868
  All step proof objects must live under `createCampaignStepReceipt`. Do not put
821
869
  `createCampaignWorkflowReceipt`, `campaignBriefReceipt`,
@@ -1097,8 +1145,13 @@ The parent then calls
1097
1145
  `setup_evergreen_campaigns({ mode:"verify", postEngagerSenderIds,
1098
1146
  sharedSenderIds, planRevision, selectedActionIds, receipts })` using the same
1099
1147
  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
1148
+ and reports only verified completion. If verify returns `verified:true` with
1149
+ `acceptedLaneBlockers`, report those lanes as accepted blocked/no-op lanes, not
1150
+ completed campaigns. Do not include `yolo` in the verify call; `yolo` is
1151
+ plan-mode only. A verify call without the same sender scopes can recompute an
1152
+ empty or different plan and is invalid proof. A verify call that uses a later
1153
+ reuse planRevision instead of the original execution planRevision is also
1154
+ invalid proof. Only after verify succeeds, rerun
1102
1155
  `setup_evergreen_campaigns({ mode:"plan", postEngagerSenderIds,
1103
1156
  sharedSenderIds, yolo:true })` without explicit campaign/table bindings. That
1104
1157
  idempotency rerun must return `intent:"reuse"` for every completed lane and no
@@ -1253,7 +1306,8 @@ Message, and verify current-revision sample messages before final completion.
1253
1306
  Short form: Do not pass the warm template into Shared Signal Discovery or Shared Cold Fallback.
1254
1307
  Short form: Shared lanes must reject generic product-summary samples.
1255
1308
  Short form: Shared lanes must reject three nearly identical samples.
1256
- Short form: Shared lanes must reject unsupported intent-assumptive hedges; Shared Signal Discovery may use Dotwork-style topic bridges like "saw you might be interested in [topic], so hope this is relevant", "saw you in a few conversations about [topic], so hope this is relevant", or "hope this is relevant if [topic] is part of the plan" when the source evidence supports the topic and the line does not claim engagement or expose source mechanics.
1309
+ Short form: Shared lanes must reject unsupported low-confidence relevance hedges.
1310
+ Short form: Shared lane message quality is owned by the packaged generate-messages prompt and validation; evergreen does not author source-thread bridge phrasing.
1257
1311
  Short form: Shared lanes must reject internal workflow vocabulary.
1258
1312
  Short form: revise or rerun the packaged create-campaign/generate-messages path.
1259
1313
  - **Post Engagers** first-message style: short, casual, references the
@@ -1294,21 +1348,12 @@ Message, and verify current-revision sample messages before final completion.
1294
1348
  product summaries, or repeated structure are bad. If the first generated
1295
1349
  batch violates these rules, rerun, but record that as a repaired UAT path
1296
1350
  rather than the desired zero-shot path.
1297
- Use the Dotwork gold-standard shape for Shared Signal Discovery samples
1298
- when the row supports a topic-level weak signal: "saw you might be
1299
- interested in [topic], so hope this is relevant", "saw you in a few
1300
- conversations about [topic], so hope this is relevant", or "saw you in a
1301
- few conversations around [topic], so hope this is relevant". These bridges
1302
- are allowed only when source evidence supports the topic and the line does
1303
- not claim a reaction, comment, sender-authored post, or other engagement
1304
- that is not proven. Do not use "found you in a thread" or other raw
1305
- source/discovery mechanics.
1306
- Shared Signal Discovery InMail subjects should follow the Dotwork plus-sign
1307
- A + B + C pattern: concrete topic + buyer outcome + useful artifact/picture,
1308
- for example "initiatives + business outcomes + one live picture".
1309
- Translate source/tool terms into prospect-facing business language; do not
1310
- put internal workflow
1311
- vocabulary such as "Codex-style workflow", "MCP", "agent workflows",
1351
+ Shared Signal Discovery samples may use a supported topic bridge such as
1352
+ "saw you around conversations about [high-level topic], so hope this is
1353
+ relevant" when the topic is grounded in source evidence and not
1354
+ activity-log phrasing. Translate source/tool terms into prospect-facing
1355
+ business language; do not put internal workflow vocabulary such as
1356
+ "Codex-style workflow", "MCP", "agent workflows",
1312
1357
  "Claude Code", or "Claude-style agent workflows" in customer-facing
1313
1358
  message one. Also avoid generic product-process nouns such as "dashboard",
1314
1359
  "workflow", "source", "send-ready copy", "reviewed prospect lists",
@@ -1319,7 +1364,8 @@ Message, and verify current-revision sample messages before final completion.
1319
1364
  Short form: Shared Signal Discovery uses no self-intro such as "I'm building Sellable".
1320
1365
  Short form: Shared Signal Discovery uses no self-intro such as "We're building Sellable".
1321
1366
  Short form: Shared Signal Discovery uses no "I've put together".
1322
- Short form: topic-level bridges, including "saw you might be interested in [topic], so hope this is relevant", "saw you in a few conversations about/around [topic], so hope this is relevant", and "hope this is relevant if [topic] is part of the plan", are allowed for Shared Signal Discovery when evidence-backed and not engagement-claiming; do not use bare "might be interested" as a generic intent claim.
1367
+ Short form: Shared Signal Discovery may use "saw you around conversations about [topic], so hope this is relevant" when source-supported.
1368
+ Short form: topic-level bridge rules are owned by the packaged generate-messages prompt and validation, not by the evergreen wrapper.
1323
1369
  Short form: no internal workflow vocabulary such as "Codex-style workflow", "MCP", "agent workflows", "Claude Code", or "Claude-style agent workflows".
1324
1370
  - **Shared Cold Fallback** first-message style: cold, direct, and cohesive.
1325
1371
  It must not pretend there was engagement, must not say "saw you pop up",
@@ -1335,14 +1381,15 @@ Message, and verify current-revision sample messages before final completion.
1335
1381
  Sellable/Codex/Claude-Code feature summary
1336
1382
  across prospects. This is a single-message cold path unless the approved
1337
1383
  create-campaign message workflow proves a better delivery format.
1338
- Do not use source-thread hedges such as "hope this is relevant", "might be
1339
- interested", or "saw you in a few conversations" in Shared Cold Fallback.
1340
- Start from a concrete role, company, or buyer-problem observation instead.
1341
- Do not use a repeated
1342
- product-definition paragraph such as "Sellable is a GTM system" across
1343
- samples; every reviewed cold sample should be specific enough to the role,
1344
- company, or problem that the three sample messages do not share the same
1345
- body skeleton.
1384
+ Do not open with "hope this is relevant" or a similar low-confidence
1385
+ relevance hedge in Shared Cold Fallback. Do not use a repeated product-definition paragraph such
1386
+ as "Sellable is a GTM system" across samples; every reviewed cold sample
1387
+ should be specific enough to the role, company, or problem that the three
1388
+ sample messages do not share the same body skeleton.
1389
+ Do not use source-thread hedges such as "might be interested", "saw you
1390
+ around conversations about...", or "saw you in a few conversations" in
1391
+ Shared Cold Fallback. Start from a concrete role, company, or buyer-problem
1392
+ observation instead.
1346
1393
  Do not use mechanical Sellable process language such as "campaign idea into
1347
1394
  prospects, filters, messages, and sequence setup", "sequence-prospects",
1348
1395
  "dashboard overhead", "campaign map", "send-ready copy", or "reviewed
@@ -1359,7 +1406,8 @@ Message, and verify current-revision sample messages before final completion.
1359
1406
  Short form: Shared Cold Fallback uses no "I've put together".
1360
1407
  Short form: Shared Cold Fallback uses no opt-out shrug such as "If this isn't relevant, ignore me".
1361
1408
  Short form: Shared Cold Fallback uses no product-stack dump.
1362
- Short form: no "hope this is relevant", "might be interested", or "saw you in a few conversations" in Shared Cold Fallback; Shared Signal Discovery has the topic-level conversation-bridge exception above.
1409
+ Short form: Shared Cold Fallback uses no low-confidence relevance hedge such as "hope this is relevant".
1410
+ Short form: no "hope this is relevant", "might be interested", "saw you around conversations about", or "saw you in a few conversations" in Shared Cold Fallback; Shared Signal Discovery has the topic-level conversation-bridge exception above.
1363
1411
  Short form: no repeated product-definition paragraph such as "Sellable is a GTM system".
1364
1412
  - Customer-visible evergreen lanes must enable ICP filtering before Message
1365
1413
  Drafting. This applies to Post Engagers, Shared Signal Discovery, and
@@ -1460,13 +1508,18 @@ Message, and verify current-revision sample messages before final completion.
1460
1508
  or a product-stack dump that repeats the same
1461
1509
  Sellable/Codex/Claude-Code feature summary across prospects. For all
1462
1510
  shared lanes, reject generic product-summary samples, repeated
1463
- near-identical samples, intent-assumptive hedges such as "might be
1464
- interested", source-context mismatches such as "saw you in a few
1465
- conversations" in Shared Cold Fallback, internal workflow vocabulary, any
1466
- sample with non-empty `issues`, and any preserved Post Engagers opener;
1467
- revise or rerun the packaged create-campaign/generate-messages path before
1468
- reporting completion. Do not approve or final-report samples
1469
- with `verdict:"passed"` and non-empty `issues`.
1511
+ near-identical samples, unsupported low-confidence relevance hedges, internal
1512
+ workflow vocabulary, any sample with non-empty `issues`, and any preserved
1513
+ Post Engagers opener; revise or rerun the packaged
1514
+ create-campaign/generate-messages path before reporting completion. Do not
1515
+ approve or final-report samples with `verdict:"passed"` and non-empty
1516
+ `issues`.
1517
+ Shared Signal Discovery samples may use `"saw you around conversations
1518
+ about [high-level topic], so hope this is relevant"` when the topic is
1519
+ supported by source evidence and not activity-log phrasing. Shared Cold
1520
+ Fallback samples must still reject source/conversation hedges such as
1521
+ `"hope this is relevant"`, `"might be interested"`, or `"saw you in a few
1522
+ conversations"`.
1470
1523
  - The first review batch exists and at least 3 review rows have generated
1471
1524
  messages from the approved brief. If fewer than 3 usable rows exist, report
1472
1525
  the actual count and why.
@@ -1530,7 +1583,7 @@ Message, and verify current-revision sample messages before final completion.
1530
1583
  internal-only objects, verify the active waterfall linkage, table ID,
1531
1584
  source type, and priority, and label them `internal source pool` rather
1532
1585
  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.
1586
+ - 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
1587
  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
1588
  - **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
1589
  - Each paragraph stands alone as a message — short, lowercase-casual is fine, sentence fragments are fine.