@sellable/install 0.1.98 → 0.1.99

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.
@@ -11,11 +11,14 @@ campaign state. The main thread owns approval and campaign writes.
11
11
  Use the live campaign inputs supplied by the parent thread:
12
12
 
13
13
  - `campaignId`
14
+ - campaign revision or `campaignUpdatedAt`
14
15
  - `campaignBrief` / campaign brief content model
15
16
  - selected source decision and provider state
16
17
  - `selectedLeadListId` or selected source list context
17
18
  - `workflowTableId`
18
- - imported review-batch rows from that selected list
19
+ - imported review-batch rows from that selected list, including row IDs and a
20
+ review-batch row hash when available
21
+ - filter basis at branch start: `pending`, `use-filters`, or `skip-filters`
19
22
  - any already-saved fit/rubric result summaries supplied by the parent
20
23
 
21
24
  Do not require or hunt for `brief.md`, `lead-review.md`, or `lead-sample.json`.
@@ -23,6 +26,13 @@ Those files are optional debug context only when the parent explicitly provides
23
26
  them. Never inspect the product database directly, never run `psql`, and never
24
27
  read stale local markdown files to reconstruct campaign state.
25
28
 
29
+ All live reads must come from scoped MCP/product tools by campaign and
30
+ workspace, such as `get_campaign`, `get_campaign_context`, and
31
+ `get_rows_minimal({ tableId: workflowTableId })`, or from equivalent parent
32
+ thread payloads. Reject the task as `blocked` if the campaign id, workspace,
33
+ `selectedLeadListId`, `workflowTableId`, or review-batch row ids do not match
34
+ the branch input.
35
+
26
36
  ## Required First Steps
27
37
 
28
38
  1. Load the full long-form generate-messages prompt:
@@ -45,11 +55,31 @@ Return the following to the parent thread:
45
55
  - one rendered good-fill sample for a plausible passing review-batch row
46
56
  - one omit/fallback sample when the row signal is not safe
47
57
  - pass/fail notes against the generate-messages quality gates
58
+ - compact runtime status: `ready`, `blocked`, `retry-needed`, or `stale`
59
+ - basis token containing campaign revision/updatedAt, brief hash,
60
+ `selectedLeadListId`, `workflowTableId`, review-batch row ids/hash, filter
61
+ choice, and rubric/filter basis when present
62
+ - output timestamp/hash and any retry/error detail
48
63
 
49
64
  Write `message-validation.md`, `message-prep.md`, or
50
65
  `message-candidate-drafts.md` only when the parent explicitly asks for debug
51
66
  artifacts. Normal live campaign runs can return the same content directly.
52
67
 
68
+ When reporting branch runtime proof, use this shape under
69
+ `watchNarration.workerDetails.messageDraftBuilder`:
70
+
71
+ - `statusSource`: `branch` or `parent-thread-fallback`
72
+ - `status`: `branch-running`, `fallback-active`, `spawn-failed`,
73
+ `fallback-superseded`, `branch-superseded`, `ready`, `blocked`,
74
+ `retry-needed`, or `stale`
75
+ - `runId` or `fallbackId`
76
+ - `startedAt` and `updatedAt`
77
+ - `basisToken` and `basis`
78
+ - optional `compactOutputRef`, `compactOutput`, and `error`
79
+
80
+ Do not tell the UI to show Message Draft Builder as running unless this proof
81
+ exists and points at the current non-empty bounded review batch.
82
+
53
83
  ## Hard Rules
54
84
 
55
85
  - Do not call product Generate Message cells. This worker drafts the template
@@ -225,10 +225,10 @@
225
225
  ],
226
226
  "ownership": "proof inventory, token strategy, angle drafting, skeptical-prospect review, and selected winner only",
227
227
  "codex": {
228
- "description": "Message Draft Builder for campaign-backed template proposals and sample messages after source approval.",
228
+ "description": "Message Draft Builder for campaign-backed template proposals after confirm_lead_list imports a non-empty bounded review batch.",
229
229
  "model": "gpt-5.5",
230
230
  "modelReasoningEffort": "high",
231
- "sandboxMode": "workspace-write",
231
+ "sandboxMode": "read-only",
232
232
  "nicknameCandidates": [
233
233
  "Message Draft Builder",
234
234
  "Draft Builder",
@@ -236,19 +236,17 @@
236
236
  ]
237
237
  },
