Repository navigation
cleanup sessions: squash-merged work is classified as "park", so the plan opens duplicate draft PRs - #799
Conversation
/cleanup sessions planned `park` for branches whose work had reached the default branch through a different, squash-merged PR, so -Force would open duplicate draft PRs (4 of 5 park rows in the 2026-09-29 repro). - Containment check: `git merge-tree --write-tree origin/<default> <branch>`; when the merged tree equals the default tree the branch adds nothing -> new `delete-contained` action, re-proven right before `branch -D`. - Superseded hint -> `needs-decision` naming the PR, never a deletion: its own closed PR says "superseded by #N" (or the PR URL), or the merge conflicts and every referenced issue/PR was done by a merged PR. - Any git/gh failure falls back to the old disposition (park). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Review: sin bloqueantes. La lógica es sólida: el borrado solo ocurre con prueba exacta ( Observaciones menores (no bloquean):
|
…ides wip-park (#755) Review round 1 (claude-review): - merge-tree/rev-parse now use refs/remotes/origin/<default> and refs/heads/<branch>, so a local "origin/main" branch or a same-named tag cannot make the proof be about another commit than `branch -D` deletes. - The superseded hint is ignored over uncommitted changes (wip-park saves them) and for merged-advanced branches (post-merge commits are new work). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Review (#799 / #755): no encontré bugs bloqueantes. El diseño es conservador: la prueba exacta ( Observaciones menores (no bloquean):
|
…fs (#755) Review round 2 (claude-review): - merge-tree honours merge drivers (merge=ours keeps main's side), so a "contained" answer is now also proven with a plain diff: no path the branch changed since the merge base may differ from origin's default. - A missing branch ref made merge-tree exit 1, read as "conflict"; the ref is verified first and that case is "unknown". - The superseded hint reads commit subjects with qualified refs and gives no hint when git log fails. - Get-BranchContainment moves above the dot-source guard, so the tests run it on real repos (squash-merge, local "origin/main" branch, merge=ours driver, missing ref). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Sin hallazgos bloqueantes. La prueba de contención (merge-tree más diff de rutas, con refs completos y re-verificación antes de Nit opcional: el regex de |
…ross-repo refs (#755) Review round 3 (claude-review): - The plain-diff proof downgraded the usual case (main edited a file after the squash) to "adds", so it was parked again. It now applies only to paths with a custom merge driver (git check-attr merge, from the working tree and both sides' trees). - "owner/repo#12", "C#12" and another repo's PR URL are no longer read as this repo's numbers in the superseded hint. - check-attr gets paths as argument batches: piped into git on Windows every path gained a trailing CR. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Find-FilesPruned emitted entries in file-system order: NTFS returns them
sorted, ext4 in hash order. Find-AgentDefinition ("first candidate in
root order") and Get-SkillInventory (overlap pair order) therefore gave
different answers on ubuntu, which failed Pester (ubuntu) on PR #799.
Each directory's files and subdirectories are now sorted ordinally,
case-insensitively, before they are used.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Review (34b2100, El fix es correcto y acotado: ordenar cada listado hace determinista el "first found", y el orden pre-order se conserva. Sin bugs bloqueantes. Dos observaciones menores:
Nota: en el timeout parcial el listado en curso se ordena y se añade igual; es inocuo, solo señalo que el resultado parcial incluye esos archivos. |
… proof (#755) Review round 4 (claude-review): - git output for the proof is read as UTF-8 with -z (NUL-split): no C-quoting, no console code page, no CR, so a non-ASCII or quoted name of a merge-driven file cannot make the proof match nothing. - Each merge-driven path is compared blob by blob; a path neither side has is "unknown", never "nothing differs". - check-attr batches are bounded by length; a git that fails to start is exit -1 instead of the previous call's stale 0. - Documents the git 2.40 floor (check-attr --source); older git parks. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Sin hallazgos bloqueantes. Revisé el diff en
|
…Item The order test took Get-ChildItem -Recurse as its oracle, which on ext4 is hash order - the nondeterminism the walker now removes. The expected order is written out; on Windows it is still checked against Get-ChildItem, which returns the same sorted pre-order there. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Revisión (sha ea40cd9): sin bloqueantes. La lógica es conservadora: borra solo con prueba exacta ( Observaciones menores, no bloqueantes:
|
…nt (#755) Review round 5 (claude-review): - merge.default naming a driver sends every unspecified path through it, so those paths now get the blob-by-blob proof too. - Only the -z terminator is dropped: an empty value (`merge=`) inside check-attr output no longer shifts the triplets after it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…tably Review round 5 (claude-review): OrdinalIgnoreCase ranks names that differ only by case as equal, and List.Sort is unstable, so on a case-sensitive file system their order still followed hash order. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Review del commit 2beb9bd (desempate case-sensitive en La lógica es correcta: Un solo punto, menor: el commit no añade ningún test. Convendría uno en |
Review round 6 (claude-review): a scriptblock comparator re-enters PowerShell on every comparison, an unbounded cost after the deadline checks on a wide directory. Each listing now sorts precomputed keys (upper-invariant name, NUL, name) with a native ordinal sort - the same order. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Sin hallazgos bloqueantes en Revisé
🤖 Generated with Claude Code |
Review round 6 (claude-review): [int] on "#12345678901" throws, and under ErrorActionPreference Stop that ended the whole sweep. Numbers that do not fit are skipped. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Review (Cleanup-Sessions.ps1, #755) Sin bloqueantes. Lo revisado está bien resuelto:
Menores (no bloquean):
No revisé por completo los cambios en |
Two PowerShell traps made the round-6 sort a no-op, hidden on Windows because NTFS already lists names in sorted order: - binding to [object[]] handed the function a copy, so an in-place sort was lost - the sorted array is now returned; - without explicit casts PowerShell bound an Array.Sort overload that sorted only the keys. A unit test calls Sort-PrunedListing directly, so a sort that does nothing fails on every OS, not only on ext4. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Sin hallazgos bloqueantes. Revisé
|
External review - claude-review (Claude API, clean context)Reviewed commit: 8 rounds at --effort xhigh. Rounds 1-6 found 14 real defects, all fixed with tests: unqualified refs in the deletion proof; hint overriding wip-park and merged-advanced; merge drivers (attributes and merge.default) faking containment; byte-exact -z paths; missing ref read as conflict; stale exit code on launch failure; cross-repo refs; int overflow; walker sort (Linux order, case ties, no-op sort). Rounds 7 and 8 returned nothing. Out of scope, reported: archive verdict matches only exact worktree paths (pre-existing #734 code). |
|
On hold: waiting for the Anthropic plugin directory review. Do not merge yet. The agentic-board plugin is in its first review in the Anthropic plugin directory, and the directory tracks Batch waiting together: #799, #800, #801, #802, #803, #804.
|
Closes #755