Correctness release: surfaces four silent CLI failures, fixes Swift cross-file extension call loss, makes node-id collision resolution deterministic, and makes the Windows skill runnable on PowerShell.
- Fix: four commands that failed silently while exiting 0 now surface the problem (#2534, thanks @elecnix).
cluster-onlywarns when--backend/--model/--batch-sizeare ignored because saved labels are being reused; the community-label prompt no longer collides with the discard sentinel (a model echoing the key back is no longer silently dropped);tree --rootexits non-zero when the root matches no source file instead of silently flattening the tree; andcluster-onlystampsbuilt_at_commitfrom the analysed graph rather than the shell's working directory. Also folds in thecluster-onlyrefused-write guard from #2522 (thanks @aniJani). - Fix: a Swift
extension Fooin a different file fromFoono longer drops static and singleton call edges into the type (#2538, thanks @pawelo446). The extension node id is now remapped consistently so the extension merges onto its base type before call resolution, and the merge is gated so it never absorbs a same-named type from another language. - Fix: node-id collision resolution is now deterministic and prefers active over archived paths (#2532, thanks @michaelxer for the active/archived idea in #2540). Two files that mint the same id (for example
plans/_done/x.mdvsplans/in-progress/x.md) are ranked by a lifecycle penalty computed on the root-relative path and a reversed-segment tie-break, so the winner no longer depends on ASCII filename order, absolute-vs-relative path form, or the checkout directory name. - Fix: the Windows skill now runs on PowerShell (#2528, thanks @tannermosher2015-debug). The Windows skill variant's steps were bash-only (
$(cat ...),rm -f,find -delete); they are now emitted as PowerShell (here-string interpreter invocations andRemove-Itemcleanup), with POSIX skills unchanged and step parity enforced by a generator check.