@sellable/install 0.1.229 → 0.1.231
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/bin/sellable-install.mjs
CHANGED
package/package.json
CHANGED
|
@@ -24,10 +24,19 @@ run without user input, or similar, run in **automation mode**:
|
|
|
24
24
|
- Reconcile structure and record any template/config polish as `created`,
|
|
25
25
|
`reused`, `repaired`, `flagged`, or `blocked`.
|
|
26
26
|
- Choose the automation depth from the invoking prompt:
|
|
27
|
+
- Sparse `--yolo` create/repair invocations default to customer-visible completion:
|
|
28
|
+
when the user says run/create/repair/setup `$sellable:create-evergreen-campaigns`,
|
|
29
|
+
create evergreen campaigns, or similar without saying heartbeat/structure-only,
|
|
30
|
+
set `depth:"customer_visible"`. Customers usually expect usable campaigns,
|
|
31
|
+
not empty shells.
|
|
27
32
|
- **Structure-only reconcile** is for heartbeat prompts that only say to
|
|
28
|
-
ensure slots exist.
|
|
29
|
-
|
|
30
|
-
|
|
33
|
+
ensure slots exist. Only choose `depth:"structure_only"` for
|
|
34
|
+
heartbeat/ensure-slots-only automation where the prompt explicitly says it
|
|
35
|
+
does not need source rows, generated messages, approvals, or sequence. It may
|
|
36
|
+
create/reuse shells and apply metadata repairs, but it does not create rows,
|
|
37
|
+
generate messages, approve rows, or attach new send work.
|
|
38
|
+
Short form: only choose `depth:"structure_only"` for
|
|
39
|
+
heartbeat/ensure-slots-only runs.
|
|
31
40
|
- **Customer-visible completion** is required when the prompt says full
|
|
32
41
|
campaign, customer-ready, send-review-ready, went through
|
|
33
42
|
`$sellable:create-campaign`, fill out, approve one, only needs enrich and
|
|
@@ -138,6 +147,16 @@ for that shared-only sender. Example: if Justin already has a Post Engagers
|
|
|
138
147
|
campaign and Jell/Hulan should only participate in the two shared campaigns,
|
|
139
148
|
call `setup_evergreen_campaigns` with `postEngagerSenderIds:["<justin id>"]`
|
|
140
149
|
and `sharedSenderIds:["<justin id>","<jell or hulan id>"]`.
|
|
150
|
+
If the operator says to keep a protected existing Post Engagers campaign unchanged
|
|
151
|
+
and create/repair only the shared lanes, pass `postEngagerSenderIds:[]` and the
|
|
152
|
+
full shared sender set in `sharedSenderIds`. Do not include the protected active
|
|
153
|
+
Post Engagers lane as a reuse packet in that shared-only execution scope: an
|
|
154
|
+
ACTIVE protected lane can correctly produce a backend `launched_campaign`
|
|
155
|
+
blocker and would make the whole yolo plan non-autoExecutable even though the
|
|
156
|
+
operator asked to leave it untouched. Inventory and waterfall proof may mention
|
|
157
|
+
the protected lane, but selectedActionIds and lane workers must cover only the
|
|
158
|
+
shared lane packets.
|
|
159
|
+
Short form: Do not include the protected active Post Engagers lane as a reuse packet when the operator requested only shared lane execution.
|
|
141
160
|
|
|
142
161
|
When senders are ambiguous, ask which sender ids belong in the Post Engagers
|
|
143
162
|
sender scope and which belong in the shared lane sender scope before planning.
|
|
@@ -155,6 +174,12 @@ plan execution, paid InMail spend, or ambiguous target choice. Stop on wrong
|
|
|
155
174
|
workspace, cleanup/archive/delete need, stale plan, disconnected sender,
|
|
156
175
|
duplicate candidate, unsafe side effect, missing source proof, or missing
|
|
157
176
|
message proof.
|
|
177
|
+
In exec/automation mode, do not call `request_user_input`. If a plan under
|
|
178
|
+
`--yolo` returns `autoExecutable:false` and the run cannot receive interactive
|
|
179
|
+
bounded delegated approval, stop with
|
|
180
|
+
`blocked: bounded_approval_unavailable_in_exec_mode` before any mutation and
|
|
181
|
+
state whether the operator should rerun with a safe autoExecutable plan, narrower
|
|
182
|
+
sender scopes, explicit bindings, or an interactive session.
|
|
158
183
|
|
|
159
184
|
When safe-yolo is blocked only because the plan needs normal setup work, ask
|
|
160
185
|
for a **bounded delegated approval** over the rendered current plan instead of
|
|
@@ -306,31 +331,56 @@ not a parent-thread summary. The receipt must include:
|
|
|
306
331
|
when using a receipt file, and `notAdHoc:true`.
|
|
307
332
|
- `researchSenderReceipt`: `research-sender` prompt load proof,
|
|
308
333
|
`complete_sender_research` result, sender LinkedIn identity basis, and the
|
|
309
|
-
notes/proof counts used before the net-new `create_campaign` call.
|
|
334
|
+
notes/proof counts used before the net-new `create_campaign` call. It must
|
|
335
|
+
include canonical `promptLoadedToHasMoreFalse:true`,
|
|
336
|
+
`completeSenderResearch`, and either `senderLinkedinUrl`, non-empty
|
|
337
|
+
`senderIds`, or non-empty `senderIdentityBasis`, plus `identityBasis`.
|
|
310
338
|
- `campaignBriefReceipt`: the CampaignOffer/campaign id, current
|
|
311
339
|
workflowTableId, brief hash or updated-at marker, delivery format, token
|
|
312
|
-
rules, hard avoids, source-use rules, and first-message template state.
|
|
340
|
+
rules, hard avoids, source-use rules, and first-message template state. If
|
|
341
|
+
the tool output uses `approvedFirstMessageTemplate`, copy it to canonical
|
|
342
|
+
`firstMessageTemplate`; if it uses `deliveryFormatIncluded`,
|
|
343
|
+
`tokenRulesIncluded`, `hardAvoidsIncluded`, or `sourceUseRulesIncluded`, copy
|
|
344
|
+
those to canonical `deliveryFormat`, `tokenRules`, `hardAvoids`, and
|
|
345
|
+
`sourceUseRules`.
|
|
313
346
|
- `sourceDecisionReceipt`: selected source/list id, provider, cursor/inventory
|
|
314
347
|
state, import/copy caps, explicit `dedupeDncProviderExclusions:true` or an
|
|
315
348
|
equivalent exclusions object, row ids or row-count evidence (`rowCount`,
|
|
316
349
|
`readyRowCount`, or `rowEvidence`), and the reason no colder source was used
|
|
317
|
-
before the current source was proven exhausted or insufficient.
|
|
350
|
+
before the current source was proven exhausted or insufficient. If the raw
|
|
351
|
+
provider output uses `sourceProvider`, `sourceListId`, `reviewBatchRowIds`, or
|
|
352
|
+
`rationale`, copy them to canonical `provider`, `sourceId`/`sourceListId`,
|
|
353
|
+
`rowIdsHash`/`rowCount`, and `sourceLadderReason`.
|
|
318
354
|
- `filterDecisionReceipt`: saved/applied filter ids or explicit skip-filter
|
|
319
355
|
decision with current campaign/table basis.
|
|
320
356
|
- `messageDraftingReceipt`: the Message Drafting proof described below,
|
|
321
|
-
including packaged `generate-messages` prompt/assets and validation.
|
|
357
|
+
including packaged `generate-messages` prompt/assets and validation. Raw
|
|
358
|
+
fields like `generateMessagesPromptLoadedToHasMoreFalse`,
|
|
359
|
+
`requiredAssetsLoadedToHasMoreFalse`,
|
|
360
|
+
`validationPromptLoadedToHasMoreFalse`,
|
|
361
|
+
`get_campaign_message_preparation_status`, and
|
|
362
|
+
`waitForCampaignProcessingProof` are useful, but the receipt must also copy
|
|
363
|
+
them into canonical `promptLoadedToHasMoreFalse`, `requiredAssetsLoaded`,
|
|
364
|
+
`validationLoaded`, `reviewBatchRowHash`, and
|
|
365
|
+
`messageDraftRecommendation`.
|
|
322
366
|
- `reviewBatchReceipt`: review-batch row ids/hash, generated row count,
|
|
323
367
|
quality-valid route-proof row id when approved, and proof that no broad
|
|
324
368
|
approve-all occurred.
|
|
325
369
|
- `sequenceReceipt`: exact current workflowTableId, recommended non-paid
|
|
326
370
|
sequence attach/precheck result, and readback showing `hasSequence:true` when
|
|
327
|
-
completion is claimed.
|
|
371
|
+
completion is claimed. If the tool output uses
|
|
372
|
+
`attachRecommendedSequenceResult.actionTypes` or
|
|
373
|
+
`nonPaidRecommendedSequence`, copy them to canonical `actionTypes` and
|
|
374
|
+
`nonPaid`.
|
|
328
375
|
- final paused-send proof: if the current campaign table is `DRAFT` after the
|
|
329
376
|
sequence is attached, call the product `pause_campaign({ campaignId })`
|
|
330
377
|
endpoint/tool to put the unlaunched campaign into `PAUSED` review state, then
|
|
331
378
|
reread the campaign/table. Do not raw-write `campaignStatus`, do not start or
|
|
332
379
|
launch, and do not schedule/send. Completion requires reread proof of
|
|
333
|
-
`currentStep:"send"` and `campaignStatus:"PAUSED"`.
|
|
380
|
+
`currentStep:"send"` and `campaignStatus:"PAUSED"`. If the raw output nests
|
|
381
|
+
this in `finalCampaignRead` or `finalTableRead`, copy it to canonical
|
|
382
|
+
`finalPausedSendProof.currentStep` and
|
|
383
|
+
`finalPausedSendProof.campaignStatus`.
|
|
334
384
|
- `verifyCall`: the exact `setup_evergreen_campaigns({ mode:"verify",
|
|
335
385
|
planRevision, selectedActionIds, receipts })` call/result used before the
|
|
336
386
|
parent reports completion.
|
|
@@ -345,7 +395,18 @@ substitute `message` for `generatedMessageText`. Do not substitute
|
|
|
345
395
|
`passVerdict` for `verdict`. If the self-check fails, fix the receipt before
|
|
346
396
|
ending; do not leave the parent to infer canonical fields from top-level
|
|
347
397
|
aliases or narrative text.
|
|
398
|
+
Self-check shorthand: copy raw tool-output aliases into canonical receipt keys
|
|
399
|
+
before writing JSON; do not leave only raw objects like
|
|
400
|
+
`get_campaign_message_preparation_status`, `attachRecommendedSequenceResult`,
|
|
401
|
+
`finalCampaignRead`, or `finalTableRead`.
|
|
348
402
|
Self-check shorthand: top-level `planRevision`, `actionId`, `laneKey`, `laneType`, `workspaceId`, and `senderIds` must exist before worker completion.
|
|
403
|
+
Self-check shorthand: `messageDraftingReceipt.promptLoadedToHasMoreFalse`,
|
|
404
|
+
`requiredAssetsLoaded`, `validationLoaded`, `reviewBatchRowHash`, and
|
|
405
|
+
`messageDraftRecommendation` must exist before worker completion.
|
|
406
|
+
Self-check shorthand: `reviewBatchReceipt.rowIdsHash`,
|
|
407
|
+
`reviewBatchReceipt.generatedCount`, `sequenceReceipt.actionTypes`,
|
|
408
|
+
`sequenceReceipt.nonPaid`, `finalPausedSendProof.currentStep`, and
|
|
409
|
+
`finalPausedSendProof.campaignStatus` must exist before worker completion.
|
|
349
410
|
Self-check shorthand: `sampleMessages[]` must include `rowId`, `generatedMessageText`, `verdict`, and `issues`.
|
|
350
411
|
Self-check shorthand: Do not substitute `message` for `generatedMessageText`.
|
|
351
412
|
Self-check shorthand: Do not substitute `passVerdict` for `verdict`.
|
|
@@ -430,9 +491,8 @@ verification unless the same object also appears inside
|
|
|
430
491
|
"selectedLeadListId": "<source/list id>",
|
|
431
492
|
"reviewBatchRowHash": "<review row ids hash>",
|
|
432
493
|
"messageDraftRecommendation": {"basis": "generate-messages"},
|
|
433
|
-
"sampleMessages[].verdict": "pass",
|
|
434
494
|
"sampleMessages": [
|
|
435
|
-
{"rowId": "<row id>", "generatedMessageText": "<message>", "verdict": "
|
|
495
|
+
{"rowId": "<row id>", "generatedMessageText": "<message>", "verdict": "passed", "issues": []}
|
|
436
496
|
]
|
|
437
497
|
},
|
|
438
498
|
"reviewBatchReceipt": {
|
|
@@ -442,8 +502,6 @@ verification unless the same object also appears inside
|
|
|
442
502
|
"sequenceReceipt": {
|
|
443
503
|
"workflowTableId": "<workflow table id>",
|
|
444
504
|
"hasSequence": true,
|
|
445
|
-
"sequenceReceipt.actionTypes": ["send_invite"],
|
|
446
|
-
"sequenceReceipt.nonPaid": true,
|
|
447
505
|
"actionTypes": ["send_invite"],
|
|
448
506
|
"nonPaid": true
|
|
449
507
|
},
|
|
@@ -571,7 +629,8 @@ The parent then calls
|
|
|
571
629
|
`setup_evergreen_campaigns({ mode:"verify", postEngagerSenderIds,
|
|
572
630
|
sharedSenderIds, planRevision, selectedActionIds, receipts })` using the same
|
|
573
631
|
sender scopes as the plan call and the original execution planRevision/actionIds,
|
|
574
|
-
and reports only verified completion.
|
|
632
|
+
and reports only verified completion. Do not include `yolo` in the verify call;
|
|
633
|
+
`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
|
|
575
634
|
`setup_evergreen_campaigns({ mode:"plan", postEngagerSenderIds,
|
|
576
635
|
sharedSenderIds, yolo:true })` without explicit campaign/table bindings. That
|
|
577
636
|
idempotency rerun must return `intent:"reuse"` for every completed lane and no
|