Files
computer-playbook/skills/i8-merge-sibling/SKILL.md
kevinveenbirkenbachandClaude Opus 5 e595ddc194 docs(skills): add i8-merge-sibling for pulling and merging a sibling branch
Five requests in one session ran the same chain by hand: fetch, merge, resolve,
gate, wait for the commit decision. The conflict doctrine that emerged from
those merges is now written down instead of re-derived each time — union
additive lists, prefer the SPOT variable over an inlined duplicate, keep the
conventions this branch's lint enforces, and take the side that fails loudly.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-07-30 18:14:28 +02:00

2.1 KiB

name, description
name description
i8-merge-sibling Pull a sibling feature branch and merge it into the current one, resolving conflicts by combining both sides' intent rather than picking a side, then prove the result with make quality before the merge commit. Use whenever the operator asks to pull and merge another branch. Infinito.Nexus specific.

Follow the instructions from AGENTS.md, then run the sequence below. The branch to merge is the skill argument; default to feature/swarm-nfs when none is given.

Before touching the tree

Never start while a sweep, deploy, or gate is reading the working tree — a merge swaps files under it and has already destroyed a running roundtrip once. Stop the run first or wait for it. Untracked leftovers from an aborted merge block the next attempt: verify each against git ls-tree -r --name-only FETCH_HEAD before deleting, then delete them, and do not start a second in-sandbox attempt that recreates them.

Sequence

Fetch with git fetch fork <branch>, list what is incoming, then merge FETCH_HEAD. Resolve every conflict, run make quality, fix what it reports, and re-run until all four targets are green. Leave the merge commit to the operator unless they asked for it.

Conflict doctrine

Neither side wins by default. Decide per hunk:

  • Additive lists (dependencies, ignores, aliases) take the union; do not reorder beyond what the merge requires.
  • Behaviour-equal alternatives take the side that routes through the SPOT variable instead of inlining the expression again.
  • Where this branch's lint enforces a convention (gotoOnion, resolveTimeout, nocheck markers for || true), that convention is non-negotiable — keep it and adopt the incoming side's structure around it.
  • Where the two differ in semantics, take the one that fails loudly: an absent return code is a failure, not a success.
  • A block that only one side has is usually a feature the other never had. Check whether it was superseded before dropping it — grep for its variables.

State per conflict which side won and why; a reader must be able to audit the judgement without reopening the diff.