@sellable/install 0.1.264 → 0.1.266

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.264",
3
+ "version": "0.1.266",
4
4
  "type": "module",
5
5
  "description": "One-command installer for Sellable MCP in Claude Code and Codex",
6
6
  "bin": {
@@ -14,6 +14,29 @@ producing duplicates. This skill never launches campaigns; customer-visible
14
14
  completion stops at paused send review.
15
15
  </role>
16
16
 
17
+ ## Invocation Mode Gate
18
+
19
+ Before any setup plan, classify the invocation mode.
20
+
21
+ - **Interactive approval mode is the default.** A bare user invocation such as
22
+ `$sellable:create-evergreen-campaigns`, "create evergreen campaigns", or
23
+ "set up evergreen" is interactive unless the prompt explicitly says `--yolo`,
24
+ scheduled, cron, automation, fresh-thread, run without approval, no user input,
25
+ or the host injects an equivalent trusted automation marker.
26
+ - In interactive approval mode, first call
27
+ `setup_evergreen_campaigns({ mode:"plan", depth:"customer_visible", ... })`
28
+ **without** `yolo:true`, render the returned `approvalSummary`, and wait for
29
+ explicit operator approval before dispatching any lane worker or creating
30
+ product state.
31
+ - In automation or explicit `--yolo` mode, pass `yolo:true` in plan mode only
32
+ and proceed without intermediate approval only when the plan returns
33
+ `autoExecutable:true`.
34
+
35
+ Short form: no explicit automation/`--yolo` marker means plan-and-ask, not run.
36
+ Short form: never infer `yolo:true` from a bare command invocation.
37
+ Short form: command hosts that want Custer-style unattended execution must
38
+ inject explicit automation context before invoking this skill.
39
+
17
40
  ## Operational Fast Path
18
41
 
19
42
  In automation or `--yolo` customer-visible setup, use this path before the
@@ -51,6 +74,21 @@ directory setup or product mutation.
51
74
  <inputs>
52
75
  The invoking prompt names the senders ("create evergreen campaigns for csreyes92 and thomas"). Resolve each via `list_senders`.
53
76
 
77
+ If the invoking prompt is a normal user chat without an explicit automation or
78
+ `--yolo` marker, run **interactive approval mode**:
79
+
80
+ - Call `setup_evergreen_campaigns({ mode:"plan", depth:"customer_visible", ... })`
81
+ without `yolo:true`.
82
+ - Render `approvalSummary.approvalQuestion` and the approval buckets
83
+ (`campaignsToCreate`, `campaignsToUpdate`, `campaignsToVerifyOnly`,
84
+ `campaignsLeftUntouched`, sender scopes, selected action ids, allowed and
85
+ forbidden side effects, blockers, and stop conditions).
86
+ - Wait for an explicit approval that names or clearly accepts the rendered plan
87
+ before dispatching lane workers or mutating product state.
88
+ - After approval, execute only the current `planRevision` and
89
+ `selectedActionIds`; re-plan if the planRevision, action ids, sender scopes,
90
+ blockers, side-effect classes, or lane bindings drift.
91
+
54
92
  If the invoking prompt says scheduled, automation, cron, heartbeat, fresh-thread,
55
93
  run without user input, or similar, run in **automation mode**:
56
94
 
@@ -269,11 +307,23 @@ sender scopes, explicit bindings, or an interactive session.
269
307
 
270
308
  When safe-yolo is blocked only because the plan needs normal setup work, ask
271
309
  for a **bounded delegated approval** over the rendered current plan instead of
272
- asking for each substep. The approval packet must name the workspace id, sender
273
- ids, lane keys, campaign/table ids or create intents, source/import caps,
274
- generate-message caps, route-proof approval policy, selectedActionIds,
275
- planRevision, allowed side-effect classes, and stop conditions. After that one
276
- approval covers the current planRevision, the parent may act on behalf of the
310
+ asking for each substep. The approval request must be rendered from the plan's
311
+ `approvalSummary`, not handwritten from raw lane packets alone. Show:
312
+
313
+ - `workspaceId`, `planRevision`, and `selectedActionIds`.
314
+ - Sender scopes with display names and ids: Post Engagers senders and shared-lane senders.
315
+ - `campaignsToCreate`: each campaign/lane name, action id, create intent, attached senders, and allowed side effects.
316
+ - `campaignsToUpdate`: each existing campaign/table id, current status/step, attached senders, and exact repairs or setup side effects.
317
+ - `campaignsToVerifyOnly`: existing campaigns that will only be verified/read.
318
+ - `campaignsLeftUntouched`: existing campaigns attached to selected senders but excluded from the current selected lane scope, with the reason.
319
+ - Source/import caps, generate-message caps, route-proof approval policy, allowed side-effect classes, forbidden side effects, blockers, and stop conditions.
320
+
321
+ If `approvalSummary.approvalQuestion` is present, use it as the short approval
322
+ question and put the detailed buckets underneath. Do not ask a vague yes/no
323
+ question that only says "run evergreen setup" or "approve this plan" without
324
+ naming the campaigns to create, existing campaigns to update/verify, campaigns
325
+ left untouched, and attached senders. After that one approval covers the current
326
+ planRevision and selectedActionIds, the parent may act on behalf of the
277
327
  operator and execute the selectedActionIds end to end. Do not ask again for
278
328
  substep approvals for source import, create-campaign choices, Message Drafting,
279
329
  sequence attach/precheck, or exactly one route-proof approval when those actions
@@ -283,6 +333,7 @@ workspace id, sender ids, source/list id, campaign/table id, new campaign/table
283
333
  id, planRevision, actionId, selectedActionIds, allowed side effects, caps,
284
334
  status, or blocker set outside the approved packet.
285
335
  The short rule: one approval covers the current planRevision and selectedActionIds.
336
+ The approval clarity rule: the operator approves named campaign create/update/verify/untouched buckets and attached senders, not a generic evergreen run.
286
337
  The execution rule: act on behalf of the operator; do not ask again for substep approvals while work stays within the lane packet, approved caps, approved side-effect classes, and route-proof approval policy.
287
338
  The drift rule: stop and re-plan when ids, caps, blockers, side-effect classes, or any new campaign/table id leave the approved packet.
288
339
 
@@ -448,10 +499,22 @@ Do not paste the entire wrapper skill into worker prompts. If the parent cannot
448
499
  launch at least one visible/durable worker immediately after directory setup,
449
500
  stop with `blocked: worker_dispatch_stalled` before any mutation.
450
501
  After launching workers, poll only the expected current-run receipt paths from
451
- `workerDispatch.receiptArtifactHint`. If no worker receipt file appears within a
452
- bounded wait, for example 10 minutes in automation, stop with
453
- `blocked: worker_receipt_timeout`, include the worker ids/final-file paths/stderr
454
- if available, and do not create or repair campaign shells in the parent.
502
+ `workerDispatch.receiptArtifactHint`. Polling is progress-aware, not a blind
503
+ wall-clock cutoff: while a visible/durable worker is still active and recent
504
+ readbacks show forward progress, keep polling the expected path and do not
505
+ report `worker_receipt_timeout`. If a worker is active but the receipt is still
506
+ missing after the product postconditions appear complete, send exactly one
507
+ receipt-write recovery prompt that says the worker must write either a success
508
+ receipt or a blocked receipt at the exact path before ending. If no worker
509
+ receipt file appears after a bounded **no-progress** window, for example 10
510
+ minutes without new tool calls, final-file updates, receipt mtime changes, or
511
+ thread progress, stop with `blocked: worker_receipt_timeout`, include the worker
512
+ ids/final-file paths/stderr if available, and do not create or repair campaign
513
+ shells in the parent.
514
+ If a worker produced partial product state but no receipt, recover through the
515
+ same visible/durable worker or a compact repair worker against the existing
516
+ campaign/table ids; never create a duplicate lane campaign to recover a missing
517
+ receipt.
455
518
  Use only the repo-local `workerDispatch.receiptArtifactHint` returned by the
456
519
  current lane packet for receipt paths.
457
520
  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.
@@ -477,6 +540,10 @@ Lane key: <laneKey>
477
540
  Allowed side effects: <allowedSideEffects JSON>
478
541
  Write the durable receipt to this exact path: <receiptArtifactPath>
479
542
 
543
+ If your runtime exposes a goal tool, create or maintain this exact goal:
544
+ complete action <actionId> only when <receiptArtifactPath> exists as valid JSON
545
+ for this lane or when a blocked receipt has been written at that same path.
546
+
480
547
  Worker lane packet JSON:
481
548
  <lane packet JSON>
482
549
 
@@ -485,7 +552,14 @@ Use mcp__sellable only. Do not use admin tools, direct DB, Prisma, SQL, web sear
485
552
  Do not launch, start, schedule, send, or use paid InMail.
486
553
  For filter proof, durable receipt status must be `filterDecisionReceipt.status:"applied"` only; never `completed`, `confirmed`, `done`, or aliases.
487
554
  For generated messages, `update_cell` is allowed only for the semantic Approved checkbox. Never use `update_cell` for generated message text/body/sample copy. Bad copy requires `revise_message_template_and_rerun` or brief/template revision plus Generate Message rerun. Any generated-message cell override is `blocked: generated_message_cell_override`.
488
- Complete only this lane, write the required durable receipt JSON, and stop.
555
+ Complete only this lane. Do not end with narration only. Before your final
556
+ response, run a local file-existence and JSON self-check for
557
+ <receiptArtifactPath>. If the lane succeeded, write the canonical success
558
+ receipt there; if any postcondition, quality gate, verifier schema, or file
559
+ write blocks, write a canonical blocked receipt there with `status:"blocked"`,
560
+ `blocker`, `campaignId`, `tableId`, `actionId`, `laneKey`, `planRevision`, and
561
+ the latest product readback. The terminal condition is filesystem proof that
562
+ <receiptArtifactPath> exists.
489
563
  WORKER_PROMPT
490
564
 
491
565
  # Multi-worker launcher equivalent:
@@ -1015,6 +1089,13 @@ every canonical verifier object under `createCampaignStepReceipt`, including
1015
1089
  `campaignBriefReceipt`, `sourceDecisionReceipt`, `filterDecisionReceipt`,
1016
1090
  `messageDraftingReceipt`, `reviewBatchReceipt`, `sequenceReceipt`,
1017
1091
  `finalPausedSendProof`, and `verifyCall`.
1092
+ Write the compact verifier payload to a temporary JSON file and load that object
1093
+ directly into the MCP verify call. Do not manually paste, retype, truncate, or
1094
+ merge full receipt JSON into the tool call. If a verify attempt fails because
1095
+ the payload was malformed, overlong, manually edited, missing a receipt, or used
1096
+ a later reuse planRevision/actionId set, rebuild the compact payload from the
1097
+ durable receipt files and retry once with the original execution
1098
+ `planRevision`/`selectedActionIds` before reporting a verifier blocker.
1018
1099
  When compacting, normalize `finalPausedSendProof.currentStep` and
1019
1100
  `finalPausedSendProof.campaignStatus` from nested pause/navigation readbacks if
1020
1101
  the worker receipt stored those values under `pauseCampaignResult`,
@@ -1029,6 +1110,7 @@ Short form: Do not use complex inline `jq` for receipt compaction; use Node.
1029
1110
  Short form: Compact receipts must preserve `researchSenderReceipt`.
1030
1111
  Short form: Compact receipts must preserve direct `finalPausedSendProof.currentStep` and `campaignStatus`.
1031
1112
  Short form: Never change planRevision/actionId/laneKey while compacting receipts.
1113
+ Short form: Do not hand-build giant receipt tool-call payloads; load compact JSON from disk.
1032
1114
 
1033
1115
  Parent repair dispatch uses the same compact discipline. If the parent sample
1034
1116
  quality gate fails after a worker receipt, do not launch a repair worker by