@sellable/install 0.1.234 → 0.1.236

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.234",
3
+ "version": "0.1.236",
4
4
  "type": "module",
5
5
  "description": "One-command installer for Sellable MCP in Claude Code and Codex",
6
6
  "bin": {
@@ -139,6 +139,10 @@ campaigns are not reusable evergreen targets. Only pass an archived
139
139
  campaign/table as an explicit binding when the user supplied those exact ids and
140
140
  explicitly allowed dashboard visibility repair; otherwise ignore archived
141
141
  matches for execution and let the create packet proceed.
142
+ Do not call `get_campaign` on archived waterfall bindings to overrule a create packet.
143
+ Do not re-plan with explicit bindings for archived waterfall slots after an unbound create plan.
144
+ Archived waterfall slot readbacks are diagnostic only; they are not a consistency check that can replace the immutable create packet.
145
+ If an archived waterfall binding makes the agent unwilling to execute the create packet, stop with `blocked: archived_binding_plan_conflict` instead of repairing or reusing the archived campaign/table.
142
146
 
143
147
  Use `selectedSenderIds` only as a legacy shorthand when the same senders should
144
148
  get sender-owned Post Engagers lanes and attach to shared lanes. When the scopes
@@ -344,17 +348,29 @@ not a parent-thread summary. The receipt must include:
344
348
  `senderIds`, or non-empty `senderIdentityBasis`, plus `identityBasis`.
345
349
  - `campaignBriefReceipt`: the CampaignOffer/campaign id, current
346
350
  workflowTableId, brief hash or updated-at marker, delivery format, token
347
- rules, hard avoids, source-use rules, and first-message template state. If
348
- the tool output uses `approvedFirstMessageTemplate`, copy it to canonical
349
- `firstMessageTemplate`; if it uses `deliveryFormatIncluded`,
350
- `tokenRulesIncluded`, `hardAvoidsIncluded`, or `sourceUseRulesIncluded`, copy
351
- those to canonical `deliveryFormat`, `tokenRules`, `hardAvoids`, and
352
- `sourceUseRules`. Before the worker exits, the durable JSON must contain the
353
- exact canonical leaf keys `briefHash`, `deliveryFormat`, `tokenRules`,
354
- `hardAvoids`, `sourceUseRules`, and `firstMessageTemplate` inside
355
- `createCampaignStepReceipt.campaignBriefReceipt`; do not leave those only in
351
+ rules, hard avoids, source-use rules, and lane-appropriate first-message
352
+ state. Post Engagers lanes require `campaignBriefReceipt.firstMessageTemplate`
353
+ because they are sender-owned warm lanes. Shared Signal Discovery and Shared
354
+ Cold Fallback lanes must not set `campaignBriefReceipt.firstMessageTemplate`;
355
+ instead set `campaignBriefReceipt.firstMessageTemplateState` to the exact
356
+ no-preset marker
357
+ `not preset; generate-messages branch selected the final message approach`.
358
+ If the tool output uses `approvedFirstMessageTemplate`, copy it to canonical
359
+ `firstMessageTemplate` only for Post Engagers lanes. For shared lanes, treat a
360
+ raw approved template as a quality issue unless it is only a no-preset or
361
+ generate-messages state marker. If the tool output uses
362
+ `deliveryFormatIncluded`, `tokenRulesIncluded`, `hardAvoidsIncluded`, or
363
+ `sourceUseRulesIncluded`, copy those to canonical `deliveryFormat`,
364
+ `tokenRules`, `hardAvoids`, and `sourceUseRules`. Before the worker exits, the
365
+ durable JSON must contain the exact canonical leaf keys `briefHash`,
366
+ `deliveryFormat`, `tokenRules`, `hardAvoids`, and `sourceUseRules` inside
367
+ `createCampaignStepReceipt.campaignBriefReceipt`, plus
368
+ `firstMessageTemplate` only for Post Engagers lanes or
369
+ `firstMessageTemplateState` for shared lanes; do not leave those only in
356
370
  narrative text, `briefIncludes`, `currentApprovedBriefHash`, or other aliases
357
371
  for the parent/verifier to infer.
372
+ Short form: Post Engagers lanes require `campaignBriefReceipt.firstMessageTemplate`.
373
+ Short form: Shared Signal Discovery and Shared Cold Fallback lanes must not set `campaignBriefReceipt.firstMessageTemplate`.
358
374
  - `sourceDecisionReceipt`: selected source/list id, provider, cursor/inventory
359
375
  state, import/copy caps, explicit `dedupeDncProviderExclusions:true` or an
360
376
  equivalent exclusions object, row ids or row-count evidence (`rowCount`,
@@ -419,9 +435,10 @@ before writing JSON; do not leave only raw objects like
419
435
  Self-check shorthand: top-level `planRevision`, `actionId`, `laneKey`, `laneType`, `workspaceId`, and `senderIds` must exist before worker completion.
420
436
  Self-check shorthand: `campaignBriefReceipt.briefHash`,
421
437
  `campaignBriefReceipt.deliveryFormat`, `campaignBriefReceipt.tokenRules`,
422
- `campaignBriefReceipt.hardAvoids`, `campaignBriefReceipt.sourceUseRules`, and
423
- `campaignBriefReceipt.firstMessageTemplate` must exist as exact canonical keys
424
- before worker completion.
438
+ `campaignBriefReceipt.hardAvoids`, and `campaignBriefReceipt.sourceUseRules`
439
+ must exist as exact canonical keys before worker completion, plus
440
+ `campaignBriefReceipt.firstMessageTemplate` only for Post Engagers lanes and
441
+ `campaignBriefReceipt.firstMessageTemplateState` for shared lanes.
425
442
  Self-check shorthand: `sourceDecisionReceipt.dedupeDncProviderExclusions`,
426
443
  `sourceDecisionReceipt.sourceLadderReason`, and one of
427
444
  `sourceDecisionReceipt.rowCount`, `sourceDecisionReceipt.rowIdsHash`, or
@@ -493,7 +510,8 @@ verification unless the same object also appears inside
493
510
  "tokenRules": true,
494
511
  "hardAvoids": true,
495
512
  "sourceUseRules": true,
496
- "firstMessageTemplate": "<template or template state>"
513
+ "firstMessageTemplate": "<Post Engagers only warm template; omit for shared lanes>",
514
+ "firstMessageTemplateState": "<Shared lanes only: not preset; generate-messages branch selected the final message approach>"
497
515
  },
498
516
  "sourceDecisionReceipt": {
499
517
  "sourceId": "<source id>",
@@ -646,6 +664,11 @@ such as "my post", "thanks for showing support", "saw you pop up", or any copy
646
664
  that implies the sending sender authored the source post or personally received
647
665
  the prospect's engagement unless the selected source evidence proves that exact
648
666
  sender authored the post.
667
+ Shared lanes must reject generic product-summary samples that explain the
668
+ product in the same broad words for every row. Shared lanes must reject three
669
+ nearly identical samples after stripping the leading name. If either failure
670
+ appears, revise or rerun the packaged create-campaign/generate-messages path
671
+ from the lane worker before writing a success receipt.
649
672
  The generated-message cells are not prompt proof: `currentRevisionGeneratedMessages`,
650
673
  Generate Message column counts, `messagesCount`, or rendered row previews prove
651
674
  only that table cells exist from the current brief/template, not that the
@@ -672,12 +695,38 @@ Parent-thread handwritten copy or setting `currentStep` is not proof.
672
695
  </command_backed_workflow>
673
696
 
674
697
  <objective>
675
- 1. **Inventory first**: `get_campaigns` + `list_tables` + `get_campaign_waterfall` in the active workspace. Treat `list_tables` and the managed waterfall as authoritative for older managed slots; `get_campaigns` is a recent campaign page and may miss canonical evergreen lanes. Match existing campaigns/tables/waterfall slots to the plan by name (case-insensitive, ignore suffixes like "(Copy)") and stored slot identity. `list_tables.campaignStatus` and `list_tables.dashboardBucket` are part of the identity check: a matching `ARCHIVED` table/campaign is not a plain `REUSE`. If it is the canonical prod slot and the invocation explicitly allows dashboard visibility repair, repair it to `PAUSED`; otherwise mark it `flagged`/`blocked` and do not create a duplicate. A matching non-archived campaign/table/waterfall slot = REUSE; record it and move on. Never create a second campaign for a slot that already has one in any of those inventories.
698
+ 1. **Inventory first, then obey the setup plan**: `get_campaigns` +
699
+ `list_tables` + `get_campaign_waterfall` in the active workspace. Treat
700
+ `list_tables` and the managed waterfall as authoritative for orientation
701
+ before the command-backed plan; `get_campaigns` is a recent campaign page and
702
+ may miss canonical evergreen lanes. Match existing campaigns/tables/waterfall
703
+ slots to the plan by name (case-insensitive, ignore suffixes like "(Copy)")
704
+ and stored slot identity. `list_tables.campaignStatus` and
705
+ `list_tables.dashboardBucket` are part of the identity check: a matching
706
+ `ARCHIVED` table/campaign is not a plain `REUSE`. If it is the canonical prod
707
+ slot and the invocation explicitly allows dashboard visibility repair, repair
708
+ it to `PAUSED`; otherwise treat it as archived inventory only. After
709
+ `setup_evergreen_campaigns({ mode:"plan" })` returns, that plan is
710
+ authoritative: a lane packet with `intent:"create"` must stay a create packet,
711
+ even when archived waterfall entries or `get_campaign` readbacks prove an old
712
+ CampaignOffer still exists. A matching non-archived campaign/table/waterfall
713
+ slot may be reused only when the command-backed plan returns a reuse packet
714
+ or the user supplied exact current ids. Never create a second campaign for a
715
+ non-archived slot that the plan selected for reuse.
676
716
  2. **Create only the missing slots** through the full `$sellable:create-campaign`
677
717
  workflow path for each lane, using the lane packet as the setup basis:
678
718
  - Post Engagers lanes: that sender's ID only. Shared lanes: all the senders' IDs.
679
719
  - The brief and message direction are lane-specific. Never reuse the Post
680
720
  Engagers opening for Shared Cold Fallback.
721
+ - The warm post-engager first-message template is allowed only for
722
+ sender-owned Post Engagers lanes. Do not pass the warm template into Shared
723
+ Signal Discovery or Shared Cold Fallback; those shared lanes must arrive at
724
+ their copy through Message Drafting and generated-message validation.
725
+ Short form: warm post-engager first-message template is allowed only for sender-owned Post Engagers lanes.
726
+ Short form: Do not pass the warm template into Shared Signal Discovery or Shared Cold Fallback.
727
+ Short form: Shared lanes must reject generic product-summary samples.
728
+ Short form: Shared lanes must reject three nearly identical samples.
729
+ Short form: revise or rerun the packaged create-campaign/generate-messages path.
681
730
  - **Post Engagers** first-message style: short, casual, references the
682
731
  sender-authored post they engaged with, closed question, **no internal
683
732
  vocabulary, no pitch, no meeting ask** in message one:
@@ -738,7 +787,10 @@ Parent-thread handwritten copy or setting `currentStep` is not proof.
738
787
  already launched and must be reported separately, and `ARCHIVED` must be
739
788
  repaired only when the prompt explicitly allows dashboard visibility repair.
740
789
  - A full campaign brief exists, including delivery format, token rules,
741
- hard avoids, source-use rules, and the approved first-message template.
790
+ hard avoids, and source-use rules. Post Engagers require an approved warm
791
+ first-message template. Shared Signal Discovery and Shared Cold Fallback
792
+ require `firstMessageTemplateState` with the no-preset generate-messages
793
+ marker instead of a copied first-message template.
742
794
  - A source/list decision has been resolved and campaign rows are loaded. If
743
795
  there is no approved source or no rows can be copied, report `blocked` with
744
796
  the missing source detail; do not call the campaign complete.
@@ -760,10 +812,13 @@ Parent-thread handwritten copy or setting `currentStep` is not proof.
760
812
  `get_campaign_message_preparation_status`. The generated-message cells are
761
813
  not prompt proof; `currentRevisionGeneratedMessages` and row previews are
762
814
  only downstream cell evidence. The proof must include
763
- `validationResult:"passed"`, a passed quality review, and at least 3
764
- reviewed sample messages. For Shared Cold Fallback, reject samples that
765
- open with a standalone name followed by "Hey there" or a similarly generic
766
- greeting.
815
+ `validationResult:"passed"`, a passed quality review, and at least 3
816
+ reviewed sample messages. For Shared Cold Fallback, reject samples that
817
+ open with a standalone name followed by "Hey there" or a similarly generic
818
+ greeting. For all shared lanes, reject generic product-summary samples,
819
+ repeated near-identical samples, and any preserved Post Engagers opener;
820
+ revise or rerun the packaged create-campaign/generate-messages path before
821
+ reporting completion.
767
822
  - The first review batch exists and at least 3 review rows have generated
768
823
  messages from the approved brief. If fewer than 3 usable rows exist, report
769
824
  the actual count and why.