From c2d98634abc3644096ec1b02c418971297df8e28 Mon Sep 17 00:00:00 2001 From: Yehonal Date: Fri, 9 Oct 2026 05:22:58 +0000 Subject: [PATCH 1/4] Preserve integration replay ancestry and repair derived provenance incrementally --- CHANGELOG.md | 6 ++ README.md | 2 +- VERSION | 2 +- docs/index.html | 4 +- openpack.json | 2 +- scripts/syncwheel.py | 142 +++++++++++++++++++++++-- scripts/syncwheel_revision_provider.py | 1 + tests/test_coordination.py | 136 +++++++++++++++++++++++ tests/test_revision_provider.py | 29 +++-- 9 files changed, 297 insertions(+), 27 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3a35b3c..25235db 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,11 @@ # Changelog +## 0.45.2 - 2026-10-09 + +- Preserve every declared source commit during integration ancestry reconciliation. Validate the exact two-parent replay proof and reject a projection that discards unique product bytes. Recognize old-parent-only commits carried by a verified reconciliation, including a 46-commit, ten-stack regression, without assigning ownership to unrelated history. +- Recognize exact, already delivered superseded stack history and exact auto-merges of declared source commits. Keep unrelated or unproved commits blocked. +- Let Agentwheel repair stale derived graph-lock provenance one declared path at a time. A provider operation succeeds only when the stale set shrinks within its requested paths; other validation errors still block. + ## 0.45.1 - 2026-09-29 - Let `git pack-refs`, and so `git gc --auto` after an ordinary commit in any worktree, through the primary integration ref guard. Packing moves a loose ref into `packed-refs` as `0 -> current`, then prunes the loose copy as `current -> 0`; the guard read both as a move of the integration branch and failed maintenance with `refusing unauthorized primary integration ref move(s)`. A transaction line now passes when the ref still resolves to the same commit afterwards: a new value equal to the current one, or a prune whose old value is the current one and is already in `packed-refs`. Every real move or delete of the integration ref is still refused, including a delete of a packed ref, which always carries a `0 -> 0` line for the packed store. A degraded guard lets packing through for every branch the same way. The check runs before the ref-move authorization, so a Syncwheel command's own `gc --auto` no longer spends its single-use authorization on a no-op. diff --git a/README.md b/README.md index deeecc2..de74891 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ Keep many long-lived pull requests clean, rebuildable, and publishable from one manifest. -Current version: `0.45.1` +Current version: `0.45.2` `syncwheel` is a small CLI and workflow model for maintainers who carry several PR branches against an upstream repository and need those branches to stay diff --git a/VERSION b/VERSION index ff12df2..9f3a7d7 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -0.45.1 +0.45.2 diff --git a/docs/index.html b/docs/index.html index 6a92bcd..56b22f9 100644 --- a/docs/index.html +++ b/docs/index.html @@ -1826,7 +1826,7 @@
- AI-ready Git coordination v0.45.1 + AI-ready Git coordination v0.45.2

Move atmachine speed.Stay in control.

Syncwheel coordinates every Git lane used by humans, AI agents, CI and delivery systems—without sacrificing review, safety or recovery.

@@ -2602,7 +2602,7 @@

Your first verified plan in minutes.