Skip to content

fix(fork): folds list squash-landed fixups as members - #1591

Merged
donjor merged 1 commit into
hyprwsfrom
fix/fold-squash-landed-fixups
Oct 3, 2026
Merged

donjor merged 1 commit into
hyprwsfrom
fix/fold-squash-landed-fixups

Conversation

@donjor-agent

@donjor-agent donjor-agent Bot commented Oct 3, 2026

Copy link
Copy Markdown

🤖 claude/anthropic claude-opus-5-5 (high)

Problem

fork:fold apply refuses any fixup! member without a repair line under Squashes:, so it cannot fold the 48 fixup! <owner> (#N) commits the #1493 pay-down squash-landed on hyprws.
The sync's own fold places them as fixup, which discards each message, so it drops all 48 pull request links; fork:fold prove reports link guard → 48 finding(s) on that tip.

Change

memberLine treats a fixup! subject that carries a squash (#N) marker as a landing of its own: it renders as an ordinary member line, so the fold lists its sha and keeps its link.
A fixup! with neither a repair line nor a squash marker still refuses.

Scope and approval

Part of the authorized #1493 pay-down; keeps the #1491 rule that no fold drops a pull request link.

Verification

Check Result
vp test run scripts/fork-fold.test.ts 34 passed, including a new squash-landed fixup case
fork:fold apply of a plan joining each fixup to its owner, on cf2b4926cba 200 commits → 152
fork:fold prove origin/hyprws <fold> member guard 0, link guard 0, tree-equal, delta and scan exit 0
vp run fork:ci exit 0

Claude Opus 5.5 in Claude Code.

Fork trailers

Fork-Domain: fork-meta
Fork-Tier: core
Fork-Upstreamable: no

A `fixup! <owner> (#N)` landed by pull request now folds into its owner with its link kept, instead of refusing for lack of a repair line.

Fork-Domain: fork-meta
Fork-Tier: core
Fork-Upstreamable: no
@rsi-software-agent rsi-software-agent Bot added the size:S 10-29 effective changed lines (test files excluded in mixed PRs). label Oct 3, 2026
@donjor
donjor merged commit 7349b5c into hyprws Oct 3, 2026
@donjor
donjor deleted the fix/fold-squash-landed-fixups branch October 3, 2026 08:04
donjor added a commit that referenced this pull request Oct 3, 2026
## Problem

`fork:fold apply` refuses any `fixup!` member without a repair line under `Squashes:`, so it cannot fold the 48 `fixup! <owner> (#N)` commits the #1493 pay-down squash-landed on `hyprws`.
The sync's own fold places them as `fixup`, which discards each message, so it drops all 48 pull request links; `fork:fold prove` reports `link guard → 48 finding(s)` on that tip.

## Change

`memberLine` treats a `fixup!` subject that carries a squash ` (#N)` marker as a landing of its own: it renders as an ordinary member line, so the fold lists its sha and keeps its link.
A `fixup!` with neither a repair line nor a squash marker still refuses.

## Scope and approval

Part of the authorized #1493 pay-down; keeps the #1491 rule that no fold drops a pull request link.

## Verification

| Check | Result |
| --- | --- |
| `vp test run scripts/fork-fold.test.ts` | 34 passed, including a new squash-landed fixup case |
| `fork:fold apply` of a plan joining each fixup to its owner, on `cf2b4926cba` | 200 commits → 152 |
| `fork:fold prove origin/hyprws <fold>` | member guard 0, link guard 0, tree-equal, delta and scan exit 0 |
| `vp run fork:ci` | exit 0 |

Claude Opus 5.5 in Claude Code.

## Fork trailers

Fork-Domain: fork-meta
Fork-Tier: core
Fork-Upstreamable: no
Co-authored-by: donjor <[email protected]>
donjor added a commit that referenced this pull request Oct 3, 2026
…ds in (#N) (#1598)

## Problem

`fork:fold` tells a split piece from a squash-landed fixup by the trailing ` (#N)` on its subject.
A piece repeats its owner's subject, so an owner such as `fix(server): provider spawns drop another harness identity (#108)` makes its piece look landed.
The fold then lists the throwaway piece sha instead of the mover, and `fork:fold prove` refuses the member guard.

## Change

`memberLine` checks the repair line under `Squashes:` first:

| Fixup member | Renders as |
| --- | --- |
| carries a repair line | that repair line |
| no repair line, ` (#N)` marker | a landed member with its link |
| neither | refused, as before |

## Scope and approval

Found while splitting movers for #1493, batch B8; the #1591 change introduced the marker test.

## Verification

| Check | Result |
| --- | --- |
| `vp test run scripts/fork-fold.test.ts` | exit 0, 35 tests |
| new case without the fix | fails |
| `vp lint`, `vp fmt --check` on both files | exit 0, exit 0 |
| `vp run fork:ci` | exit 0 |

Claude Opus 5.5, Claude Code.

## Fork trailers

Fork-Domain: fork-meta
Fork-Tier: core
Fork-Upstreamable: no
Co-authored-by: donjor <[email protected]>
donjor pushed a commit that referenced this pull request Oct 3, 2026
## Problem

`fork:fold apply` refuses any `fixup!` member without a repair line under `Squashes:`, so it cannot fold the 48 `fixup! <owner> (#N)` commits the #1493 pay-down squash-landed on `hyprws`.
The sync's own fold places them as `fixup`, which discards each message, so it drops all 48 pull request links; `fork:fold prove` reports `link guard → 48 finding(s)` on that tip.

## Change

`memberLine` treats a `fixup!` subject that carries a squash ` (#N)` marker as a landing of its own: it renders as an ordinary member line, so the fold lists its sha and keeps its link.
A `fixup!` with neither a repair line nor a squash marker still refuses.

## Scope and approval

Part of the authorized #1493 pay-down; keeps the #1491 rule that no fold drops a pull request link.

## Verification

| Check | Result |
| --- | --- |
| `vp test run scripts/fork-fold.test.ts` | 34 passed, including a new squash-landed fixup case |
| `fork:fold apply` of a plan joining each fixup to its owner, on `cf2b4926cba` | 200 commits → 152 |
| `fork:fold prove origin/hyprws <fold>` | member guard 0, link guard 0, tree-equal, delta and scan exit 0 |
| `vp run fork:ci` | exit 0 |

Claude Opus 5.5 in Claude Code.

## Fork trailers

Fork-Domain: fork-meta
Fork-Tier: core
Fork-Upstreamable: no
Co-authored-by: donjor <[email protected]>
donjor added a commit that referenced this pull request Oct 3, 2026
…ds in (#N) (#1598)

## Problem

`fork:fold` tells a split piece from a squash-landed fixup by the trailing ` (#N)` on its subject.
A piece repeats its owner's subject, so an owner such as `fix(server): provider spawns drop another harness identity (#108)` makes its piece look landed.
The fold then lists the throwaway piece sha instead of the mover, and `fork:fold prove` refuses the member guard.

## Change

`memberLine` checks the repair line under `Squashes:` first:

| Fixup member | Renders as |
| --- | --- |
| carries a repair line | that repair line |
| no repair line, ` (#N)` marker | a landed member with its link |
| neither | refused, as before |

## Scope and approval

Found while splitting movers for #1493, batch B8; the #1591 change introduced the marker test.

## Verification

| Check | Result |
| --- | --- |
| `vp test run scripts/fork-fold.test.ts` | exit 0, 35 tests |
| new case without the fix | fails |
| `vp lint`, `vp fmt --check` on both files | exit 0, exit 0 |
| `vp run fork:ci` | exit 0 |

Claude Opus 5.5, Claude Code.

## Fork trailers

Fork-Domain: fork-meta
Fork-Tier: core
Fork-Upstreamable: no
Co-authored-by: donjor <[email protected]>
donjor pushed a commit that referenced this pull request Oct 3, 2026
## Problem

`fork:fold apply` refuses any `fixup!` member without a repair line under `Squashes:`, so it cannot fold the 48 `fixup! <owner> (#N)` commits the #1493 pay-down squash-landed on `hyprws`.
The sync's own fold places them as `fixup`, which discards each message, so it drops all 48 pull request links; `fork:fold prove` reports `link guard → 48 finding(s)` on that tip.

## Change

`memberLine` treats a `fixup!` subject that carries a squash ` (#N)` marker as a landing of its own: it renders as an ordinary member line, so the fold lists its sha and keeps its link.
A `fixup!` with neither a repair line nor a squash marker still refuses.

## Scope and approval

Part of the authorized #1493 pay-down; keeps the #1491 rule that no fold drops a pull request link.

## Verification

| Check | Result |
| --- | --- |
| `vp test run scripts/fork-fold.test.ts` | 34 passed, including a new squash-landed fixup case |
| `fork:fold apply` of a plan joining each fixup to its owner, on `cf2b4926cba` | 200 commits → 152 |
| `fork:fold prove origin/hyprws <fold>` | member guard 0, link guard 0, tree-equal, delta and scan exit 0 |
| `vp run fork:ci` | exit 0 |

Claude Opus 5.5 in Claude Code.

## Fork trailers

Fork-Domain: fork-meta
Fork-Tier: core
Fork-Upstreamable: no
Co-authored-by: donjor <[email protected]>
donjor added a commit that referenced this pull request Oct 3, 2026
…ds in (#N) (#1598)

## Problem

`fork:fold` tells a split piece from a squash-landed fixup by the trailing ` (#N)` on its subject.
A piece repeats its owner's subject, so an owner such as `fix(server): provider spawns drop another harness identity (#108)` makes its piece look landed.
The fold then lists the throwaway piece sha instead of the mover, and `fork:fold prove` refuses the member guard.

## Change

`memberLine` checks the repair line under `Squashes:` first:

| Fixup member | Renders as |
| --- | --- |
| carries a repair line | that repair line |
| no repair line, ` (#N)` marker | a landed member with its link |
| neither | refused, as before |

## Scope and approval

Found while splitting movers for #1493, batch B8; the #1591 change introduced the marker test.

## Verification

| Check | Result |
| --- | --- |
| `vp test run scripts/fork-fold.test.ts` | exit 0, 35 tests |
| new case without the fix | fails |
| `vp lint`, `vp fmt --check` on both files | exit 0, exit 0 |
| `vp run fork:ci` | exit 0 |

Claude Opus 5.5, Claude Code.

## Fork trailers

Fork-Domain: fork-meta
Fork-Tier: core
Fork-Upstreamable: no
Co-authored-by: donjor <[email protected]>
donjor pushed a commit that referenced this pull request Oct 4, 2026
## Problem

`fork:fold apply` refuses any `fixup!` member without a repair line under `Squashes:`, so it cannot fold the 48 `fixup! <owner> (#N)` commits the #1493 pay-down squash-landed on `hyprws`.
The sync's own fold places them as `fixup`, which discards each message, so it drops all 48 pull request links; `fork:fold prove` reports `link guard → 48 finding(s)` on that tip.

## Change

`memberLine` treats a `fixup!` subject that carries a squash ` (#N)` marker as a landing of its own: it renders as an ordinary member line, so the fold lists its sha and keeps its link.
A `fixup!` with neither a repair line nor a squash marker still refuses.

## Scope and approval

Part of the authorized #1493 pay-down; keeps the #1491 rule that no fold drops a pull request link.

## Verification

| Check | Result |
| --- | --- |
| `vp test run scripts/fork-fold.test.ts` | 34 passed, including a new squash-landed fixup case |
| `fork:fold apply` of a plan joining each fixup to its owner, on `cf2b4926cba` | 200 commits → 152 |
| `fork:fold prove origin/hyprws <fold>` | member guard 0, link guard 0, tree-equal, delta and scan exit 0 |
| `vp run fork:ci` | exit 0 |

Claude Opus 5.5 in Claude Code.

## Fork trailers

Fork-Domain: fork-meta
Fork-Tier: core
Fork-Upstreamable: no
Co-authored-by: donjor <[email protected]>
donjor added a commit that referenced this pull request Oct 4, 2026
…ds in (#N) (#1598)

## Problem

`fork:fold` tells a split piece from a squash-landed fixup by the trailing ` (#N)` on its subject.
A piece repeats its owner's subject, so an owner such as `fix(server): provider spawns drop another harness identity (#108)` makes its piece look landed.
The fold then lists the throwaway piece sha instead of the mover, and `fork:fold prove` refuses the member guard.

## Change

`memberLine` checks the repair line under `Squashes:` first:

| Fixup member | Renders as |
| --- | --- |
| carries a repair line | that repair line |
| no repair line, ` (#N)` marker | a landed member with its link |
| neither | refused, as before |

## Scope and approval

Found while splitting movers for #1493, batch B8; the #1591 change introduced the marker test.

## Verification

| Check | Result |
| --- | --- |
| `vp test run scripts/fork-fold.test.ts` | exit 0, 35 tests |
| new case without the fix | fails |
| `vp lint`, `vp fmt --check` on both files | exit 0, exit 0 |
| `vp run fork:ci` | exit 0 |

Claude Opus 5.5, Claude Code.

## Fork trailers

Fork-Domain: fork-meta
Fork-Tier: core
Fork-Upstreamable: no
Co-authored-by: donjor <[email protected]>
donjor pushed a commit that referenced this pull request Oct 4, 2026
## Problem

`fork:fold apply` refuses any `fixup!` member without a repair line under `Squashes:`, so it cannot fold the 48 `fixup! <owner> (#N)` commits the #1493 pay-down squash-landed on `hyprws`.
The sync's own fold places them as `fixup`, which discards each message, so it drops all 48 pull request links; `fork:fold prove` reports `link guard → 48 finding(s)` on that tip.

## Change

`memberLine` treats a `fixup!` subject that carries a squash ` (#N)` marker as a landing of its own: it renders as an ordinary member line, so the fold lists its sha and keeps its link.
A `fixup!` with neither a repair line nor a squash marker still refuses.

## Scope and approval

Part of the authorized #1493 pay-down; keeps the #1491 rule that no fold drops a pull request link.

## Verification

| Check | Result |
| --- | --- |
| `vp test run scripts/fork-fold.test.ts` | 34 passed, including a new squash-landed fixup case |
| `fork:fold apply` of a plan joining each fixup to its owner, on `cf2b4926cba` | 200 commits → 152 |
| `fork:fold prove origin/hyprws <fold>` | member guard 0, link guard 0, tree-equal, delta and scan exit 0 |
| `vp run fork:ci` | exit 0 |

Claude Opus 5.5 in Claude Code.

## Fork trailers

Fork-Domain: fork-meta
Fork-Tier: core
Fork-Upstreamable: no
Co-authored-by: donjor <[email protected]>
donjor added a commit that referenced this pull request Oct 4, 2026
…ds in (#N) (#1598)

## Problem

`fork:fold` tells a split piece from a squash-landed fixup by the trailing ` (#N)` on its subject.
A piece repeats its owner's subject, so an owner such as `fix(server): provider spawns drop another harness identity (#108)` makes its piece look landed.
The fold then lists the throwaway piece sha instead of the mover, and `fork:fold prove` refuses the member guard.

## Change

`memberLine` checks the repair line under `Squashes:` first:

| Fixup member | Renders as |
| --- | --- |
| carries a repair line | that repair line |
| no repair line, ` (#N)` marker | a landed member with its link |
| neither | refused, as before |

## Scope and approval

Found while splitting movers for #1493, batch B8; the #1591 change introduced the marker test.

## Verification

| Check | Result |
| --- | --- |
| `vp test run scripts/fork-fold.test.ts` | exit 0, 35 tests |
| new case without the fix | fails |
| `vp lint`, `vp fmt --check` on both files | exit 0, exit 0 |
| `vp run fork:ci` | exit 0 |

Claude Opus 5.5, Claude Code.

## Fork trailers

Fork-Domain: fork-meta
Fork-Tier: core
Fork-Upstreamable: no
Co-authored-by: donjor <[email protected]>
donjor pushed a commit that referenced this pull request Oct 4, 2026
## Problem

`fork:fold apply` refuses any `fixup!` member without a repair line under `Squashes:`, so it cannot fold the 48 `fixup! <owner> (#N)` commits the #1493 pay-down squash-landed on `hyprws`.
The sync's own fold places them as `fixup`, which discards each message, so it drops all 48 pull request links; `fork:fold prove` reports `link guard → 48 finding(s)` on that tip.

## Change

`memberLine` treats a `fixup!` subject that carries a squash ` (#N)` marker as a landing of its own: it renders as an ordinary member line, so the fold lists its sha and keeps its link.
A `fixup!` with neither a repair line nor a squash marker still refuses.

## Scope and approval

Part of the authorized #1493 pay-down; keeps the #1491 rule that no fold drops a pull request link.

## Verification

| Check | Result |
| --- | --- |
| `vp test run scripts/fork-fold.test.ts` | 34 passed, including a new squash-landed fixup case |
| `fork:fold apply` of a plan joining each fixup to its owner, on `cf2b4926cba` | 200 commits → 152 |
| `fork:fold prove origin/hyprws <fold>` | member guard 0, link guard 0, tree-equal, delta and scan exit 0 |
| `vp run fork:ci` | exit 0 |

Claude Opus 5.5 in Claude Code.

## Fork trailers

Fork-Domain: fork-meta
Fork-Tier: core
Fork-Upstreamable: no
Co-authored-by: donjor <[email protected]>
donjor added a commit that referenced this pull request Oct 4, 2026
…ds in (#N) (#1598)

## Problem

`fork:fold` tells a split piece from a squash-landed fixup by the trailing ` (#N)` on its subject.
A piece repeats its owner's subject, so an owner such as `fix(server): provider spawns drop another harness identity (#108)` makes its piece look landed.
The fold then lists the throwaway piece sha instead of the mover, and `fork:fold prove` refuses the member guard.

## Change

`memberLine` checks the repair line under `Squashes:` first:

| Fixup member | Renders as |
| --- | --- |
| carries a repair line | that repair line |
| no repair line, ` (#N)` marker | a landed member with its link |
| neither | refused, as before |

## Scope and approval

Found while splitting movers for #1493, batch B8; the #1591 change introduced the marker test.

## Verification

| Check | Result |
| --- | --- |
| `vp test run scripts/fork-fold.test.ts` | exit 0, 35 tests |
| new case without the fix | fails |
| `vp lint`, `vp fmt --check` on both files | exit 0, exit 0 |
| `vp run fork:ci` | exit 0 |

Claude Opus 5.5, Claude Code.

## Fork trailers

Fork-Domain: fork-meta
Fork-Tier: core
Fork-Upstreamable: no
Co-authored-by: donjor <[email protected]>
donjor pushed a commit that referenced this pull request Oct 4, 2026
## Problem

`fork:fold apply` refuses any `fixup!` member without a repair line under `Squashes:`, so it cannot fold the 48 `fixup! <owner> (#N)` commits the #1493 pay-down squash-landed on `hyprws`.
The sync's own fold places them as `fixup`, which discards each message, so it drops all 48 pull request links; `fork:fold prove` reports `link guard → 48 finding(s)` on that tip.

## Change

`memberLine` treats a `fixup!` subject that carries a squash ` (#N)` marker as a landing of its own: it renders as an ordinary member line, so the fold lists its sha and keeps its link.
A `fixup!` with neither a repair line nor a squash marker still refuses.

## Scope and approval

Part of the authorized #1493 pay-down; keeps the #1491 rule that no fold drops a pull request link.

## Verification

| Check | Result |
| --- | --- |
| `vp test run scripts/fork-fold.test.ts` | 34 passed, including a new squash-landed fixup case |
| `fork:fold apply` of a plan joining each fixup to its owner, on `cf2b4926cba` | 200 commits → 152 |
| `fork:fold prove origin/hyprws <fold>` | member guard 0, link guard 0, tree-equal, delta and scan exit 0 |
| `vp run fork:ci` | exit 0 |

Claude Opus 5.5 in Claude Code.

## Fork trailers

Fork-Domain: fork-meta
Fork-Tier: core
Fork-Upstreamable: no
Co-authored-by: donjor <[email protected]>
donjor added a commit that referenced this pull request Oct 4, 2026
…ds in (#N) (#1598)

## Problem

`fork:fold` tells a split piece from a squash-landed fixup by the trailing ` (#N)` on its subject.
A piece repeats its owner's subject, so an owner such as `fix(server): provider spawns drop another harness identity (#108)` makes its piece look landed.
The fold then lists the throwaway piece sha instead of the mover, and `fork:fold prove` refuses the member guard.

## Change

`memberLine` checks the repair line under `Squashes:` first:

| Fixup member | Renders as |
| --- | --- |
| carries a repair line | that repair line |
| no repair line, ` (#N)` marker | a landed member with its link |
| neither | refused, as before |

## Scope and approval

Found while splitting movers for #1493, batch B8; the #1591 change introduced the marker test.

## Verification

| Check | Result |
| --- | --- |
| `vp test run scripts/fork-fold.test.ts` | exit 0, 35 tests |
| new case without the fix | fails |
| `vp lint`, `vp fmt --check` on both files | exit 0, exit 0 |
| `vp run fork:ci` | exit 0 |

Claude Opus 5.5, Claude Code.

## Fork trailers

Fork-Domain: fork-meta
Fork-Tier: core
Fork-Upstreamable: no
Co-authored-by: donjor <[email protected]>
donjor added a commit that referenced this pull request Oct 4, 2026
## Problem

`fork:fold apply` refuses any `fixup!` member without a repair line under `Squashes:`, so it cannot fold the 48 `fixup! <owner> (#N)` commits the #1493 pay-down squash-landed on `hyprws`.
The sync's own fold places them as `fixup`, which discards each message, so it drops all 48 pull request links; `fork:fold prove` reports `link guard → 48 finding(s)` on that tip.

## Change

`memberLine` treats a `fixup!` subject that carries a squash ` (#N)` marker as a landing of its own: it renders as an ordinary member line, so the fold lists its sha and keeps its link.
A `fixup!` with neither a repair line nor a squash marker still refuses.

## Scope and approval

Part of the authorized #1493 pay-down; keeps the #1491 rule that no fold drops a pull request link.

## Verification

| Check | Result |
| --- | --- |
| `vp test run scripts/fork-fold.test.ts` | 34 passed, including a new squash-landed fixup case |
| `fork:fold apply` of a plan joining each fixup to its owner, on `cf2b4926cba` | 200 commits → 152 |
| `fork:fold prove origin/hyprws <fold>` | member guard 0, link guard 0, tree-equal, delta and scan exit 0 |
| `vp run fork:ci` | exit 0 |

Claude Opus 5.5 in Claude Code.

## Fork trailers

Fork-Domain: fork-meta
Fork-Tier: core
Fork-Upstreamable: no
Co-authored-by: donjor <[email protected]>
donjor added a commit that referenced this pull request Oct 4, 2026
…ds in (#N) (#1598)

## Problem

`fork:fold` tells a split piece from a squash-landed fixup by the trailing ` (#N)` on its subject.
A piece repeats its owner's subject, so an owner such as `fix(server): provider spawns drop another harness identity (#108)` makes its piece look landed.
The fold then lists the throwaway piece sha instead of the mover, and `fork:fold prove` refuses the member guard.

## Change

`memberLine` checks the repair line under `Squashes:` first:

| Fixup member | Renders as |
| --- | --- |
| carries a repair line | that repair line |
| no repair line, ` (#N)` marker | a landed member with its link |
| neither | refused, as before |

## Scope and approval

Found while splitting movers for #1493, batch B8; the #1591 change introduced the marker test.

## Verification

| Check | Result |
| --- | --- |
| `vp test run scripts/fork-fold.test.ts` | exit 0, 35 tests |
| new case without the fix | fails |
| `vp lint`, `vp fmt --check` on both files | exit 0, exit 0 |
| `vp run fork:ci` | exit 0 |

Claude Opus 5.5, Claude Code.

## Fork trailers

Fork-Domain: fork-meta
Fork-Tier: core
Fork-Upstreamable: no
Co-authored-by: donjor <[email protected]>
donjor added a commit that referenced this pull request Oct 6, 2026
## Problem

`fork:fold apply` refuses any `fixup!` member without a repair line under `Squashes:`, so it cannot fold the 48 `fixup! <owner> (#N)` commits the #1493 pay-down squash-landed on `hyprws`.
The sync's own fold places them as `fixup`, which discards each message, so it drops all 48 pull request links; `fork:fold prove` reports `link guard → 48 finding(s)` on that tip.

## Change

`memberLine` treats a `fixup!` subject that carries a squash ` (#N)` marker as a landing of its own: it renders as an ordinary member line, so the fold lists its sha and keeps its link.
A `fixup!` with neither a repair line nor a squash marker still refuses.

## Scope and approval

Part of the authorized #1493 pay-down; keeps the #1491 rule that no fold drops a pull request link.

## Verification

| Check | Result |
| --- | --- |
| `vp test run scripts/fork-fold.test.ts` | 34 passed, including a new squash-landed fixup case |
| `fork:fold apply` of a plan joining each fixup to its owner, on `cf2b4926cba` | 200 commits → 152 |
| `fork:fold prove origin/hyprws <fold>` | member guard 0, link guard 0, tree-equal, delta and scan exit 0 |
| `vp run fork:ci` | exit 0 |

Claude Opus 5.5 in Claude Code.

## Fork trailers

Fork-Domain: fork-meta
Fork-Tier: core
Fork-Upstreamable: no
Co-authored-by: donjor <[email protected]>
donjor added a commit that referenced this pull request Oct 6, 2026
…ds in (#N) (#1598)

## Problem

`fork:fold` tells a split piece from a squash-landed fixup by the trailing ` (#N)` on its subject.
A piece repeats its owner's subject, so an owner such as `fix(server): provider spawns drop another harness identity (#108)` makes its piece look landed.
The fold then lists the throwaway piece sha instead of the mover, and `fork:fold prove` refuses the member guard.

## Change

`memberLine` checks the repair line under `Squashes:` first:

| Fixup member | Renders as |
| --- | --- |
| carries a repair line | that repair line |
| no repair line, ` (#N)` marker | a landed member with its link |
| neither | refused, as before |

## Scope and approval

Found while splitting movers for #1493, batch B8; the #1591 change introduced the marker test.

## Verification

| Check | Result |
| --- | --- |
| `vp test run scripts/fork-fold.test.ts` | exit 0, 35 tests |
| new case without the fix | fails |
| `vp lint`, `vp fmt --check` on both files | exit 0, exit 0 |
| `vp run fork:ci` | exit 0 |

Claude Opus 5.5, Claude Code.

## Fork trailers

Fork-Domain: fork-meta
Fork-Tier: core
Fork-Upstreamable: no
Co-authored-by: donjor <[email protected]>
donjor added a commit that referenced this pull request Oct 6, 2026
## Problem

`fork:fold apply` refuses any `fixup!` member without a repair line under `Squashes:`, so it cannot fold the 48 `fixup! <owner> (#N)` commits the #1493 pay-down squash-landed on `hyprws`.
The sync's own fold places them as `fixup`, which discards each message, so it drops all 48 pull request links; `fork:fold prove` reports `link guard → 48 finding(s)` on that tip.

## Change

`memberLine` treats a `fixup!` subject that carries a squash ` (#N)` marker as a landing of its own: it renders as an ordinary member line, so the fold lists its sha and keeps its link.
A `fixup!` with neither a repair line nor a squash marker still refuses.

## Scope and approval

Part of the authorized #1493 pay-down; keeps the #1491 rule that no fold drops a pull request link.

## Verification

| Check | Result |
| --- | --- |
| `vp test run scripts/fork-fold.test.ts` | 34 passed, including a new squash-landed fixup case |
| `fork:fold apply` of a plan joining each fixup to its owner, on `cf2b4926cba` | 200 commits → 152 |
| `fork:fold prove origin/hyprws <fold>` | member guard 0, link guard 0, tree-equal, delta and scan exit 0 |
| `vp run fork:ci` | exit 0 |

Claude Opus 5.5 in Claude Code.

## Fork trailers

Fork-Domain: fork-meta
Fork-Tier: core
Fork-Upstreamable: no
Co-authored-by: donjor <[email protected]>
donjor added a commit that referenced this pull request Oct 6, 2026
…ds in (#N) (#1598)

## Problem

`fork:fold` tells a split piece from a squash-landed fixup by the trailing ` (#N)` on its subject.
A piece repeats its owner's subject, so an owner such as `fix(server): provider spawns drop another harness identity (#108)` makes its piece look landed.
The fold then lists the throwaway piece sha instead of the mover, and `fork:fold prove` refuses the member guard.

## Change

`memberLine` checks the repair line under `Squashes:` first:

| Fixup member | Renders as |
| --- | --- |
| carries a repair line | that repair line |
| no repair line, ` (#N)` marker | a landed member with its link |
| neither | refused, as before |

## Scope and approval

Found while splitting movers for #1493, batch B8; the #1591 change introduced the marker test.

## Verification

| Check | Result |
| --- | --- |
| `vp test run scripts/fork-fold.test.ts` | exit 0, 35 tests |
| new case without the fix | fails |
| `vp lint`, `vp fmt --check` on both files | exit 0, exit 0 |
| `vp run fork:ci` | exit 0 |

Claude Opus 5.5, Claude Code.

## Fork trailers

Fork-Domain: fork-meta
Fork-Tier: core
Fork-Upstreamable: no
Co-authored-by: donjor <[email protected]>
donjor added a commit that referenced this pull request Oct 8, 2026
## Problem

`fork:fold apply` refuses any `fixup!` member without a repair line under `Squashes:`, so it cannot fold the 48 `fixup! <owner> (#N)` commits the #1493 pay-down squash-landed on `hyprws`.
The sync's own fold places them as `fixup`, which discards each message, so it drops all 48 pull request links; `fork:fold prove` reports `link guard → 48 finding(s)` on that tip.

## Change

`memberLine` treats a `fixup!` subject that carries a squash ` (#N)` marker as a landing of its own: it renders as an ordinary member line, so the fold lists its sha and keeps its link.
A `fixup!` with neither a repair line nor a squash marker still refuses.

## Scope and approval

Part of the authorized #1493 pay-down; keeps the #1491 rule that no fold drops a pull request link.

## Verification

| Check | Result |
| --- | --- |
| `vp test run scripts/fork-fold.test.ts` | 34 passed, including a new squash-landed fixup case |
| `fork:fold apply` of a plan joining each fixup to its owner, on `cf2b4926cba` | 200 commits → 152 |
| `fork:fold prove origin/hyprws <fold>` | member guard 0, link guard 0, tree-equal, delta and scan exit 0 |
| `vp run fork:ci` | exit 0 |

Claude Opus 5.5 in Claude Code.

## Fork trailers

Fork-Domain: fork-meta
Fork-Tier: core
Fork-Upstreamable: no
Co-authored-by: donjor <[email protected]>
donjor added a commit that referenced this pull request Oct 8, 2026
…ds in (#N) (#1598)

## Problem

`fork:fold` tells a split piece from a squash-landed fixup by the trailing ` (#N)` on its subject.
A piece repeats its owner's subject, so an owner such as `fix(server): provider spawns drop another harness identity (#108)` makes its piece look landed.
The fold then lists the throwaway piece sha instead of the mover, and `fork:fold prove` refuses the member guard.

## Change

`memberLine` checks the repair line under `Squashes:` first:

| Fixup member | Renders as |
| --- | --- |
| carries a repair line | that repair line |
| no repair line, ` (#N)` marker | a landed member with its link |
| neither | refused, as before |

## Scope and approval

Found while splitting movers for #1493, batch B8; the #1591 change introduced the marker test.

## Verification

| Check | Result |
| --- | --- |
| `vp test run scripts/fork-fold.test.ts` | exit 0, 35 tests |
| new case without the fix | fails |
| `vp lint`, `vp fmt --check` on both files | exit 0, exit 0 |
| `vp run fork:ci` | exit 0 |

Claude Opus 5.5, Claude Code.

## Fork trailers

Fork-Domain: fork-meta
Fork-Tier: core
Fork-Upstreamable: no
Co-authored-by: donjor <[email protected]>
donjor added a commit that referenced this pull request Oct 12, 2026
…ds in (#N) (#1598)

## Problem

`fork:fold` tells a split piece from a squash-landed fixup by the trailing ` (#N)` on its subject.
A piece repeats its owner's subject, so an owner such as `fix(server): provider spawns drop another harness identity (#108)` makes its piece look landed.
The fold then lists the throwaway piece sha instead of the mover, and `fork:fold prove` refuses the member guard.

## Change

`memberLine` checks the repair line under `Squashes:` first:

| Fixup member | Renders as |
| --- | --- |
| carries a repair line | that repair line |
| no repair line, ` (#N)` marker | a landed member with its link |
| neither | refused, as before |

## Scope and approval

Found while splitting movers for #1493, batch B8; the #1591 change introduced the marker test.

## Verification

| Check | Result |
| --- | --- |
| `vp test run scripts/fork-fold.test.ts` | exit 0, 35 tests |
| new case without the fix | fails |
| `vp lint`, `vp fmt --check` on both files | exit 0, exit 0 |
| `vp run fork:ci` | exit 0 |

Claude Opus 5.5, Claude Code.

## Fork trailers

Fork-Domain: fork-meta
Fork-Tier: core
Fork-Upstreamable: no
Co-authored-by: donjor <[email protected]>
donjor added a commit that referenced this pull request Oct 13, 2026
## Problem

`fork:fold apply` refuses any `fixup!` member without a repair line under `Squashes:`, so it cannot fold the 48 `fixup! <owner> (#N)` commits the #1493 pay-down squash-landed on `hyprws`.
The sync's own fold places them as `fixup`, which discards each message, so it drops all 48 pull request links; `fork:fold prove` reports `link guard → 48 finding(s)` on that tip.

## Change

`memberLine` treats a `fixup!` subject that carries a squash ` (#N)` marker as a landing of its own: it renders as an ordinary member line, so the fold lists its sha and keeps its link.
A `fixup!` with neither a repair line nor a squash marker still refuses.

## Scope and approval

Part of the authorized #1493 pay-down; keeps the #1491 rule that no fold drops a pull request link.

## Verification

| Check | Result |
| --- | --- |
| `vp test run scripts/fork-fold.test.ts` | 34 passed, including a new squash-landed fixup case |
| `fork:fold apply` of a plan joining each fixup to its owner, on `cf2b4926cba` | 200 commits → 152 |
| `fork:fold prove origin/hyprws <fold>` | member guard 0, link guard 0, tree-equal, delta and scan exit 0 |
| `vp run fork:ci` | exit 0 |

Claude Opus 5.5 in Claude Code.

## Fork trailers

Fork-Domain: fork-meta
Fork-Tier: core
Fork-Upstreamable: no
Co-authored-by: donjor <[email protected]>
donjor added a commit that referenced this pull request Oct 13, 2026
…ds in (#N) (#1598)

## Problem

`fork:fold` tells a split piece from a squash-landed fixup by the trailing ` (#N)` on its subject.
A piece repeats its owner's subject, so an owner such as `fix(server): provider spawns drop another harness identity (#108)` makes its piece look landed.
The fold then lists the throwaway piece sha instead of the mover, and `fork:fold prove` refuses the member guard.

## Change

`memberLine` checks the repair line under `Squashes:` first:

| Fixup member | Renders as |
| --- | --- |
| carries a repair line | that repair line |
| no repair line, ` (#N)` marker | a landed member with its link |
| neither | refused, as before |

## Scope and approval

Found while splitting movers for #1493, batch B8; the #1591 change introduced the marker test.

## Verification

| Check | Result |
| --- | --- |
| `vp test run scripts/fork-fold.test.ts` | exit 0, 35 tests |
| new case without the fix | fails |
| `vp lint`, `vp fmt --check` on both files | exit 0, exit 0 |
| `vp run fork:ci` | exit 0 |

Claude Opus 5.5, Claude Code.

## Fork trailers

Fork-Domain: fork-meta
Fork-Tier: core
Fork-Upstreamable: no
Co-authored-by: donjor <[email protected]>
donjor added a commit that referenced this pull request Oct 15, 2026
## Problem

`fork:fold apply` refuses any `fixup!` member without a repair line under `Squashes:`, so it cannot fold the 48 `fixup! <owner> (#N)` commits the #1493 pay-down squash-landed on `hyprws`.
The sync's own fold places them as `fixup`, which discards each message, so it drops all 48 pull request links; `fork:fold prove` reports `link guard → 48 finding(s)` on that tip.

## Change

`memberLine` treats a `fixup!` subject that carries a squash ` (#N)` marker as a landing of its own: it renders as an ordinary member line, so the fold lists its sha and keeps its link.
A `fixup!` with neither a repair line nor a squash marker still refuses.

## Scope and approval

Part of the authorized #1493 pay-down; keeps the #1491 rule that no fold drops a pull request link.

## Verification

| Check | Result |
| --- | --- |
| `vp test run scripts/fork-fold.test.ts` | 34 passed, including a new squash-landed fixup case |
| `fork:fold apply` of a plan joining each fixup to its owner, on `cf2b4926cba` | 200 commits → 152 |
| `fork:fold prove origin/hyprws <fold>` | member guard 0, link guard 0, tree-equal, delta and scan exit 0 |
| `vp run fork:ci` | exit 0 |

Claude Opus 5.5 in Claude Code.

## Fork trailers

Fork-Domain: fork-meta
Fork-Tier: core
Fork-Upstreamable: no
Co-authored-by: donjor <[email protected]>
donjor added a commit that referenced this pull request Oct 15, 2026
…ds in (#N) (#1598)

## Problem

`fork:fold` tells a split piece from a squash-landed fixup by the trailing ` (#N)` on its subject.
A piece repeats its owner's subject, so an owner such as `fix(server): provider spawns drop another harness identity (#108)` makes its piece look landed.
The fold then lists the throwaway piece sha instead of the mover, and `fork:fold prove` refuses the member guard.

## Change

`memberLine` checks the repair line under `Squashes:` first:

| Fixup member | Renders as |
| --- | --- |
| carries a repair line | that repair line |
| no repair line, ` (#N)` marker | a landed member with its link |
| neither | refused, as before |

## Scope and approval

Found while splitting movers for #1493, batch B8; the #1591 change introduced the marker test.

## Verification

| Check | Result |
| --- | --- |
| `vp test run scripts/fork-fold.test.ts` | exit 0, 35 tests |
| new case without the fix | fails |
| `vp lint`, `vp fmt --check` on both files | exit 0, exit 0 |
| `vp run fork:ci` | exit 0 |

Claude Opus 5.5, Claude Code.

## Fork trailers

Fork-Domain: fork-meta
Fork-Tier: core
Fork-Upstreamable: no
Co-authored-by: donjor <[email protected]>
donjor added a commit that referenced this pull request Oct 15, 2026
## Problem

`fork:fold apply` refuses any `fixup!` member without a repair line under `Squashes:`, so it cannot fold the 48 `fixup! <owner> (#N)` commits the #1493 pay-down squash-landed on `hyprws`.
The sync's own fold places them as `fixup`, which discards each message, so it drops all 48 pull request links; `fork:fold prove` reports `link guard → 48 finding(s)` on that tip.

## Change

`memberLine` treats a `fixup!` subject that carries a squash ` (#N)` marker as a landing of its own: it renders as an ordinary member line, so the fold lists its sha and keeps its link.
A `fixup!` with neither a repair line nor a squash marker still refuses.

## Scope and approval

Part of the authorized #1493 pay-down; keeps the #1491 rule that no fold drops a pull request link.

## Verification

| Check | Result |
| --- | --- |
| `vp test run scripts/fork-fold.test.ts` | 34 passed, including a new squash-landed fixup case |
| `fork:fold apply` of a plan joining each fixup to its owner, on `cf2b4926cba` | 200 commits → 152 |
| `fork:fold prove origin/hyprws <fold>` | member guard 0, link guard 0, tree-equal, delta and scan exit 0 |
| `vp run fork:ci` | exit 0 |

Claude Opus 5.5 in Claude Code.

## Fork trailers

Fork-Domain: fork-meta
Fork-Tier: core
Fork-Upstreamable: no
Co-authored-by: donjor <[email protected]>
donjor added a commit that referenced this pull request Oct 15, 2026
…ds in (#N) (#1598)

## Problem

`fork:fold` tells a split piece from a squash-landed fixup by the trailing ` (#N)` on its subject.
A piece repeats its owner's subject, so an owner such as `fix(server): provider spawns drop another harness identity (#108)` makes its piece look landed.
The fold then lists the throwaway piece sha instead of the mover, and `fork:fold prove` refuses the member guard.

## Change

`memberLine` checks the repair line under `Squashes:` first:

| Fixup member | Renders as |
| --- | --- |
| carries a repair line | that repair line |
| no repair line, ` (#N)` marker | a landed member with its link |
| neither | refused, as before |

## Scope and approval

Found while splitting movers for #1493, batch B8; the #1591 change introduced the marker test.

## Verification

| Check | Result |
| --- | --- |
| `vp test run scripts/fork-fold.test.ts` | exit 0, 35 tests |
| new case without the fix | fails |
| `vp lint`, `vp fmt --check` on both files | exit 0, exit 0 |
| `vp run fork:ci` | exit 0 |

Claude Opus 5.5, Claude Code.

## Fork trailers

Fork-Domain: fork-meta
Fork-Tier: core
Fork-Upstreamable: no
Co-authored-by: donjor <[email protected]>
donjor added a commit that referenced this pull request Oct 16, 2026
## Problem

`fork:fold apply` refuses any `fixup!` member without a repair line under `Squashes:`, so it cannot fold the 48 `fixup! <owner> (#N)` commits the #1493 pay-down squash-landed on `hyprws`.
The sync's own fold places them as `fixup`, which discards each message, so it drops all 48 pull request links; `fork:fold prove` reports `link guard → 48 finding(s)` on that tip.

## Change

`memberLine` treats a `fixup!` subject that carries a squash ` (#N)` marker as a landing of its own: it renders as an ordinary member line, so the fold lists its sha and keeps its link.
A `fixup!` with neither a repair line nor a squash marker still refuses.

## Scope and approval

Part of the authorized #1493 pay-down; keeps the #1491 rule that no fold drops a pull request link.

## Verification

| Check | Result |
| --- | --- |
| `vp test run scripts/fork-fold.test.ts` | 34 passed, including a new squash-landed fixup case |
| `fork:fold apply` of a plan joining each fixup to its owner, on `cf2b4926cba` | 200 commits → 152 |
| `fork:fold prove origin/hyprws <fold>` | member guard 0, link guard 0, tree-equal, delta and scan exit 0 |
| `vp run fork:ci` | exit 0 |

Claude Opus 5.5 in Claude Code.

## Fork trailers

Fork-Domain: fork-meta
Fork-Tier: core
Fork-Upstreamable: no
Co-authored-by: donjor <[email protected]>
donjor added a commit that referenced this pull request Oct 16, 2026
…ds in (#N) (#1598)

## Problem

`fork:fold` tells a split piece from a squash-landed fixup by the trailing ` (#N)` on its subject.
A piece repeats its owner's subject, so an owner such as `fix(server): provider spawns drop another harness identity (#108)` makes its piece look landed.
The fold then lists the throwaway piece sha instead of the mover, and `fork:fold prove` refuses the member guard.

## Change

`memberLine` checks the repair line under `Squashes:` first:

| Fixup member | Renders as |
| --- | --- |
| carries a repair line | that repair line |
| no repair line, ` (#N)` marker | a landed member with its link |
| neither | refused, as before |

## Scope and approval

Found while splitting movers for #1493, batch B8; the #1591 change introduced the marker test.

## Verification

| Check | Result |
| --- | --- |
| `vp test run scripts/fork-fold.test.ts` | exit 0, 35 tests |
| new case without the fix | fails |
| `vp lint`, `vp fmt --check` on both files | exit 0, exit 0 |
| `vp run fork:ci` | exit 0 |

Claude Opus 5.5, Claude Code.

## Fork trailers

Fork-Domain: fork-meta
Fork-Tier: core
Fork-Upstreamable: no
Co-authored-by: donjor <[email protected]>
donjor added a commit that referenced this pull request Oct 16, 2026
## Problem

`fork:fold apply` refuses any `fixup!` member without a repair line under `Squashes:`, so it cannot fold the 48 `fixup! <owner> (#N)` commits the #1493 pay-down squash-landed on `hyprws`.
The sync's own fold places them as `fixup`, which discards each message, so it drops all 48 pull request links; `fork:fold prove` reports `link guard → 48 finding(s)` on that tip.

## Change

`memberLine` treats a `fixup!` subject that carries a squash ` (#N)` marker as a landing of its own: it renders as an ordinary member line, so the fold lists its sha and keeps its link.
A `fixup!` with neither a repair line nor a squash marker still refuses.

## Scope and approval

Part of the authorized #1493 pay-down; keeps the #1491 rule that no fold drops a pull request link.

## Verification

| Check | Result |
| --- | --- |
| `vp test run scripts/fork-fold.test.ts` | 34 passed, including a new squash-landed fixup case |
| `fork:fold apply` of a plan joining each fixup to its owner, on `cf2b4926cba` | 200 commits → 152 |
| `fork:fold prove origin/hyprws <fold>` | member guard 0, link guard 0, tree-equal, delta and scan exit 0 |
| `vp run fork:ci` | exit 0 |

Claude Opus 5.5 in Claude Code.

## Fork trailers

Fork-Domain: fork-meta
Fork-Tier: core
Fork-Upstreamable: no
Co-authored-by: donjor <[email protected]>
donjor added a commit that referenced this pull request Oct 16, 2026
…ds in (#N) (#1598)

## Problem

`fork:fold` tells a split piece from a squash-landed fixup by the trailing ` (#N)` on its subject.
A piece repeats its owner's subject, so an owner such as `fix(server): provider spawns drop another harness identity (#108)` makes its piece look landed.
The fold then lists the throwaway piece sha instead of the mover, and `fork:fold prove` refuses the member guard.

## Change

`memberLine` checks the repair line under `Squashes:` first:

| Fixup member | Renders as |
| --- | --- |
| carries a repair line | that repair line |
| no repair line, ` (#N)` marker | a landed member with its link |
| neither | refused, as before |

## Scope and approval

Found while splitting movers for #1493, batch B8; the #1591 change introduced the marker test.

## Verification

| Check | Result |
| --- | --- |
| `vp test run scripts/fork-fold.test.ts` | exit 0, 35 tests |
| new case without the fix | fails |
| `vp lint`, `vp fmt --check` on both files | exit 0, exit 0 |
| `vp run fork:ci` | exit 0 |

Claude Opus 5.5, Claude Code.

## Fork trailers

Fork-Domain: fork-meta
Fork-Tier: core
Fork-Upstreamable: no
Co-authored-by: donjor <[email protected]>
donjor added a commit that referenced this pull request Oct 18, 2026
## Problem

`fork:fold apply` refuses any `fixup!` member without a repair line under `Squashes:`, so it cannot fold the 48 `fixup! <owner> (#N)` commits the #1493 pay-down squash-landed on `hyprws`.
The sync's own fold places them as `fixup`, which discards each message, so it drops all 48 pull request links; `fork:fold prove` reports `link guard → 48 finding(s)` on that tip.

## Change

`memberLine` treats a `fixup!` subject that carries a squash ` (#N)` marker as a landing of its own: it renders as an ordinary member line, so the fold lists its sha and keeps its link.
A `fixup!` with neither a repair line nor a squash marker still refuses.

## Scope and approval

Part of the authorized #1493 pay-down; keeps the #1491 rule that no fold drops a pull request link.

## Verification

| Check | Result |
| --- | --- |
| `vp test run scripts/fork-fold.test.ts` | 34 passed, including a new squash-landed fixup case |
| `fork:fold apply` of a plan joining each fixup to its owner, on `cf2b4926cba` | 200 commits → 152 |
| `fork:fold prove origin/hyprws <fold>` | member guard 0, link guard 0, tree-equal, delta and scan exit 0 |
| `vp run fork:ci` | exit 0 |

Claude Opus 5.5 in Claude Code.

## Fork trailers

Fork-Domain: fork-meta
Fork-Tier: core
Fork-Upstreamable: no
Co-authored-by: donjor <[email protected]>
donjor added a commit that referenced this pull request Oct 18, 2026
…ds in (#N) (#1598)

## Problem

`fork:fold` tells a split piece from a squash-landed fixup by the trailing ` (#N)` on its subject.
A piece repeats its owner's subject, so an owner such as `fix(server): provider spawns drop another harness identity (#108)` makes its piece look landed.
The fold then lists the throwaway piece sha instead of the mover, and `fork:fold prove` refuses the member guard.

## Change

`memberLine` checks the repair line under `Squashes:` first:

| Fixup member | Renders as |
| --- | --- |
| carries a repair line | that repair line |
| no repair line, ` (#N)` marker | a landed member with its link |
| neither | refused, as before |

## Scope and approval

Found while splitting movers for #1493, batch B8; the #1591 change introduced the marker test.

## Verification

| Check | Result |
| --- | --- |
| `vp test run scripts/fork-fold.test.ts` | exit 0, 35 tests |
| new case without the fix | fails |
| `vp lint`, `vp fmt --check` on both files | exit 0, exit 0 |
| `vp run fork:ci` | exit 0 |

Claude Opus 5.5, Claude Code.

## Fork trailers

Fork-Domain: fork-meta
Fork-Tier: core
Fork-Upstreamable: no
Co-authored-by: donjor <[email protected]>
donjor added a commit that referenced this pull request Oct 18, 2026
## Problem

`fork:fold apply` refuses any `fixup!` member without a repair line under `Squashes:`, so it cannot fold the 48 `fixup! <owner> (#N)` commits the #1493 pay-down squash-landed on `hyprws`.
The sync's own fold places them as `fixup`, which discards each message, so it drops all 48 pull request links; `fork:fold prove` reports `link guard → 48 finding(s)` on that tip.

## Change

`memberLine` treats a `fixup!` subject that carries a squash ` (#N)` marker as a landing of its own: it renders as an ordinary member line, so the fold lists its sha and keeps its link.
A `fixup!` with neither a repair line nor a squash marker still refuses.

## Scope and approval

Part of the authorized #1493 pay-down; keeps the #1491 rule that no fold drops a pull request link.

## Verification

| Check | Result |
| --- | --- |
| `vp test run scripts/fork-fold.test.ts` | 34 passed, including a new squash-landed fixup case |
| `fork:fold apply` of a plan joining each fixup to its owner, on `cf2b4926cba` | 200 commits → 152 |
| `fork:fold prove origin/hyprws <fold>` | member guard 0, link guard 0, tree-equal, delta and scan exit 0 |
| `vp run fork:ci` | exit 0 |

Claude Opus 5.5 in Claude Code.

## Fork trailers

Fork-Domain: fork-meta
Fork-Tier: core
Fork-Upstreamable: no
Co-authored-by: donjor <[email protected]>
donjor added a commit that referenced this pull request Oct 18, 2026
…ds in (#N) (#1598)

## Problem

`fork:fold` tells a split piece from a squash-landed fixup by the trailing ` (#N)` on its subject.
A piece repeats its owner's subject, so an owner such as `fix(server): provider spawns drop another harness identity (#108)` makes its piece look landed.
The fold then lists the throwaway piece sha instead of the mover, and `fork:fold prove` refuses the member guard.

## Change

`memberLine` checks the repair line under `Squashes:` first:

| Fixup member | Renders as |
| --- | --- |
| carries a repair line | that repair line |
| no repair line, ` (#N)` marker | a landed member with its link |
| neither | refused, as before |

## Scope and approval

Found while splitting movers for #1493, batch B8; the #1591 change introduced the marker test.

## Verification

| Check | Result |
| --- | --- |
| `vp test run scripts/fork-fold.test.ts` | exit 0, 35 tests |
| new case without the fix | fails |
| `vp lint`, `vp fmt --check` on both files | exit 0, exit 0 |
| `vp run fork:ci` | exit 0 |

Claude Opus 5.5, Claude Code.

## Fork trailers

Fork-Domain: fork-meta
Fork-Tier: core
Fork-Upstreamable: no
Co-authored-by: donjor <[email protected]>
donjor added a commit that referenced this pull request Oct 18, 2026
## Problem

`fork:fold apply` refuses any `fixup!` member without a repair line under `Squashes:`, so it cannot fold the 48 `fixup! <owner> (#N)` commits the #1493 pay-down squash-landed on `hyprws`.
The sync's own fold places them as `fixup`, which discards each message, so it drops all 48 pull request links; `fork:fold prove` reports `link guard → 48 finding(s)` on that tip.

## Change

`memberLine` treats a `fixup!` subject that carries a squash ` (#N)` marker as a landing of its own: it renders as an ordinary member line, so the fold lists its sha and keeps its link.
A `fixup!` with neither a repair line nor a squash marker still refuses.

## Scope and approval

Part of the authorized #1493 pay-down; keeps the #1491 rule that no fold drops a pull request link.

## Verification

| Check | Result |
| --- | --- |
| `vp test run scripts/fork-fold.test.ts` | 34 passed, including a new squash-landed fixup case |
| `fork:fold apply` of a plan joining each fixup to its owner, on `cf2b4926cba` | 200 commits → 152 |
| `fork:fold prove origin/hyprws <fold>` | member guard 0, link guard 0, tree-equal, delta and scan exit 0 |
| `vp run fork:ci` | exit 0 |

Claude Opus 5.5 in Claude Code.

## Fork trailers

Fork-Domain: fork-meta
Fork-Tier: core
Fork-Upstreamable: no
Co-authored-by: donjor <[email protected]>
donjor added a commit that referenced this pull request Oct 18, 2026
…ds in (#N) (#1598)

## Problem

`fork:fold` tells a split piece from a squash-landed fixup by the trailing ` (#N)` on its subject.
A piece repeats its owner's subject, so an owner such as `fix(server): provider spawns drop another harness identity (#108)` makes its piece look landed.
The fold then lists the throwaway piece sha instead of the mover, and `fork:fold prove` refuses the member guard.

## Change

`memberLine` checks the repair line under `Squashes:` first:

| Fixup member | Renders as |
| --- | --- |
| carries a repair line | that repair line |
| no repair line, ` (#N)` marker | a landed member with its link |
| neither | refused, as before |

## Scope and approval

Found while splitting movers for #1493, batch B8; the #1591 change introduced the marker test.

## Verification

| Check | Result |
| --- | --- |
| `vp test run scripts/fork-fold.test.ts` | exit 0, 35 tests |
| new case without the fix | fails |
| `vp lint`, `vp fmt --check` on both files | exit 0, exit 0 |
| `vp run fork:ci` | exit 0 |

Claude Opus 5.5, Claude Code.

## Fork trailers

Fork-Domain: fork-meta
Fork-Tier: core
Fork-Upstreamable: no
Co-authored-by: donjor <[email protected]>
donjor added a commit that referenced this pull request Oct 19, 2026
## Problem

`fork:fold apply` refuses any `fixup!` member without a repair line under `Squashes:`, so it cannot fold the 48 `fixup! <owner> (#N)` commits the #1493 pay-down squash-landed on `hyprws`.
The sync's own fold places them as `fixup`, which discards each message, so it drops all 48 pull request links; `fork:fold prove` reports `link guard → 48 finding(s)` on that tip.

## Change

`memberLine` treats a `fixup!` subject that carries a squash ` (#N)` marker as a landing of its own: it renders as an ordinary member line, so the fold lists its sha and keeps its link.
A `fixup!` with neither a repair line nor a squash marker still refuses.

## Scope and approval

Part of the authorized #1493 pay-down; keeps the #1491 rule that no fold drops a pull request link.

## Verification

| Check | Result |
| --- | --- |
| `vp test run scripts/fork-fold.test.ts` | 34 passed, including a new squash-landed fixup case |
| `fork:fold apply` of a plan joining each fixup to its owner, on `cf2b4926cba` | 200 commits → 152 |
| `fork:fold prove origin/hyprws <fold>` | member guard 0, link guard 0, tree-equal, delta and scan exit 0 |
| `vp run fork:ci` | exit 0 |

Claude Opus 5.5 in Claude Code.

## Fork trailers

Fork-Domain: fork-meta
Fork-Tier: core
Fork-Upstreamable: no
Co-authored-by: donjor <[email protected]>
donjor added a commit that referenced this pull request Oct 19, 2026
…ds in (#N) (#1598)

## Problem

`fork:fold` tells a split piece from a squash-landed fixup by the trailing ` (#N)` on its subject.
A piece repeats its owner's subject, so an owner such as `fix(server): provider spawns drop another harness identity (#108)` makes its piece look landed.
The fold then lists the throwaway piece sha instead of the mover, and `fork:fold prove` refuses the member guard.

## Change

`memberLine` checks the repair line under `Squashes:` first:

| Fixup member | Renders as |
| --- | --- |
| carries a repair line | that repair line |
| no repair line, ` (#N)` marker | a landed member with its link |
| neither | refused, as before |

## Scope and approval

Found while splitting movers for #1493, batch B8; the #1591 change introduced the marker test.

## Verification

| Check | Result |
| --- | --- |
| `vp test run scripts/fork-fold.test.ts` | exit 0, 35 tests |
| new case without the fix | fails |
| `vp lint`, `vp fmt --check` on both files | exit 0, exit 0 |
| `vp run fork:ci` | exit 0 |

Claude Opus 5.5, Claude Code.

## Fork trailers

Fork-Domain: fork-meta
Fork-Tier: core
Fork-Upstreamable: no
Co-authored-by: donjor <[email protected]>
donjor added a commit that referenced this pull request Oct 19, 2026
## Problem

`fork:fold apply` refuses any `fixup!` member without a repair line under `Squashes:`, so it cannot fold the 48 `fixup! <owner> (#N)` commits the #1493 pay-down squash-landed on `hyprws`.
The sync's own fold places them as `fixup`, which discards each message, so it drops all 48 pull request links; `fork:fold prove` reports `link guard → 48 finding(s)` on that tip.

## Change

`memberLine` treats a `fixup!` subject that carries a squash ` (#N)` marker as a landing of its own: it renders as an ordinary member line, so the fold lists its sha and keeps its link.
A `fixup!` with neither a repair line nor a squash marker still refuses.

## Scope and approval

Part of the authorized #1493 pay-down; keeps the #1491 rule that no fold drops a pull request link.

## Verification

| Check | Result |
| --- | --- |
| `vp test run scripts/fork-fold.test.ts` | 34 passed, including a new squash-landed fixup case |
| `fork:fold apply` of a plan joining each fixup to its owner, on `cf2b4926cba` | 200 commits → 152 |
| `fork:fold prove origin/hyprws <fold>` | member guard 0, link guard 0, tree-equal, delta and scan exit 0 |
| `vp run fork:ci` | exit 0 |

Claude Opus 5.5 in Claude Code.

## Fork trailers

Fork-Domain: fork-meta
Fork-Tier: core
Fork-Upstreamable: no
Co-authored-by: donjor <[email protected]>
donjor added a commit that referenced this pull request Oct 19, 2026
…ds in (#N) (#1598)

## Problem

`fork:fold` tells a split piece from a squash-landed fixup by the trailing ` (#N)` on its subject.
A piece repeats its owner's subject, so an owner such as `fix(server): provider spawns drop another harness identity (#108)` makes its piece look landed.
The fold then lists the throwaway piece sha instead of the mover, and `fork:fold prove` refuses the member guard.

## Change

`memberLine` checks the repair line under `Squashes:` first:

| Fixup member | Renders as |
| --- | --- |
| carries a repair line | that repair line |
| no repair line, ` (#N)` marker | a landed member with its link |
| neither | refused, as before |

## Scope and approval

Found while splitting movers for #1493, batch B8; the #1591 change introduced the marker test.

## Verification

| Check | Result |
| --- | --- |
| `vp test run scripts/fork-fold.test.ts` | exit 0, 35 tests |
| new case without the fix | fails |
| `vp lint`, `vp fmt --check` on both files | exit 0, exit 0 |
| `vp run fork:ci` | exit 0 |

Claude Opus 5.5, Claude Code.

## Fork trailers

Fork-Domain: fork-meta
Fork-Tier: core
Fork-Upstreamable: no
Co-authored-by: donjor <[email protected]>
donjor added a commit that referenced this pull request Oct 19, 2026
## Problem

`fork:fold apply` refuses any `fixup!` member without a repair line under `Squashes:`, so it cannot fold the 48 `fixup! <owner> (#N)` commits the #1493 pay-down squash-landed on `hyprws`.
The sync's own fold places them as `fixup`, which discards each message, so it drops all 48 pull request links; `fork:fold prove` reports `link guard → 48 finding(s)` on that tip.

## Change

`memberLine` treats a `fixup!` subject that carries a squash ` (#N)` marker as a landing of its own: it renders as an ordinary member line, so the fold lists its sha and keeps its link.
A `fixup!` with neither a repair line nor a squash marker still refuses.

## Scope and approval

Part of the authorized #1493 pay-down; keeps the #1491 rule that no fold drops a pull request link.

## Verification

| Check | Result |
| --- | --- |
| `vp test run scripts/fork-fold.test.ts` | 34 passed, including a new squash-landed fixup case |
| `fork:fold apply` of a plan joining each fixup to its owner, on `cf2b4926cba` | 200 commits → 152 |
| `fork:fold prove origin/hyprws <fold>` | member guard 0, link guard 0, tree-equal, delta and scan exit 0 |
| `vp run fork:ci` | exit 0 |

Claude Opus 5.5 in Claude Code.

## Fork trailers

Fork-Domain: fork-meta
Fork-Tier: core
Fork-Upstreamable: no
Co-authored-by: donjor <[email protected]>
donjor added a commit that referenced this pull request Oct 19, 2026
…ds in (#N) (#1598)

## Problem

`fork:fold` tells a split piece from a squash-landed fixup by the trailing ` (#N)` on its subject.
A piece repeats its owner's subject, so an owner such as `fix(server): provider spawns drop another harness identity (#108)` makes its piece look landed.
The fold then lists the throwaway piece sha instead of the mover, and `fork:fold prove` refuses the member guard.

## Change

`memberLine` checks the repair line under `Squashes:` first:

| Fixup member | Renders as |
| --- | --- |
| carries a repair line | that repair line |
| no repair line, ` (#N)` marker | a landed member with its link |
| neither | refused, as before |

## Scope and approval

Found while splitting movers for #1493, batch B8; the #1591 change introduced the marker test.

## Verification

| Check | Result |
| --- | --- |
| `vp test run scripts/fork-fold.test.ts` | exit 0, 35 tests |
| new case without the fix | fails |
| `vp lint`, `vp fmt --check` on both files | exit 0, exit 0 |
| `vp run fork:ci` | exit 0 |

Claude Opus 5.5, Claude Code.

## Fork trailers

Fork-Domain: fork-meta
Fork-Tier: core
Fork-Upstreamable: no
Co-authored-by: donjor <[email protected]>
donjor added a commit that referenced this pull request Oct 20, 2026
## Problem

`fork:fold apply` refuses any `fixup!` member without a repair line under `Squashes:`, so it cannot fold the 48 `fixup! <owner> (#N)` commits the #1493 pay-down squash-landed on `hyprws`.
The sync's own fold places them as `fixup`, which discards each message, so it drops all 48 pull request links; `fork:fold prove` reports `link guard → 48 finding(s)` on that tip.

## Change

`memberLine` treats a `fixup!` subject that carries a squash ` (#N)` marker as a landing of its own: it renders as an ordinary member line, so the fold lists its sha and keeps its link.
A `fixup!` with neither a repair line nor a squash marker still refuses.

## Scope and approval

Part of the authorized #1493 pay-down; keeps the #1491 rule that no fold drops a pull request link.

## Verification

| Check | Result |
| --- | --- |
| `vp test run scripts/fork-fold.test.ts` | 34 passed, including a new squash-landed fixup case |
| `fork:fold apply` of a plan joining each fixup to its owner, on `cf2b4926cba` | 200 commits → 152 |
| `fork:fold prove origin/hyprws <fold>` | member guard 0, link guard 0, tree-equal, delta and scan exit 0 |
| `vp run fork:ci` | exit 0 |

Claude Opus 5.5 in Claude Code.

## Fork trailers

Fork-Domain: fork-meta
Fork-Tier: core
Fork-Upstreamable: no
Co-authored-by: donjor <[email protected]>
donjor added a commit that referenced this pull request Oct 20, 2026
…ds in (#N) (#1598)

## Problem

`fork:fold` tells a split piece from a squash-landed fixup by the trailing ` (#N)` on its subject.
A piece repeats its owner's subject, so an owner such as `fix(server): provider spawns drop another harness identity (#108)` makes its piece look landed.
The fold then lists the throwaway piece sha instead of the mover, and `fork:fold prove` refuses the member guard.

## Change

`memberLine` checks the repair line under `Squashes:` first:

| Fixup member | Renders as |
| --- | --- |
| carries a repair line | that repair line |
| no repair line, ` (#N)` marker | a landed member with its link |
| neither | refused, as before |

## Scope and approval

Found while splitting movers for #1493, batch B8; the #1591 change introduced the marker test.

## Verification

| Check | Result |
| --- | --- |
| `vp test run scripts/fork-fold.test.ts` | exit 0, 35 tests |
| new case without the fix | fails |
| `vp lint`, `vp fmt --check` on both files | exit 0, exit 0 |
| `vp run fork:ci` | exit 0 |

Claude Opus 5.5, Claude Code.

## Fork trailers

Fork-Domain: fork-meta
Fork-Tier: core
Fork-Upstreamable: no
Co-authored-by: donjor <[email protected]>
donjor added a commit that referenced this pull request Oct 20, 2026
## Problem

`fork:fold apply` refuses any `fixup!` member without a repair line under `Squashes:`, so it cannot fold the 48 `fixup! <owner> (#N)` commits the #1493 pay-down squash-landed on `hyprws`.
The sync's own fold places them as `fixup`, which discards each message, so it drops all 48 pull request links; `fork:fold prove` reports `link guard → 48 finding(s)` on that tip.

## Change

`memberLine` treats a `fixup!` subject that carries a squash ` (#N)` marker as a landing of its own: it renders as an ordinary member line, so the fold lists its sha and keeps its link.
A `fixup!` with neither a repair line nor a squash marker still refuses.

## Scope and approval

Part of the authorized #1493 pay-down; keeps the #1491 rule that no fold drops a pull request link.

## Verification

| Check | Result |
| --- | --- |
| `vp test run scripts/fork-fold.test.ts` | 34 passed, including a new squash-landed fixup case |
| `fork:fold apply` of a plan joining each fixup to its owner, on `cf2b4926cba` | 200 commits → 152 |
| `fork:fold prove origin/hyprws <fold>` | member guard 0, link guard 0, tree-equal, delta and scan exit 0 |
| `vp run fork:ci` | exit 0 |

Claude Opus 5.5 in Claude Code.

## Fork trailers

Fork-Domain: fork-meta
Fork-Tier: core
Fork-Upstreamable: no
Co-authored-by: donjor <[email protected]>
donjor added a commit that referenced this pull request Oct 20, 2026
…ds in (#N) (#1598)

## Problem

`fork:fold` tells a split piece from a squash-landed fixup by the trailing ` (#N)` on its subject.
A piece repeats its owner's subject, so an owner such as `fix(server): provider spawns drop another harness identity (#108)` makes its piece look landed.
The fold then lists the throwaway piece sha instead of the mover, and `fork:fold prove` refuses the member guard.

## Change

`memberLine` checks the repair line under `Squashes:` first:

| Fixup member | Renders as |
| --- | --- |
| carries a repair line | that repair line |
| no repair line, ` (#N)` marker | a landed member with its link |
| neither | refused, as before |

## Scope and approval

Found while splitting movers for #1493, batch B8; the #1591 change introduced the marker test.

## Verification

| Check | Result |
| --- | --- |
| `vp test run scripts/fork-fold.test.ts` | exit 0, 35 tests |
| new case without the fix | fails |
| `vp lint`, `vp fmt --check` on both files | exit 0, exit 0 |
| `vp run fork:ci` | exit 0 |

Claude Opus 5.5, Claude Code.

## Fork trailers

Fork-Domain: fork-meta
Fork-Tier: core
Fork-Upstreamable: no
Co-authored-by: donjor <[email protected]>
donjor added a commit that referenced this pull request Oct 20, 2026
## Problem

`fork:fold apply` refuses any `fixup!` member without a repair line under `Squashes:`, so it cannot fold the 48 `fixup! <owner> (#N)` commits the #1493 pay-down squash-landed on `hyprws`.
The sync's own fold places them as `fixup`, which discards each message, so it drops all 48 pull request links; `fork:fold prove` reports `link guard → 48 finding(s)` on that tip.

## Change

`memberLine` treats a `fixup!` subject that carries a squash ` (#N)` marker as a landing of its own: it renders as an ordinary member line, so the fold lists its sha and keeps its link.
A `fixup!` with neither a repair line nor a squash marker still refuses.

## Scope and approval

Part of the authorized #1493 pay-down; keeps the #1491 rule that no fold drops a pull request link.

## Verification

| Check | Result |
| --- | --- |
| `vp test run scripts/fork-fold.test.ts` | 34 passed, including a new squash-landed fixup case |
| `fork:fold apply` of a plan joining each fixup to its owner, on `cf2b4926cba` | 200 commits → 152 |
| `fork:fold prove origin/hyprws <fold>` | member guard 0, link guard 0, tree-equal, delta and scan exit 0 |
| `vp run fork:ci` | exit 0 |

Claude Opus 5.5 in Claude Code.

## Fork trailers

Fork-Domain: fork-meta
Fork-Tier: core
Fork-Upstreamable: no
Co-authored-by: donjor <[email protected]>
donjor added a commit that referenced this pull request Oct 20, 2026
…ds in (#N) (#1598)

## Problem

`fork:fold` tells a split piece from a squash-landed fixup by the trailing ` (#N)` on its subject.
A piece repeats its owner's subject, so an owner such as `fix(server): provider spawns drop another harness identity (#108)` makes its piece look landed.
The fold then lists the throwaway piece sha instead of the mover, and `fork:fold prove` refuses the member guard.

## Change

`memberLine` checks the repair line under `Squashes:` first:

| Fixup member | Renders as |
| --- | --- |
| carries a repair line | that repair line |
| no repair line, ` (#N)` marker | a landed member with its link |
| neither | refused, as before |

## Scope and approval

Found while splitting movers for #1493, batch B8; the #1591 change introduced the marker test.

## Verification

| Check | Result |
| --- | --- |
| `vp test run scripts/fork-fold.test.ts` | exit 0, 35 tests |
| new case without the fix | fails |
| `vp lint`, `vp fmt --check` on both files | exit 0, exit 0 |
| `vp run fork:ci` | exit 0 |

Claude Opus 5.5, Claude Code.

## Fork trailers

Fork-Domain: fork-meta
Fork-Tier: core
Fork-Upstreamable: no
Co-authored-by: donjor <[email protected]>
donjor added a commit that referenced this pull request Oct 20, 2026
## Problem

`fork:fold apply` refuses any `fixup!` member without a repair line under `Squashes:`, so it cannot fold the 48 `fixup! <owner> (#N)` commits the #1493 pay-down squash-landed on `hyprws`.
The sync's own fold places them as `fixup`, which discards each message, so it drops all 48 pull request links; `fork:fold prove` reports `link guard → 48 finding(s)` on that tip.

## Change

`memberLine` treats a `fixup!` subject that carries a squash ` (#N)` marker as a landing of its own: it renders as an ordinary member line, so the fold lists its sha and keeps its link.
A `fixup!` with neither a repair line nor a squash marker still refuses.

## Scope and approval

Part of the authorized #1493 pay-down; keeps the #1491 rule that no fold drops a pull request link.

## Verification

| Check | Result |
| --- | --- |
| `vp test run scripts/fork-fold.test.ts` | 34 passed, including a new squash-landed fixup case |
| `fork:fold apply` of a plan joining each fixup to its owner, on `cf2b4926cba` | 200 commits → 152 |
| `fork:fold prove origin/hyprws <fold>` | member guard 0, link guard 0, tree-equal, delta and scan exit 0 |
| `vp run fork:ci` | exit 0 |

Claude Opus 5.5 in Claude Code.

## Fork trailers

Fork-Domain: fork-meta
Fork-Tier: core
Fork-Upstreamable: no
Co-authored-by: donjor <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:S 10-29 effective changed lines (test files excluded in mixed PRs).

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant