fix(media-apply): refuse a plan row whose verb the tool does not know
read_plan's if/elif chain had no else, so any row that was not mkdir, keep or move was dropped in silence. A plan of nothing but typos therefore applied as a successful no-op: on 2026-11-02 a pass meant to rename two TVShows series folders reported "applied: 0 moved" and exit 0, and the journal was never written — nothing told the operator the plan had never been read. An unread row is a plan bug, and every other plan bug in this tool refuses before the first rename, so now this one does too, naming the line and the verb. cwd: /home/blank/.omp/wt/wt-20261030-163847-6d1fc1f · session: 01a18f2e-18b1-7573-bcd5-ac99636f8bcb
This commit is contained in:
1 parent
4a33898a6c
commit
a405c5ed35
3 files changed
+49
-5
No files matched your search
@@ -460,6 +460,39 @@ print(sum(1 for l in open(sys.argv[1]) if json.loads(l).get("op") == "move"))' "
|
||||
[ -e "$LIB/Alien (1979)/Alien.1979.1080p.BluRay.x265.10bit.mkv" ]
|
||||
}
|
||||
|
||||
# A hand-written plan row whose verb is not in the executor's vocabulary used
|
||||
# to be dropped in silence: read_plan's if/elif chain had no else, so a plan of
|
||||
# nothing but typos applied as a successful no-op (hit for real on 2026-11-02,
|
||||
# when a pass meant to rename two series folders reported "applied: 0 moved"
|
||||
# and exit 0). An unread row is a plan bug, and a plan bug refuses.
|
||||
@test "a plan row with a verb this tool does not know stops the whole run" {
|
||||
plan
|
||||
JOURNAL="$BATS_TEST_TMPDIR/journal.jsonl"
|
||||
at "$LIB/Stray/Stray.S01E01.mkv" 4000
|
||||
printf 'rename\t%s\t%s\tfile\n' \
|
||||
"$LIB/Stray/Stray.S01E01.mkv" "$LIB/Stray/Stray - S01E01.mkv" >> "$OUT"
|
||||
run python3 "$APPLY" apply --plan "$OUT" --root "$LIB" --journal "$JOURNAL" --apply
|
||||
[ "$status" -ne 0 ]
|
||||
[[ "$output" == *"rename"* ]]
|
||||
# all-or-nothing: the rows this tool DOES understand did not run either
|
||||
[ -e "$LIB/Stray/Stray.S01E01.mkv" ]
|
||||
[ ! -e "$JOURNAL" ]
|
||||
}
|
||||
|
||||
@test "a plan whose every row is an unknown verb refuses instead of reporting success" {
|
||||
JOURNAL="$BATS_TEST_TMPDIR/journal.jsonl"
|
||||
at "$LIB/Stray/Stray.S01E01.mkv" 4000
|
||||
{ printf 'action\tsrc\tdst\tkind\n'
|
||||
printf 'rename\t%s\t%s\tfile\n' \
|
||||
"$LIB/Stray/Stray.S01E01.mkv" "$LIB/Stray/Stray - S01E01.mkv"
|
||||
} > "$BATS_TEST_TMPDIR/typo.tsv"
|
||||
run python3 "$APPLY" apply --plan "$BATS_TEST_TMPDIR/typo.tsv" --root "$LIB" --journal "$JOURNAL" --apply
|
||||
[ "$status" -ne 0 ]
|
||||
[[ "$output" == *"unknown action"* ]]
|
||||
[[ "$output" != *"applied"* ]]
|
||||
[ -e "$LIB/Stray/Stray.S01E01.mkv" ]
|
||||
}
|
||||
|
||||
@test "a run interrupted between the journal write and the move finishes the job" {
|
||||
plan
|
||||
JOURNAL="$BATS_TEST_TMPDIR/journal.jsonl"
|
||||
|
||||
Reference in new issue
Block a user