@sellable/mcp 0.1.419 → 0.1.421
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.
|
@@ -6,7 +6,7 @@ async function postSetupEvergreenCampaigns(body) {
|
|
|
6
6
|
export const setupEvergreenCampaignsToolDefinitions = [
|
|
7
7
|
{
|
|
8
8
|
name: "setup_evergreen_campaigns",
|
|
9
|
-
description: "Evergreen campaign setup plan/verify command. Use plan mode first to inspect exact workspace/sender/campaign/table/source state and receive immutable lane packets. `selectedSenderIds` is a legacy shorthand for both scopes; prefer `postEngagerSenderIds` for the Post Engagers sender scope and `sharedSenderIds` for the shared lane sender scope when they differ. If a protected existing Post Engagers campaign must stay unchanged and the operator requested only shared lane execution, pass postEngagerSenderIds:[] and sharedSenderIds; do not include the protected active Post Engagers lane as a reuse packet because it can make the yolo plan non-autoExecutable. The command plans one Post Engagers lane per post-engager sender plus shared Signal Discovery and Shared Cold Fallback lanes for the shared sender set. yolo is only a parent-skill auto-execution hint for safe lane packets; pass yolo only in plan mode and never include yolo on mode:\"verify\" calls. This backend command remains read-only in plan mode and verifies receipts in verify mode. Package-backed prompt authority: the installed public wrapper can be the local Codex skill entrypoint, but lane workers must use get_subskill_prompt and get_subskill_asset for nested `$sellable:create-campaign`, create-campaign-v2, generate-messages, validation, and assets; nested filesystem prompt fallback is a failed UAT. Use mcp__sellable only for workspace selection and product mutations/readbacks. Do not use mcp__sellable_admin, direct DB, Prisma, SQL, built-in web search, browser search, web.run, or any external browsing/search tool as execution or research proof; if Sellable MCP research tools are insufficient, write a blocked receipt instead of browsing externally. Worker-local replans are read-only drift checks and must preserve the exact parent sender scopes, including postEngagerSenderIds:[] when intentionally empty and the exact sharedSenderIds array; if scope, planRevision, actionId, or laneKey drifts, stop with blocked:worker_plan_scope_drift before mutation. Each lane packet includes workerDispatch with acceptedRuntimes, rejectedRuntimes, requiresVisibleThreadOrDurableReceipt, receiptArtifactHint, receiptRunId, and receiptMustBeWrittenAfter; pre-existing receipts at old deterministic paths are stale and must not be used, so stop with blocked:stale_receipt_artifact if the receipt was not freshly written for the current receiptRunId. `multi_agent_v1.spawn_agent`/opaque spawn_agent is not accepted for mutating command proof unless the parent has visible thread or durable receipt proof. In local Codex, prefer `codex_app.list_projects` then `codex_app.create_thread` with a local project target; do not create a worktree for lane execution. If Codex app thread tools are unavailable but local Codex CLI is available, use durable streaming workers with `codex -a never -s danger-full-access exec -C <repo> -o <worker-final-file> -`; approval and sandbox flags must appear before `exec`, and current customer CLI installs reject `codex exec --ask-for-approval never` and `codex exec -a never`. When safe-yolo needs normal setup work, the parent skill may ask for bounded delegated approval: one approval over the current planRevision, selected action ids, caps, allowed side-effect classes, and stop conditions lets lane workers execute without per-substep approval while staying inside that packet. In exec/automation mode, do not call request_user_input; if yolo plan autoExecutable:false and no interactive approval can be received, stop with blocked:bounded_approval_unavailable_in_exec_mode before any mutation. Lane workers must explicitly load and use the installed `$sellable:create-campaign` wrapper as the nested workflow entrypoint, then load `create-campaign-v2` and `create-campaign-v2/core/flow.v2.json`; they must execute creation, source import, create-campaign workflow steps, generate-messages, sequence attachment, pause_campaign review-state transition when the current table is still DRAFT, and review readiness through that existing create-campaign workflow/subskills, then return receipts here for verification. Customer-visible verify receipts must set status:'succeeded' or status:'completed'; status:'passed', status:'pass', and status:'passed_with_warnings' are rejected as primary success statuses. Receipts must include createCampaignStepReceipt with setupPlanCall, createCampaignWorkflowReceipt, campaignBriefReceipt, sourceDecisionReceipt, filterDecisionReceipt, messageDraftingReceipt, reviewBatchReceipt, sequenceReceipt, and verifyCall nested inside createCampaignStepReceipt; top-level-only copies of those objects are not enough and are not promoted by verify. setupPlanCall must use canonical keys: planRevision, actionId, laneKey, workspaceId, senderIds, campaignId, tableId, createIntent. Do not use laneActionId, lanePacketActionId, delegatedPlanRevision, delegatedActionId, or requestedCall text as a substitute for those canonical fields. createCampaignWorkflowReceipt must include skillCommand:'$sellable:create-campaign', skillName:'create-campaign', wrapperSkillLoaded:true, workflowPromptName:'create-campaign-v2', workflowPromptLoadedToHasMoreFalse:true, workflowAssetPath:'create-campaign-v2/core/flow.v2.json', workflowAssetLoaded:true, workerRuntime, workerThreadId or receiptArtifactPath, durableReceiptWritten when using a receipt file, and notAdHoc:true. messageDraftingReceipt must use exactly statusSource:'branch' or statusSource:'packaged-generate-messages-worker'; descriptive aliases such as statusSource:'package-readback-local-thread' are rejected. It must include proof that generate-messages was loaded, start_campaign_message_preparation/get_campaign_message_preparation_status ran when the packaged worker path is used, validationResult:'passed', a passed qualityReview, and at least 3 concrete sampleMessages with rowId, generatedMessageText, verdict, and issues; Do not substitute `message` for `generatedMessageText`; Do not substitute `passVerdict` for `verdict`. Before writing durable receipts, run a receipt self-check: top-level `planRevision`, `actionId`, `laneKey`, `laneType`, `workspaceId`, and `senderIds` must exist; if the self-check fails, fix the receipt before ending. Use start_campaign_message_preparation with approvalMode:\"mark_ready\" only for evergreen setup. Never call `start_campaign_message_preparation` with `approvalMode:\"approve\"`; approve exactly one semantic Approved cell through select_campaign_cells/update_cell and final proof must show approvedGeneratedMessageCount exactly 1. Shared Cold Fallback samples with a standalone name followed by 'Hey there' are rejected. This command does not launch campaigns, does not schedule sends, does not assign scheduler-owned send fields, does not raw-write campaign status, does not archive/delete cleanup targets, and does not spend paid credits.",
|
|
9
|
+
description: "Evergreen campaign setup plan/verify command. Use plan mode first to inspect exact workspace/sender/campaign/table/source state and receive immutable lane packets. `selectedSenderIds` is a legacy shorthand for both scopes; prefer `postEngagerSenderIds` for the Post Engagers sender scope and `sharedSenderIds` for the shared lane sender scope when they differ. If a protected existing Post Engagers campaign must stay unchanged and the operator requested only shared lane execution, pass postEngagerSenderIds:[] and sharedSenderIds; do not include the protected active Post Engagers lane as a reuse packet because it can make the yolo plan non-autoExecutable. The command plans one Post Engagers lane per post-engager sender plus shared Signal Discovery and Shared Cold Fallback lanes for the shared sender set. yolo is only a parent-skill auto-execution hint for safe lane packets; pass yolo only in plan mode and never include yolo on mode:\"verify\" calls. This backend command remains read-only in plan mode and verifies receipts in verify mode. Package-backed prompt authority: the installed public wrapper can be the local Codex skill entrypoint, but lane workers must use get_subskill_prompt and get_subskill_asset for nested `$sellable:create-campaign`, create-campaign-v2, generate-messages, validation, and assets; nested filesystem prompt fallback is a failed UAT. Use mcp__sellable only for workspace selection and product mutations/readbacks. Do not use mcp__sellable_admin, direct DB, Prisma, SQL, built-in web search, browser search, web.run, or any external browsing/search tool as execution or research proof; if Sellable MCP research tools are insufficient, write a blocked receipt instead of browsing externally. Worker-local replans are read-only drift checks and must preserve the exact parent sender scopes, including postEngagerSenderIds:[] when intentionally empty and the exact sharedSenderIds array; if scope, planRevision, actionId, or laneKey drifts, stop with blocked:worker_plan_scope_drift before mutation. Each lane packet includes workerDispatch with acceptedRuntimes, rejectedRuntimes, requiresVisibleThreadOrDurableReceipt, receiptArtifactHint, receiptRunId, and receiptMustBeWrittenAfter; pre-existing receipts at old deterministic paths are stale and must not be used, so stop with blocked:stale_receipt_artifact if the receipt was not freshly written for the current receiptRunId. `multi_agent_v1.spawn_agent`/opaque spawn_agent is not accepted for mutating command proof unless the parent has visible thread or durable receipt proof. In local Codex, prefer `codex_app.list_projects` then `codex_app.create_thread` with a local project target; do not create a worktree for lane execution. If Codex app thread tools are unavailable but local Codex CLI is available, use durable streaming workers with `codex -a never -s danger-full-access exec -C <repo> -o <worker-final-file> -`; approval and sandbox flags must appear before `exec`, and current customer CLI installs reject `codex exec --ask-for-approval never` and `codex exec -a never`. Plan responses include approvalSummary; render approvalSummary when asking for bounded delegated approval because it explicitly lists campaignsToCreate, campaignsToUpdate, campaignsToVerifyOnly, campaignsLeftUntouched, attachedSenders, selectedActionIds, allowedSideEffects, forbiddenSideEffects, blockers, and approvalQuestion. When safe-yolo needs normal setup work, the parent skill may ask for bounded delegated approval: one approval over the current planRevision, selected action ids, caps, allowed side-effect classes, and stop conditions lets lane workers execute without per-substep approval while staying inside that packet. In exec/automation mode, do not call request_user_input; if yolo plan autoExecutable:false and no interactive approval can be received, stop with blocked:bounded_approval_unavailable_in_exec_mode before any mutation. Lane workers must explicitly load and use the installed `$sellable:create-campaign` wrapper as the nested workflow entrypoint, then load `create-campaign-v2` and `create-campaign-v2/core/flow.v2.json`; they must execute creation, source import, create-campaign workflow steps, generate-messages, sequence attachment, pause_campaign review-state transition when the current table is still DRAFT, and review readiness through that existing create-campaign workflow/subskills, then return receipts here for verification. Customer-visible verify receipts must set status:'succeeded' or status:'completed'; status:'passed', status:'pass', and status:'passed_with_warnings' are rejected as primary success statuses. Receipts must include createCampaignStepReceipt with setupPlanCall, createCampaignWorkflowReceipt, campaignBriefReceipt, sourceDecisionReceipt, filterDecisionReceipt, messageDraftingReceipt, reviewBatchReceipt, sequenceReceipt, and verifyCall nested inside createCampaignStepReceipt; top-level-only copies of those objects are not enough and are not promoted by verify. setupPlanCall must use canonical keys: planRevision, actionId, laneKey, workspaceId, senderIds, campaignId, tableId, createIntent. Do not use laneActionId, lanePacketActionId, delegatedPlanRevision, delegatedActionId, or requestedCall text as a substitute for those canonical fields. createCampaignWorkflowReceipt must include skillCommand:'$sellable:create-campaign', skillName:'create-campaign', wrapperSkillLoaded:true, workflowPromptName:'create-campaign-v2', workflowPromptLoadedToHasMoreFalse:true, workflowAssetPath:'create-campaign-v2/core/flow.v2.json', workflowAssetLoaded:true, workerRuntime, workerThreadId or receiptArtifactPath, durableReceiptWritten when using a receipt file, and notAdHoc:true. messageDraftingReceipt must use exactly statusSource:'branch' or statusSource:'packaged-generate-messages-worker'; descriptive aliases such as statusSource:'package-readback-local-thread' are rejected. It must include proof that generate-messages was loaded, start_campaign_message_preparation/get_campaign_message_preparation_status ran when the packaged worker path is used, validationResult:'passed', a passed qualityReview, and at least 3 concrete sampleMessages with rowId, generatedMessageText, verdict, and issues; Do not substitute `message` for `generatedMessageText`; Do not substitute `passVerdict` for `verdict`. Before writing durable receipts, run a receipt self-check: top-level `planRevision`, `actionId`, `laneKey`, `laneType`, `workspaceId`, and `senderIds` must exist; if the self-check fails, fix the receipt before ending. Use start_campaign_message_preparation with approvalMode:\"mark_ready\" only for evergreen setup. Never call `start_campaign_message_preparation` with `approvalMode:\"approve\"`; approve exactly one semantic Approved cell through select_campaign_cells/update_cell and final proof must show approvedGeneratedMessageCount exactly 1. Shared Cold Fallback samples with a standalone name followed by 'Hey there' are rejected. This command does not launch campaigns, does not schedule sends, does not assign scheduler-owned send fields, does not raw-write campaign status, does not archive/delete cleanup targets, and does not spend paid credits.",
|
|
10
10
|
inputSchema: {
|
|
11
11
|
type: "object",
|
|
12
12
|
properties: {
|
package/package.json
CHANGED
|
@@ -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
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
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`.
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
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
|
|
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
|