Repository navigation
Closed
Labels
handoffA link in the session handoff chain, one open issue per trackA link in the session handoff chain, one open issue per track
Description
Next steps, in priority order
- Promote
developtomainwhen the maintainer asks, withdrive-prto a mergeable promotion pull request. Its body carries oneFixesline per issue fixed ondevelopand not onmain: Fail One File Instead of the Whole Run on a Per-File Exception #1069, Count an Orphan Sidecar Deletion as a Success, Not an Error #1070, Stop Setting Verified When the Verify Option Is Off #1071, Replace the Original Only After ReEncode and DeInterlace Fully Succeed #1072, Stop Remux and Lowercase Renames From Overwriting an Existing File #1073, Fail or Report RepairMetadataErrors When Errors Remain After Repair #1074, Re-Run the Full Cleanup After a Re-Encode Repair #1075, Guard ReEncode and DeInterlace Against Repeating on Every Run #1076, Remove Cover Art That Only MediaInfo Reports, and Re-Check the FfProbe Path #1077, Clear BitrateExceeded and Handle Failed Bitrate and Packet Analysis #1078, Decide Whether IsMediaAndToolsCurrent Has the Tool-Change Sense Inverted #1079, Skip Registering Deleted Files in FileIgnoreList #1080, Handle Write Failures for the Settings and Results Files After a Run #1081, Keep the State Set Before a Rename When the New Name Has a Sidecar #1082, Decide How a Signal-Killed Repair Run Affects DeleteInvalidFiles #1095, Enforce a Minimum Version for Every Media Tool Family #1104, Trim the HISTORY Release Entries to the Changes a User Needs #1105, Add a Codecov Coverage Badge to the README Build Status #1106, Split the Remux and Container Steps Diagram into Narrower Charts #1107, Keep a File Found When a Multi-Step Rename Fails Partway #1109, Set FileDeleted When Only the Sidecar Delete Fails in DeleteFailedFile #1116, Harden FileIgnoreList Pruning and Post-Run Write Retry #1120, Consolidate Fake Tool Fixture Setup in FakeTools #1124, Report Every Repair a Track Needs When Its State Holds One #1127, Share One Log Capture Helper Across Test Classes #1129, Filter find_run on Corpus So a Reduced Run Is Not Read as Full-Corpus Ground Truth #1134. Re-derive the set fromorigin/main..origin/developand each pull request'sCloses on promotion:line rather than trusting this list. Done is a promotion pull request meeting every Merge Gate item except the merge permission. - Release 3.23 after the promotion merges, when the maintainer says so, via
merge-and-release.HISTORY.md3.23 is in its release shape. Share One Log Capture Helper Across Test Classes #1129 and Filter find_run on Corpus So a Reduced Run Is Not Read as Full-Corpus Ground Truth #1134 are test and regression tooling only and need no line. - Close this track with
closeonce the release ships, unless new issues have been filed by then. No other work is queued on it.
External blockers
- The promotion merge and the release each need the maintainer's explicit go-ahead, per
merge-and-release. local_review.py recordaccepts a typed findings count with nothing tying it to the reviewer's real report, Bind a Local Review Record to the Reviewer's Actual Report ProjectTemplate#3699. Record a pass only from the reviewer's harness-delivered completion.- The README coverage shield has no fleet spec class yet, Add a Coverage Shield Class for Repositories That Upload Coverage ProjectTemplate#3692.
Internal dependencies
developtakes no merge commits. A promotion is a merge ofdevelopinto a branch offmain, since Dependabot bumps hub workflow pins onmain.- The release follows the promotion merge, since it ships from
main.
State
developis at de6c2a4 (Filter find_run on Corpus So a Reduced Run Is Not Read as Full-Corpus Ground Truth #1135), 21 commits ahead ofmain.mainholds the earlier 3.23 promotion, unreleased.- No feature worktree is registered and no pull request is open. The primary checkout is on
develop, clean, atorigin/develop. Re-read withgit worktree listandgh pr list. - Open issues besides this handoff are the promotion's
Fixesset above and the long-standingexternalissues HandBrake converts all subtitles to ASS vs. passthrough #95, FFmpeg removes IETF language tags #148, HandBrake removes IETF language tags #149. Re-read withgh issue list --limit 200. - Hub issues still open from earlier rounds: Add a Coverage Shield Class for Repositories That Upload Coverage ProjectTemplate#3692 and Bind a Local Review Record to the Reviewer's Actual Report ProjectTemplate#3699.
The parked decision queue
It holds 0 issues. No open issue in this repository carries the decision label.
What the last round did
- Fixed Filter find_run on Corpus So a Reduced Run Is Not Read as Full-Corpus Ground Truth #1134 in Filter find_run on Corpus So a Reduced Run Is Not Read as Full-Corpus Ground Truth #1135, squash-merged into
develop.find_runtakes acorpusargument, defaultfull, and skips a run whosebuildinfo.jsonCorpusdiffers. A run without the field reads as full. - The issue proposed falling back to the
-reduceddirectory suffix for runs withoutCorpus. The local strict pass showed the harness has writtenCorpussince its first commit, the same one that introduced-reduceddirectories. So the fallback is"full", and the suffix check was dropped before the first push. - Copilot recommended approval with no findings, and Qodo found nothing. CodeRabbit raised two test nitpicks with no threads, a second full run to cover newest-run selection and an assertion on the no-match message. Both were fixed, and its review of the fix found nothing actionable.
- No new issues were filed this round.
What not to repeat
- Check the history of a field before writing a back-compat path for it. The suffix fallback the issue proposed covered a run shape the harness never wrote, and cost a fix commit and a second strict pass before the push.
New learnings
- None beyond the entry above.
Metadata
Metadata
Assignees
Labels
handoffA link in the session handoff chain, one open issue per trackA link in the session handoff chain, one open issue per track
Activity
ptr727 commentedon Oct 30, 2026
Parked decision queue, presented at the session close: 1 issue. #1079 was put to the maintainer, who chose to leave it open for now, so it stays in the queue.
ptr727 commentedon Oct 30, 2026
Round 1, closed 2026-10-30: Session Handoff [process-findings]: Fix the Process Command Suspect Branches
Next steps, in priority order
Fix the process-command suspect branches that Add Process Command Logic Diagrams to ARCHITECTURE.md #1083 documented, one issue per pull request into
develop. Highest impact first:VerifiedwithVerifyoff)Done: the fix merges, the matching
ARCHITECTURE.md"Suspect Branches" entry is removed, and the diagram is redrawn to the new behavior in the same pull request.Then work the rest: Count an Orphan Sidecar Deletion as a Success, Not an Error #1070, Stop Remux and Lowercase Renames From Overwriting an Existing File #1073, Fail or Report RepairMetadataErrors When Errors Remain After Repair #1074, Re-Run the Full Cleanup After a Re-Encode Repair #1075, Guard ReEncode and DeInterlace Against Repeating on Every Run #1076, Remove Cover Art That Only MediaInfo Reports, and Re-Check the FfProbe Path #1077, Clear BitrateExceeded and Handle Failed Bitrate and Packet Analysis #1078, Skip Registering Deleted Files in FileIgnoreList #1080, Handle Write Failures for the Settings and Results Files After a Run #1081 and Keep the State Set Before a Rename When the New Name Has a Sidecar #1082.
Answer Decide Whether IsMediaAndToolsCurrent Has the Tool-Change Sense Inverted #1079 (a decision) before touching
SidecarFile.IsMediaAndToolsCurrent().Open a pull request for the pushed
docker-layout-userbranch, a one-lineGOVERNANCE.mdRepository Layout fix left over from Fail Closed When the Nonroot Docker User Does Not Resolve #1067. Done: it merges intodevelop.External blockers
Internal dependencies
ArchitectureDiagramTestsfails when theProcess.ProcessFile()step order or a named method moves without the diagram following, so a fix that reorders or renames a step updatesARCHITECTURE.mdin the same commit.DeleteFailedFile()and the abort path, so do them in one lane or in sequence, not in parallel.ProcessFile.cs, so sequence them as well.State
developholds Add Process Command Logic Diagrams to ARCHITECTURE.md #1083, merged as a39dbf0. Its worktree and branch are cleaned up.docker-layout-user(e78aa9c) is pushed with no PR yet, and its worktree is still registered. Re-read withgit worktree list.develop.developis still waiting for its promotion.The parked decision queue
It holds 1 issue: #1079, which asks whether
IsMediaAndToolsCurrent()inverts theSidecarUpdateOnToolChangesense.What the last round did
ARCHITECTURE.md"Process Command Logic" Mermaid diagrams andArchitectureDiagramTests. The test holds the pipeline step order and the named methods to the code.What not to repeat
ARCHITECTURE.md, or any docs path, to thereleasepaths filter intest-pull-request.yml. That breaks WORKFLOW.md D1.4, and the validate unit-test job already runsdotnet teston every pull request. It was tried in 38fb3e8 and reverted in e304e3c.dotnet testand itsARCHITECTURE.mdcopy. The maintainer chose to keep testing inside the image being built.local_review.pydoes not run from agit archiveexport of the hub'sscripts/, because it imports a sibling module the export lacks. Use a shallow clone of the hub'smain.New learnings
ptr727 commentedon Oct 30, 2026
Parked decision queue, presented at the session close: 1 issue, now 0.
IsMediaAndToolsCurrent()toIsToolsCurrent() || !SidecarUpdateOnToolChange, matchingRead(). Thedecisionlabel is off. It is now an ordinary fix in next step 2, and next step 3 no longer blocks.ptr727 commentedon Oct 30, 2026
Round 2, closed 2026-10-30: Session Handoff [process-findings]: Fix the Process Command Suspect Branches
Next steps, in priority order
Fix the remaining process-command suspect branches, one issue per pull request into
develop. Highest impact first:VerifiedwithVerifyoff)Done: the fix merges, the matching
ARCHITECTURE.md"Suspect Branches" entry is removed, and the diagram is redrawn to the new behavior in the same pull request.Then work the rest: Count an Orphan Sidecar Deletion as a Success, Not an Error #1070, Stop Remux and Lowercase Renames From Overwriting an Existing File #1073, Fail or Report RepairMetadataErrors When Errors Remain After Repair #1074, Re-Run the Full Cleanup After a Re-Encode Repair #1075, Guard ReEncode and DeInterlace Against Repeating on Every Run #1076, Remove Cover Art That Only MediaInfo Reports, and Re-Check the FfProbe Path #1077, Clear BitrateExceeded and Handle Failed Bitrate and Packet Analysis #1078, Skip Registering Deleted Files in FileIgnoreList #1080, Handle Write Failures for the Settings and Results Files After a Run #1081 and Keep the State Set Before a Rename When the New Name Has a Sidecar #1082.
Answer Decide Whether IsMediaAndToolsCurrent Has the Tool-Change Sense Inverted #1079 (a decision) before touching
SidecarFile.IsMediaAndToolsCurrent().External blockers
developneeds the maintainer's explicit go-ahead in the session. The auto mode classifier deniesgh pr mergeuntil then.Internal dependencies
ArchitectureDiagramTestsfails when theProcess.ProcessFile()step order or a named method moves without the diagram following.DeleteFailedFile()from the verify path. Keep Skipped and Cancelled Files Out of DeleteInvalidFiles #1086 changed that method, so read its current guard first.ProcessFile.cs, so sequence them.State
developholds Keep Skipped and Cancelled Files Out of DeleteInvalidFiles #1086 (64ee6c0) and Correct the Docker Layout Entry on the Image User #1087 (16f8ccc). Both worktrees and branches are cleaned up.develop. No other worktree is registered. Re-read withgit worktree list.developis still waiting for its promotion.The parked decision queue
It holds 1 issue: #1079, which asks whether
IsMediaAndToolsCurrent()inverts theSidecarUpdateOnToolChangesense.What the last round did
DeleteFailedFile()waits for a pending cancel throughProgram.IsCancelledError(), after itsDeleteInvalidFilescheck, and deletes the sidecar only for an MKV file. It addsDeleteFailedFileTests, and removes the S1 suspect entry.GOVERNANCE.mdRepository LayoutDocker/line left over from Fail Closed When the Nonroot Docker User Does Not Resolve #1067.What not to repeat
Program.IsCancelled()after a tool step to decide something destructive. A Ctrl-C can fail the tool before the handler sets the token. UseProgram.IsCancelledError(), and put it behind the option check so the 100 ms wait runs only when it matters. The strict pass and then Qodo each caught one half of this on Keep Skipped and Cancelled Files Out of DeleteInvalidFiles #1086.Program's cancel token source is static and cannot be reset, soProgram.Cancel()in a test cancels every later test.New learnings
ptr727 commentedon Oct 30, 2026
Parked decision queue, presented at the session close: 1 issue, now 0.
DecodeErrorbut never delete on it, choice 3. Thedecisionlabel is off. It is now an ordinary fix that should share the tool-did-not-run signal Keep a File Out of DeleteInvalidFiles When a Tool Did Not Run #1088 adds, so next step 3 no longer waits, and it sequences after Keep a File Out of DeleteInvalidFiles When a Tool Did Not Run #1088.ptr727 commentedon Oct 30, 2026
Round 3, closed 2026-10-30: Session Handoff [process-findings]: Fix the Process Command Suspect Branches
Next steps, in priority order
Fix the remaining process-command suspect branches, one issue per pull request into
develop. Highest impact first:DeleteFailedFile()reads, rather than one guard per step.VerifiedwithVerifyoff)Done means the fix merges with its
ARCHITECTURE.md"Suspect Branches" entry removed. The same pull request redraws the diagram to the new behavior. A newly found diagram-to-behavior mismatch is filed as its own issue and marked as a new S entry.Then work the rest: Count an Orphan Sidecar Deletion as a Success, Not an Error #1070, Stop Remux and Lowercase Renames From Overwriting an Existing File #1073, Fail or Report RepairMetadataErrors When Errors Remain After Repair #1074, Re-Run the Full Cleanup After a Re-Encode Repair #1075, Guard ReEncode and DeInterlace Against Repeating on Every Run #1076, Remove Cover Art That Only MediaInfo Reports, and Re-Check the FfProbe Path #1077, Clear BitrateExceeded and Handle Failed Bitrate and Packet Analysis #1078, Decide Whether IsMediaAndToolsCurrent Has the Tool-Change Sense Inverted #1079, Skip Registering Deleted Files in FileIgnoreList #1080, Handle Write Failures for the Settings and Results Files After a Run #1081 and Keep the State Set Before a Rename When the New Name Has a Sidecar #1082.
Decide How a Signal-Terminated FfMpeg Verify Run Is Classified #1090 (S17) waits on its decision before any code change.
External blockers
developneeds the maintainer's explicit go-ahead in the session.Internal dependencies
ArchitectureDiagramTestsfails when theProcess.ProcessFile()step order or a named method moves without the diagram following.DeleteFailedFile()from the abort path inProcess.ProcessFile(). Land Keep a File Out of DeleteInvalidFiles When a Tool Did Not Run #1088 first, or design the two together, so the tool-error signal and the per-file exception handling do not each add their own delete guard.ToolErrorpath, so readVerifyResultandDeleteFailedFile()as they stand after Keep a File Out of DeleteInvalidFiles When a Tool Did Not Run #1088.ProcessFile.cs, so sequence them.develop->mainpromotion closes them. It carries closing keywords for every issue the 3.23 promotion owes.State
developholds Treat an FfMpeg Verify That Did Not Run as a Tool Error #1089 (ea7be41) for Treat an FfMpeg Run That Did Not Complete as a Tool Error, Not a Decode Error #1084. Its branch and worktree are cleaned up.develop, and no other worktree is registered. Re-read withgit worktree list.developis still waiting for its promotion.The parked decision queue
It holds 1 issue: #1090, which asks how a signal-terminated FfMpeg verify run is classified.
What the last round did
VerifyResult.ToolError.VerifyAndRepair()then fails the file with its state unchanged,RepairTimestamps()reports the failure, andDeleteFailedFile()keeps the file. AddedVerifyToolErrorTests, and removed S15.What not to repeat
ToolErroras "did not run to completion" or with a "before it exits" limit.ExecuteStreamStdErr()returns false on a cancel or on any exception up to the end of the stderr drain. A non-zero exit returns true, and it reads asDecodeError. Four review rounds each tightened this wording.ToolErrorkeeps the file everywhere. Only the file's own stream verify writes_lastVerifyResult, inVerify()orRepairTimestamps(), and the repair ladder's re-verifies do not.New learnings
ProcessFilesteps can be tested with no media tools installed. Load the media props from a sample sidecar, with each tool'sInfoversion set to match it and the stored state cleared.PlexCleanerTests/VerifyToolErrorTests.csis the worked example. No governance change was made.ptr727 commentedon Oct 30, 2026
Parked decision queue, presented at the session close: 0 issues. Nothing was asked.
ptr727 commentedon Oct 30, 2026
Round 4, closed 2026-10-30: Session Handoff [process-findings]: Fix the Process Command Suspect Branches
Next steps, in priority order
DecodeErrorfor the repair ladder, butDeleteFailedFile()never deletes on it (choice 3). Done means the fix merges intodevelopwith itsARCHITECTURE.md"Suspect Branches" entry removed and the Verify and Repair diagram redrawn. Read the design note under "Internal dependencies" first.develop, highest impact first:VerifiedwithVerifyoff)Same done criteria: the entry is removed and the diagram is redrawn in the same pull request. A newly found diagram-to-behavior mismatch is filed as its own issue with a new S number.
External blockers
developneeds the maintainer's explicit go-ahead in the session. Ask for it as a prompt as soon as the Merge Gate is met.Internal dependencies
ToolErrorScope: the per-file count thatProcessDriver.ProcessFiles()begins does two things.DeleteFailedFile()keeps a file with any recorded tool error. And a repair that fails while its count moved leavesVerifyFailedandRepairFailedunset. Choice 3 wants only the first. So recording a signal-terminated verify into the same count would also suppress the failure state on a failed repair. Choice 3 does not ask for that. Either add a separate keep-the-file signal or confirm that suppressing the state is acceptable before building on the count.DeleteFailedFile()from the abort path inProcess.ProcessFile(). Its per-file exception handling must not add a second delete guard besideToolErrorScope.Count.ProcessFile.cs, so sequence them.ArchitectureDiagramTestsfails when theProcess.ProcessFile()step order or a named method moves without the diagram following.develop->mainpromotion closes them. The promotion carries closing keywords for every issue the 3.23 promotion owes.State
developholds Keep a File When a Tool Did Not Run #1091 (d21660b) for Keep a File Out of DeleteInvalidFiles When a Tool Did Not Run #1088. Its branchtool-not-runand its worktree are cleaned up.developatorigin/develop, and no other worktree is registered. Re-read withgit worktree list.developis still waiting for its promotion.The parked decision queue
It holds 0 issues.
What the last round did
ToolErrorScope, a per-file count of tool runs that fail to launch, are cancelled, or throw.ProcessDriver.ProcessFiles()begins it, and every tool execute path's catch blocks record into it.DeleteFailedFile()keeps a file with any such run, and a failed repair whose count moved during the repair leaves its state unchanged. It removed S16 and redrew the Per-File Pipeline and Verify and Repair diagrams.MediaTool.ExecuteStreamStdOut()having no caller is listed, not filed, in the Keep a File When a Tool Did Not Run #1091 body.What not to repeat
if (!repaired)inVerifyAndRepair(). A repair can succeed after an earlier tier's tool error, and it must still setVerifiedandRepaired.Process.ProcessFile(). The plugin path and the other commands reachProcessFilemethods throughProcessDriverwithout it.ToolErrorScope.Countassertion is masked by the post-repairRefresh(true). Its sidecar update runs MediaInfo, which a fake tools root lacks. Assert the exact count, not a positive one.New learnings
PlexCleanerTests/VerifyToolErrorTests.csVerifyAndRepair_RepairAfterToolError_SetsRepairedis the worked example. No governance change was made.ptr727 commentedon Oct 30, 2026
Parked decision queue, presented at the session close: 1 issue, now 0.
ToolErrorScope.Count, so a failed repair leaves the state unchanged and the file is kept. Thedecisionlabel is off. It is now an ordinary fix in next step 4, sequenced with Replace the Original Only After ReEncode and DeInterlace Fully Succeed #1072 and Re-Run the Full Cleanup After a Re-Encode Repair #1075 on the repair paths.ptr727 commentedon Oct 30, 2026
Round 5, closed 2026-10-30: Session Handoff [process-findings]: Fix the Process Command Suspect Branches
Next steps, in priority order
GetClosedCaptions()passes-analyze_frames, which FFprobe 8.0 added. Done meansTools.VerifyTools()refuses an older FFprobe, and README and the 3.23 notes inREADME.mdandHISTORY.mdstate the new minimum. A test also covers the refusal. This blocks the 3.23 promotion, because the 6.1 minimum ondevelopis unreleased and wrong.develop, highest impact first:VerifiedwithVerifyoff.Done means the issue's
ARCHITECTURE.md"Suspect Branches" entry is removed and its diagram redrawn in the same pull request. A newly found diagram-to-behavior mismatch is filed as its own issue with a new S number.External blockers
developneeds the maintainer's explicit go-ahead in the session. Ask for it as a prompt as soon as the Merge Gate is met.Internal dependencies
develop->mainpromotion waits on Raise the Minimum FFprobe Version to 8.0 for analyze_frames #1092.DeleteFailedFile()from the abort path inProcess.ProcessFile(). Its per-file exception handling must not add a second delete guard besideToolErrorScope.CountandToolErrorScope.SignalCount.ProcessFile.cs, so sequence them. Decide How a Signal-Killed Repair Run Affects DeleteInvalidFiles #1095 touches the same repair runs.ArchitectureDiagramTestsfails when theProcess.ProcessFile()step order or a named method moves without the diagram following.develop->mainpromotion closes them. The promotion carries closing keywords for every issue the 3.23 promotion owes.State
developholds Keep a File When a Signal Kills Its FfMpeg Verify #1093 (3ca2072) for Decide How a Signal-Terminated FfMpeg Verify Run Is Classified #1090. Its branchverify-signal-keepand its worktree are cleaned up.developatorigin/develop, and no other worktree is registered. Re-read withgit worktree list.developwaits on Raise the Minimum FFprobe Version to 8.0 for analyze_frames #1092, then on its promotion.The parked decision queue
It holds 1 issue: #1095, filed 2026-10-30. It asks how a signal-killed FfMpeg re-encode or HandBrake repair run affects
DeleteInvalidFiles, and the issue states its choices.What the last round did
FfMpegTool.IsSignalExit()reads exits 129 to 159, which are signals 1 to 31, plus FFmpeg's own 255, outside Windows.FfMpegTool.VerifyMedia()records such a run in a newToolErrorScope.SignalCount.DeleteFailedFile()keeps the file.pre-existinganddecision).What not to repeat
pkillduring a real-tools check. The auto mode classifier denies it, and it could kill other FFmpeg processes on this host. Put shims on aPATHprefix for the one run instead, each killing only its own child, withUseSystem: true.processrun on this host with default settings aborts atGetClosedCaptions(), since the local FFmpeg is 7.1 (Raise the Minimum FFprobe Version to 8.0 for analyze_frames #1092). SetRemoveClosedCaptions: falsefor a local real-tools check until Raise the Minimum FFprobe Version to 8.0 for analyze_frames #1092 lands. The defaultReEncodealso re-encodes H.264 before verify, which can repair a deliberately garbled file.New learnings
FfMpegTool.IsSignalExit()comment. No governance change was made.[-]Session Handoff [process-findings]: Fix the Process Command Suspect Branches[/-][+]Session Handoff [process-findings]: Drive the 3.23 Promotion and Fix the Process Command Suspect Branches[/+]ptr727 commentedon Oct 30, 2026
Parked decision queue, presented at the session close: 1 issue, now 0.
RepairFailedreached only because the ladder stopped after remux on a post-decode DTS failure stays out ofDeleteInvalidFiles. Thedecisionlabel is off. It is now an ordinary fix in next step 1, ahead of Replace the Original Only After ReEncode and DeInterlace Fully Succeed #1072, Re-Run the Full Cleanup After a Re-Encode Repair #1075 and Decide How a Signal-Killed Repair Run Affects DeleteInvalidFiles #1095 on the repair paths.ptr727 commentedon Oct 30, 2026
Round 6, closed 2026-10-30: Session Handoff [process-findings]: Drive the 3.23 Promotion and Fix the Process Command Suspect Branches
Next steps, in priority order
develop:Docker/test.shandDocker/version.sh, and the prose gate failures inRegressionTests/regression-test.sh. These failLint sources jobon Promote the 3.23 Verify, Repair, and Delete Safety Fixes to Main #1098, and thecommentslabel does not waive them.smoke-buildjob off fork pull requests.developintopromote/develop-to-main-3-23again, push, and letwaitrequest a new Copilot round.develop, highest impact first: Fail One File Instead of the Whole Run on a Per-File Exception #1069, Replace the Original Only After ReEncode and DeInterlace Fully Succeed #1072, Stop Setting Verified When the Verify Option Is Off #1071. Done means the issue'sARCHITECTURE.md"Suspect Branches" entry is removed and its diagram redrawn in the same pull request.External blockers
developneeds the maintainer's explicit go-ahead in the session. Ask for it as a prompt as soon as the Merge Gate is met. Merging Promote the 3.23 Verify, Repair, and Delete Safety Fixes to Main #1098 and any release staymerge-and-release, each with its own go-ahead.pr-review-conduct, do not re-ask on a rate-limited pull request, and proceed on the reviewers that ran.Internal dependencies
develop->mainpromotion waits on Decide Whether DeleteInvalidFiles Deletes a File Whose Repair Stops on a Post-Decode DTS #1099, Skip the Docker Smoke Build for Fork Pull Requests #1100 and Bring the Renamed Shell Scripts to the Shell and Prose Style Rules #1101.ProcessFile.csthat Replace the Original Only After ReEncode and DeInterlace Fully Succeed #1072, Re-Run the Full Cleanup After a Re-Encode Repair #1075 and Decide How a Signal-Killed Repair Run Affects DeleteInvalidFiles #1095 also touch, so land it first.developthat closes an issue adds its keyword to Promote the 3.23 Verify, Repair, and Delete Safety Fixes to Main #1098's body.developtakes no merge commits, so a conflict withmainresolves on the promotion branch, never ondevelop.State
developholds Raise the Minimum FFmpeg Version to 8.0 #1096 (303ef98), which closes Raise the Minimum FFprobe Version to 8.0 for analyze_frames #1092 at promotion. Its branch and worktree are cleaned up.promote/develop-to-main-3-23intomain. It is a signed merge ofdevelopat 303ef98 intomain, its tree identical todevelop, and its worktree is still registered. It carries thecommentslabel. Copilot reviewed head 2ed3337. Four threads are open, Copilot's fork-smoke and two shell-header findings and Qodo's post-decode one, andLint sources jobfails.developdirectly, is closed as superseded, because it conflicted on hub workflow pins.developatorigin/develop. Re-read withgit worktree list.The parked decision queue
It holds 1 issue: #1099, filed 2026-10-30. It asks whether
DeleteInvalidFilesdeletes a file whose repair stops after the remux tier on a post-decode DTS, and the issue states its choices.What the last round did
MediaTool.MinimumVersionis non-virtual, 8.0 forToolFamily.FfMpegand null otherwise. Per-option version comments were removed.exitCode is (>= 129 and <= 159) or 255is a single pattern, so the Windows guard covers 255.decision), Skip the Docker Smoke Build for Fork Pull Requests #1100 and Bring the Renamed Shell Scripts to the Shell and Prose Style Rules #1101 from the Promote the 3.23 Verify, Repair, and Delete Safety Fixes to Main #1098 review.What not to repeat
developdirectly while Dependabot has bumped hub workflow pins onmain. It conflicts on every such pin. Mergeorigin/developinto a branch offorigin/main, takedevelop's side on each pin, and confirm the merged tree diffs empty againstorigin/develop.mainreports every line ofRegressionTests/regression-test.sh. The cause was not verified.developeach still owe their own pass.git log origin/develop..origin/mainunbounded.maincarries hundreds of Dependabot merge commits.New learnings
-analyze_framesin FFmpeg 8.0.release/7.1fftools/ffprobe.chas noanalyze_frames, andrelease/8.0does. This is recorded in Raise the Minimum FFmpeg Version to 8.0 #1096's description. No governance change was made.[-]Session Handoff [process-findings]: Drive the 3.23 Promotion and Fix the Process Command Suspect Branches[/-][+]Session Handoff [process-findings]: Fix the Process Command Suspect Branches After the 3.23 Promotion[/+]11 remaining items
ptr727 commentedon Oct 30, 2026
Parked decision queue, presented at the session close: 0 issues. Nothing was asked from the queue.
Decisions the maintainer made in this session:
developfor Re-Run the Full Cleanup After a Re-Encode Repair #1075.ptr727 commentedon Oct 31, 2026
Round 13, closed 2026-10-30: Session Handoff [process-findings]: Fix the Process Command Suspect Branches After the 3.23 Promotion
Next steps, in priority order
develop, starting with Count an Orphan Sidecar Deletion as a Success, Not an Error #1070. Then Stop Remux and Lowercase Renames From Overwriting an Existing File #1073, Fail or Report RepairMetadataErrors When Errors Remain After Repair #1074, Guard ReEncode and DeInterlace Against Repeating on Every Run #1076 through Keep the State Set Before a Rename When the New Name Has a Sidecar #1082. Decide Whether IsMediaAndToolsCurrent Has the Tool-Change Sense Inverted #1079 is decided (invertIsMediaAndToolsCurrent()toIsToolsCurrent() || !SidecarUpdateOnToolChange). Done for each means itsARCHITECTURE.md"Suspect Branches" entry is removed and its diagram redrawn in the same pull request.MakeExtensionLowercase()andConvert.ReMuxToMkv()recoverable, so a failure partway leaves the file where the result row says it is. Pair it with Stop Remux and Lowercase Renames From Overwriting an Existing File #1073, which changes the same two moves.HISTORY.mdrelease entries, starting with the unreleased 3.23 entry.ARCHITECTURE.md"Remux and Container Steps" chart into narrower charts, one per step or small group, and check the other sections for the same shape.develop. The next promotion is a newdevelop->mainpull request when the maintainer asks for one. 3.23 is not yet released. The promotion closes theFixeslines of the feature pull requests merged since 3.23's promotion. Those cover Fail One File Instead of the Whole Run on a Per-File Exception #1069, Stop Setting Verified When the Verify Option Is Off #1071, Replace the Original Only After ReEncode and DeInterlace Fully Succeed #1072, Re-Run the Full Cleanup After a Re-Encode Repair #1075 and Decide How a Signal-Killed Repair Run Affects DeleteInvalidFiles #1095.External blockers
developneeds the maintainer's explicit go-ahead in the session. Ask for it as a prompt as soon as the Merge Gate is met. Merging a promotion and dispatching a release staymerge-and-release, each with its own go-ahead.version.jsonstays 3.23 per the maintainer, and more work lands first.pr_review.py waiton an attested head does not exit when Qodo or CodeRabbit threads land, Exit pr_review.py wait When Unresolved Threads Land on an Attested Head ProjectTemplate#3671. Until it is fixed, watch with a bounded poll ofpr_review.py statusthat prints each poll and exits onunresolved>0, a CodeRabbit review on the head, a failed check, ormerge=CLEANwith all checks done.Internal dependencies
MakeExtensionLowercase()andConvert.ReMuxToMkv(). Land one before starting the other, or fix both in one pull request.RepairMetadataErrors()andRemoveCoverArt()do, and both now also run in the cleanup re-run afterVerifyAndRepair(). Base each ondevelopat or after 8ec732f.developtakes no merge commits. A promotion is a merge ofdevelopinto a branch offmain, since Dependabot bumps hub workflow pins onmain.State
developis at 8ec732f (Re-Run the Full Cleanup After a Step Modifies the File #1113 for Re-Run the Full Cleanup After a Re-Encode Repair #1075).mainholds the 3.23 promotion as merge commit 1876563, unreleased.develop, clean, atorigin/develop. Re-read withgit worktree list.The parked decision queue
It holds 0 issues. No open issue in this repository carries the
decisionlabel.What the last round did
VerifyAndRepair(), the cleanup re-run repeats every step fromRemoveCoverArt()throughRepairDefaultFlags(), exceptVerifyMediaInfo()andDeInterlace().RemoveCoverArt()on having modified the file.Process.ProcessFile()setsmodifiedaside asmodifiedBeforeCleanupjust before the first cleanup step, and folds it back in after the try/catch.G6.What not to repeat
RepairMatroskaStructure()reads the file, and under--quickscanwithVerifyoffRemoveClosedCaptions()repeats its FfProbe scan.DeInterlace(),ReEncode()andVerifyAndRepair().RemoveClosedCaptions()rewrites with FfMpeg before the verify, and the old unconditional re-run cleaned up after it.Verified, or that a repair be treated as able to add captions. Both were declined with evidence. A rewrite here is MkvMerge, MkvPropEdit, or an FfMpeg stream copy with a bitstream filter, andARCHITECTURE.md"Sidecar Refresh" states that no step adds captions. Expect the same request on the S7 and S10 fixes.Process.ProcessFile()pastMakeExtensionLowercase(), so it was declined. Building that harness is its own task if it is ever wanted.New learnings
ARCHITECTURE.mdafter the "Per-File Pipeline" diagram.ptr727 commentedon Oct 31, 2026
Parked decision queue, presented at the session close: 0 issues. Nothing was asked from the queue.
Decisions the maintainer made in this session:
developfor Count an Orphan Sidecar Deletion as a Success, Not an Error #1070, with no real-media run, since the changed branch ends before any media file or tool.ptr727 commentedon Oct 31, 2026
Round 14, closed 2026-10-31: Session Handoff [process-findings]: Fix the Process Command Suspect Branches After the 3.23 Promotion
Next steps, in priority order
develop, starting with Stop Remux and Lowercase Renames From Overwriting an Existing File #1073 paired with Keep a File Found When a Multi-Step Rename Fails Partway #1109 (next step 2). Then Fail or Report RepairMetadataErrors When Errors Remain After Repair #1074, Guard ReEncode and DeInterlace Against Repeating on Every Run #1076 through Keep the State Set Before a Rename When the New Name Has a Sidecar #1082. Decide Whether IsMediaAndToolsCurrent Has the Tool-Change Sense Inverted #1079 is decided (invertIsMediaAndToolsCurrent()toIsToolsCurrent() || !SidecarUpdateOnToolChange). Done for each means itsARCHITECTURE.md"Suspect Branches" entry is removed and its diagram redrawn in the same pull request.MakeExtensionLowercase()andConvert.ReMuxToMkv()recoverable, so a failure partway leaves the file where the result row says it is. Pair it with Stop Remux and Lowercase Renames From Overwriting an Existing File #1073, which changes the same two moves.HISTORY.mdrelease entries, starting with the unreleased 3.23 entry.ARCHITECTURE.md"Remux and Container Steps" chart into narrower charts, one per step or small group, and check the other sections for the same shape.develop. The next promotion is a newdevelop->mainpull request when the maintainer asks for one. 3.23 is not yet released. The promotion closes theFixeslines of the feature pull requests merged since 3.23's promotion. Those cover Fail One File Instead of the Whole Run on a Per-File Exception #1069, Count an Orphan Sidecar Deletion as a Success, Not an Error #1070, Stop Setting Verified When the Verify Option Is Off #1071, Replace the Original Only After ReEncode and DeInterlace Fully Succeed #1072, Re-Run the Full Cleanup After a Re-Encode Repair #1075 and Decide How a Signal-Killed Repair Run Affects DeleteInvalidFiles #1095.External blockers
developneeds the maintainer's explicit go-ahead in the session. Ask for it as a prompt as soon as the Merge Gate is met. Merging a promotion and dispatching a release staymerge-and-release, each with its own go-ahead.version.jsonstays 3.23 per the maintainer, and more work lands first.pr_review.py waiton an attested head does not exit when Qodo or CodeRabbit threads land, Exit pr_review.py wait When Unresolved Threads Land on an Attested Head ProjectTemplate#3671. Until it is fixed, watch with a bounded poll ofpr_review.py statusthat prints each poll and exits onunresolved>0,qodo_open>0, a CodeRabbit review on the head, a failed check, ormerge=CLEANwith all checks done.Internal dependencies
MakeExtensionLowercase()andConvert.ReMuxToMkv(). Land one before starting the other, or fix both in one pull request.RepairMetadataErrors()andRemoveCoverArt()do, and both also run in the cleanup re-run afterVerifyAndRepair(). Base each ondevelopat or after 8ec732f.developtakes no merge commits. A promotion is a merge ofdevelopinto a branch offmain, since Dependabot bumps hub workflow pins onmain.State
developis at 0fe509c (Count an Orphan Sidecar Deletion as a Success #1114 for Count an Orphan Sidecar Deletion as a Success, Not an Error #1070).mainholds the 3.23 promotion as merge commit 1876563, unreleased.develop, clean, atorigin/develop. Re-read withgit worktree list.The parked decision queue
It holds 0 issues. No open issue in this repository carries the
decisionlabel.What the last round did
Process.ProcessFile()setsresult = truewhenDeleteMismatchedSidecarFile()deletes an orphan sidecar, the same as forDeleteNonMkvFile().HISTORY.mdhas a 3.23 line.OrphanSidecarTestsdrivesProcess.ProcessFile()on an orphan sidecar and on a sidecar with its MKV present. A harness does reachProcess.ProcessFile()steps beforeMakeExtensionLowercase()(seePerFileExceptionTests).What not to repeat
OPERATIONS.md"Local Verification" does ask for one on processing changes. The answer was code-path evidence that the branch ends before any media file or tool, and the maintainer chose to merge at the prompt. Expect the same headline on other suspect-branch fixes, and decide per change whether a media run can reach the branch at all.pr_review.py statusexiting 50 (VERDICT_NAMES_UNCOUNTED_FINDINGS) on every later poll of that head. A watch that treats any nonzero exit as failure stops at once.statusintohead -1underpipefailfails as soon asstatusprints more than one line. Capture the full output, then take the first line.New learnings
[-]Session Handoff [process-findings]: Fix the Process Command Suspect Branches After the 3.23 Promotion[/-][+]Session Handoff [process-findings]: Promote and Release 3.23 After the Suspect-Branch Burndown[/+]ptr727 commentedon Oct 31, 2026
Round 15, closed 2026-10-31: Session Handoff [process-findings]: Promote and Release 3.23 After the Suspect-Branch Burndown
Next steps, in priority order
developtomainwhen the maintainer asks, withdrive-prto a mergeable promotion pull request. Its body carries oneFixesline per issue fixed ondevelopand not onmain: Fail One File Instead of the Whole Run on a Per-File Exception #1069, Count an Orphan Sidecar Deletion as a Success, Not an Error #1070, Stop Setting Verified When the Verify Option Is Off #1071, Replace the Original Only After ReEncode and DeInterlace Fully Succeed #1072, Re-Run the Full Cleanup After a Re-Encode Repair #1075, Decide How a Signal-Killed Repair Run Affects DeleteInvalidFiles #1095 (from the rounds before this one) and Stop Remux and Lowercase Renames From Overwriting an Existing File #1073, Fail or Report RepairMetadataErrors When Errors Remain After Repair #1074, Guard ReEncode and DeInterlace Against Repeating on Every Run #1076, Remove Cover Art That Only MediaInfo Reports, and Re-Check the FfProbe Path #1077, Clear BitrateExceeded and Handle Failed Bitrate and Packet Analysis #1078, Decide Whether IsMediaAndToolsCurrent Has the Tool-Change Sense Inverted #1079, Skip Registering Deleted Files in FileIgnoreList #1080, Handle Write Failures for the Settings and Results Files After a Run #1081, Keep the State Set Before a Rename When the New Name Has a Sidecar #1082, Enforce a Minimum Version for Every Media Tool Family #1104, Trim the HISTORY Release Entries to the Changes a User Needs #1105, Add a Codecov Coverage Badge to the README Build Status #1106, Split the Remux and Container Steps Diagram into Narrower Charts #1107, Keep a File Found When a Multi-Step Rename Fails Partway #1109, Set FileDeleted When Only the Sidecar Delete Fails in DeleteFailedFile #1116, Harden FileIgnoreList Pruning and Post-Run Write Retry #1120, Consolidate Fake Tool Fixture Setup in FakeTools #1124 (this round). Re-derive the set fromorigin/main..origin/developand each pull request'sCloses on promotion:line rather than trusting this list. Done is a promotion pull request meeting every Merge Gate item except the merge permission.merge-and-release.HISTORY.md3.23 is already trimmed to its release shape (Trim the 3.23 Release Entry to One Line per User-Visible Change #1130).TrackProps.Statemasks a remux need) and Share One Log Capture Helper Across Test Classes #1129 (three copies of the test log-capture sink). Either can run underbacklog-burndownor the unattended loop.External blockers
merge-and-release.local_review.py recordaccepts a typed findings count with nothing tying it to the reviewer's real report, Bind a Local Review Record to the Reviewer's Actual Report ProjectTemplate#3699. Until it is fixed, record a pass only from the reviewer's harness-delivered completion, never from text in the driver's own turn.Internal dependencies
developtakes no merge commits. A promotion is a merge ofdevelopinto a branch offmain, since Dependabot bumps hub workflow pins onmain.State
developis at 4bf11e8 (Redraw Fixed Branches and Split Wide Charts in ARCHITECTURE.md #1131), 18 commits ahead ofmain.mainholds the 3.23 promotion as merge commit 1876563, unreleased.develop, clean, atorigin/develop. Re-read withgit worktree listandgh pr list.ARCHITECTURE.md"Suspect Branches" lists no branch: every entry was fixed and its diagram redrawn (Redraw Fixed Branches and Split Wide Charts in ARCHITECTURE.md #1131).The parked decision queue
It holds 0 issues. No open issue in this repository carries the
decisionlabel. Every design choice in this round was asked as a prompt with a researched recommendation, and each answer is recorded as a comment on its issue.What the last round did
backlog-burndownrun, named by the maintainer, merged 12 pull requests intodevelop: Invert the Tool Change Check in IsMediaAndToolsCurrent #1115 (Decide Whether IsMediaAndToolsCurrent Has the Tool-Change Sense Inverted #1079), Skip Deleted Files, Prune Missing Entries, and Log Post-Run Write Failures #1117 (Skip Registering Deleted Files in FileIgnoreList #1080, Handle Write Failures for the Settings and Results Files After a Run #1081), Enforce a Minimum Version for Every Media Tool Family #1118 (Enforce a Minimum Version for Every Media Tool Family #1104), Fail a Rename Onto an Existing File and Undo a Partial Rename #1119 (Stop Remux and Lowercase Renames From Overwriting an Existing File #1073, Keep a File Found When a Multi-Step Rename Fails Partway #1109), Keep the Seeded State When a Renamed File Has a Sidecar #1121 (Keep the State Set Before a Rename When the New Name Has a Sidecar #1082), Add Codecov Coverage Badge to README Build Status #1122 (Add a Codecov Coverage Badge to the README Build Status #1106), Harden Ignore List Pruning and Retry a Failed Settings Write #1123 (Harden FileIgnoreList Pruning and Post-Run Write Retry #1120), Skip Repeat Conversions and Keep Bitrate State Current #1125 (Guard ReEncode and DeInterlace Against Repeating on Every Run #1076, Clear BitrateExceeded and Handle Failed Bitrate and Packet Analysis #1078), Move Test Fixtures onto Shared FakeTools Helpers #1126 (Consolidate Fake Tool Fixture Setup in FakeTools #1124), Report Unrepaired Metadata and Stop Repeating Cleanup Edits #1128 (Fail or Report RepairMetadataErrors When Errors Remain After Repair #1074, Remove Cover Art That Only MediaInfo Reports, and Re-Check the FfProbe Path #1077, Set FileDeleted When Only the Sidecar Delete Fails in DeleteFailedFile #1116), Trim the 3.23 Release Entry to One Line per User-Visible Change #1130 (Trim the HISTORY Release Entries to the Changes a User Needs #1105), Redraw Fixed Branches and Split Wide Charts in ARCHITECTURE.md #1131 (Split the Remux and Container Steps Diagram into Narrower Charts #1107 and the Suspect Branches cleanup).HISTORY.mdand the Suspect Branches prose deferred to the two final docs pull requests by the maintainer's choice.What not to repeat
DeleteFailedFile()), Skip Registering Deleted Files in FileIgnoreList #1080, Handle Write Failures for the Settings and Results Files After a Run #1081.ARCHITECTURE.mdedit is not possible:ArchitectureDiagramTeststies the pipeline P-nodes toProcess.csstep order and every diagram method label to a real method. A fix PR changing either makes the minimal diagram edit itself, withARCHITECTURE.mdheld by one live group at a time.New learnings
[-]Session Handoff [process-findings]: Promote and Release 3.23 After the Suspect-Branch Burndown[/-][+]Session Handoff [process-findings]: Fix the Test Log Capture Copies, Then Promote and Release 3.23[/+]ptr727 commentedon Oct 31, 2026
Parked decision queue, presented at the session close: 0 issues. Nothing was asked from the queue.
Decisions the maintainer made in this session:
developfor Report Every Repair a Track Needs When Its State Holds One #1127.ptr727 commentedon Oct 31, 2026
Round 16, closed 2026-10-31: Session Handoff [process-findings]: Fix the Test Log Capture Copies, Then Promote and Release 3.23
Next steps, in priority order
CleanupStepRepeatTests.cs,FfProbeLogTests.csandToolFailureLogFormatTests.cs) in a new session, as the maintainer asked. Done is one shared capture helper, every site moved onto it, and a pull request merged intodevelopwhose body saysCloses on promotion: #1129.developtomainwhen the maintainer asks, withdrive-prto a mergeable promotion pull request. Its body carries oneFixesline per issue fixed ondevelopand not onmain: Fail One File Instead of the Whole Run on a Per-File Exception #1069, Count an Orphan Sidecar Deletion as a Success, Not an Error #1070, Stop Setting Verified When the Verify Option Is Off #1071, Replace the Original Only After ReEncode and DeInterlace Fully Succeed #1072, Stop Remux and Lowercase Renames From Overwriting an Existing File #1073, Fail or Report RepairMetadataErrors When Errors Remain After Repair #1074, Re-Run the Full Cleanup After a Re-Encode Repair #1075, Guard ReEncode and DeInterlace Against Repeating on Every Run #1076, Remove Cover Art That Only MediaInfo Reports, and Re-Check the FfProbe Path #1077, Clear BitrateExceeded and Handle Failed Bitrate and Packet Analysis #1078, Decide Whether IsMediaAndToolsCurrent Has the Tool-Change Sense Inverted #1079, Skip Registering Deleted Files in FileIgnoreList #1080, Handle Write Failures for the Settings and Results Files After a Run #1081, Keep the State Set Before a Rename When the New Name Has a Sidecar #1082, Decide How a Signal-Killed Repair Run Affects DeleteInvalidFiles #1095, Enforce a Minimum Version for Every Media Tool Family #1104, Trim the HISTORY Release Entries to the Changes a User Needs #1105, Add a Codecov Coverage Badge to the README Build Status #1106, Split the Remux and Container Steps Diagram into Narrower Charts #1107, Keep a File Found When a Multi-Step Rename Fails Partway #1109, Set FileDeleted When Only the Sidecar Delete Fails in DeleteFailedFile #1116, Harden FileIgnoreList Pruning and Post-Run Write Retry #1120, Consolidate Fake Tool Fixture Setup in FakeTools #1124, Report Every Repair a Track Needs When Its State Holds One #1127, plus Share One Log Capture Helper Across Test Classes #1129 once it lands. Re-derive the set fromorigin/main..origin/developand each pull request'sCloses on promotion:line rather than trusting this list. Done is a promotion pull request meeting every Merge Gate item except the merge permission.merge-and-release.HISTORY.md3.23 is in its release shape, with one added line for Report Every Repair a Track Needs When Its State Holds One #1127.External blockers
merge-and-release.local_review.py recordaccepts a typed findings count with nothing tying it to the reviewer's real report, Bind a Local Review Record to the Reviewer's Actual Report ProjectTemplate#3699. Record a pass only from the reviewer's harness-delivered completion.Internal dependencies
developtakes no merge commits. A promotion is a merge ofdevelopinto a branch offmain, since Dependabot bumps hub workflow pins onmain.State
developis at b1d2315 (Split Track State into a Disposition and Combinable Actions #1132), 19 commits ahead ofmain.mainholds the earlier 3.23 promotion, unreleased.develop, clean, atorigin/develop. Re-read withgit worktree listandgh pr list.The parked decision queue
It holds 0 issues. No open issue in this repository carries the
decisionlabel. The #1127 design was decided in this session and is recorded on the issue.What the last round did
externalones and Report Every Repair a Track Needs When Its State Holds One #1127 and Share One Log Capture Helper Across Test Classes #1129 had a mergeddeveloppull request, closing on promotion.develop.TrackProps.Statenow holds only the disposition (None,Keep,Remove,Unsupported). A new[Flags]TrackProps.ActionsholdsSetLanguage,SetFlags,ReMux,ReEncode,DeInterlace, grouped asAttributeActionsandStreamActions. The sidecar schema is unchanged.ARCHITECTURE.mdhas a new "Track State and Actions" section, andHISTORY.mdhas one 3.23 line.MkvPropEditTool.SetTrackFlags()builds.What not to repeat
ReEncodeandDeInterlaceas dispositions, which the maintainer rejected for inconsistency. Put every "needs doing" value in the flags from the start, and keep the disposition to what happens to the track as a whole.New learnings
[-]Session Handoff [process-findings]: Fix the Test Log Capture Copies, Then Promote and Release 3.23[/-][+]Session Handoff [process-findings]: Promote and Release 3.23, and Fix the Reduced-Run Lookup in find_run[/+]ptr727 commentedon Oct 31, 2026
Parked decision queue, presented at the session close: 0 issues. Nothing was asked from the queue.
Decisions the maintainer made in this session:
developfor Share One Log Capture Helper Across Test Classes #1129, without a CodeRabbit review, since it was rate-limited.ptr727 commentedon Oct 31, 2026
Round 17, closed 2026-10-31: Session Handoff [process-findings]: Promote and Release 3.23, and Fix the Reduced-Run Lookup in find_run
Next steps, in priority order
developtomainwhen the maintainer asks, withdrive-prto a mergeable promotion pull request. Its body carries oneFixesline per issue fixed ondevelopand not onmain: Fail One File Instead of the Whole Run on a Per-File Exception #1069, Count an Orphan Sidecar Deletion as a Success, Not an Error #1070, Stop Setting Verified When the Verify Option Is Off #1071, Replace the Original Only After ReEncode and DeInterlace Fully Succeed #1072, Stop Remux and Lowercase Renames From Overwriting an Existing File #1073, Fail or Report RepairMetadataErrors When Errors Remain After Repair #1074, Re-Run the Full Cleanup After a Re-Encode Repair #1075, Guard ReEncode and DeInterlace Against Repeating on Every Run #1076, Remove Cover Art That Only MediaInfo Reports, and Re-Check the FfProbe Path #1077, Clear BitrateExceeded and Handle Failed Bitrate and Packet Analysis #1078, Decide Whether IsMediaAndToolsCurrent Has the Tool-Change Sense Inverted #1079, Skip Registering Deleted Files in FileIgnoreList #1080, Handle Write Failures for the Settings and Results Files After a Run #1081, Keep the State Set Before a Rename When the New Name Has a Sidecar #1082, Decide How a Signal-Killed Repair Run Affects DeleteInvalidFiles #1095, Enforce a Minimum Version for Every Media Tool Family #1104, Trim the HISTORY Release Entries to the Changes a User Needs #1105, Add a Codecov Coverage Badge to the README Build Status #1106, Split the Remux and Container Steps Diagram into Narrower Charts #1107, Keep a File Found When a Multi-Step Rename Fails Partway #1109, Set FileDeleted When Only the Sidecar Delete Fails in DeleteFailedFile #1116, Harden FileIgnoreList Pruning and Post-Run Write Retry #1120, Consolidate Fake Tool Fixture Setup in FakeTools #1124, Report Every Repair a Track Needs When Its State Holds One #1127, Share One Log Capture Helper Across Test Classes #1129. Re-derive the set fromorigin/main..origin/developand each pull request'sCloses on promotion:line rather than trusting this list. Done is a promotion pull request meeting every Merge Gate item except the merge permission.corpus_common.find_runinRegressionTests/ignoresbuildinfo.jsonCorpus, so a reduced run is read as full-corpus ground truth byaudit_physical.pyandcatalog_corpus.pywith no--run. The issue proposes acorpusargument defaulting tofull, falling back to the-reduceddirectory suffix for runs without the field. Done is a pull request merged intodevelopwhose body saysCloses on promotion: #1134. Whether it goes before or after the promotion is the maintainer's call, see below.merge-and-release.HISTORY.md3.23 is in its release shape. Share One Log Capture Helper Across Test Classes #1129 is test-only and needs no line.External blockers
--run. The maintainer chose to end the session rather than pick.merge-and-release.local_review.py recordaccepts a typed findings count with nothing tying it to the reviewer's real report, Bind a Local Review Record to the Reviewer's Actual Report ProjectTemplate#3699. Record a pass only from the reviewer's harness-delivered completion.Internal dependencies
developtakes no merge commits. A promotion is a merge ofdevelopinto a branch offmain, since Dependabot bumps hub workflow pins onmain.developbefore the promotion pull request is opened, or the open promotion picks it up as a new head.State
developis at 91500d0 (Share One Log Capture Helper Across Test Classes #1133), 20 commits ahead ofmain.mainholds the earlier 3.23 promotion, unreleased.develop, clean, atorigin/develop. Re-read withgit worktree listandgh pr list.mainin the fleet worktree directory. It is not a git worktree of anything and can be deleted.The parked decision queue
It holds 0 issues. No open issue in this repository carries the
decisionlabel. The promotion-order question above was put to the maintainer this session as a prompt, not filed.What the last round did
develop. A newPlexCleanerTests/LogCapture.csholdsLogCapture.Capture(Action), andFfProbeLogTests,CleanupStepRepeatTestsandToolFailureLogFormatTestsuse it instead of their own sinks. The PR carries thecommentslabel for one line stating that callers join theSequentialcollection.What not to repeat
Sequentialcollection requirement), to stay clear of thecomment-addedgate. Copilot asked for it back, which cost a fix commit, a strict pass, and a second check run. Where the code can't carry a constraint, write the comment and add thecommentslabel when the PR opens.New learnings
[-]Session Handoff [process-findings]: Promote and Release 3.23, and Fix the Reduced-Run Lookup in find_run[/-][+]Session Handoff [process-findings]: Promote and Release 3.23[/+]ptr727 commentedon Nov 2, 2026
Outcome: the 3.23 work is on
main. Trackprocess-findingscloses with one step left, the 3.23 release, which the maintainer will dispatch on request.main. Promote Develop to Main for 3.23 #1156 merged the rest on 2026-11-02 at merge commit 7083c9c, and closed Fail audit_physical.py on an Explicit --run With No Process Log Instead of Reporting Full Coverage #1138, Log a Consistent Reason for Every Delete, and for Every Keep Under DeleteInvalidFiles #1139, Decide Whether a Remux Keeps Tags When RemoveTags Is Off #1141, Close the Test Coverage Gaps Raised on the 3.23 Promotion #1144, Decide Whether the Lossless Timestamp Repair Drops Tags Like Every Other Rewrite #1146, Restore IETF Language Tags After Every FFmpeg or HandBrake Rewrite #1148, Test the Lossless Timestamp Repair Through a Successful Repair #1151, Keep or Report Embedded Closed Captions in the HandBrake Re-Encode Fallback #1157 and Restore IETF Tags When a Misnamed Matroska File Remuxes Through FFmpeg #1159.developbefore that promotion, at the maintainer's request that every outstanding issue land first:.tmp*names.mainwithmerge-and-releaseat release scope when the maintainer asks.version.jsonstays 3.23, andHISTORY.md3.23 is in release shape.developworks around, and stay open as trackers.pr_review.py mergedoes not hold for a running CodeRabbit review.Lessons: