From 83cf0f280c8791a714fb5592d5db83405648ebde Mon Sep 17 00:00:00 2001 From: swackhamer Date: Mon, 10 Aug 2026 13:55:33 -0500 Subject: [PATCH 1/3] fix(djvu): wire 1 missing tags (via gpt-5.6-sol) Format: DJVU Tag: DjVu:Note Sample: /tmp/oxidex-exiftool-cache/combined-samples/DjVu.djvu Exiftool-Value: 'Must escape double quotes (") and backslashes (\\)' Oxidex-Value: 'Must escape double quotes (") and backslashes (\\)' Verified: recheck-pass gaps=1->0 Worker: tail-9 --- src/parsers/image/djvu.rs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/parsers/image/djvu.rs b/src/parsers/image/djvu.rs index 9e514f01d..613cf903d 100644 --- a/src/parsers/image/djvu.rs +++ b/src/parsers/image/djvu.rs @@ -177,7 +177,11 @@ fn metadata_from_expression(expression: Expression, metadata: &mut MetadataMap) "DjVu:Trapped".to_string(), TagValue::new_string(value.trim_start_matches('/').to_string()), ), - "note" | "Subject" | "Keywords" | "Creator" | "Producer" => { + "note" => metadata.insert( + "DjVu:Note".to_string(), + TagValue::new_string(value.clone()), + ), + "Subject" | "Keywords" | "Creator" | "Producer" => { metadata.insert(format!("DjVu:{name}"), TagValue::new_string(value.clone())) } _ => None, From 5315ffd6fe3f1c907f4facddf56e5e509286fe0f Mon Sep 17 00:00:00 2001 From: swackhamer Date: Mon, 10 Aug 2026 17:05:11 -0500 Subject: [PATCH 2/3] fix(ape): wire 1 missing tags (via gpt-5.6-sol) Format: APE Tag: Composite:Duration Sample: /tmp/oxidex-exiftool-cache/combined-samples/APE.ape Exiftool-Value: '2.64 s' Oxidex-Value: '2.64 s' Perl-Ref: APE.pm Verified: recheck-pass gaps=1->0 Worker: tail-5 --- src/parsers/audio/ape.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/parsers/audio/ape.rs b/src/parsers/audio/ape.rs index d7f81fef7..0e4bcda0c 100644 --- a/src/parsers/audio/ape.rs +++ b/src/parsers/audio/ape.rs @@ -182,7 +182,7 @@ fn parse_mac_audio_header( let samples = u64::from(total_frames - 1) * u64::from(blocks_per_frame) + u64::from(final_frame_blocks); metadata.insert( - "APE:Duration".to_string(), + "Composite:Duration".to_string(), TagValue::new_string(convert_duration(samples as f64 / f64::from(sample_rate))), ); } @@ -429,6 +429,7 @@ mod tests { metadata.get("APE:SampleRate").unwrap().as_integer(), Some(44100) ); + assert_eq!(text(&metadata, "Composite:Duration"), "2.64 s"); } #[test] From bf5ca1a8e6fc7a5f1b9dc2dc63d75f4378bc13db Mon Sep 17 00:00:00 2001 From: swackhamer Date: Mon, 10 Aug 2026 19:42:51 -0500 Subject: [PATCH 3/3] style: cargo fmt --all (sweep publish) Worker-authored Rust reaches this branch semantically validated but never style-checked: validate_fix_commit.py, the per-commit merger check and the post-merge recheck all assert behaviour (gap deltas, no duplicate emissions, no unexplained oxidex-only keys) and none of them look at formatting. CI's "Lint & Audit" job runs `cargo fmt --all -- --check`, so an unformatted sweep branch fails CI by construction. Measured on PR #124 (branch sweep/tags-2026-07-26-1, the first sweep PR ever opened): CI run 30186389305 -- "Build & Test" success, "Lint & Audit" failure, and the failing step is literally `Run cargo fmt --all -- --check`. Kept as a separate commit so the tag-fix diffs stay readable. --- src/parsers/image/djvu.rs | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/parsers/image/djvu.rs b/src/parsers/image/djvu.rs index 613cf903d..216895601 100644 --- a/src/parsers/image/djvu.rs +++ b/src/parsers/image/djvu.rs @@ -177,10 +177,7 @@ fn metadata_from_expression(expression: Expression, metadata: &mut MetadataMap) "DjVu:Trapped".to_string(), TagValue::new_string(value.trim_start_matches('/').to_string()), ), - "note" => metadata.insert( - "DjVu:Note".to_string(), - TagValue::new_string(value.clone()), - ), + "note" => metadata.insert("DjVu:Note".to_string(), TagValue::new_string(value.clone())), "Subject" | "Keywords" | "Creator" | "Producer" => { metadata.insert(format!("DjVu:{name}"), TagValue::new_string(value.clone())) }