experimentTmux() materialises the queue from df only when queue_path does not yet exist; an existing queue is authoritative, so a resumed run keeps its DONE/RUNNING state instead of restarting finished work. That rule is right, but it used to be applied silently: a caller who had carefully rebuilt df – new scenarios added, finished ones dropped – would watch the previous queue run instead, with nothing to distinguish that from success. The only way to act on the new df was to notice, and delete or rename the file.

This keeps the rule and makes it visible, and adds the middle option that was missing: take the existing queue and the rows df adds.

Rows are compared on the non-meta_cols, non-list columns – the scenario fields. List columns (.modules, .times) are payload, not identity.

tmuxReconcileQueueWithDF(
  df,
  queue_path,
  onExistingQueue = c("resume", "append", "rebuild")
)

Arguments

df

data.frame of runs, as passed to experimentTmux().

queue_path

Character path to the queue .rds.

onExistingQueue

What to do when queue_path already exists:

  • "resume" (default) – keep the existing queue; warn if df holds rows it does not, naming them and saying how to act on them;

  • "append" – add those rows as PENDING, leaving existing rows and their status untouched;

  • "rebuild" – discard the existing queue and start again from df.

Value

Invisibly, queue_path.