@sellable/install 0.1.298 → 0.1.300

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.
@@ -1059,7 +1059,10 @@ const REFILL_SENDS_ALLOWED_TOOLS = [
1059
1059
  "mcp__sellable__list_workspaces",
1060
1060
  "mcp__sellable__set_active_workspace",
1061
1061
  "mcp__sellable__get_subskill_prompt",
1062
+ "mcp__sellable__get_subskill_asset",
1062
1063
  "mcp__sellable__search_subskill_prompts",
1064
+ "mcp__sellable__get_scheduler_fill_capacity",
1065
+ "mcp__sellable__refresh_paid_inmail_credits",
1063
1066
  "mcp__sellable__list_senders",
1064
1067
  "mcp__sellable__get_sender_routing",
1065
1068
  "mcp__sellable__get_campaign_waterfall",
@@ -1999,12 +2002,21 @@ Desktop, then start a new thread.
1999
2002
  ## Execute Workflow
2000
2003
 
2001
2004
  1. Call \`mcp__sellable__get_auth_status({})\`.
2002
- 2. Normalize invocation arguments with \`mcp__sellable__refill_sends({ yolo, senders, senderIds, senderNames, targetDate, untilDate })\` when the host exposes typed MCP tools.
2003
- 3. Call \`mcp__sellable__get_refill_target_plan({ senders, senderIds, senderNames, targetDate, untilDate })\` before any mutation. Render \`target.eligibleSenderLedger\`, \`target.senderRefillPlans[]\`, and \`target.globalActionQueue\` as the structured packet. Preserve the labels \`Need to prepare\`, \`Goal\`, \`Already sent\`, \`Scheduled\`, \`Ready and waiting to be scheduled\`, and \`Still need\`. In \`--yolo\`, \`mcp__sellable__refill_sends\` maintains a run-local \`refreshedPaidInmailSenderIds\` set, refreshes stale/missing paid InMail facts for each selected paid-InMail sender at most once, reruns \`get_refill_target_plan\`, and returns \`autoPaidInmailRefresh\` plus the post-refresh \`targetPlan\` before choosing the next prep/approval/start action. Do not present paid-credit refresh as the next operator action after \`refill_sends\` returns that post-refresh plan. For exact-date proof, \`mcp__sellable__get_scheduler_fill_capacity\` is read-only and tells how many cells the scheduler will try to place for a sender/action/date. If the returned target is already complete, stop with the no-op receipt. If ready rows cover the target but scheduled rows do not, keep the run open in the read-only scheduler wait/re-read loop until projected coverage fills, a concrete non-scheduler blocker appears, or Christian explicitly stops/statuses the run.
2004
- 4. Load the canonical prompt via
2005
+ 2. Resolve the target workspace id from the user request, automation config, or install-time workspace mapping. Pass \`workspaceId\` on every scheduled or \`--yolo\` refill tool call. Missing \`workspaceId\` in scheduled or \`--yolo\` mode is a blocker; return \`WORKSPACE_REQUIRED\` instead of running against shared config state. Do not solve automation workspace uncertainty by changing the shared active workspace.
2006
+ 3. Normalize invocation arguments with \`mcp__sellable__refill_sends({ yolo, executionMode, requireWorkspace, workspaceId, senders, senderIds, senderNames, targetDate, untilDate })\` when the host exposes typed MCP tools. Type shape: \`refill_sends({ yolo?: boolean, executionMode?: "manual" | "scheduled" | "yolo", requireWorkspace?: boolean, workspaceId?: string, senders?: string[], senderIds?: string[], senderNames?: string[], horizonSendDays?: number, untilDate?: "YYYY-MM-DD", targetDate?: "YYYY-MM-DD" })\`.
2007
+ 4. Clover scheduled automation example: \`mcp__sellable__refill_sends({ yolo:false, executionMode:"scheduled", requireWorkspace:true, workspaceId:"cmlq1v8ms0000jx04ang4hi7e" })\`, then \`mcp__sellable__get_refill_target_plan({ intent:"plain", approvalMode:"mark_ready", workspaceId:"cmlq1v8ms0000jx04ang4hi7e" })\`.
2008
+ 5. Call \`mcp__sellable__get_refill_target_plan({ workspaceId, senders, senderIds, senderNames, targetDate, untilDate })\` before any mutation. Render \`target.eligibleSenderLedger\`, \`target.senderRefillPlans[]\`, and \`target.globalActionQueue\` as the structured packet. Preserve the labels \`Need to prepare\`, \`Goal\`, \`Already sent\`, \`Scheduled\`, \`Ready and waiting to be scheduled\`, and \`Still need\`. In \`--yolo\`, \`mcp__sellable__refill_sends\` maintains a run-local \`refreshedPaidInmailSenderIds\` set, refreshes stale/missing paid InMail facts for each selected paid-InMail sender at most once, reruns \`get_refill_target_plan\`, and returns \`autoPaidInmailRefresh\` plus the post-refresh \`targetPlan\` before choosing the next prep/source-copy/bounded-approval/read-only wait action. Refill ladder: approve generated rows only through the explicit bounded approval gate, process existing same-campaign unenriched/unprepared rows before source work, then same-source copy, then provider-aligned source-more. New source/provider switches change reply-rate baseline and are manual alternates, not \`--yolo\` side effects. Do not present paid-credit refresh as the next operator action after \`refill_sends\` returns that post-refresh plan. For exact-date proof, \`mcp__sellable__get_scheduler_fill_capacity\` is read-only and tells how many cells the scheduler will try to place for a sender/action/date. If the returned target is already complete, stop with the no-op receipt. If ready rows cover the target but scheduled rows do not, keep the run open in the read-only scheduler wait/re-read loop until projected coverage fills, a concrete non-scheduler blocker appears, or Christian explicitly stops/statuses the run.
2009
+ 6. Load the canonical prompt and deterministic flow asset via
2005
2010
  \`mcp__sellable__get_subskill_prompt({ subskillName: "refill-sends" })\`,
2006
- then load \`mcp__sellable__get_subskill_prompt({ subskillName: "refill-sends-workflow" })\`.
2007
- 5. Follow the canonical prompt exactly. Do not launch, start, archive, delete,
2011
+ then load \`mcp__sellable__get_subskill_prompt({ subskillName: "refill-sends-workflow" })\`,
2012
+ then load \`mcp__sellable__get_subskill_asset({ subskillName: "refill-sends-workflow", assetPath: "core/flow.v1.json" })\`.
2013
+ Continue prompt and asset loads until \`hasMore:false\`; parse the flow JSON
2014
+ and verify \`workflow:"refill-sends-workflow"\` with a \`v1\` version.
2015
+ Freshness gate precedes scheduler wait: when stale or missing paid-credit
2016
+ facts are present, refresh exact selected sender facts once, rerun
2017
+ \`get_refill_target_plan\`, and only then enter \`wait_for_scheduler\` if
2018
+ freshness is clean.
2019
+ 7. Follow the canonical prompt exactly. Do not launch, start, archive, delete,
2008
2020
  or write scheduler rows as part of refill sends.
2009
2021
 
2010
2022
  ## MCP Prompt Fallback
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sellable/install",
3
- "version": "0.1.298",
3
+ "version": "0.1.300",
4
4
  "type": "module",
5
5
  "description": "One-command installer for Sellable MCP in Claude Code and Codex",
6
6
  "bin": {
@@ -1515,7 +1515,11 @@ Message, and verify current-revision sample messages before final completion.
1515
1515
  - DM lanes: add a `Delivery format:` line — either `multiline (each paragraph sends as its own DM message)` or `single message`. When multiline, the template's blank-line paragraphs ARE the message boundaries — write each one as a standalone typed message.
1516
1516
  - **InMail lanes can never be multiline**: an InMail is one message and the recipient must reply before anything else can be sent. InMail-bound templates must read as one cohesive message — declare `Delivery format: single message (InMail — no follow-up until reply)` and never structure the copy to depend on multi-message pacing.
1517
1517
 
1518
- - The sequence is auto-selected by sender tier; do not hand-author sequence templates here. Never select a paid-InMail template.
1518
+ - The sequence is auto-selected by sender tier; do not hand-author sequence
1519
+ templates here. Sales Nav/Recruiter senders may receive the unified Sales
1520
+ Nav cascade through `attach_recommended_sequence`; attaching it does not
1521
+ spend paid InMail credits by itself. Do not substitute the manual Paid
1522
+ InMail Campaign template.
1519
1523
  3. **Customer-Visible Completion Contract**: a named evergreen lane that appears
1520
1524
  as a campaign card or campaign-backed table is not done when the shell exists.
1521
1525
  It is done only when the customer can open the campaign and land on final
@@ -1592,7 +1596,7 @@ Message, and verify current-revision sample messages before final completion.
1592
1596
  completion, approve exactly one quality-valid generated row. If one or more
1593
1597
  rows are already approved, do not add more approvals during evergreen
1594
1598
  completion. Never broad approve all rows.
1595
- - The recommended non-paid sequence is attached to the current campaign
1599
+ - The recommended tier-aware sequence is attached to the current campaign
1596
1600
  table, and the watched campaign is on Send. Use
1597
1601
  `attach_recommended_sequence({ campaignId, currentStep:"send" })` when a
1598
1602
  safe attach is needed. After `confirm_lead_list` or any source-list copy,
@@ -1602,10 +1606,11 @@ Message, and verify current-revision sample messages before final completion.
1602
1606
  before reporting completion. If a stale shell table has sequence columns but
1603
1607
  the current campaign table does not, `SEQUENCE_EXISTS` is not enough:
1604
1608
  record the stale shell table id, then repair the current workflowTableId
1605
- with `attach_sequence` using the same non-paid product template
1606
- `attach_recommended_sequence` would have selected. Never use a paid-InMail
1607
- template and never attach/replace sequence outside the current table unless
1608
- the current lane packet explicitly allowed sequence repair.
1609
+ with `attach_sequence` using the same product template
1610
+ `attach_recommended_sequence` would have selected. Do not substitute the
1611
+ manual Paid InMail Campaign, and never attach/replace sequence outside the
1612
+ current table unless the current lane packet explicitly allowed sequence
1613
+ repair.
1609
1614
  - If the current campaign table is still `DRAFT` after sequence/readiness
1610
1615
  proof, call `pause_campaign({ campaignId })` and reread. `pause_campaign`
1611
1616
  is the product-native review-state transition; it is not a launch and does
@@ -7,6 +7,7 @@ allowed-tools:
7
7
  - mcp__sellable__get_refill_target_plan
8
8
  - mcp__sellable__get_scheduler_fill_capacity
9
9
  - mcp__sellable__refresh_paid_inmail_credits
10
+ - mcp__sellable__get_subskill_asset
10
11
  - mcp__sellable__get_auth_status
11
12
  - mcp__sellable__start_cli_login
12
13
  - mcp__sellable__wait_for_cli_login
@@ -68,6 +69,9 @@ Accepted invocation flags in the same user request:
68
69
 
69
70
  - `--yolo`: auto-accept the rendered bounded refill packet after the required
70
71
  fresh state reread.
72
+ - `workspaceId: <id>`: required for scheduled automation and `--yolo`; pass it
73
+ through on every refill MCP tool call instead of relying on shared config
74
+ state.
71
75
  - `--sender <name-or-id>`: scope to a specific sender; repeat for multiple
72
76
  senders.
73
77
  - `--until <YYYY-MM-DD>`: fill through that sender-local date, inclusive,
@@ -86,17 +90,54 @@ Accepted invocation flags in the same user request:
86
90
  When the host can call typed MCP tools, start with:
87
91
 
88
92
  ```text
89
- refill_sends({ yolo?: boolean, senders?: string[], senderIds?: string[], senderNames?: string[], horizonSendDays?: number, untilDate?: "YYYY-MM-DD", targetDate?: "YYYY-MM-DD" })
93
+ refill_sends({ yolo?: boolean, executionMode?: "manual" | "scheduled" | "yolo", requireWorkspace?: boolean, workspaceId?: string, senders?: string[], senderIds?: string[], senderNames?: string[], horizonSendDays?: number, untilDate?: "YYYY-MM-DD", targetDate?: "YYYY-MM-DD" })
90
94
  ```
91
95
 
92
- That command helper only normalizes arguments and returns the execution
93
- contract. It does not mutate. Continue with the workflow below for route
94
- selection, state rereads, approval gating, source import, preparation, and
95
- bounded approval.
96
+ That command helper normalizes arguments and returns the execution contract. In
97
+ non-yolo mode it does not mutate. In `--yolo`, it may execute exactly one safe
98
+ bounded primitive from the fresh `target.globalActionQueue[0]`, then reread and
99
+ return the new target plan; currently safe primitives are paid-credit refresh,
100
+ existing-row message preparation, same-source row copy, and read-only wait
101
+ rereads. It does not run unbounded approval, lower
102
+ paid-InMail thresholds, switch source families, create campaigns, launch, send,
103
+ or write scheduler rows. Continue with the workflow below for route selection,
104
+ state rereads, approval gating, source import, preparation, and bounded
105
+ approval.
96
106
 
97
- First call `get_auth_status({})`. If auth or active workspace is not OK, follow
98
- the returned login/workspace guidance before route resolution. Do not run refill
99
- research against an implicit or guessed workspace.
107
+ ## Workspace Contract
108
+
109
+ First resolve the target workspace id from the user's request, automation config,
110
+ or install-time workspace mapping. Pass `workspaceId` on every scheduled or
111
+ `--yolo` refill tool call, including setup/read calls such as
112
+ `refill_sends`, `get_refill_target_plan`, `list_senders`,
113
+ `get_sender_routing`, `resolve_campaign_fill_route`,
114
+ `get_campaign_refill_state`, `get_scheduler_fill_capacity`, and any later
115
+ refill mutation covered by the packet. Missing `workspaceId` in scheduled or
116
+ `--yolo` mode is a blocker; stop with `WORKSPACE_REQUIRED` instead of running
117
+ against an implicit or guessed workspace.
118
+
119
+ Do not solve scheduled or `--yolo` workspace uncertainty by changing the shared
120
+ active workspace. Manual interactive workspace switching remains a separate
121
+ diagnostic/setup flow, outside automation.
122
+
123
+ Examples:
124
+
125
+ ```text
126
+ refill_sends({ yolo:true, executionMode:"yolo", requireWorkspace:true, workspaceId:"cmlq1v8ms0000jx04ang4hi7e" })
127
+ get_refill_target_plan({ intent:"plain", approvalMode:"approve", workspaceId:"cmlq1v8ms0000jx04ang4hi7e" })
128
+ list_senders({ workspaceId:"cmlq1v8ms0000jx04ang4hi7e" })
129
+ ```
130
+
131
+ Clover scheduled automation must name the Clover workspace explicitly:
132
+
133
+ ```text
134
+ refill_sends({ yolo:false, executionMode:"scheduled", requireWorkspace:true, workspaceId:"cmlq1v8ms0000jx04ang4hi7e" })
135
+ get_refill_target_plan({ intent:"plain", approvalMode:"mark_ready", workspaceId:"cmlq1v8ms0000jx04ang4hi7e" })
136
+ ```
137
+
138
+ First call `get_auth_status({})`. If auth is not OK, follow the returned login
139
+ guidance before route resolution. Do not run refill research against an implicit
140
+ or guessed workspace.
100
141
 
101
142
  Treat "refill senders", "fill senders", "load everyone up", and "max out
102
143
  senders" as sender-scoped requests. The target set is senders enrolled in active
@@ -111,19 +152,23 @@ explicitly stops/statuses the run, or a concrete non-scheduler blocker appears.
111
152
  Do not call the goal complete or blocked only because the current state is
112
153
  `awaiting_scheduler_after_ready_buffer`; treat it as loaded, awaiting scheduler.
113
154
 
114
- Load the internal workflow prompt before taking any operational step:
155
+ Load the internal workflow prompt and deterministic flow asset before taking
156
+ any operational step:
115
157
 
116
158
  ```text
117
159
  get_subskill_prompt({ subskillName: "refill-sends-workflow" })
160
+ get_subskill_asset({ subskillName: "refill-sends-workflow", assetPath: "core/flow.v1.json" })
118
161
  ```
119
162
 
120
- Then follow that workflow exactly. The default path is read-only research:
121
- compute the refill target plan first, resolve the route, identify the
122
- sender-relevant campaign that most recently had scheduler-owned sends, read
123
- refill state for that target, report the next safe step using campaign names
124
- first, and stop before mutation unless the user has explicitly approved the
125
- exact workspace, campaign/table/source ids, caps/dates, approval mode, expected
126
- side effects, and stop/rollback condition.
163
+ Continue both loads until `hasMore:false`; parse the flow JSON and verify
164
+ `workflow:"refill-sends-workflow"` with a `v1` version. Then follow that
165
+ workflow exactly. The default path is read-only research: compute the refill
166
+ target plan first, resolve the route, identify the sender-relevant campaign
167
+ that most recently had scheduler-owned sends, read refill state for that target,
168
+ report the next safe step using campaign names first, and stop before mutation
169
+ unless the user has explicitly approved the exact workspace,
170
+ campaign/table/source ids, caps/dates, approval mode, expected side effects,
171
+ and stop/rollback condition.
127
172
 
128
173
  Immediately after loading the internal workflow, call
129
174
  `get_refill_target_plan`. The target plan is the canonical first fact receipt:
@@ -131,18 +176,21 @@ eligible senders, selected sender-local days, gross target, actual sent
131
176
  coverage, scheduler-owned scheduled coverage across active enrolled campaigns,
132
177
  projected coverage (`sent + scheduled`), inferred per-sender send lane/action
133
178
  selections, ready buffer, remaining projected gap, paid-InMail credit/threshold
134
- feasibility, `targetShapeRevision`, and `stateRevision`. Refill target lanes
135
- are only connection invites (`send_invite`) or paid InMails
136
- (`send_inmail_closed`), chosen per sender from the most recent current
137
- dashboard-active campaign-backed send evidence. DMs (`send_dm`) and
138
- open-profile InMails (`send_inmail_open`) may exist in sequences, but they are
139
- not refill horizon target capacity and must not be counted as refill sent,
140
- scheduled, or ready coverage. When `actionTypes` are omitted, trust the target
141
- plan's inferred connection-or-paid-InMail lane rather than asking which of those
142
- two lanes to fill. If a stale target plan selects `send_dm` or
143
- `send_inmail_open`, stop and re-plan with the current planner before mutation.
144
- Short form: trust the target plan's inferred lane only when it is a
145
- connection-invite or paid-InMail refill lane.
179
+ feasibility, `targetShapeRevision`, and `stateRevision`. Refill target lanes are
180
+ connection invites (`send_invite`), standalone paid InMails
181
+ (`send_inmail_closed`), or unified Sales Nav cascades represented publicly as
182
+ `send_inmail_closed` with `campaignClassification:"sales_nav_cascade"`. For a
183
+ Sales Nav cascade, refill the selected campaign first; its sequence can route
184
+ prospects to Open InMail, paid InMail while fresh credits are >= 5, or
185
+ same-campaign connection fallback without asking for separate open/paid/
186
+ connection campaigns. DMs (`send_dm`) are follow-up actions, not refill horizon
187
+ target capacity, and must not be counted as refill sent, scheduled, or ready
188
+ coverage. When `actionTypes` are omitted, trust the target plan's inferred lane
189
+ rather than asking which campaign class to fill. If a stale target plan selects
190
+ `send_dm` or `send_inmail_open` as the lane, stop and re-plan with the current
191
+ planner before mutation.
192
+ Short form: trust the target plan's inferred lane when it is a connection invite,
193
+ paid-InMail refill lane, or unified Sales Nav cascade.
146
194
 
147
195
  Structured planner packet:
148
196
 
@@ -156,19 +204,43 @@ Structured planner packet:
156
204
  `Still need`.
157
205
  - `target.globalActionQueue` is the only cross-sender yolo execution queue.
158
206
  Execute exactly one globally ranked primitive from
159
- `target.globalActionQueue[0]`, then rerun `get_refill_target_plan` before
207
+ `target.globalActionQueue[0]`, then rerun `get_refill_target_plan` with the
208
+ same `workspaceId` before
160
209
  choosing another action.
161
210
  - `manualAlternates` are not yolo actions. Threshold lowering and campaign
162
211
  creation are manual continuations only.
163
212
 
213
+ Refill action ladder: approve generated rows only when an explicit bounded
214
+ approval gate exists, process all existing same-campaign unenriched/unprepared
215
+ rows in bounded batches before any source work, then copy bounded net-new rows
216
+ from the selected source (`selectedLeadListId`, provider, and source
217
+ fingerprint preserved), then use provider-aligned source-more. A new source or
218
+ provider switch changes the reply-rate baseline and is a manual alternate, not a
219
+ `--yolo` side effect.
220
+
164
221
  Run-local paid-credit guard: in `--yolo`, the `refill_sends` MCP command
165
222
  automatically maintains a `refreshedPaidInmailSenderIds` set for the current
166
223
  command call. If its first target plan has stale/missing paid-InMail credit
167
224
  facts, it refreshes each selected sender at most once, reruns
168
225
  `get_refill_target_plan`, and returns the post-refresh `targetPlan` before
169
- choosing the next prep/approval/start action. If fresh facts are still below
226
+ choosing the next prep/source-copy/bounded-approval/read-only wait action. If fresh facts are still below
170
227
  threshold, below-threshold paid-InMail facts fall back to an existing connection
171
- lane or a manual continuation.
228
+ lane, the same Sales Nav cascade campaign's connection branch, or a manual
229
+ continuation.
230
+
231
+ Freshness gate precedes scheduler wait: if any selected
232
+ `target.senderRefillPlans[].paidInmail.status` is `missing_credit_facts` or
233
+ `stale_credit_facts`, or the target plan contains a
234
+ `refresh_paid_inmail_credits` candidate, do not enter `wait_for_scheduler` even
235
+ when `remainingReadyOrProjectedGap:0`. Refresh the exact selected sender credit
236
+ facts once, rerun `get_refill_target_plan`, and only then decide whether
237
+ scheduler wait is the next safe action. If facts remain missing/stale after the
238
+ single refresh attempt, stop with a paid-InMail freshness blocker instead of
239
+ waiting on scheduler pickup.
240
+ The standalone MCP refresh surface is the scoped route
241
+ `/api/v3/mcp/senders/:senderId/refresh-inmail-credits` with explicit
242
+ `workspaceId`; do not use active-workspace mutation as the automation control
243
+ path.
172
244
 
173
245
  Compact refill lessons: sender-level target plan is final truth; trust
174
246
  `schedulerGate.sendable` and scheduler gate blockers, not raw
@@ -186,8 +258,9 @@ will try to place and does not import, approve, schedule, refresh credits, or
186
258
  mutate.
187
259
  If the target plan is complete by projected coverage, report that the selected
188
260
  target is already filled and no-op without asking for approval. If the ready
189
- buffer covers the projected gap but scheduled coverage is still short, keep the
190
- run open in a persistent read-only scheduler wait loop. Poll
261
+ buffer covers the projected gap, paid InMail credit facts are fresh for every
262
+ selected paid-InMail lane, but scheduled coverage is still short, keep the run
263
+ open in a persistent read-only scheduler wait loop. Poll
191
264
  `get_refill_target_plan` every 60-120 seconds, or on the host's next continuation
192
265
  interval, until projected coverage fills the target, a concrete non-scheduler
193
266
  blocker appears, or Christian explicitly asks to stop or only receive a status
@@ -201,8 +274,8 @@ post-refresh `targetPlan`. Trust `refill_sends.autoPaidInmailRefresh`: it should
201
274
  show the exact sender ids refreshed once, sender-credit-cache write receipts,
202
275
  and a returned post-refresh `targetPlan`. Continue from that post-refresh packet.
203
276
  If paid InMail is below threshold after the fresh credit read, report the exact
204
- campaign/table/column threshold action or connection fallback; `--yolo` does not
205
- lower paid-InMail thresholds or create campaigns.
277
+ campaign/table/column threshold action or same-campaign connection fallback;
278
+ `--yolo` does not lower paid-InMail thresholds or create campaigns.
206
279
 
207
280
  If the plain route's managed waterfall targets are stale, for example skipped
208
281
  targets show archived/completed shared slots or the returned targets do not cover
@@ -232,7 +305,7 @@ If Christian includes `--yolo` in the same refill request, treat that flag as
232
305
  auto-accept for the rendered bounded refill packet after the required fresh state
233
306
  reread. For sender-scoped language with no named senders, `--yolo` means all
234
307
  eligible healthy senders enrolled in active campaign-backed sequence campaigns in
235
- the active workspace. Without `--yolo`, if Christian did not name senders, ask
308
+ the requested `workspaceId`. Without `--yolo`, if Christian did not name senders, ask
236
309
  which eligible enrolled senders to refill before choosing campaigns or mutating.
237
310
 
238
311
  `--yolo` only covers the exact sender set, per-sender target campaigns, caps,
@@ -254,7 +327,7 @@ they change `stateRevision`, not `targetShapeRevision`, and do not require a
254
327
  second approval.
255
328
 
256
329
  In `--yolo`, continue as far as the rendered packet safely allows. After each
257
- apply/prep/start result, reread state, settle processing when needed, and move to
330
+ apply/prep/source-copy/bounded-approval/read-only wait result, reread state, settle processing when needed, and move to
258
331
  the next selected sender or start-eligible same-packet campaign instead of
259
332
  stopping after the first partial result. If no in-packet safe action remains,
260
333
  return concrete continuation options with campaign names, exact ids, which option
@@ -268,7 +341,7 @@ selected sender: selected send days, gross capacity, actual sent cells, future
268
341
  scheduler-owned scheduled cells with non-null `scheduledFor`, projected count,
269
342
  ready-to-schedule buffer, remaining projected gap, paid-InMail feasibility,
270
343
  `targetShapeRevision`, `stateRevision`, and the next MCP primitive that can
271
- reduce the gap. After every apply/prep/start result, wait for processing, reread
344
+ reduce the gap. After every apply/prep/source-copy/bounded-approval/read-only wait result, wait for processing, reread
272
345
  the target plan/refill state, recompute the ledger, then keep applying safe
273
346
  bounded actions until projected coverage fills the target window or a concrete
274
347
  non-scheduler blocker is proven.