@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.
package/bin/sellable-install.mjs
CHANGED
|
@@ -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.
|
|
2003
|
-
3.
|
|
2004
|
-
4.
|
|
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
|
-
|
|
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
|
@@ -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
|
|
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
|
|
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
|
|
1606
|
-
`attach_recommended_sequence` would have selected.
|
|
1607
|
-
|
|
1608
|
-
the current lane packet explicitly allowed sequence
|
|
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
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
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
|
-
|
|
98
|
-
|
|
99
|
-
|
|
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
|
|
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
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
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
|
-
|
|
136
|
-
(`send_inmail_closed`),
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
`
|
|
144
|
-
|
|
145
|
-
|
|
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`
|
|
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/
|
|
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
|
|
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
|
|
190
|
-
|
|
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;
|
|
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
|
|
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/
|
|
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/
|
|
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.
|