Skip to content

fix(fork): a sync fold keeps the squash-landed fixup's PR link - #1620

Merged
donjor merged 1 commit into
hyprwsfrom
fix/sync-fold-keeps-fixup-link
Oct 4, 2026
Merged

donjor merged 1 commit into
hyprwsfrom
fix/sync-fold-keeps-fixup-link

Conversation

@donjor-agent

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

Copy link
Copy Markdown

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

Problem

The sync rebase folds a squash-landed fixup! <owner subject> (#N) into its owner as git's fixup, which keeps only the owner's message.
So (#N) is lost, breaking the #1491 rule that every PR link survives every fold.

Change

  1. Sync renders each folded owner's message first
  2. Adds the Squashes: list fork:fold writes
  3. Lists each fixup's PR link there
  4. Keeps trailers verbatim, Co-authored-by: too
  5. Sequence editor amends the owner with it
  6. Link guard refuses a tip that lost a link

A fixup citing no PR still folds as plain git fixup, its owner's message untouched.
fork-sync.md now names this as the sync's only reword.

Guard scope: it also refuses a sync where git silently drops a linked fork commit.
That matches the sync's rule that it never drops a commit.

Scope and approval

Closes #1592.

  • Sync: a folded fixup! <subject> (#N) keeps RSI-Software/t3code-hyprws#N on the owner's message
  • Guard: the sync refuses a rebased tip that drops a PR link

Verification

test result
Fold of fixup! … (#1600) link kept as member line, trailers verbatim
Tip with the link dropped refused
Real rebased tip passes the guard
command exit
vp test run, 3 touched test files, 127 tests 0
scripts tsc --noEmit 0
vp run fork:ci, scripts 739 tests 0

Not run: a real sync with a linked fixup on trunk; the next one proves it.

Claude Opus 5.5 in Claude Code, inside T3 Code; implemented by a Pi child agent.

Fork trailers

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

The sync rebase folded each fixup! <subject> (#N) with git's fixup
action, dropping the link the marker carried. The sequence editor now
appends one exec per owner that amends the folded message with the
Squashes: rendering fork:fold writes, and the rebase refuses a rebased
tip whose link guard finds a dropped link (#1592).

Fork-Domain: fork-meta
Fork-Tier: core
Fork-Upstreamable: no
@donjor
donjor force-pushed the fix/sync-fold-keeps-fixup-link branch 2 times, most recently from 9c52168 to 3084858 Compare October 4, 2026 07:54
@donjor
donjor merged commit 8a7e2ed into hyprws Oct 4, 2026
@donjor
donjor deleted the fix/sync-fold-keeps-fixup-link branch October 4, 2026 08:21
donjor pushed a commit that referenced this pull request Oct 4, 2026
> 🤖 claude/anthropic claude-opus-5-5 (high)

## Problem

The sync rebase folds a squash-landed `fixup! <owner subject> (#N)` into its owner as git's `fixup`, which keeps only the owner's message.
So `(#N)` is lost, breaking the #1491 rule that every PR link survives every fold.

## Change

1. Sync renders each folded owner's message first
2. Adds the `Squashes:` list `fork:fold` writes
3. Lists each fixup's PR link there
4. Keeps trailers verbatim, `Co-authored-by:` too
5. Sequence editor amends the owner with it
6. Link guard refuses a tip that lost a link

A fixup citing no PR still folds as plain git `fixup`, its owner's message untouched.
`fork-sync.md` now names this as the sync's only reword.

**Guard scope:** it also refuses a sync where git silently drops a linked fork commit.
That matches the sync's rule that it never drops a commit.

## Scope and approval

Closes #1592.

- [ ] **Sync:** a folded `fixup! <subject> (#N)` keeps RSI-Software/t3code-hyprws#N on the owner's message
- [ ] **Guard:** the sync refuses a rebased tip that drops a PR link

## Verification

| test | result |
| --- | --- |
| Fold of `fixup! … (#1600)` | link kept as member line, trailers verbatim |
| Tip with the link dropped | refused |
| Real rebased tip | passes the guard |

| command | exit |
| --- | --- |
| `vp test run`, 3 touched test files, 127 tests | 0 |
| scripts `tsc --noEmit` | 0 |
| `vp run fork:ci`, scripts 739 tests | 0 |

Not run: a real sync with a linked fixup on trunk; the next one proves it.

Claude Opus 5.5 in Claude Code, inside T3 Code; implemented by a Pi child agent.

## Fork trailers

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

<!-- gh-bot:attest {"v":2,"repo":"RSI-Software/t3code-hyprws","ref":"fix/sync-fold-keeps-fixup-link@9c52168","build":"252611418","agents":[{"role":"host","iface":"claude","provider":"anthropic","model":"claude-opus-5-5","effort":"high","harness":"[email protected]","session":"da5d3d04239a"}],"ts":"2026-10-04T03:13:16Z"} -->
donjor pushed a commit that referenced this pull request Oct 4, 2026
> 🤖 claude/anthropic claude-opus-5-5 (high)

## Problem

The sync rebase folds a squash-landed `fixup! <owner subject> (#N)` into its owner as git's `fixup`, which keeps only the owner's message.
So `(#N)` is lost, breaking the #1491 rule that every PR link survives every fold.

## Change

1. Sync renders each folded owner's message first
2. Adds the `Squashes:` list `fork:fold` writes
3. Lists each fixup's PR link there
4. Keeps trailers verbatim, `Co-authored-by:` too
5. Sequence editor amends the owner with it
6. Link guard refuses a tip that lost a link

A fixup citing no PR still folds as plain git `fixup`, its owner's message untouched.
`fork-sync.md` now names this as the sync's only reword.

**Guard scope:** it also refuses a sync where git silently drops a linked fork commit.
That matches the sync's rule that it never drops a commit.

## Scope and approval

Closes #1592.

- [ ] **Sync:** a folded `fixup! <subject> (#N)` keeps RSI-Software/t3code-hyprws#N on the owner's message
- [ ] **Guard:** the sync refuses a rebased tip that drops a PR link

## Verification

| test | result |
| --- | --- |
| Fold of `fixup! … (#1600)` | link kept as member line, trailers verbatim |
| Tip with the link dropped | refused |
| Real rebased tip | passes the guard |

| command | exit |
| --- | --- |
| `vp test run`, 3 touched test files, 127 tests | 0 |
| scripts `tsc --noEmit` | 0 |
| `vp run fork:ci`, scripts 739 tests | 0 |

Not run: a real sync with a linked fixup on trunk; the next one proves it.

Claude Opus 5.5 in Claude Code, inside T3 Code; implemented by a Pi child agent.

## Fork trailers

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

<!-- gh-bot:attest {"v":2,"repo":"RSI-Software/t3code-hyprws","ref":"fix/sync-fold-keeps-fixup-link@9c52168","build":"252611418","agents":[{"role":"host","iface":"claude","provider":"anthropic","model":"claude-opus-5-5","effort":"high","harness":"[email protected]","session":"da5d3d04239a"}],"ts":"2026-10-04T03:13:16Z"} -->
donjor pushed a commit that referenced this pull request Oct 4, 2026
> 🤖 claude/anthropic claude-opus-5-5 (high)

## Problem

The sync rebase folds a squash-landed `fixup! <owner subject> (#N)` into its owner as git's `fixup`, which keeps only the owner's message.
So `(#N)` is lost, breaking the #1491 rule that every PR link survives every fold.

## Change

1. Sync renders each folded owner's message first
2. Adds the `Squashes:` list `fork:fold` writes
3. Lists each fixup's PR link there
4. Keeps trailers verbatim, `Co-authored-by:` too
5. Sequence editor amends the owner with it
6. Link guard refuses a tip that lost a link

A fixup citing no PR still folds as plain git `fixup`, its owner's message untouched.
`fork-sync.md` now names this as the sync's only reword.

**Guard scope:** it also refuses a sync where git silently drops a linked fork commit.
That matches the sync's rule that it never drops a commit.

## Scope and approval

Closes #1592.

- [ ] **Sync:** a folded `fixup! <subject> (#N)` keeps RSI-Software/t3code-hyprws#N on the owner's message
- [ ] **Guard:** the sync refuses a rebased tip that drops a PR link

## Verification

| test | result |
| --- | --- |
| Fold of `fixup! … (#1600)` | link kept as member line, trailers verbatim |
| Tip with the link dropped | refused |
| Real rebased tip | passes the guard |

| command | exit |
| --- | --- |
| `vp test run`, 3 touched test files, 127 tests | 0 |
| scripts `tsc --noEmit` | 0 |
| `vp run fork:ci`, scripts 739 tests | 0 |

Not run: a real sync with a linked fixup on trunk; the next one proves it.

Claude Opus 5.5 in Claude Code, inside T3 Code; implemented by a Pi child agent.

## Fork trailers

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

<!-- gh-bot:attest {"v":2,"repo":"RSI-Software/t3code-hyprws","ref":"fix/sync-fold-keeps-fixup-link@9c52168","build":"252611418","agents":[{"role":"host","iface":"claude","provider":"anthropic","model":"claude-opus-5-5","effort":"high","harness":"[email protected]","session":"da5d3d04239a"}],"ts":"2026-10-04T03:13:16Z"} -->
donjor pushed a commit that referenced this pull request Oct 6, 2026
> 🤖 claude/anthropic claude-opus-5-5 (high)

## Problem

The sync rebase folds a squash-landed `fixup! <owner subject> (#N)` into its owner as git's `fixup`, which keeps only the owner's message.
So `(#N)` is lost, breaking the #1491 rule that every PR link survives every fold.

## Change

1. Sync renders each folded owner's message first
2. Adds the `Squashes:` list `fork:fold` writes
3. Lists each fixup's PR link there
4. Keeps trailers verbatim, `Co-authored-by:` too
5. Sequence editor amends the owner with it
6. Link guard refuses a tip that lost a link

A fixup citing no PR still folds as plain git `fixup`, its owner's message untouched.
`fork-sync.md` now names this as the sync's only reword.

**Guard scope:** it also refuses a sync where git silently drops a linked fork commit.
That matches the sync's rule that it never drops a commit.

## Scope and approval

Closes #1592.

- [ ] **Sync:** a folded `fixup! <subject> (#N)` keeps RSI-Software/t3code-hyprws#N on the owner's message
- [ ] **Guard:** the sync refuses a rebased tip that drops a PR link

## Verification

| test | result |
| --- | --- |
| Fold of `fixup! … (#1600)` | link kept as member line, trailers verbatim |
| Tip with the link dropped | refused |
| Real rebased tip | passes the guard |

| command | exit |
| --- | --- |
| `vp test run`, 3 touched test files, 127 tests | 0 |
| scripts `tsc --noEmit` | 0 |
| `vp run fork:ci`, scripts 739 tests | 0 |

Not run: a real sync with a linked fixup on trunk; the next one proves it.

Claude Opus 5.5 in Claude Code, inside T3 Code; implemented by a Pi child agent.

## Fork trailers

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

<!-- gh-bot:attest {"v":2,"repo":"RSI-Software/t3code-hyprws","ref":"fix/sync-fold-keeps-fixup-link@9c52168","build":"252611418","agents":[{"role":"host","iface":"claude","provider":"anthropic","model":"claude-opus-5-5","effort":"high","harness":"[email protected]","session":"da5d3d04239a"}],"ts":"2026-10-04T03:13:16Z"} -->
donjor pushed a commit that referenced this pull request Oct 6, 2026
> 🤖 claude/anthropic claude-opus-5-5 (high)

## Problem

The sync rebase folds a squash-landed `fixup! <owner subject> (#N)` into its owner as git's `fixup`, which keeps only the owner's message.
So `(#N)` is lost, breaking the #1491 rule that every PR link survives every fold.

## Change

1. Sync renders each folded owner's message first
2. Adds the `Squashes:` list `fork:fold` writes
3. Lists each fixup's PR link there
4. Keeps trailers verbatim, `Co-authored-by:` too
5. Sequence editor amends the owner with it
6. Link guard refuses a tip that lost a link

A fixup citing no PR still folds as plain git `fixup`, its owner's message untouched.
`fork-sync.md` now names this as the sync's only reword.

**Guard scope:** it also refuses a sync where git silently drops a linked fork commit.
That matches the sync's rule that it never drops a commit.

## Scope and approval

Closes #1592.

- [ ] **Sync:** a folded `fixup! <subject> (#N)` keeps RSI-Software/t3code-hyprws#N on the owner's message
- [ ] **Guard:** the sync refuses a rebased tip that drops a PR link

## Verification

| test | result |
| --- | --- |
| Fold of `fixup! … (#1600)` | link kept as member line, trailers verbatim |
| Tip with the link dropped | refused |
| Real rebased tip | passes the guard |

| command | exit |
| --- | --- |
| `vp test run`, 3 touched test files, 127 tests | 0 |
| scripts `tsc --noEmit` | 0 |
| `vp run fork:ci`, scripts 739 tests | 0 |

Not run: a real sync with a linked fixup on trunk; the next one proves it.

Claude Opus 5.5 in Claude Code, inside T3 Code; implemented by a Pi child agent.

## Fork trailers

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

<!-- gh-bot:attest {"v":2,"repo":"RSI-Software/t3code-hyprws","ref":"fix/sync-fold-keeps-fixup-link@9c52168","build":"252611418","agents":[{"role":"host","iface":"claude","provider":"anthropic","model":"claude-opus-5-5","effort":"high","harness":"[email protected]","session":"da5d3d04239a"}],"ts":"2026-10-04T03:13:16Z"} -->
donjor pushed a commit that referenced this pull request Oct 8, 2026
> 🤖 claude/anthropic claude-opus-5-5 (high)

## Problem

The sync rebase folds a squash-landed `fixup! <owner subject> (#N)` into its owner as git's `fixup`, which keeps only the owner's message.
So `(#N)` is lost, breaking the #1491 rule that every PR link survives every fold.

## Change

1. Sync renders each folded owner's message first
2. Adds the `Squashes:` list `fork:fold` writes
3. Lists each fixup's PR link there
4. Keeps trailers verbatim, `Co-authored-by:` too
5. Sequence editor amends the owner with it
6. Link guard refuses a tip that lost a link

A fixup citing no PR still folds as plain git `fixup`, its owner's message untouched.
`fork-sync.md` now names this as the sync's only reword.

**Guard scope:** it also refuses a sync where git silently drops a linked fork commit.
That matches the sync's rule that it never drops a commit.

## Scope and approval

Closes #1592.

- [ ] **Sync:** a folded `fixup! <subject> (#N)` keeps RSI-Software/t3code-hyprws#N on the owner's message
- [ ] **Guard:** the sync refuses a rebased tip that drops a PR link

## Verification

| test | result |
| --- | --- |
| Fold of `fixup! … (#1600)` | link kept as member line, trailers verbatim |
| Tip with the link dropped | refused |
| Real rebased tip | passes the guard |

| command | exit |
| --- | --- |
| `vp test run`, 3 touched test files, 127 tests | 0 |
| scripts `tsc --noEmit` | 0 |
| `vp run fork:ci`, scripts 739 tests | 0 |

Not run: a real sync with a linked fixup on trunk; the next one proves it.

Claude Opus 5.5 in Claude Code, inside T3 Code; implemented by a Pi child agent.

## Fork trailers

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

<!-- gh-bot:attest {"v":2,"repo":"RSI-Software/t3code-hyprws","ref":"fix/sync-fold-keeps-fixup-link@9c52168","build":"252611418","agents":[{"role":"host","iface":"claude","provider":"anthropic","model":"claude-opus-5-5","effort":"high","harness":"[email protected]","session":"da5d3d04239a"}],"ts":"2026-10-04T03:13:16Z"} -->
donjor pushed a commit that referenced this pull request Oct 10, 2026
> 🤖 claude/anthropic claude-opus-5-5 (high)

## Problem

The sync rebase folds a squash-landed `fixup! <owner subject> (#N)` into its owner as git's `fixup`, which keeps only the owner's message.
So `(#N)` is lost, breaking the #1491 rule that every PR link survives every fold.

## Change

1. Sync renders each folded owner's message first
2. Adds the `Squashes:` list `fork:fold` writes
3. Lists each fixup's PR link there
4. Keeps trailers verbatim, `Co-authored-by:` too
5. Sequence editor amends the owner with it
6. Link guard refuses a tip that lost a link

A fixup citing no PR still folds as plain git `fixup`, its owner's message untouched.
`fork-sync.md` now names this as the sync's only reword.

**Guard scope:** it also refuses a sync where git silently drops a linked fork commit.
That matches the sync's rule that it never drops a commit.

## Scope and approval

Closes #1592.

- [ ] **Sync:** a folded `fixup! <subject> (#N)` keeps RSI-Software/t3code-hyprws#N on the owner's message
- [ ] **Guard:** the sync refuses a rebased tip that drops a PR link

## Verification

| test | result |
| --- | --- |
| Fold of `fixup! … (#1600)` | link kept as member line, trailers verbatim |
| Tip with the link dropped | refused |
| Real rebased tip | passes the guard |

| command | exit |
| --- | --- |
| `vp test run`, 3 touched test files, 127 tests | 0 |
| scripts `tsc --noEmit` | 0 |
| `vp run fork:ci`, scripts 739 tests | 0 |

Not run: a real sync with a linked fixup on trunk; the next one proves it.

Claude Opus 5.5 in Claude Code, inside T3 Code; implemented by a Pi child agent.

## Fork trailers

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

<!-- gh-bot:attest {"v":2,"repo":"RSI-Software/t3code-hyprws","ref":"fix/sync-fold-keeps-fixup-link@9c52168","build":"252611418","agents":[{"role":"host","iface":"claude","provider":"anthropic","model":"claude-opus-5-5","effort":"high","harness":"[email protected]","session":"da5d3d04239a"}],"ts":"2026-10-04T03:13:16Z"} -->
donjor pushed a commit that referenced this pull request Oct 10, 2026
> 🤖 claude/anthropic claude-opus-5-5 (high)

## Problem

The sync rebase folds a squash-landed `fixup! <owner subject> (#N)` into its owner as git's `fixup`, which keeps only the owner's message.
So `(#N)` is lost, breaking the #1491 rule that every PR link survives every fold.

## Change

1. Sync renders each folded owner's message first
2. Adds the `Squashes:` list `fork:fold` writes
3. Lists each fixup's PR link there
4. Keeps trailers verbatim, `Co-authored-by:` too
5. Sequence editor amends the owner with it
6. Link guard refuses a tip that lost a link

A fixup citing no PR still folds as plain git `fixup`, its owner's message untouched.
`fork-sync.md` now names this as the sync's only reword.

**Guard scope:** it also refuses a sync where git silently drops a linked fork commit.
That matches the sync's rule that it never drops a commit.

## Scope and approval

Closes #1592.

- [ ] **Sync:** a folded `fixup! <subject> (#N)` keeps RSI-Software/t3code-hyprws#N on the owner's message
- [ ] **Guard:** the sync refuses a rebased tip that drops a PR link

## Verification

| test | result |
| --- | --- |
| Fold of `fixup! … (#1600)` | link kept as member line, trailers verbatim |
| Tip with the link dropped | refused |
| Real rebased tip | passes the guard |

| command | exit |
| --- | --- |
| `vp test run`, 3 touched test files, 127 tests | 0 |
| scripts `tsc --noEmit` | 0 |
| `vp run fork:ci`, scripts 739 tests | 0 |

Not run: a real sync with a linked fixup on trunk; the next one proves it.

Claude Opus 5.5 in Claude Code, inside T3 Code; implemented by a Pi child agent.

## Fork trailers

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

<!-- gh-bot:attest {"v":2,"repo":"RSI-Software/t3code-hyprws","ref":"fix/sync-fold-keeps-fixup-link@9c52168","build":"252611418","agents":[{"role":"host","iface":"claude","provider":"anthropic","model":"claude-opus-5-5","effort":"high","harness":"[email protected]","session":"da5d3d04239a"}],"ts":"2026-10-04T03:13:16Z"} -->
donjor pushed a commit that referenced this pull request Oct 10, 2026
> 🤖 claude/anthropic claude-opus-5-5 (high)

## Problem

The sync rebase folds a squash-landed `fixup! <owner subject> (#N)` into its owner as git's `fixup`, which keeps only the owner's message.
So `(#N)` is lost, breaking the #1491 rule that every PR link survives every fold.

## Change

1. Sync renders each folded owner's message first
2. Adds the `Squashes:` list `fork:fold` writes
3. Lists each fixup's PR link there
4. Keeps trailers verbatim, `Co-authored-by:` too
5. Sequence editor amends the owner with it
6. Link guard refuses a tip that lost a link

A fixup citing no PR still folds as plain git `fixup`, its owner's message untouched.
`fork-sync.md` now names this as the sync's only reword.

**Guard scope:** it also refuses a sync where git silently drops a linked fork commit.
That matches the sync's rule that it never drops a commit.

## Scope and approval

Closes #1592.

- [ ] **Sync:** a folded `fixup! <subject> (#N)` keeps RSI-Software/t3code-hyprws#N on the owner's message
- [ ] **Guard:** the sync refuses a rebased tip that drops a PR link

## Verification

| test | result |
| --- | --- |
| Fold of `fixup! … (#1600)` | link kept as member line, trailers verbatim |
| Tip with the link dropped | refused |
| Real rebased tip | passes the guard |

| command | exit |
| --- | --- |
| `vp test run`, 3 touched test files, 127 tests | 0 |
| scripts `tsc --noEmit` | 0 |
| `vp run fork:ci`, scripts 739 tests | 0 |

Not run: a real sync with a linked fixup on trunk; the next one proves it.

Claude Opus 5.5 in Claude Code, inside T3 Code; implemented by a Pi child agent.

## Fork trailers

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

<!-- gh-bot:attest {"v":2,"repo":"RSI-Software/t3code-hyprws","ref":"fix/sync-fold-keeps-fixup-link@9c52168","build":"252611418","agents":[{"role":"host","iface":"claude","provider":"anthropic","model":"claude-opus-5-5","effort":"high","harness":"[email protected]","session":"da5d3d04239a"}],"ts":"2026-10-04T03:13:16Z"} -->
donjor pushed a commit that referenced this pull request Oct 11, 2026
> 🤖 claude/anthropic claude-opus-5-5 (high)

## Problem

The sync rebase folds a squash-landed `fixup! <owner subject> (#N)` into its owner as git's `fixup`, which keeps only the owner's message.
So `(#N)` is lost, breaking the #1491 rule that every PR link survives every fold.

## Change

1. Sync renders each folded owner's message first
2. Adds the `Squashes:` list `fork:fold` writes
3. Lists each fixup's PR link there
4. Keeps trailers verbatim, `Co-authored-by:` too
5. Sequence editor amends the owner with it
6. Link guard refuses a tip that lost a link

A fixup citing no PR still folds as plain git `fixup`, its owner's message untouched.
`fork-sync.md` now names this as the sync's only reword.

**Guard scope:** it also refuses a sync where git silently drops a linked fork commit.
That matches the sync's rule that it never drops a commit.

## Scope and approval

Closes #1592.

- [ ] **Sync:** a folded `fixup! <subject> (#N)` keeps RSI-Software/t3code-hyprws#N on the owner's message
- [ ] **Guard:** the sync refuses a rebased tip that drops a PR link

## Verification

| test | result |
| --- | --- |
| Fold of `fixup! … (#1600)` | link kept as member line, trailers verbatim |
| Tip with the link dropped | refused |
| Real rebased tip | passes the guard |

| command | exit |
| --- | --- |
| `vp test run`, 3 touched test files, 127 tests | 0 |
| scripts `tsc --noEmit` | 0 |
| `vp run fork:ci`, scripts 739 tests | 0 |

Not run: a real sync with a linked fixup on trunk; the next one proves it.

Claude Opus 5.5 in Claude Code, inside T3 Code; implemented by a Pi child agent.

## Fork trailers

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

<!-- gh-bot:attest {"v":2,"repo":"RSI-Software/t3code-hyprws","ref":"fix/sync-fold-keeps-fixup-link@9c52168","build":"252611418","agents":[{"role":"host","iface":"claude","provider":"anthropic","model":"claude-opus-5-5","effort":"high","harness":"[email protected]","session":"da5d3d04239a"}],"ts":"2026-10-04T03:13:16Z"} -->
donjor pushed a commit that referenced this pull request Oct 11, 2026
> 🤖 claude/anthropic claude-opus-5-5 (high)

## Problem

The sync rebase folds a squash-landed `fixup! <owner subject> (#N)` into its owner as git's `fixup`, which keeps only the owner's message.
So `(#N)` is lost, breaking the #1491 rule that every PR link survives every fold.

## Change

1. Sync renders each folded owner's message first
2. Adds the `Squashes:` list `fork:fold` writes
3. Lists each fixup's PR link there
4. Keeps trailers verbatim, `Co-authored-by:` too
5. Sequence editor amends the owner with it
6. Link guard refuses a tip that lost a link

A fixup citing no PR still folds as plain git `fixup`, its owner's message untouched.
`fork-sync.md` now names this as the sync's only reword.

**Guard scope:** it also refuses a sync where git silently drops a linked fork commit.
That matches the sync's rule that it never drops a commit.

## Scope and approval

Closes #1592.

- [ ] **Sync:** a folded `fixup! <subject> (#N)` keeps RSI-Software/t3code-hyprws#N on the owner's message
- [ ] **Guard:** the sync refuses a rebased tip that drops a PR link

## Verification

| test | result |
| --- | --- |
| Fold of `fixup! … (#1600)` | link kept as member line, trailers verbatim |
| Tip with the link dropped | refused |
| Real rebased tip | passes the guard |

| command | exit |
| --- | --- |
| `vp test run`, 3 touched test files, 127 tests | 0 |
| scripts `tsc --noEmit` | 0 |
| `vp run fork:ci`, scripts 739 tests | 0 |

Not run: a real sync with a linked fixup on trunk; the next one proves it.

Claude Opus 5.5 in Claude Code, inside T3 Code; implemented by a Pi child agent.

## Fork trailers

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

<!-- gh-bot:attest {"v":2,"repo":"RSI-Software/t3code-hyprws","ref":"fix/sync-fold-keeps-fixup-link@9c52168","build":"252611418","agents":[{"role":"host","iface":"claude","provider":"anthropic","model":"claude-opus-5-5","effort":"high","harness":"[email protected]","session":"da5d3d04239a"}],"ts":"2026-10-04T03:13:16Z"} -->
donjor pushed a commit that referenced this pull request Oct 12, 2026
> 🤖 claude/anthropic claude-opus-5-5 (high)

## Problem

The sync rebase folds a squash-landed `fixup! <owner subject> (#N)` into its owner as git's `fixup`, which keeps only the owner's message.
So `(#N)` is lost, breaking the #1491 rule that every PR link survives every fold.

## Change

1. Sync renders each folded owner's message first
2. Adds the `Squashes:` list `fork:fold` writes
3. Lists each fixup's PR link there
4. Keeps trailers verbatim, `Co-authored-by:` too
5. Sequence editor amends the owner with it
6. Link guard refuses a tip that lost a link

A fixup citing no PR still folds as plain git `fixup`, its owner's message untouched.
`fork-sync.md` now names this as the sync's only reword.

**Guard scope:** it also refuses a sync where git silently drops a linked fork commit.
That matches the sync's rule that it never drops a commit.

## Scope and approval

Closes #1592.

- [ ] **Sync:** a folded `fixup! <subject> (#N)` keeps RSI-Software/t3code-hyprws#N on the owner's message
- [ ] **Guard:** the sync refuses a rebased tip that drops a PR link

## Verification

| test | result |
| --- | --- |
| Fold of `fixup! … (#1600)` | link kept as member line, trailers verbatim |
| Tip with the link dropped | refused |
| Real rebased tip | passes the guard |

| command | exit |
| --- | --- |
| `vp test run`, 3 touched test files, 127 tests | 0 |
| scripts `tsc --noEmit` | 0 |
| `vp run fork:ci`, scripts 739 tests | 0 |

Not run: a real sync with a linked fixup on trunk; the next one proves it.

Claude Opus 5.5 in Claude Code, inside T3 Code; implemented by a Pi child agent.

## Fork trailers

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

<!-- gh-bot:attest {"v":2,"repo":"RSI-Software/t3code-hyprws","ref":"fix/sync-fold-keeps-fixup-link@9c52168","build":"252611418","agents":[{"role":"host","iface":"claude","provider":"anthropic","model":"claude-opus-5-5","effort":"high","harness":"[email protected]","session":"da5d3d04239a"}],"ts":"2026-10-04T03:13:16Z"} -->
donjor pushed a commit that referenced this pull request Oct 12, 2026
> 🤖 claude/anthropic claude-opus-5-5 (high)

## Problem

The sync rebase folds a squash-landed `fixup! <owner subject> (#N)` into its owner as git's `fixup`, which keeps only the owner's message.
So `(#N)` is lost, breaking the #1491 rule that every PR link survives every fold.

## Change

1. Sync renders each folded owner's message first
2. Adds the `Squashes:` list `fork:fold` writes
3. Lists each fixup's PR link there
4. Keeps trailers verbatim, `Co-authored-by:` too
5. Sequence editor amends the owner with it
6. Link guard refuses a tip that lost a link

A fixup citing no PR still folds as plain git `fixup`, its owner's message untouched.
`fork-sync.md` now names this as the sync's only reword.

**Guard scope:** it also refuses a sync where git silently drops a linked fork commit.
That matches the sync's rule that it never drops a commit.

## Scope and approval

Closes #1592.

- [ ] **Sync:** a folded `fixup! <subject> (#N)` keeps RSI-Software/t3code-hyprws#N on the owner's message
- [ ] **Guard:** the sync refuses a rebased tip that drops a PR link

## Verification

| test | result |
| --- | --- |
| Fold of `fixup! … (#1600)` | link kept as member line, trailers verbatim |
| Tip with the link dropped | refused |
| Real rebased tip | passes the guard |

| command | exit |
| --- | --- |
| `vp test run`, 3 touched test files, 127 tests | 0 |
| scripts `tsc --noEmit` | 0 |
| `vp run fork:ci`, scripts 739 tests | 0 |

Not run: a real sync with a linked fixup on trunk; the next one proves it.

Claude Opus 5.5 in Claude Code, inside T3 Code; implemented by a Pi child agent.

## Fork trailers

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

<!-- gh-bot:attest {"v":2,"repo":"RSI-Software/t3code-hyprws","ref":"fix/sync-fold-keeps-fixup-link@9c52168","build":"252611418","agents":[{"role":"host","iface":"claude","provider":"anthropic","model":"claude-opus-5-5","effort":"high","harness":"[email protected]","session":"da5d3d04239a"}],"ts":"2026-10-04T03:13:16Z"} -->
donjor pushed a commit that referenced this pull request Oct 13, 2026
> 🤖 claude/anthropic claude-opus-5-5 (high)

## Problem

The sync rebase folds a squash-landed `fixup! <owner subject> (#N)` into its owner as git's `fixup`, which keeps only the owner's message.
So `(#N)` is lost, breaking the #1491 rule that every PR link survives every fold.

## Change

1. Sync renders each folded owner's message first
2. Adds the `Squashes:` list `fork:fold` writes
3. Lists each fixup's PR link there
4. Keeps trailers verbatim, `Co-authored-by:` too
5. Sequence editor amends the owner with it
6. Link guard refuses a tip that lost a link

A fixup citing no PR still folds as plain git `fixup`, its owner's message untouched.
`fork-sync.md` now names this as the sync's only reword.

**Guard scope:** it also refuses a sync where git silently drops a linked fork commit.
That matches the sync's rule that it never drops a commit.

## Scope and approval

Closes #1592.

- [ ] **Sync:** a folded `fixup! <subject> (#N)` keeps RSI-Software/t3code-hyprws#N on the owner's message
- [ ] **Guard:** the sync refuses a rebased tip that drops a PR link

## Verification

| test | result |
| --- | --- |
| Fold of `fixup! … (#1600)` | link kept as member line, trailers verbatim |
| Tip with the link dropped | refused |
| Real rebased tip | passes the guard |

| command | exit |
| --- | --- |
| `vp test run`, 3 touched test files, 127 tests | 0 |
| scripts `tsc --noEmit` | 0 |
| `vp run fork:ci`, scripts 739 tests | 0 |

Not run: a real sync with a linked fixup on trunk; the next one proves it.

Claude Opus 5.5 in Claude Code, inside T3 Code; implemented by a Pi child agent.

## Fork trailers

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

<!-- gh-bot:attest {"v":2,"repo":"RSI-Software/t3code-hyprws","ref":"fix/sync-fold-keeps-fixup-link@9c52168","build":"252611418","agents":[{"role":"host","iface":"claude","provider":"anthropic","model":"claude-opus-5-5","effort":"high","harness":"[email protected]","session":"da5d3d04239a"}],"ts":"2026-10-04T03:13:16Z"} -->
donjor pushed a commit that referenced this pull request Oct 15, 2026
> 🤖 claude/anthropic claude-opus-5-5 (high)

## Problem

The sync rebase folds a squash-landed `fixup! <owner subject> (#N)` into its owner as git's `fixup`, which keeps only the owner's message.
So `(#N)` is lost, breaking the #1491 rule that every PR link survives every fold.

## Change

1. Sync renders each folded owner's message first
2. Adds the `Squashes:` list `fork:fold` writes
3. Lists each fixup's PR link there
4. Keeps trailers verbatim, `Co-authored-by:` too
5. Sequence editor amends the owner with it
6. Link guard refuses a tip that lost a link

A fixup citing no PR still folds as plain git `fixup`, its owner's message untouched.
`fork-sync.md` now names this as the sync's only reword.

**Guard scope:** it also refuses a sync where git silently drops a linked fork commit.
That matches the sync's rule that it never drops a commit.

## Scope and approval

Closes #1592.

- [ ] **Sync:** a folded `fixup! <subject> (#N)` keeps RSI-Software/t3code-hyprws#N on the owner's message
- [ ] **Guard:** the sync refuses a rebased tip that drops a PR link

## Verification

| test | result |
| --- | --- |
| Fold of `fixup! … (#1600)` | link kept as member line, trailers verbatim |
| Tip with the link dropped | refused |
| Real rebased tip | passes the guard |

| command | exit |
| --- | --- |
| `vp test run`, 3 touched test files, 127 tests | 0 |
| scripts `tsc --noEmit` | 0 |
| `vp run fork:ci`, scripts 739 tests | 0 |

Not run: a real sync with a linked fixup on trunk; the next one proves it.

Claude Opus 5.5 in Claude Code, inside T3 Code; implemented by a Pi child agent.

## Fork trailers

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

<!-- gh-bot:attest {"v":2,"repo":"RSI-Software/t3code-hyprws","ref":"fix/sync-fold-keeps-fixup-link@9c52168","build":"252611418","agents":[{"role":"host","iface":"claude","provider":"anthropic","model":"claude-opus-5-5","effort":"high","harness":"[email protected]","session":"da5d3d04239a"}],"ts":"2026-10-04T03:13:16Z"} -->
donjor pushed a commit that referenced this pull request Oct 15, 2026
> 🤖 claude/anthropic claude-opus-5-5 (high)

## Problem

The sync rebase folds a squash-landed `fixup! <owner subject> (#N)` into its owner as git's `fixup`, which keeps only the owner's message.
So `(#N)` is lost, breaking the #1491 rule that every PR link survives every fold.

## Change

1. Sync renders each folded owner's message first
2. Adds the `Squashes:` list `fork:fold` writes
3. Lists each fixup's PR link there
4. Keeps trailers verbatim, `Co-authored-by:` too
5. Sequence editor amends the owner with it
6. Link guard refuses a tip that lost a link

A fixup citing no PR still folds as plain git `fixup`, its owner's message untouched.
`fork-sync.md` now names this as the sync's only reword.

**Guard scope:** it also refuses a sync where git silently drops a linked fork commit.
That matches the sync's rule that it never drops a commit.

## Scope and approval

Closes #1592.

- [ ] **Sync:** a folded `fixup! <subject> (#N)` keeps RSI-Software/t3code-hyprws#N on the owner's message
- [ ] **Guard:** the sync refuses a rebased tip that drops a PR link

## Verification

| test | result |
| --- | --- |
| Fold of `fixup! … (#1600)` | link kept as member line, trailers verbatim |
| Tip with the link dropped | refused |
| Real rebased tip | passes the guard |

| command | exit |
| --- | --- |
| `vp test run`, 3 touched test files, 127 tests | 0 |
| scripts `tsc --noEmit` | 0 |
| `vp run fork:ci`, scripts 739 tests | 0 |

Not run: a real sync with a linked fixup on trunk; the next one proves it.

Claude Opus 5.5 in Claude Code, inside T3 Code; implemented by a Pi child agent.

## Fork trailers

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

<!-- gh-bot:attest {"v":2,"repo":"RSI-Software/t3code-hyprws","ref":"fix/sync-fold-keeps-fixup-link@9c52168","build":"252611418","agents":[{"role":"host","iface":"claude","provider":"anthropic","model":"claude-opus-5-5","effort":"high","harness":"[email protected]","session":"da5d3d04239a"}],"ts":"2026-10-04T03:13:16Z"} -->
donjor pushed a commit that referenced this pull request Oct 16, 2026
> 🤖 claude/anthropic claude-opus-5-5 (high)

## Problem

The sync rebase folds a squash-landed `fixup! <owner subject> (#N)` into its owner as git's `fixup`, which keeps only the owner's message.
So `(#N)` is lost, breaking the #1491 rule that every PR link survives every fold.

## Change

1. Sync renders each folded owner's message first
2. Adds the `Squashes:` list `fork:fold` writes
3. Lists each fixup's PR link there
4. Keeps trailers verbatim, `Co-authored-by:` too
5. Sequence editor amends the owner with it
6. Link guard refuses a tip that lost a link

A fixup citing no PR still folds as plain git `fixup`, its owner's message untouched.
`fork-sync.md` now names this as the sync's only reword.

**Guard scope:** it also refuses a sync where git silently drops a linked fork commit.
That matches the sync's rule that it never drops a commit.

## Scope and approval

Closes #1592.

- [ ] **Sync:** a folded `fixup! <subject> (#N)` keeps RSI-Software/t3code-hyprws#N on the owner's message
- [ ] **Guard:** the sync refuses a rebased tip that drops a PR link

## Verification

| test | result |
| --- | --- |
| Fold of `fixup! … (#1600)` | link kept as member line, trailers verbatim |
| Tip with the link dropped | refused |
| Real rebased tip | passes the guard |

| command | exit |
| --- | --- |
| `vp test run`, 3 touched test files, 127 tests | 0 |
| scripts `tsc --noEmit` | 0 |
| `vp run fork:ci`, scripts 739 tests | 0 |

Not run: a real sync with a linked fixup on trunk; the next one proves it.

Claude Opus 5.5 in Claude Code, inside T3 Code; implemented by a Pi child agent.

## Fork trailers

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

<!-- gh-bot:attest {"v":2,"repo":"RSI-Software/t3code-hyprws","ref":"fix/sync-fold-keeps-fixup-link@9c52168","build":"252611418","agents":[{"role":"host","iface":"claude","provider":"anthropic","model":"claude-opus-5-5","effort":"high","harness":"[email protected]","session":"da5d3d04239a"}],"ts":"2026-10-04T03:13:16Z"} -->
donjor pushed a commit that referenced this pull request Oct 16, 2026
> 🤖 claude/anthropic claude-opus-5-5 (high)

## Problem

The sync rebase folds a squash-landed `fixup! <owner subject> (#N)` into its owner as git's `fixup`, which keeps only the owner's message.
So `(#N)` is lost, breaking the #1491 rule that every PR link survives every fold.

## Change

1. Sync renders each folded owner's message first
2. Adds the `Squashes:` list `fork:fold` writes
3. Lists each fixup's PR link there
4. Keeps trailers verbatim, `Co-authored-by:` too
5. Sequence editor amends the owner with it
6. Link guard refuses a tip that lost a link

A fixup citing no PR still folds as plain git `fixup`, its owner's message untouched.
`fork-sync.md` now names this as the sync's only reword.

**Guard scope:** it also refuses a sync where git silently drops a linked fork commit.
That matches the sync's rule that it never drops a commit.

## Scope and approval

Closes #1592.

- [ ] **Sync:** a folded `fixup! <subject> (#N)` keeps RSI-Software/t3code-hyprws#N on the owner's message
- [ ] **Guard:** the sync refuses a rebased tip that drops a PR link

## Verification

| test | result |
| --- | --- |
| Fold of `fixup! … (#1600)` | link kept as member line, trailers verbatim |
| Tip with the link dropped | refused |
| Real rebased tip | passes the guard |

| command | exit |
| --- | --- |
| `vp test run`, 3 touched test files, 127 tests | 0 |
| scripts `tsc --noEmit` | 0 |
| `vp run fork:ci`, scripts 739 tests | 0 |

Not run: a real sync with a linked fixup on trunk; the next one proves it.

Claude Opus 5.5 in Claude Code, inside T3 Code; implemented by a Pi child agent.

## Fork trailers

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

<!-- gh-bot:attest {"v":2,"repo":"RSI-Software/t3code-hyprws","ref":"fix/sync-fold-keeps-fixup-link@9c52168","build":"252611418","agents":[{"role":"host","iface":"claude","provider":"anthropic","model":"claude-opus-5-5","effort":"high","harness":"[email protected]","session":"da5d3d04239a"}],"ts":"2026-10-04T03:13:16Z"} -->
donjor pushed a commit that referenced this pull request Oct 18, 2026
> 🤖 claude/anthropic claude-opus-5-5 (high)

## Problem

The sync rebase folds a squash-landed `fixup! <owner subject> (#N)` into its owner as git's `fixup`, which keeps only the owner's message.
So `(#N)` is lost, breaking the #1491 rule that every PR link survives every fold.

## Change

1. Sync renders each folded owner's message first
2. Adds the `Squashes:` list `fork:fold` writes
3. Lists each fixup's PR link there
4. Keeps trailers verbatim, `Co-authored-by:` too
5. Sequence editor amends the owner with it
6. Link guard refuses a tip that lost a link

A fixup citing no PR still folds as plain git `fixup`, its owner's message untouched.
`fork-sync.md` now names this as the sync's only reword.

**Guard scope:** it also refuses a sync where git silently drops a linked fork commit.
That matches the sync's rule that it never drops a commit.

## Scope and approval

Closes #1592.

- [ ] **Sync:** a folded `fixup! <subject> (#N)` keeps RSI-Software/t3code-hyprws#N on the owner's message
- [ ] **Guard:** the sync refuses a rebased tip that drops a PR link

## Verification

| test | result |
| --- | --- |
| Fold of `fixup! … (#1600)` | link kept as member line, trailers verbatim |
| Tip with the link dropped | refused |
| Real rebased tip | passes the guard |

| command | exit |
| --- | --- |
| `vp test run`, 3 touched test files, 127 tests | 0 |
| scripts `tsc --noEmit` | 0 |
| `vp run fork:ci`, scripts 739 tests | 0 |

Not run: a real sync with a linked fixup on trunk; the next one proves it.

Claude Opus 5.5 in Claude Code, inside T3 Code; implemented by a Pi child agent.

## Fork trailers

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

<!-- gh-bot:attest {"v":2,"repo":"RSI-Software/t3code-hyprws","ref":"fix/sync-fold-keeps-fixup-link@9c52168","build":"252611418","agents":[{"role":"host","iface":"claude","provider":"anthropic","model":"claude-opus-5-5","effort":"high","harness":"[email protected]","session":"da5d3d04239a"}],"ts":"2026-10-04T03:13:16Z"} -->
donjor pushed a commit that referenced this pull request Oct 18, 2026
> 🤖 claude/anthropic claude-opus-5-5 (high)

## Problem

The sync rebase folds a squash-landed `fixup! <owner subject> (#N)` into its owner as git's `fixup`, which keeps only the owner's message.
So `(#N)` is lost, breaking the #1491 rule that every PR link survives every fold.

## Change

1. Sync renders each folded owner's message first
2. Adds the `Squashes:` list `fork:fold` writes
3. Lists each fixup's PR link there
4. Keeps trailers verbatim, `Co-authored-by:` too
5. Sequence editor amends the owner with it
6. Link guard refuses a tip that lost a link

A fixup citing no PR still folds as plain git `fixup`, its owner's message untouched.
`fork-sync.md` now names this as the sync's only reword.

**Guard scope:** it also refuses a sync where git silently drops a linked fork commit.
That matches the sync's rule that it never drops a commit.

## Scope and approval

Closes #1592.

- [ ] **Sync:** a folded `fixup! <subject> (#N)` keeps RSI-Software/t3code-hyprws#N on the owner's message
- [ ] **Guard:** the sync refuses a rebased tip that drops a PR link

## Verification

| test | result |
| --- | --- |
| Fold of `fixup! … (#1600)` | link kept as member line, trailers verbatim |
| Tip with the link dropped | refused |
| Real rebased tip | passes the guard |

| command | exit |
| --- | --- |
| `vp test run`, 3 touched test files, 127 tests | 0 |
| scripts `tsc --noEmit` | 0 |
| `vp run fork:ci`, scripts 739 tests | 0 |

Not run: a real sync with a linked fixup on trunk; the next one proves it.

Claude Opus 5.5 in Claude Code, inside T3 Code; implemented by a Pi child agent.

## Fork trailers

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

<!-- gh-bot:attest {"v":2,"repo":"RSI-Software/t3code-hyprws","ref":"fix/sync-fold-keeps-fixup-link@9c52168","build":"252611418","agents":[{"role":"host","iface":"claude","provider":"anthropic","model":"claude-opus-5-5","effort":"high","harness":"[email protected]","session":"da5d3d04239a"}],"ts":"2026-10-04T03:13:16Z"} -->
donjor pushed a commit that referenced this pull request Oct 18, 2026
> 🤖 claude/anthropic claude-opus-5-5 (high)

## Problem

The sync rebase folds a squash-landed `fixup! <owner subject> (#N)` into its owner as git's `fixup`, which keeps only the owner's message.
So `(#N)` is lost, breaking the #1491 rule that every PR link survives every fold.

## Change

1. Sync renders each folded owner's message first
2. Adds the `Squashes:` list `fork:fold` writes
3. Lists each fixup's PR link there
4. Keeps trailers verbatim, `Co-authored-by:` too
5. Sequence editor amends the owner with it
6. Link guard refuses a tip that lost a link

A fixup citing no PR still folds as plain git `fixup`, its owner's message untouched.
`fork-sync.md` now names this as the sync's only reword.

**Guard scope:** it also refuses a sync where git silently drops a linked fork commit.
That matches the sync's rule that it never drops a commit.

## Scope and approval

Closes #1592.

- [ ] **Sync:** a folded `fixup! <subject> (#N)` keeps RSI-Software/t3code-hyprws#N on the owner's message
- [ ] **Guard:** the sync refuses a rebased tip that drops a PR link

## Verification

| test | result |
| --- | --- |
| Fold of `fixup! … (#1600)` | link kept as member line, trailers verbatim |
| Tip with the link dropped | refused |
| Real rebased tip | passes the guard |

| command | exit |
| --- | --- |
| `vp test run`, 3 touched test files, 127 tests | 0 |
| scripts `tsc --noEmit` | 0 |
| `vp run fork:ci`, scripts 739 tests | 0 |

Not run: a real sync with a linked fixup on trunk; the next one proves it.

Claude Opus 5.5 in Claude Code, inside T3 Code; implemented by a Pi child agent.

## Fork trailers

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

<!-- gh-bot:attest {"v":2,"repo":"RSI-Software/t3code-hyprws","ref":"fix/sync-fold-keeps-fixup-link@9c52168","build":"252611418","agents":[{"role":"host","iface":"claude","provider":"anthropic","model":"claude-opus-5-5","effort":"high","harness":"[email protected]","session":"da5d3d04239a"}],"ts":"2026-10-04T03:13:16Z"} -->
donjor pushed a commit that referenced this pull request Oct 19, 2026
> 🤖 claude/anthropic claude-opus-5-5 (high)

## Problem

The sync rebase folds a squash-landed `fixup! <owner subject> (#N)` into its owner as git's `fixup`, which keeps only the owner's message.
So `(#N)` is lost, breaking the #1491 rule that every PR link survives every fold.

## Change

1. Sync renders each folded owner's message first
2. Adds the `Squashes:` list `fork:fold` writes
3. Lists each fixup's PR link there
4. Keeps trailers verbatim, `Co-authored-by:` too
5. Sequence editor amends the owner with it
6. Link guard refuses a tip that lost a link

A fixup citing no PR still folds as plain git `fixup`, its owner's message untouched.
`fork-sync.md` now names this as the sync's only reword.

**Guard scope:** it also refuses a sync where git silently drops a linked fork commit.
That matches the sync's rule that it never drops a commit.

## Scope and approval

Closes #1592.

- [ ] **Sync:** a folded `fixup! <subject> (#N)` keeps RSI-Software/t3code-hyprws#N on the owner's message
- [ ] **Guard:** the sync refuses a rebased tip that drops a PR link

## Verification

| test | result |
| --- | --- |
| Fold of `fixup! … (#1600)` | link kept as member line, trailers verbatim |
| Tip with the link dropped | refused |
| Real rebased tip | passes the guard |

| command | exit |
| --- | --- |
| `vp test run`, 3 touched test files, 127 tests | 0 |
| scripts `tsc --noEmit` | 0 |
| `vp run fork:ci`, scripts 739 tests | 0 |

Not run: a real sync with a linked fixup on trunk; the next one proves it.

Claude Opus 5.5 in Claude Code, inside T3 Code; implemented by a Pi child agent.

## Fork trailers

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

<!-- gh-bot:attest {"v":2,"repo":"RSI-Software/t3code-hyprws","ref":"fix/sync-fold-keeps-fixup-link@9c52168","build":"252611418","agents":[{"role":"host","iface":"claude","provider":"anthropic","model":"claude-opus-5-5","effort":"high","harness":"[email protected]","session":"da5d3d04239a"}],"ts":"2026-10-04T03:13:16Z"} -->
donjor pushed a commit that referenced this pull request Oct 20, 2026
> 🤖 claude/anthropic claude-opus-5-5 (high)

## Problem

The sync rebase folds a squash-landed `fixup! <owner subject> (#N)` into its owner as git's `fixup`, which keeps only the owner's message.
So `(#N)` is lost, breaking the #1491 rule that every PR link survives every fold.

## Change

1. Sync renders each folded owner's message first
2. Adds the `Squashes:` list `fork:fold` writes
3. Lists each fixup's PR link there
4. Keeps trailers verbatim, `Co-authored-by:` too
5. Sequence editor amends the owner with it
6. Link guard refuses a tip that lost a link

A fixup citing no PR still folds as plain git `fixup`, its owner's message untouched.
`fork-sync.md` now names this as the sync's only reword.

**Guard scope:** it also refuses a sync where git silently drops a linked fork commit.
That matches the sync's rule that it never drops a commit.

## Scope and approval

Closes #1592.

- [ ] **Sync:** a folded `fixup! <subject> (#N)` keeps RSI-Software/t3code-hyprws#N on the owner's message
- [ ] **Guard:** the sync refuses a rebased tip that drops a PR link

## Verification

| test | result |
| --- | --- |
| Fold of `fixup! … (#1600)` | link kept as member line, trailers verbatim |
| Tip with the link dropped | refused |
| Real rebased tip | passes the guard |

| command | exit |
| --- | --- |
| `vp test run`, 3 touched test files, 127 tests | 0 |
| scripts `tsc --noEmit` | 0 |
| `vp run fork:ci`, scripts 739 tests | 0 |

Not run: a real sync with a linked fixup on trunk; the next one proves it.

Claude Opus 5.5 in Claude Code, inside T3 Code; implemented by a Pi child agent.

## Fork trailers

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

<!-- gh-bot:attest {"v":2,"repo":"RSI-Software/t3code-hyprws","ref":"fix/sync-fold-keeps-fixup-link@9c52168","build":"252611418","agents":[{"role":"host","iface":"claude","provider":"anthropic","model":"claude-opus-5-5","effort":"high","harness":"[email protected]","session":"da5d3d04239a"}],"ts":"2026-10-04T03:13:16Z"} -->
donjor added a commit that referenced this pull request Oct 20, 2026
## Problem

The sync to `v0.1.1-nightly.20261020.3386` fails after a clean rebase:

```text
the rebased tip dropped 1 pull request link(s):
#1801: cited by fe075c9 ..., by no new commit
```

#1801 backported upstream `2532e64099` exactly; both share patch-id `4221c8a56228`.
The rebase drops it correctly, as its body said it would.
The link guard from #1620 has no exemption for that drop, so no sync can pass.

## Change

`refuseDroppedLinks` skips old commits that `git cherry <target> <old>` marks `-`, meaning the target already carries the patch.
Every other dropped link still refuses.

## Scope and approval

Maintainer-authorized: unblocks the requested fork sync.

## Verification

| Check | Result |
| --- | --- |
| New test, without fix | fails |
| New test, with fix | passes |
| `scripts/fork-sync.test.ts` | 69 passed |
| Guard on the real sync shas | passes |
| `vp run fork:ci` | exit 0 |

Written by Claude Opus 5.5 in Claude Code, hosted by T3 Code.

## Fork trailers

Fork-Domain: fork-meta
Fork-Tier: bugfix
Fork-Upstreamable: no
Co-authored-by: donjor <[email protected]>
donjor pushed a commit that referenced this pull request Oct 21, 2026
> 🤖 claude/anthropic claude-opus-5-5 (high)

## Problem

The sync rebase folds a squash-landed `fixup! <owner subject> (#N)` into its owner as git's `fixup`, which keeps only the owner's message.
So `(#N)` is lost, breaking the #1491 rule that every PR link survives every fold.

## Change

1. Sync renders each folded owner's message first
2. Adds the `Squashes:` list `fork:fold` writes
3. Lists each fixup's PR link there
4. Keeps trailers verbatim, `Co-authored-by:` too
5. Sequence editor amends the owner with it
6. Link guard refuses a tip that lost a link

A fixup citing no PR still folds as plain git `fixup`, its owner's message untouched.
`fork-sync.md` now names this as the sync's only reword.

**Guard scope:** it also refuses a sync where git silently drops a linked fork commit.
That matches the sync's rule that it never drops a commit.

## Scope and approval

Closes #1592.

- [ ] **Sync:** a folded `fixup! <subject> (#N)` keeps RSI-Software/t3code-hyprws#N on the owner's message
- [ ] **Guard:** the sync refuses a rebased tip that drops a PR link

## Verification

| test | result |
| --- | --- |
| Fold of `fixup! … (#1600)` | link kept as member line, trailers verbatim |
| Tip with the link dropped | refused |
| Real rebased tip | passes the guard |

| command | exit |
| --- | --- |
| `vp test run`, 3 touched test files, 127 tests | 0 |
| scripts `tsc --noEmit` | 0 |
| `vp run fork:ci`, scripts 739 tests | 0 |

Not run: a real sync with a linked fixup on trunk; the next one proves it.

Claude Opus 5.5 in Claude Code, inside T3 Code; implemented by a Pi child agent.

## Fork trailers

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

<!-- gh-bot:attest {"v":2,"repo":"RSI-Software/t3code-hyprws","ref":"fix/sync-fold-keeps-fixup-link@9c52168","build":"252611418","agents":[{"role":"host","iface":"claude","provider":"anthropic","model":"claude-opus-5-5","effort":"high","harness":"[email protected]","session":"da5d3d04239a"}],"ts":"2026-10-04T03:13:16Z"} -->
donjor added a commit that referenced this pull request Oct 21, 2026
## Problem

The sync to `v0.1.1-nightly.20261020.3386` fails after a clean rebase:

```text
the rebased tip dropped 1 pull request link(s):
#1801: cited by fe075c9 ..., by no new commit
```

#1801 backported upstream `2532e64099` exactly; both share patch-id `4221c8a56228`.
The rebase drops it correctly, as its body said it would.
The link guard from #1620 has no exemption for that drop, so no sync can pass.

## Change

`refuseDroppedLinks` skips old commits that `git cherry <target> <old>` marks `-`, meaning the target already carries the patch.
Every other dropped link still refuses.

## Scope and approval

Maintainer-authorized: unblocks the requested fork sync.

## Verification

| Check | Result |
| --- | --- |
| New test, without fix | fails |
| New test, with fix | passes |
| `scripts/fork-sync.test.ts` | 69 passed |
| Guard on the real sync shas | passes |
| `vp run fork:ci` | exit 0 |

Written by Claude Opus 5.5 in Claude Code, hosted by T3 Code.

## Fork trailers

Fork-Domain: fork-meta
Fork-Tier: bugfix
Fork-Upstreamable: no
Co-authored-by: donjor <[email protected]>
donjor pushed a commit that referenced this pull request Oct 21, 2026
> 🤖 claude/anthropic claude-opus-5-5 (high)

## Problem

The sync rebase folds a squash-landed `fixup! <owner subject> (#N)` into its owner as git's `fixup`, which keeps only the owner's message.
So `(#N)` is lost, breaking the #1491 rule that every PR link survives every fold.

## Change

1. Sync renders each folded owner's message first
2. Adds the `Squashes:` list `fork:fold` writes
3. Lists each fixup's PR link there
4. Keeps trailers verbatim, `Co-authored-by:` too
5. Sequence editor amends the owner with it
6. Link guard refuses a tip that lost a link

A fixup citing no PR still folds as plain git `fixup`, its owner's message untouched.
`fork-sync.md` now names this as the sync's only reword.

**Guard scope:** it also refuses a sync where git silently drops a linked fork commit.
That matches the sync's rule that it never drops a commit.

## Scope and approval

Closes #1592.

- [ ] **Sync:** a folded `fixup! <subject> (#N)` keeps RSI-Software/t3code-hyprws#N on the owner's message
- [ ] **Guard:** the sync refuses a rebased tip that drops a PR link

## Verification

| test | result |
| --- | --- |
| Fold of `fixup! … (#1600)` | link kept as member line, trailers verbatim |
| Tip with the link dropped | refused |
| Real rebased tip | passes the guard |

| command | exit |
| --- | --- |
| `vp test run`, 3 touched test files, 127 tests | 0 |
| scripts `tsc --noEmit` | 0 |
| `vp run fork:ci`, scripts 739 tests | 0 |

Not run: a real sync with a linked fixup on trunk; the next one proves it.

Claude Opus 5.5 in Claude Code, inside T3 Code; implemented by a Pi child agent.

## Fork trailers

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

<!-- gh-bot:attest {"v":2,"repo":"RSI-Software/t3code-hyprws","ref":"fix/sync-fold-keeps-fixup-link@9c52168","build":"252611418","agents":[{"role":"host","iface":"claude","provider":"anthropic","model":"claude-opus-5-5","effort":"high","harness":"[email protected]","session":"da5d3d04239a"}],"ts":"2026-10-04T03:13:16Z"} -->
donjor added a commit that referenced this pull request Oct 21, 2026
## Problem

The sync to `v0.1.1-nightly.20261020.3386` fails after a clean rebase:

```text
the rebased tip dropped 1 pull request link(s):
#1801: cited by fe075c9 ..., by no new commit
```

#1801 backported upstream `2532e64099` exactly; both share patch-id `4221c8a56228`.
The rebase drops it correctly, as its body said it would.
The link guard from #1620 has no exemption for that drop, so no sync can pass.

## Change

`refuseDroppedLinks` skips old commits that `git cherry <target> <old>` marks `-`, meaning the target already carries the patch.
Every other dropped link still refuses.

## Scope and approval

Maintainer-authorized: unblocks the requested fork sync.

## Verification

| Check | Result |
| --- | --- |
| New test, without fix | fails |
| New test, with fix | passes |
| `scripts/fork-sync.test.ts` | 69 passed |
| Guard on the real sync shas | passes |
| `vp run fork:ci` | exit 0 |

Written by Claude Opus 5.5 in Claude Code, hosted by T3 Code.

## Fork trailers

Fork-Domain: fork-meta
Fork-Tier: bugfix
Fork-Upstreamable: no
Co-authored-by: donjor <[email protected]>
donjor pushed a commit that referenced this pull request Oct 21, 2026
> 🤖 claude/anthropic claude-opus-5-5 (high)

## Problem

The sync rebase folds a squash-landed `fixup! <owner subject> (#N)` into its owner as git's `fixup`, which keeps only the owner's message.
So `(#N)` is lost, breaking the #1491 rule that every PR link survives every fold.

## Change

1. Sync renders each folded owner's message first
2. Adds the `Squashes:` list `fork:fold` writes
3. Lists each fixup's PR link there
4. Keeps trailers verbatim, `Co-authored-by:` too
5. Sequence editor amends the owner with it
6. Link guard refuses a tip that lost a link

A fixup citing no PR still folds as plain git `fixup`, its owner's message untouched.
`fork-sync.md` now names this as the sync's only reword.

**Guard scope:** it also refuses a sync where git silently drops a linked fork commit.
That matches the sync's rule that it never drops a commit.

## Scope and approval

Closes #1592.

- [ ] **Sync:** a folded `fixup! <subject> (#N)` keeps RSI-Software/t3code-hyprws#N on the owner's message
- [ ] **Guard:** the sync refuses a rebased tip that drops a PR link

## Verification

| test | result |
| --- | --- |
| Fold of `fixup! … (#1600)` | link kept as member line, trailers verbatim |
| Tip with the link dropped | refused |
| Real rebased tip | passes the guard |

| command | exit |
| --- | --- |
| `vp test run`, 3 touched test files, 127 tests | 0 |
| scripts `tsc --noEmit` | 0 |
| `vp run fork:ci`, scripts 739 tests | 0 |

Not run: a real sync with a linked fixup on trunk; the next one proves it.

Claude Opus 5.5 in Claude Code, inside T3 Code; implemented by a Pi child agent.

## Fork trailers

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

<!-- gh-bot:attest {"v":2,"repo":"RSI-Software/t3code-hyprws","ref":"fix/sync-fold-keeps-fixup-link@9c52168","build":"252611418","agents":[{"role":"host","iface":"claude","provider":"anthropic","model":"claude-opus-5-5","effort":"high","harness":"[email protected]","session":"da5d3d04239a"}],"ts":"2026-10-04T03:13:16Z"} -->
donjor pushed a commit that referenced this pull request Oct 21, 2026
## Problem

The sync to `v0.1.1-nightly.20261020.3386` fails after a clean rebase:

```text
the rebased tip dropped 1 pull request link(s):
#1801: cited by fe075c9 ..., by no new commit
```

#1801 backported upstream `2532e64099` exactly; both share patch-id `4221c8a56228`.
The rebase drops it correctly, as its body said it would.
The link guard from #1620 has no exemption for that drop, so no sync can pass.

## Change

`refuseDroppedLinks` skips old commits that `git cherry <target> <old>` marks `-`, meaning the target already carries the patch.
Every other dropped link still refuses.

## Scope and approval

Maintainer-authorized: unblocks the requested fork sync.

## Verification

| Check | Result |
| --- | --- |
| New test, without fix | fails |
| New test, with fix | passes |
| `scripts/fork-sync.test.ts` | 69 passed |
| Guard on the real sync shas | passes |
| `vp run fork:ci` | exit 0 |

Written by Claude Opus 5.5 in Claude Code, hosted by T3 Code.

## Fork trailers

Squashes:

- 4f2343c fix(fork-sync): an exact upstream backport may drop its PR link (#1805) (#1805)
- eb10567 fixup! fix(fork-sync): an exact upstream backport may drop its PR link (#1805) (#1805)

Fork-Domain: fork-meta
Fork-Tier: bugfix
Fork-Upstreamable: no
donjor pushed a commit that referenced this pull request Oct 21, 2026
> 🤖 claude/anthropic claude-opus-5-5 (high)

## Problem

The sync rebase folds a squash-landed `fixup! <owner subject> (#N)` into its owner as git's `fixup`, which keeps only the owner's message.
So `(#N)` is lost, breaking the #1491 rule that every PR link survives every fold.

## Change

1. Sync renders each folded owner's message first
2. Adds the `Squashes:` list `fork:fold` writes
3. Lists each fixup's PR link there
4. Keeps trailers verbatim, `Co-authored-by:` too
5. Sequence editor amends the owner with it
6. Link guard refuses a tip that lost a link

A fixup citing no PR still folds as plain git `fixup`, its owner's message untouched.
`fork-sync.md` now names this as the sync's only reword.

**Guard scope:** it also refuses a sync where git silently drops a linked fork commit.
That matches the sync's rule that it never drops a commit.

## Scope and approval

Closes #1592.

- [ ] **Sync:** a folded `fixup! <subject> (#N)` keeps RSI-Software/t3code-hyprws#N on the owner's message
- [ ] **Guard:** the sync refuses a rebased tip that drops a PR link

## Verification

| test | result |
| --- | --- |
| Fold of `fixup! … (#1600)` | link kept as member line, trailers verbatim |
| Tip with the link dropped | refused |
| Real rebased tip | passes the guard |

| command | exit |
| --- | --- |
| `vp test run`, 3 touched test files, 127 tests | 0 |
| scripts `tsc --noEmit` | 0 |
| `vp run fork:ci`, scripts 739 tests | 0 |

Not run: a real sync with a linked fixup on trunk; the next one proves it.

Claude Opus 5.5 in Claude Code, inside T3 Code; implemented by a Pi child agent.

## Fork trailers

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

<!-- gh-bot:attest {"v":2,"repo":"RSI-Software/t3code-hyprws","ref":"fix/sync-fold-keeps-fixup-link@9c52168","build":"252611418","agents":[{"role":"host","iface":"claude","provider":"anthropic","model":"claude-opus-5-5","effort":"high","harness":"[email protected]","session":"da5d3d04239a"}],"ts":"2026-10-04T03:13:16Z"} -->
donjor pushed a commit that referenced this pull request Oct 21, 2026
## Problem

The sync to `v0.1.1-nightly.20261020.3386` fails after a clean rebase:

```text
the rebased tip dropped 1 pull request link(s):
#1801: cited by fe075c9 ..., by no new commit
```

#1801 backported upstream `2532e64099` exactly; both share patch-id `4221c8a56228`.
The rebase drops it correctly, as its body said it would.
The link guard from #1620 has no exemption for that drop, so no sync can pass.

## Change

`refuseDroppedLinks` skips old commits that `git cherry <target> <old>` marks `-`, meaning the target already carries the patch.
Every other dropped link still refuses.

## Scope and approval

Maintainer-authorized: unblocks the requested fork sync.

## Verification

| Check | Result |
| --- | --- |
| New test, without fix | fails |
| New test, with fix | passes |
| `scripts/fork-sync.test.ts` | 69 passed |
| Guard on the real sync shas | passes |
| `vp run fork:ci` | exit 0 |

Written by Claude Opus 5.5 in Claude Code, hosted by T3 Code.

## Fork trailers

Squashes:

- 4f2343c fix(fork-sync): an exact upstream backport may drop its PR link (#1805) (#1805)
- eb10567 fixup! fix(fork-sync): an exact upstream backport may drop its PR link (#1805) (#1805)

Fork-Domain: fork-meta
Fork-Tier: bugfix
Fork-Upstreamable: no
donjor pushed a commit that referenced this pull request Oct 21, 2026
> 🤖 claude/anthropic claude-opus-5-5 (high)

## Problem

The sync rebase folds a squash-landed `fixup! <owner subject> (#N)` into its owner as git's `fixup`, which keeps only the owner's message.
So `(#N)` is lost, breaking the #1491 rule that every PR link survives every fold.

## Change

1. Sync renders each folded owner's message first
2. Adds the `Squashes:` list `fork:fold` writes
3. Lists each fixup's PR link there
4. Keeps trailers verbatim, `Co-authored-by:` too
5. Sequence editor amends the owner with it
6. Link guard refuses a tip that lost a link

A fixup citing no PR still folds as plain git `fixup`, its owner's message untouched.
`fork-sync.md` now names this as the sync's only reword.

**Guard scope:** it also refuses a sync where git silently drops a linked fork commit.
That matches the sync's rule that it never drops a commit.

## Scope and approval

Closes #1592.

- [ ] **Sync:** a folded `fixup! <subject> (#N)` keeps RSI-Software/t3code-hyprws#N on the owner's message
- [ ] **Guard:** the sync refuses a rebased tip that drops a PR link

## Verification

| test | result |
| --- | --- |
| Fold of `fixup! … (#1600)` | link kept as member line, trailers verbatim |
| Tip with the link dropped | refused |
| Real rebased tip | passes the guard |

| command | exit |
| --- | --- |
| `vp test run`, 3 touched test files, 127 tests | 0 |
| scripts `tsc --noEmit` | 0 |
| `vp run fork:ci`, scripts 739 tests | 0 |

Not run: a real sync with a linked fixup on trunk; the next one proves it.

Claude Opus 5.5 in Claude Code, inside T3 Code; implemented by a Pi child agent.

## Fork trailers

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

<!-- gh-bot:attest {"v":2,"repo":"RSI-Software/t3code-hyprws","ref":"fix/sync-fold-keeps-fixup-link@9c52168","build":"252611418","agents":[{"role":"host","iface":"claude","provider":"anthropic","model":"claude-opus-5-5","effort":"high","harness":"[email protected]","session":"da5d3d04239a"}],"ts":"2026-10-04T03:13:16Z"} -->
donjor pushed a commit that referenced this pull request Oct 21, 2026
## Problem

The sync to `v0.1.1-nightly.20261020.3386` fails after a clean rebase:

```text
the rebased tip dropped 1 pull request link(s):
#1801: cited by fe075c9 ..., by no new commit
```

#1801 backported upstream `2532e64099` exactly; both share patch-id `4221c8a56228`.
The rebase drops it correctly, as its body said it would.
The link guard from #1620 has no exemption for that drop, so no sync can pass.

## Change

`refuseDroppedLinks` skips old commits that `git cherry <target> <old>` marks `-`, meaning the target already carries the patch.
Every other dropped link still refuses.

## Scope and approval

Maintainer-authorized: unblocks the requested fork sync.

## Verification

| Check | Result |
| --- | --- |
| New test, without fix | fails |
| New test, with fix | passes |
| `scripts/fork-sync.test.ts` | 69 passed |
| Guard on the real sync shas | passes |
| `vp run fork:ci` | exit 0 |

Written by Claude Opus 5.5 in Claude Code, hosted by T3 Code.

## Fork trailers

Squashes:

- 4f2343c fix(fork-sync): an exact upstream backport may drop its PR link (#1805) (#1805)
- eb10567 fixup! fix(fork-sync): an exact upstream backport may drop its PR link (#1805) (#1805)

Fork-Domain: fork-meta
Fork-Tier: bugfix
Fork-Upstreamable: no
donjor pushed a commit that referenced this pull request Oct 22, 2026
> 🤖 claude/anthropic claude-opus-5-5 (high)

## Problem

The sync rebase folds a squash-landed `fixup! <owner subject> (#N)` into its owner as git's `fixup`, which keeps only the owner's message.
So `(#N)` is lost, breaking the #1491 rule that every PR link survives every fold.

## Change

1. Sync renders each folded owner's message first
2. Adds the `Squashes:` list `fork:fold` writes
3. Lists each fixup's PR link there
4. Keeps trailers verbatim, `Co-authored-by:` too
5. Sequence editor amends the owner with it
6. Link guard refuses a tip that lost a link

A fixup citing no PR still folds as plain git `fixup`, its owner's message untouched.
`fork-sync.md` now names this as the sync's only reword.

**Guard scope:** it also refuses a sync where git silently drops a linked fork commit.
That matches the sync's rule that it never drops a commit.

## Scope and approval

Closes #1592.

- [ ] **Sync:** a folded `fixup! <subject> (#N)` keeps RSI-Software/t3code-hyprws#N on the owner's message
- [ ] **Guard:** the sync refuses a rebased tip that drops a PR link

## Verification

| test | result |
| --- | --- |
| Fold of `fixup! … (#1600)` | link kept as member line, trailers verbatim |
| Tip with the link dropped | refused |
| Real rebased tip | passes the guard |

| command | exit |
| --- | --- |
| `vp test run`, 3 touched test files, 127 tests | 0 |
| scripts `tsc --noEmit` | 0 |
| `vp run fork:ci`, scripts 739 tests | 0 |

Not run: a real sync with a linked fixup on trunk; the next one proves it.

Claude Opus 5.5 in Claude Code, inside T3 Code; implemented by a Pi child agent.

## Fork trailers

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

<!-- gh-bot:attest {"v":2,"repo":"RSI-Software/t3code-hyprws","ref":"fix/sync-fold-keeps-fixup-link@9c52168","build":"252611418","agents":[{"role":"host","iface":"claude","provider":"anthropic","model":"claude-opus-5-5","effort":"high","harness":"[email protected]","session":"da5d3d04239a"}],"ts":"2026-10-04T03:13:16Z"} -->
donjor pushed a commit that referenced this pull request Oct 22, 2026
## Problem

The sync to `v0.1.1-nightly.20261020.3386` fails after a clean rebase:

```text
the rebased tip dropped 1 pull request link(s):
#1801: cited by fe075c9 ..., by no new commit
```

#1801 backported upstream `2532e64099` exactly; both share patch-id `4221c8a56228`.
The rebase drops it correctly, as its body said it would.
The link guard from #1620 has no exemption for that drop, so no sync can pass.

## Change

`refuseDroppedLinks` skips old commits that `git cherry <target> <old>` marks `-`, meaning the target already carries the patch.
Every other dropped link still refuses.

## Scope and approval

Maintainer-authorized: unblocks the requested fork sync.

## Verification

| Check | Result |
| --- | --- |
| New test, without fix | fails |
| New test, with fix | passes |
| `scripts/fork-sync.test.ts` | 69 passed |
| Guard on the real sync shas | passes |
| `vp run fork:ci` | exit 0 |

Written by Claude Opus 5.5 in Claude Code, hosted by T3 Code.

## Fork trailers

Squashes:

- 4f2343c fix(fork-sync): an exact upstream backport may drop its PR link (#1805) (#1805)
- eb10567 fixup! fix(fork-sync): an exact upstream backport may drop its PR link (#1805) (#1805)

Fork-Domain: fork-meta
Fork-Tier: bugfix
Fork-Upstreamable: no
donjor pushed a commit that referenced this pull request Oct 22, 2026
> 🤖 claude/anthropic claude-opus-5-5 (high)

## Problem

The sync rebase folds a squash-landed `fixup! <owner subject> (#N)` into its owner as git's `fixup`, which keeps only the owner's message.
So `(#N)` is lost, breaking the #1491 rule that every PR link survives every fold.

## Change

1. Sync renders each folded owner's message first
2. Adds the `Squashes:` list `fork:fold` writes
3. Lists each fixup's PR link there
4. Keeps trailers verbatim, `Co-authored-by:` too
5. Sequence editor amends the owner with it
6. Link guard refuses a tip that lost a link

A fixup citing no PR still folds as plain git `fixup`, its owner's message untouched.
`fork-sync.md` now names this as the sync's only reword.

**Guard scope:** it also refuses a sync where git silently drops a linked fork commit.
That matches the sync's rule that it never drops a commit.

## Scope and approval

Closes #1592.

- [ ] **Sync:** a folded `fixup! <subject> (#N)` keeps RSI-Software/t3code-hyprws#N on the owner's message
- [ ] **Guard:** the sync refuses a rebased tip that drops a PR link

## Verification

| test | result |
| --- | --- |
| Fold of `fixup! … (#1600)` | link kept as member line, trailers verbatim |
| Tip with the link dropped | refused |
| Real rebased tip | passes the guard |

| command | exit |
| --- | --- |
| `vp test run`, 3 touched test files, 127 tests | 0 |
| scripts `tsc --noEmit` | 0 |
| `vp run fork:ci`, scripts 739 tests | 0 |

Not run: a real sync with a linked fixup on trunk; the next one proves it.

Claude Opus 5.5 in Claude Code, inside T3 Code; implemented by a Pi child agent.

## Fork trailers

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

<!-- gh-bot:attest {"v":2,"repo":"RSI-Software/t3code-hyprws","ref":"fix/sync-fold-keeps-fixup-link@9c52168","build":"252611418","agents":[{"role":"host","iface":"claude","provider":"anthropic","model":"claude-opus-5-5","effort":"high","harness":"[email protected]","session":"da5d3d04239a"}],"ts":"2026-10-04T03:13:16Z"} -->
donjor pushed a commit that referenced this pull request Oct 22, 2026
## Problem

The sync to `v0.1.1-nightly.20261020.3386` fails after a clean rebase:

```text
the rebased tip dropped 1 pull request link(s):
#1801: cited by fe075c9 ..., by no new commit
```

#1801 backported upstream `2532e64099` exactly; both share patch-id `4221c8a56228`.
The rebase drops it correctly, as its body said it would.
The link guard from #1620 has no exemption for that drop, so no sync can pass.

## Change

`refuseDroppedLinks` skips old commits that `git cherry <target> <old>` marks `-`, meaning the target already carries the patch.
Every other dropped link still refuses.

## Scope and approval

Maintainer-authorized: unblocks the requested fork sync.

## Verification

| Check | Result |
| --- | --- |
| New test, without fix | fails |
| New test, with fix | passes |
| `scripts/fork-sync.test.ts` | 69 passed |
| Guard on the real sync shas | passes |
| `vp run fork:ci` | exit 0 |

Written by Claude Opus 5.5 in Claude Code, hosted by T3 Code.

## Fork trailers

Squashes:

- 4f2343c fix(fork-sync): an exact upstream backport may drop its PR link (#1805) (#1805)
- eb10567 fixup! fix(fork-sync): an exact upstream backport may drop its PR link (#1805) (#1805)

Fork-Domain: fork-meta
Fork-Tier: bugfix
Fork-Upstreamable: no
donjor pushed a commit that referenced this pull request Oct 23, 2026
> 🤖 claude/anthropic claude-opus-5-5 (high)

## Problem

The sync rebase folds a squash-landed `fixup! <owner subject> (#N)` into its owner as git's `fixup`, which keeps only the owner's message.
So `(#N)` is lost, breaking the #1491 rule that every PR link survives every fold.

## Change

1. Sync renders each folded owner's message first
2. Adds the `Squashes:` list `fork:fold` writes
3. Lists each fixup's PR link there
4. Keeps trailers verbatim, `Co-authored-by:` too
5. Sequence editor amends the owner with it
6. Link guard refuses a tip that lost a link

A fixup citing no PR still folds as plain git `fixup`, its owner's message untouched.
`fork-sync.md` now names this as the sync's only reword.

**Guard scope:** it also refuses a sync where git silently drops a linked fork commit.
That matches the sync's rule that it never drops a commit.

## Scope and approval

Closes #1592.

- [ ] **Sync:** a folded `fixup! <subject> (#N)` keeps RSI-Software/t3code-hyprws#N on the owner's message
- [ ] **Guard:** the sync refuses a rebased tip that drops a PR link

## Verification

| test | result |
| --- | --- |
| Fold of `fixup! … (#1600)` | link kept as member line, trailers verbatim |
| Tip with the link dropped | refused |
| Real rebased tip | passes the guard |

| command | exit |
| --- | --- |
| `vp test run`, 3 touched test files, 127 tests | 0 |
| scripts `tsc --noEmit` | 0 |
| `vp run fork:ci`, scripts 739 tests | 0 |

Not run: a real sync with a linked fixup on trunk; the next one proves it.

Claude Opus 5.5 in Claude Code, inside T3 Code; implemented by a Pi child agent.

## Fork trailers

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

<!-- gh-bot:attest {"v":2,"repo":"RSI-Software/t3code-hyprws","ref":"fix/sync-fold-keeps-fixup-link@9c52168","build":"252611418","agents":[{"role":"host","iface":"claude","provider":"anthropic","model":"claude-opus-5-5","effort":"high","harness":"[email protected]","session":"da5d3d04239a"}],"ts":"2026-10-04T03:13:16Z"} -->
donjor pushed a commit that referenced this pull request Oct 23, 2026
## Problem

The sync to `v0.1.1-nightly.20261020.3386` fails after a clean rebase:

```text
the rebased tip dropped 1 pull request link(s):
#1801: cited by fe075c9 ..., by no new commit
```

#1801 backported upstream `2532e64099` exactly; both share patch-id `4221c8a56228`.
The rebase drops it correctly, as its body said it would.
The link guard from #1620 has no exemption for that drop, so no sync can pass.

## Change

`refuseDroppedLinks` skips old commits that `git cherry <target> <old>` marks `-`, meaning the target already carries the patch.
Every other dropped link still refuses.

## Scope and approval

Maintainer-authorized: unblocks the requested fork sync.

## Verification

| Check | Result |
| --- | --- |
| New test, without fix | fails |
| New test, with fix | passes |
| `scripts/fork-sync.test.ts` | 69 passed |
| Guard on the real sync shas | passes |
| `vp run fork:ci` | exit 0 |

Written by Claude Opus 5.5 in Claude Code, hosted by T3 Code.

## Fork trailers

Squashes:

- 4f2343c fix(fork-sync): an exact upstream backport may drop its PR link (#1805) (#1805)
- eb10567 fixup! fix(fork-sync): an exact upstream backport may drop its PR link (#1805) (#1805)

Fork-Domain: fork-meta
Fork-Tier: bugfix
Fork-Upstreamable: no
donjor pushed a commit that referenced this pull request Oct 24, 2026
> 🤖 claude/anthropic claude-opus-5-5 (high)

## Problem

The sync rebase folds a squash-landed `fixup! <owner subject> (#N)` into its owner as git's `fixup`, which keeps only the owner's message.
So `(#N)` is lost, breaking the #1491 rule that every PR link survives every fold.

## Change

1. Sync renders each folded owner's message first
2. Adds the `Squashes:` list `fork:fold` writes
3. Lists each fixup's PR link there
4. Keeps trailers verbatim, `Co-authored-by:` too
5. Sequence editor amends the owner with it
6. Link guard refuses a tip that lost a link

A fixup citing no PR still folds as plain git `fixup`, its owner's message untouched.
`fork-sync.md` now names this as the sync's only reword.

**Guard scope:** it also refuses a sync where git silently drops a linked fork commit.
That matches the sync's rule that it never drops a commit.

## Scope and approval

Closes #1592.

- [ ] **Sync:** a folded `fixup! <subject> (#N)` keeps RSI-Software/t3code-hyprws#N on the owner's message
- [ ] **Guard:** the sync refuses a rebased tip that drops a PR link

## Verification

| test | result |
| --- | --- |
| Fold of `fixup! … (#1600)` | link kept as member line, trailers verbatim |
| Tip with the link dropped | refused |
| Real rebased tip | passes the guard |

| command | exit |
| --- | --- |
| `vp test run`, 3 touched test files, 127 tests | 0 |
| scripts `tsc --noEmit` | 0 |
| `vp run fork:ci`, scripts 739 tests | 0 |

Not run: a real sync with a linked fixup on trunk; the next one proves it.

Claude Opus 5.5 in Claude Code, inside T3 Code; implemented by a Pi child agent.

## Fork trailers

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

<!-- gh-bot:attest {"v":2,"repo":"RSI-Software/t3code-hyprws","ref":"fix/sync-fold-keeps-fixup-link@9c52168","build":"252611418","agents":[{"role":"host","iface":"claude","provider":"anthropic","model":"claude-opus-5-5","effort":"high","harness":"[email protected]","session":"da5d3d04239a"}],"ts":"2026-10-04T03:13:16Z"} -->
donjor pushed a commit that referenced this pull request Oct 24, 2026
## Problem

The sync to `v0.1.1-nightly.20261020.3386` fails after a clean rebase:

```text
the rebased tip dropped 1 pull request link(s):
#1801: cited by fe075c9 ..., by no new commit
```

#1801 backported upstream `2532e64099` exactly; both share patch-id `4221c8a56228`.
The rebase drops it correctly, as its body said it would.
The link guard from #1620 has no exemption for that drop, so no sync can pass.

## Change

`refuseDroppedLinks` skips old commits that `git cherry <target> <old>` marks `-`, meaning the target already carries the patch.
Every other dropped link still refuses.

## Scope and approval

Maintainer-authorized: unblocks the requested fork sync.

## Verification

| Check | Result |
| --- | --- |
| New test, without fix | fails |
| New test, with fix | passes |
| `scripts/fork-sync.test.ts` | 69 passed |
| Guard on the real sync shas | passes |
| `vp run fork:ci` | exit 0 |

Written by Claude Opus 5.5 in Claude Code, hosted by T3 Code.

## Fork trailers

Squashes:

- 4f2343c fix(fork-sync): an exact upstream backport may drop its PR link (#1805) (#1805)
- eb10567 fixup! fix(fork-sync): an exact upstream backport may drop its PR link (#1805) (#1805)

Fork-Domain: fork-meta
Fork-Tier: bugfix
Fork-Upstreamable: no
donjor pushed a commit that referenced this pull request Oct 27, 2026
> 🤖 claude/anthropic claude-opus-5-5 (high)

## Problem

The sync rebase folds a squash-landed `fixup! <owner subject> (#N)` into its owner as git's `fixup`, which keeps only the owner's message.
So `(#N)` is lost, breaking the #1491 rule that every PR link survives every fold.

## Change

1. Sync renders each folded owner's message first
2. Adds the `Squashes:` list `fork:fold` writes
3. Lists each fixup's PR link there
4. Keeps trailers verbatim, `Co-authored-by:` too
5. Sequence editor amends the owner with it
6. Link guard refuses a tip that lost a link

A fixup citing no PR still folds as plain git `fixup`, its owner's message untouched.
`fork-sync.md` now names this as the sync's only reword.

**Guard scope:** it also refuses a sync where git silently drops a linked fork commit.
That matches the sync's rule that it never drops a commit.

## Scope and approval

Closes #1592.

- [ ] **Sync:** a folded `fixup! <subject> (#N)` keeps RSI-Software/t3code-hyprws#N on the owner's message
- [ ] **Guard:** the sync refuses a rebased tip that drops a PR link

## Verification

| test | result |
| --- | --- |
| Fold of `fixup! … (#1600)` | link kept as member line, trailers verbatim |
| Tip with the link dropped | refused |
| Real rebased tip | passes the guard |

| command | exit |
| --- | --- |
| `vp test run`, 3 touched test files, 127 tests | 0 |
| scripts `tsc --noEmit` | 0 |
| `vp run fork:ci`, scripts 739 tests | 0 |

Not run: a real sync with a linked fixup on trunk; the next one proves it.

Claude Opus 5.5 in Claude Code, inside T3 Code; implemented by a Pi child agent.

## Fork trailers

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

<!-- gh-bot:attest {"v":2,"repo":"RSI-Software/t3code-hyprws","ref":"fix/sync-fold-keeps-fixup-link@9c52168","build":"252611418","agents":[{"role":"host","iface":"claude","provider":"anthropic","model":"claude-opus-5-5","effort":"high","harness":"[email protected]","session":"da5d3d04239a"}],"ts":"2026-10-04T03:13:16Z"} -->
donjor pushed a commit that referenced this pull request Oct 27, 2026
## Problem

The sync to `v0.1.1-nightly.20261020.3386` fails after a clean rebase:

```text
the rebased tip dropped 1 pull request link(s):
#1801: cited by fe075c9 ..., by no new commit
```

#1801 backported upstream `2532e64099` exactly; both share patch-id `4221c8a56228`.
The rebase drops it correctly, as its body said it would.
The link guard from #1620 has no exemption for that drop, so no sync can pass.

## Change

`refuseDroppedLinks` skips old commits that `git cherry <target> <old>` marks `-`, meaning the target already carries the patch.
Every other dropped link still refuses.

## Scope and approval

Maintainer-authorized: unblocks the requested fork sync.

## Verification

| Check | Result |
| --- | --- |
| New test, without fix | fails |
| New test, with fix | passes |
| `scripts/fork-sync.test.ts` | 69 passed |
| Guard on the real sync shas | passes |
| `vp run fork:ci` | exit 0 |

Written by Claude Opus 5.5 in Claude Code, hosted by T3 Code.

## Fork trailers

Squashes:

- 4f2343c fix(fork-sync): an exact upstream backport may drop its PR link (#1805) (#1805)
- eb10567 fixup! fix(fork-sync): an exact upstream backport may drop its PR link (#1805) (#1805)

Fork-Domain: fork-meta
Fork-Tier: bugfix
Fork-Upstreamable: no
donjor pushed a commit that referenced this pull request Oct 27, 2026
> 🤖 claude/anthropic claude-opus-5-5 (high)

## Problem

The sync rebase folds a squash-landed `fixup! <owner subject> (#N)` into its owner as git's `fixup`, which keeps only the owner's message.
So `(#N)` is lost, breaking the #1491 rule that every PR link survives every fold.

## Change

1. Sync renders each folded owner's message first
2. Adds the `Squashes:` list `fork:fold` writes
3. Lists each fixup's PR link there
4. Keeps trailers verbatim, `Co-authored-by:` too
5. Sequence editor amends the owner with it
6. Link guard refuses a tip that lost a link

A fixup citing no PR still folds as plain git `fixup`, its owner's message untouched.
`fork-sync.md` now names this as the sync's only reword.

**Guard scope:** it also refuses a sync where git silently drops a linked fork commit.
That matches the sync's rule that it never drops a commit.

## Scope and approval

Closes #1592.

- [ ] **Sync:** a folded `fixup! <subject> (#N)` keeps RSI-Software/t3code-hyprws#N on the owner's message
- [ ] **Guard:** the sync refuses a rebased tip that drops a PR link

## Verification

| test | result |
| --- | --- |
| Fold of `fixup! … (#1600)` | link kept as member line, trailers verbatim |
| Tip with the link dropped | refused |
| Real rebased tip | passes the guard |

| command | exit |
| --- | --- |
| `vp test run`, 3 touched test files, 127 tests | 0 |
| scripts `tsc --noEmit` | 0 |
| `vp run fork:ci`, scripts 739 tests | 0 |

Not run: a real sync with a linked fixup on trunk; the next one proves it.

Claude Opus 5.5 in Claude Code, inside T3 Code; implemented by a Pi child agent.

## Fork trailers

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

<!-- gh-bot:attest {"v":2,"repo":"RSI-Software/t3code-hyprws","ref":"fix/sync-fold-keeps-fixup-link@9c52168","build":"252611418","agents":[{"role":"host","iface":"claude","provider":"anthropic","model":"claude-opus-5-5","effort":"high","harness":"[email protected]","session":"da5d3d04239a"}],"ts":"2026-10-04T03:13:16Z"} -->
donjor pushed a commit that referenced this pull request Oct 27, 2026
## Problem

The sync to `v0.1.1-nightly.20261020.3386` fails after a clean rebase:

```text
the rebased tip dropped 1 pull request link(s):
#1801: cited by fe075c9 ..., by no new commit
```

#1801 backported upstream `2532e64099` exactly; both share patch-id `4221c8a56228`.
The rebase drops it correctly, as its body said it would.
The link guard from #1620 has no exemption for that drop, so no sync can pass.

## Change

`refuseDroppedLinks` skips old commits that `git cherry <target> <old>` marks `-`, meaning the target already carries the patch.
Every other dropped link still refuses.

## Scope and approval

Maintainer-authorized: unblocks the requested fork sync.

## Verification

| Check | Result |
| --- | --- |
| New test, without fix | fails |
| New test, with fix | passes |
| `scripts/fork-sync.test.ts` | 69 passed |
| Guard on the real sync shas | passes |
| `vp run fork:ci` | exit 0 |

Written by Claude Opus 5.5 in Claude Code, hosted by T3 Code.

## Fork trailers

Squashes:

- 4f2343c fix(fork-sync): an exact upstream backport may drop its PR link (#1805) (#1805)
- eb10567 fixup! fix(fork-sync): an exact upstream backport may drop its PR link (#1805) (#1805)

Fork-Domain: fork-meta
Fork-Tier: bugfix
Fork-Upstreamable: no
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

the sync fold drops a squash-landed fixup's PR link [📥]

1 participant