@sellable/install 0.1.243 → 0.1.245

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.243",
3
+ "version": "0.1.245",
4
4
  "type": "module",
5
5
  "description": "One-command installer for Sellable MCP in Claude Code and Codex",
6
6
  "bin": {
@@ -58,6 +58,22 @@ Default evergreen plan per workspace (override only if the prompt specifies diff
58
58
  1. **`<Sender Name> - Post Engagers`** — one per sender (warm lane, highest priority)
59
59
  2. **`<Workspace/Team> - Shared Signal Discovery`** — one shared warm-signal campaign lane across senders
60
60
  3. **`<Workspace/Team> - Shared Cold Fallback`** — one shared cold/fallback campaign lane across senders
61
+
62
+ Sender scope resolution is safety-critical. Do not pass
63
+ `allConnectedSenders:true` unless the invoking prompt explicitly says "all
64
+ connected senders", "every connected sender", "all seats", or names an
65
+ equivalent all-sender scope. If the user says "all 4 campaigns", "the four
66
+ evergreen campaigns", or names specific senders, resolve those exact senders
67
+ and pass explicit `postEngagerSenderIds` plus `sharedSenderIds`; do not broaden
68
+ the plan to every connected sender. In non-interactive or `--yolo` mode, when
69
+ more than two connected senders exist and the prompt does not explicitly
70
+ authorize all connected senders, stop before mutation with
71
+ `blocked: ambiguous_post_engager_sender_scope` and report the sender ids/names
72
+ needed for approval. Never let "workspace default" silently create Post
73
+ Engagers lanes for extra senders.
74
+ Short form: Do not pass `allConnectedSenders:true` unless the prompt explicitly says all/every connected sender.
75
+ Short form: "all 4 campaigns" means explicit sender scope plus two shared lanes, not all connected senders.
76
+ Short form: In `--yolo`, ambiguous multi-sender scope blocks before mutation.
61
77
  </inputs>
62
78
 
63
79
  <command_backed_workflow>
@@ -281,11 +297,24 @@ zsh treats it as read-only; use `exit_code` or `rc` instead. Receipt polling
281
297
  must use `find <receipt-dir> -maxdepth 1 -name 'evg_*.json' -print` or an
282
298
  explicit nullglob-safe equivalent. Do not use naked `*.json` globs under zsh,
283
299
  and keep zero-receipt polls quiet with no `no matches found` diagnostics.
300
+ Do not embed `<<'WORKER_PROMPT'` heredocs inside a single quoted or double
301
+ quoted `/bin/bash -lc '...'` command string; nested quoting is brittle and can
302
+ truncate the first worker before mutation. For multi-worker launchers, write one
303
+ plain prompt file per lane under the current run directory, then start each
304
+ worker with `codex -a never -s danger-full-access exec -C "$REPO" -o
305
+ "$worker_final_file" - < "$worker_prompt_file"`. Keep launcher shell variables
306
+ double-quoted and keep the prompt heredoc only in a standalone script/prompt-file
307
+ write step, not inside an already quoted shell argument. If the first launcher
308
+ attempt exits with a shell parse error or before starting the first worker,
309
+ stop with `blocked: worker_launcher_quoting_failed` and do not retry by
310
+ loosening sender scope or mutating in the parent.
284
311
  Short form: run the wrapper with `/bin/bash -lc`.
285
312
  Short form: Do not rely on zsh-specific behavior.
286
313
  Short form: Do not use `status` as a shell variable; use `exit_code` or `rc`.
287
314
  Short form: Receipt polling uses `find <receipt-dir> -maxdepth 1 -name 'evg_*.json' -print`.
288
315
  Short form: Do not use naked `*.json` globs under zsh; no `no matches found` diagnostics.
316
+ Short form: Do not embed `<<'WORKER_PROMPT'` heredocs inside a quoted `/bin/bash -lc` command string.
317
+ Short form: Multi-worker launchers write prompt files and run `codex ... - < "$worker_prompt_file"`.
289
318
  After creating receipt directories, dispatch workers immediately; do not perform extended parent reasoning, extra inventory, or prompt rewriting loops.
290
319
  Use a compact worker prompt: include lane packet JSON, original selectedActionIds,
291
320
  original planRevision, parent postEngagerSenderIds, parent sharedSenderIds,
@@ -299,8 +328,11 @@ current lane packet for receipt paths.
299
328
  Do not hardcode machine-specific paths, workspace ids, campaign ids, sender ids, or UAT/phase artifact paths in this MCP prompt or any worker prompt.
300
329
  After the receipt-directory `mkdir`, the next shell/tool call must launch the first lane worker.
301
330
  Do not run `find`, `ls`, extra inventory, or another preflight between directory setup and the first worker launch.
302
- For the local Codex CLI fallback, use this literal durable CLI worker launch template
303
- and fill only the lane-specific placeholders:
331
+ For the local Codex CLI fallback, use this literal durable CLI worker launch
332
+ template and fill only the lane-specific placeholders. For one-off direct worker
333
+ launches you may pipe a heredoc directly to `codex`; for multi-worker shell
334
+ launchers, write the same prompt body to `<worker-prompt-file>` and launch the
335
+ worker with stdin redirected from that file:
304
336
 
305
337
  ```
306
338
  codex -a never -s danger-full-access exec -C <repo> -o <worker-final-file> - <<'WORKER_PROMPT'
@@ -324,6 +356,9 @@ Use mcp__sellable only. Do not use admin tools, direct DB, Prisma, SQL, web sear
324
356
  Do not launch, start, schedule, send, or use paid InMail.
325
357
  Complete only this lane, write the required durable receipt JSON, and stop.
326
358
  WORKER_PROMPT
359
+
360
+ # Multi-worker launcher equivalent:
361
+ codex -a never -s danger-full-access exec -C <repo> -o <worker-final-file> - < <worker-prompt-file>
327
362
  ```
328
363
 
329
364
  If any placeholder cannot be filled from the current lane packet, do not inspect
@@ -455,8 +490,19 @@ not a parent-thread summary. The receipt must include:
455
490
  evidence field such as `rowCount`, `rowIdsHash`, or `rowEvidence`; do not
456
491
  leave those only in `searchSignalsProof`, `importProof`, `coldFallbackProof`,
457
492
  or narrative text for the parent/verifier to infer.
458
- - `filterDecisionReceipt`: saved/applied filter ids or explicit skip-filter
459
- decision with current campaign/table basis.
493
+ - `filterDecisionReceipt`: saved/applied ICP filter proof for the current
494
+ campaign/table basis. Customer-visible evergreen lanes must enable ICP
495
+ filtering with `enableICPFilters:true`, call `save_rubrics`, and save at
496
+ least three rubric/filter criteria before Message Drafting. Do not skip
497
+ filtering for evergreen setup. Missing or skipped filter proof is
498
+ `blocked: missing_filter_setup`.
499
+ Before the worker exits, the durable JSON must contain
500
+ `filterDecisionReceipt.status:"applied"`,
501
+ `filterDecisionReceipt.enableICPFilters:true`, the current
502
+ `workflowTableId`, and concrete saved-filter proof such as
503
+ `filterDecisionReceipt.filterIds`, `filterDecisionReceipt.rubricIds`,
504
+ `filterDecisionReceipt.savedRubricCount`, or
505
+ `filterDecisionReceipt.headlineICPCriteria`.
460
506
  - `messageDraftingReceipt`: the Message Drafting proof described below,
461
507
  including packaged `generate-messages` prompt/assets and validation. Raw
462
508
  fields like `generateMessagesPromptLoadedToHasMoreFalse`,
@@ -592,7 +638,12 @@ verification unless the same object also appears inside
592
638
  "sourceLadderReason": "<why the current source is valid before colder sources>"
593
639
  },
594
640
  "filterDecisionReceipt": {
595
- "status": "skipped",
641
+ "status": "applied",
642
+ "enableICPFilters": true,
643
+ "filterIds": ["<saved filter/rubric id>"],
644
+ "rubricIds": ["<saved rubric id>"],
645
+ "headlineICPCriteria": ["<saved ICP criterion>", "<saved ICP criterion>", "<saved ICP criterion>"],
646
+ "savedRubricCount": 3,
596
647
  "workflowTableId": "<workflow table id>"
597
648
  },
598
649
  "messageDraftingReceipt": {
@@ -884,10 +935,34 @@ Parent-thread handwritten copy or setting `currentStep` is not proof.
884
935
  Short form: Shared Cold Fallback uses no "I've put together".
885
936
  Short form: Shared Cold Fallback uses no opt-out shrug such as "If this isn't relevant, ignore me".
886
937
  Short form: Shared Cold Fallback uses no product-stack dump.
887
- - Every customer-visible lane must run Message Drafting from the current
888
- campaign/table basis after source rows exist. The worker must load the full
889
- packaged `generate-messages` prompt, every required asset, and
890
- `create-campaign-v2-validation`; if the internal branch handoff is not
938
+ - Customer-visible evergreen lanes must enable ICP filtering before Message
939
+ Drafting. This applies to Post Engagers, Shared Signal Discovery, and
940
+ Shared Cold Fallback. Do not skip filtering for evergreen setup, even when
941
+ the source is warm. Use the normal `$sellable:create-campaign` filter
942
+ workflow: set or save 3-5 headline ICP criteria, call `save_rubrics`, and
943
+ persist `enableICPFilters:true` on the campaign before generating
944
+ messages. Good evergreen filters should be light but real: role/budget
945
+ relevance, company/market fit, and obvious non-buyer exclusion. For
946
+ Post Engagers, keep filters permissive enough that warm source rows are not
947
+ over-pruned, but still save the filter rules. For shared lanes, filter for
948
+ buyers/operators relevant to the workspace offer and exclude students,
949
+ job seekers, vendors, and off-topic commenters. The receipt must show
950
+ `filterDecisionReceipt.status:"applied"`,
951
+ `filterDecisionReceipt.enableICPFilters:true`, current `workflowTableId`,
952
+ and saved filter/rubric proof with at least three saved rubric/filter
953
+ criteria (`filterIds`, `rubricIds`, `headlineICPCriteria`, or
954
+ `savedRubricCount`). Missing or skipped filter proof is
955
+ `blocked: missing_filter_setup`.
956
+ Short form: Customer-visible evergreen lanes must enable ICP filtering.
957
+ Short form: `enableICPFilters:true`.
958
+ Short form: Do not skip filtering for evergreen setup.
959
+ Short form: at least three saved rubric/filter criteria.
960
+ Short form: missing or skipped filter proof is `blocked: missing_filter_setup`.
961
+ Short form: run Message Drafting only after saved filters are applied.
962
+ - Every customer-visible lane must run Message Drafting from the current
963
+ campaign/table basis after source rows exist. The worker must load the full
964
+ packaged `generate-messages` prompt, every required asset, and
965
+ `create-campaign-v2-validation`; if the internal branch handoff is not
891
966
  callable in the packaged runtime, the worker must call
892
967
  `start_campaign_message_preparation` and poll
893
968
  `get_campaign_message_preparation_status` from the lane worker. The
@@ -917,10 +992,13 @@ Parent-thread handwritten copy or setting `currentStep` is not proof.
917
992
  - A source/list decision has been resolved and campaign rows are loaded. If
918
993
  there is no approved source or no rows can be copied, report `blocked` with
919
994
  the missing source detail; do not call the campaign complete.
920
- - The filter step is resolved: either saved/applied filters are present, or
921
- the campaign explicitly skipped filters. Do not leave customer-visible
922
- campaigns at `filter-choice`, `filter-rules`, or `apply-icp-rubric` and
923
- report success.
995
+ - The filter step is resolved with saved/applied filters. Customer-visible
996
+ evergreen lanes must have `enableICPFilters:true`, at least three saved
997
+ ICP filter/rubric criteria, and a receipt with
998
+ `filterDecisionReceipt.status:"applied"`. Do not skip filters for
999
+ evergreen setup. Do not leave customer-visible campaigns at
1000
+ `filter-choice`, `filter-rules`, or `apply-icp-rubric` and report success.
1001
+ Do not proceed to Message Drafting until saved filters are applied.
924
1002
  - Message Drafting has run from the current campaign/table basis, using the
925
1003
  create-campaign message prompt/assets and validation gate. Updating
926
1004
  `currentStep:"messages"` is not proof. Parent-thread handwritten copy is