Skip to content

🚑 fix: transcript: a dry run under a busy run ID says busy, as the call does - #426

Merged
pascalandy merged 1 commit into
mainfrom
fix/xt-102-t1-dry-run-lock
Nov 2, 2026
Merged

pascalandy merged 1 commit into
mainfrom
fix/xt-102-t1-dry-run-lock

Conversation

@pascalandy

@pascalandy pascalandy commented Nov 2, 2026 •

Copy link
Copy Markdown
Owner

While another call ran a transcript, its dry run under the same --run-id did not say "busy". It read the record without the lock and answered RESUME_UNSAFE (exit 1), or planned and started uv. The call itself answers TEMPORARY (exit 75), so an agent read the dry run as "never repeat" when it only had to wait.

The dry run now probes the run lock first, as the agent extension does. A busy run answers TEMPORARY with exit 75, run_id, and the hint ncly run view <id>, and starts no program. The probe creates no lock file and keeps no lock, and the dry run still writes no record. Card XT-102-T1, the last todo card of XT-102, so XT-102 is Shipped and leaves the queue.

Proof: the new steps of transcript_contenders.txtar failed before the fix (RESUME_UNSAFE, exit 1, while a real call held b1) and pass after; just check exit 0; verify-nicely by another agent passed.

Evidence of verify-nicely (run 20261101-192614-378169, paths shortened):

$ ncly transcript run youtube --url https://www.youtube.com/watch\?v=EIEc43CxIvY --output <run>/scratch/home/videos --run-id v1 --dry-run --json
{"ok":true,"contract_version":1,"dry_run":true,...,"steps":[{"id":"transcribe","action":"run"}],...}
--- exit 0
(after it: no runs/v1.lock, no runs/v1.json)

(flock <run>/scratch/home/.local/state/nicely/runs/v2.lock sleep 60 &)
$ ncly transcript run youtube --url https://www.youtube.com/watch\?v=EIEc43CxIvY --output <run>/scratch/home/videos --run-id v2 --dry-run --json
--- stderr
{"ok":false,"contract_version":1,"run_id":"v2","errors":[{"code":"TEMPORARY","message":"Another process runs v2 now.","hint":"ncly run view v2","next":["ncly","run","view","v2"]}]}
--- exit 75
(a ps poller saw no uv and no Python during this call; it saw both during the free dry runs)

(after the holder ended)
$ ncly transcript run youtube ... --run-id v2 --dry-run --json
{"ok":true,"contract_version":1,"dry_run":true,...}
--- exit 0

Reviewed with codex-loop: 1 round with gpt-6.1-sol. Sol verdict: approved

Created with Claude Opus 5.5 in Claude Code.

@coderabbitai

coderabbitai Bot commented Nov 2, 2026 •

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

Run configuration
  • Source mode: Auto
  • Repository: Unavailable
  • Branch: Unavailable
  • File: No configuration file from this repository applied
  • Commit: Unavailable
  • Layers: Repository UI
  • Review profile: ASSERTIVE
  • Plan: Advanced
  • Run ID: db6f0806-f374-445c-bd9b-de413739d28b

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • Trigger review
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

A transcript dry run read the record of its run ID without the lock
probe. While another call held the run, the dry run answered
RESUME_UNSAFE with exit 1, or planned and started uv, where execution
answers TEMPORARY with exit 75.

The dry run now probes the run lock first, as the agent extension
does. The probe creates no lock file and keeps no lock. The contenders
scenario proves both answers while a real call holds the run.

XT-102-T1 is done, so XT-102 is Shipped and leaves the queue.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@pascalandy
pascalandy force-pushed the fix/xt-102-t1-dry-run-lock branch from edb249e to 6437f8e Compare November 2, 2026 02:00
@pascalandy
pascalandy merged commit 6437f8e into main Nov 2, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant