@sellable/mcp 0.1.600-phase106.20260717023848 → 0.1.600

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.
@@ -1475,16 +1475,30 @@ async function advanceBackToPlan(input, deps, ctx, runStateUpdates = {}) {
1475
1475
  async function verifyPrepareAction(input, deps, ctx, action, budgets) {
1476
1476
  const getStatus = deps.executors.getPrepareCampaignMessagesStatus;
1477
1477
  const jobId = activeJobIdFromOutcome(ctx.runState.lastOutcome);
1478
- if (!getStatus || !jobId) {
1478
+ if (!getStatus) {
1479
1479
  return {
1480
1480
  status: "in_progress",
1481
1481
  runId: ctx.runId,
1482
1482
  fence: ctx.fence,
1483
1483
  gate: ctx.gate,
1484
- guidance: "Preparation dispatch has no status hook or job id yet; re-invoke with the same handle after the job appears in the run record.",
1484
+ guidance: "Preparation dispatch has no status hook; re-invoke with the same handle.",
1485
1485
  journalPath: ctx.journalPath,
1486
1486
  };
1487
1487
  }
1488
+ if (!jobId) {
1489
+ // A resumed run whose record no longer carries the dispatched job id
1490
+ // can never verify this checkpoint — the in_progress handle recycled
1491
+ // forever (run cmro3nuqg: gateSeq 48 unchanged across fences 76-79
1492
+ // while the prep job itself had long succeeded). Replanning is
1493
+ // read-only safe: the fresh census reflects whatever the job did, and
1494
+ // the prep service's requestHash continuity prevents re-dispatching
1495
+ // the same cohort.
1496
+ return advanceBackToPlan(input, deps, ctx, {
1497
+ progress: mergeProgress(ctx, {
1498
+ prepVerifyMissingJobIdAt: (deps.now?.() ?? new Date()).toISOString(),
1499
+ }),
1500
+ });
1501
+ }
1488
1502
  const expectedHash = expectedPrepareRequestHash(deps, action);
1489
1503
  const tableId = stringValue(actionToolInput(action).tableId) ?? undefined;
1490
1504
  const campaignId = actionCampaignId(action) ?? undefined;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sellable/mcp",
3
- "version": "0.1.600-phase106.20260717023848",
3
+ "version": "0.1.600",
4
4
  "type": "module",
5
5
  "description": "Sellable MCP server for Claude Code, Codex, and Hermes campaign workflows",
6
6
  "main": "dist/index.js",