238
238
  "claude": {
239
- "description": "Use proactively as Message Draft Builder after lead source approval to propose an approved-template candidate and sample message from campaign state.",
239
+ "description": "Use proactively as Message Draft Builder after confirm_lead_list imports a non-empty bounded review batch; load the full generate-messages prompt and draft only from scoped campaign/tool state.",
240
240
  "model": "inherit",
241
241
  "background": true,
242
242
  "maxTurns": 10,
243
243
  "color": "magenta",
244
244
  "tools": [
245
245
  "Read",
246
- "Write",
247
- "Edit",
248
- "Grep",
249
- "Glob",
250
246
  "mcp__sellable__get_subskill_prompt",
251
- "mcp__sellable__get_subskill_asset"
247
+ "mcp__sellable__get_campaign",
248
+ "mcp__sellable__get_campaign_context",
249
+ "mcp__sellable__get_rows_minimal"
252
250
  ]
253
251
  }
254
252
  }
@@ -8,9 +8,10 @@ Required first step:
8
8
  draft `campaignOfferId`, call `get_provider_prompt({ provider:
9
9
  "signal-discovery", campaignOfferId, confirmed: true })` and include that same
10
10
  `campaignOfferId` plus `currentStep: "signal-discovery"` in `search_signals`
11
- so the user can watch source work in the campaign UI. Treat that as a
12
- campaign-attached persisted search; do not run a post-mint search without the
13
- campaign ID. If no campaign ID is supplied, run campaignless preview mode.
11
+ so the owning search route can show the source lane with current find-leads
12
+ narration and user options. Treat that as a campaign-attached persisted
13
+ search; do not run a post-mint search without the campaign ID. If no campaign
14
+ ID is supplied, run campaignless preview mode.
14
15
 
15
16
  Use the inherited Sellable MCP tools when available:
16
17
 
@@ -44,6 +45,8 @@ sales Claude`; do not treat broad anchor-only lanes like `Claude Code`, `MCP`,
44
45
  campaignOfferId, selectionMode: "replace", selections, headlineICPCriteria,
45
46
  currentStep: "signal-discovery" })` before sampling so the watched Signal
46
47
  Discovery table shows the promoted posts and the exact posts being tested.
48
+ Do not move the campaign to `confirm-lead-list`; `import_leads` owns that
49
+ visible transition after source approval.
47
50
  6. Fetch or sample engagers for promoted posts and score rough ICP fit from
48
51
  visible headline/display-name cues only. Do not enrich people during
49
52
  viability estimation.
@@ -8,10 +8,12 @@ Required first step:
8
8
  draft `campaignOfferId`, call `get_provider_prompt({ provider: "prospeo",
9
9
  campaignOfferId, confirmed: true })` and include that same `campaignOfferId`
10
10
  plus `currentStep: "prospeo"` in `search_prospeo` so the user can watch source
11
- work in the campaign UI. If no campaign ID is supplied, run campaignless
12
- preview mode. Treat post-mint
11
+ work in the campaign UI with source-lane narration owned by the search route.
12
+ If no campaign ID is supplied, run campaignless preview mode. Treat post-mint
13
13
  searches with `campaignOfferId` as campaign-attached persisted search tabs;
14
14
  do not run a live campaign search without the campaign ID.
15
+ Do not move the campaign to `confirm-lead-list`; `import_leads` owns that
16
+ visible transition after source approval.
15
17
 
16
18
  Use the inherited Sellable MCP tools when available:
17
19
 
@@ -8,10 +8,12 @@ Required first step:
8
8
  draft `campaignOfferId`, call `get_provider_prompt({ provider: "sales-nav",
9
9
  campaignOfferId, confirmed: true })` and include that same `campaignOfferId` in
10
10
  `search_sales_nav` with `currentStep: "sales-nav"` so the user can watch
11
- source work in the campaign UI. If no campaign ID is supplied, run
12
- campaignless preview mode. Treat post-mint
11
+ source work in the campaign UI with source-lane narration owned by the search
12
+ route. If no campaign ID is supplied, run campaignless preview mode. Treat post-mint
13
13
  searches with `campaignOfferId` as campaign-attached persisted search tabs;
14
14
  do not run a live campaign search without the campaign ID.
15
+ Do not move the campaign to `confirm-lead-list`; `import_leads` owns that
16
+ visible transition after source approval.
15
17
 
16
18
  Use the inherited Sellable MCP tools when available:
17
19
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sellable/install",
3
- "version": "0.1.98",
3
+ "version": "0.1.99",
4
4
  "type": "module",
5
5
  "description": "One-command installer for Sellable MCP in Claude Code and Codex",
6
6
  "bin": {