@sellable/install 0.1.253 → 0.1.255

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/install",
3
- "version": "0.1.253",
3
+ "version": "0.1.255",
4
4
  "type": "module",
5
5
  "description": "One-command installer for Sellable MCP in Claude Code and Codex",
6
6
  "bin": {
@@ -353,9 +353,20 @@ the expected receipt paths, and record a per-worker exit code plus final-file
353
353
  paths and stderr/log paths before returning. If workers exit with empty logs and
354
354
  no final files because the subprocess detached or was reaped, stop with
355
355
  `blocked: worker_subprocess_detached_without_output` before parent verify.
356
+ When launching multiple local Codex CLI workers from one shell, start each
357
+ background job in the same shell that will call `wait`. Do not capture worker
358
+ PIDs through command substitution, a subshell, a pipeline, or a helper function
359
+ invoked as `worker_pid=$(launch_worker ...)`; those patterns make the captured
360
+ PID non-waitable by the parent shell. Use the same-shell PID array pattern:
361
+ `pids=(); codex ... > "$log_file" 2>&1 & pids+=("$!")`, then
362
+ `for pid in "${pids[@]}"; do wait "$pid" || rc=1; done`. If `wait` reports
363
+ `pid is not a child of this shell`, stop with
364
+ `blocked: worker_subprocess_detached_without_output`.
356
365
  Short form: run the wrapper with `/bin/bash -lc`.
357
366
  Short form: Do not rely on zsh-specific behavior.
358
367
  Short form: Do not use `status` as a shell variable; use `exit_code` or `rc`.
368
+ Short form: Do not capture worker PIDs through command substitution or a subshell.
369
+ Short form: Use same-shell `pids+=("$!")` before waiting on every PID.
359
370
  Short form: Receipt polling uses `find <receipt-dir> -maxdepth 1 -name 'evg_*.json' -print`.
360
371
  Short form: Do not use naked `*.json` globs under zsh; no `no matches found` diagnostics.
361
372
  Short form: Do not embed `<<'WORKER_PROMPT'` heredocs inside a quoted `/bin/bash -lc` command string.
@@ -932,17 +943,34 @@ current plan.
932
943
  Before calling verify, the parent should build compact receipt objects from the
933
944
  durable receipt files and pass those compact objects to MCP. The compact receipt
934
945
  must preserve every verifier-owned field named above, including top-level ids,
935
- `createCampaignStepReceipt`, canonical filter/message/review/sequence/final
936
- proof, and at least three concrete sample messages. It should omit large raw
946
+ `createCampaignStepReceipt`, `researchSenderReceipt`, canonical
947
+ filter/message/review/sequence/final proof, and at least three concrete sample
948
+ messages. It should omit large raw
937
949
  search outputs, long post lists, full row arrays, raw provider responses, and
938
950
  debug-only narration fields. Do not pass multi-hundred-kilobyte raw receipt
939
951
  objects when a compact canonical receipt has the same proof; large raw verify
940
952
  payloads can stall local MCP bridges and make UAT ambiguous.
953
+ Use a small Node JSON compactor for non-trivial compaction. Do not build complex
954
+ inline `jq` filters inside nested quoted shell strings; quote failures are a
955
+ UAT blocker and waste the verification run. The Node compactor must preserve
956
+ every canonical verifier object under `createCampaignStepReceipt`, including
957
+ `setupPlanCall`, `createCampaignWorkflowReceipt`, `researchSenderReceipt`,
958
+ `campaignBriefReceipt`, `sourceDecisionReceipt`, `filterDecisionReceipt`,
959
+ `messageDraftingReceipt`, `reviewBatchReceipt`, `sequenceReceipt`,
960
+ `finalPausedSendProof`, and `verifyCall`.
961
+ When compacting, normalize `finalPausedSendProof.currentStep` and
962
+ `finalPausedSendProof.campaignStatus` from nested pause/navigation readbacks if
963
+ the worker receipt stored those values under `pauseCampaignResult`,
964
+ `navigationReadback`, or `navigationProof`; do not pass an empty
965
+ `finalPausedSendProof` object to verify.
941
966
  Do not print or `jq .` full receipt JSON into the terminal. For local checks,
942
967
  print only compact summaries such as file, actionId, laneKey, campaignId,
943
968
  filter status, sample count, approved count, and final status.
944
969
  Short form: Parent verify uses compact canonical receipt objects, not raw giant receipts.
945
970
  Short form: Do not dump full receipt JSON with `jq .`.
971
+ Short form: Do not use complex inline `jq` for receipt compaction; use Node.
972
+ Short form: Compact receipts must preserve `researchSenderReceipt`.
973
+ Short form: Compact receipts must preserve direct `finalPausedSendProof.currentStep` and `campaignStatus`.
946
974
  Short form: Never change planRevision/actionId/laneKey while compacting receipts.
947
975
 
948
976
  Message proof for every customer-visible lane must come from the current
@@ -951,15 +979,23 @@ packaged `generate-messages` path before completion is reported.
951
979
  Parent-thread handwritten copy or setting `currentStep` is not proof.
952
980
 
953
981
  The parent must run its own sample-quality gate before final reporting, even
954
- when worker receipts say `verdict:"passed"`. For each shared lane, normalize the
955
- reviewed sample messages by removing leading greeting/name lines, first names,
956
- and whitespace-only differences; reject shared-lane samples when the message body is identical after removing first names or when all samples share the same
957
- paragraph skeleton. Also reject final shared-lane samples with `Hey <name>,`
958
- letter punctuation, weak relevance hedges, internal workflow vocabulary,
959
- self-intros, or any non-empty `issues`. If the parent finds repeated shared-lane
960
- sample copy, report `blocked: repeated_shared_lane_sample_copy`, revise the
961
- campaign brief/template through the packaged workflow, rerun Generate Message,
962
- and verify current-revision sample messages before final completion.
982
+ when worker receipts say `verdict:"passed"`. For Post Engagers lanes, reject
983
+ any sample that adds a relevance question, CTA, product line, or extra paragraph
984
+ after `Thank you for the support on my post about ...`; blocked phrases include
985
+ `curious`, `open to`, `trying to`, `worth seeing`, `want to see`, and any
986
+ Sellable/product explanation. For each shared lane, normalize the reviewed
987
+ sample messages by removing leading greeting/name lines, first names, and
988
+ whitespace-only differences; reject shared-lane samples when the message body is
989
+ identical after removing first names or when all samples share the same paragraph
990
+ skeleton. Also reject final shared-lane samples with `Hey <name>,` letter
991
+ punctuation, weak relevance hedges, internal workflow vocabulary, self-intros,
992
+ or any non-empty `issues`. Shared lanes must also reject mechanical
993
+ product-process wording such as `sequence-prospects`, `dashboard overhead`,
994
+ `campaign map`, `campaign idea into prospects`, `prospects, filters, messages`,
995
+ `send-ready copy`, or `reviewed prospect lists`. If the parent finds repeated
996
+ shared-lane sample copy, report `blocked: repeated_shared_lane_sample_copy`,
997
+ revise the campaign brief/template through the packaged workflow, rerun Generate
998
+ Message, and verify current-revision sample messages before final completion.
963
999
  </command_backed_workflow>
964
1000
 
965
1001
  <objective>
@@ -998,8 +1034,9 @@ and verify current-revision sample messages before final completion.
998
1034
  Short form: Shared lanes must reject internal workflow vocabulary.
999
1035
  Short form: revise or rerun the packaged create-campaign/generate-messages path.
1000
1036
  - **Post Engagers** first-message style: short, casual, references the
1001
- sender-authored post they engaged with, closed question, **no internal
1002
- vocabulary, no pitch, no meeting ask** in message one:
1037
+ sender-authored post they engaged with, and stops after the thank-you
1038
+ line. Use **no internal vocabulary, no pitch, no meeting ask, no product
1039
+ line, and no relevance question** in message one:
1003
1040
 
1004
1041
  ```
1005
1042
  {{first_name}}
@@ -1009,6 +1046,10 @@ and verify current-revision sample messages before final completion.
1009
1046
  Thank you for the support on my post about {{post_topic_line}}
1010
1047
  ```
1011
1048
 
1049
+ Do not add any paragraph after the thank-you line. In particular, do not
1050
+ append `curious, are you trying...`, `open to...`, `worth seeing...`, or
1051
+ Sellable/product copy to a Post Engagers first message.
1052
+
1012
1053
  - **Shared Signal Discovery** first-message style: short, casual, references
1013
1054
  the real observed signal/theme or public conversation. It may mention the
1014
1055
  engagement source only when the source evidence supports it. Do not say
@@ -1032,7 +1073,10 @@ and verify current-revision sample messages before final completion.
1032
1073
  relevant" in Shared Signal Discovery samples. Translate source/tool terms
1033
1074
  into prospect-facing business language; do not put internal workflow
1034
1075
  vocabulary such as "Codex-style workflow", "MCP", "agent workflows", or
1035
- "Claude-style agent workflows" in customer-facing message one.
1076
+ "Claude-style agent workflows" in customer-facing message one. Also avoid
1077
+ generic product-process nouns such as "dashboard", "workflow", "source",
1078
+ "send-ready copy", "reviewed prospect lists", and "sequence" unless the
1079
+ recipient's own product/category makes that exact word buyer-native.
1036
1080
  Short form: Shared Signal Discovery uses no self-intro such as "I'm building Sellable".
1037
1081
  Short form: Shared Signal Discovery uses no self-intro such as "We're building Sellable".
1038
1082
  Short form: Shared Signal Discovery uses no "I've put together".
@@ -1057,6 +1101,11 @@ and verify current-revision sample messages before final completion.
1057
1101
  as "Sellable is a GTM system" across samples; every reviewed cold sample
1058
1102
  should be specific enough to the role, company, or problem that the three
1059
1103
  sample messages do not share the same body skeleton.
1104
+ Do not use mechanical Sellable process language such as "campaign idea into
1105
+ prospects, filters, messages, and sequence setup", "sequence-prospects",
1106
+ "dashboard overhead", "campaign map", "send-ready copy", or "reviewed
1107
+ prospect lists" in final cold samples. Say the buyer problem and one plain
1108
+ outcome instead.
1060
1109
  Before Message Drafting runs, the campaign brief must already forbid
1061
1110
  self-intros, generic product summaries, opt-out shrugs, product-stack
1062
1111
  dumps, and repeated template structure. Do not let the first generation