Skip to content

Resolve pure add/add pin conflicts automatically, and pin the slim kimi-k3 PR - #71

Merged
danielhanchen merged 2 commits into
masterfrom
additive-resolve
Aug 6, 2026
Merged

Resolve pure add/add pin conflicts automatically, and pin the slim kimi-k3 PR#71
danielhanchen merged 2 commits into
masterfrom
additive-resolve

Conversation

@danielhanchen

Copy link
Copy Markdown
Member

Two changes, both aimed at the failure that has cost the nightly three days.

Pin set. unslothai#48 is replaced by unslothai#70, which carries only what is genuinely not upstream: the MoonViT-3d vision tower, the full-size loading fixes and the new SSM_A_NOSCAN change. ggml-org#26185 drops out as a separate entry because #70 is built on it, so pinning both would merge the same commits twice. #48 duplicated the text-side work that 26185 has since absorbed, which is what forced a re-reconciliation every time either side moved.

Resolve. Every conflict that has broken the nightly this week has been the same shape: two PRs adding a line to the same architecture table, where the answer is always to keep both. scripts/unsloth/additive_merge.py already exists for exactly this and refuses anything else, so resolve now falls back to it on a conflicted merge, and only when it resolves every file. The merge runs with merge.conflictStyle=diff3 so the script can see the merge base and tell a pure add/add from an edit. A genuine disagreement still hard-fails with the same message, and an automatic resolution is announced with a ::warning:: rather than passing silently.

Verified by replaying the nightly's own merge sequence onto b10290:

ok 24423 (clean)
ok 25731 (clean)
ok 70    (additive resolve)

The three conflicts in src/llama-arch.cpp, src/llama-model.cpp and tools/mtmd/CMakeLists.txt were all case LLM_ARCH_KIMI_K3: / source-list additions. The resulting tree has no conflict markers and every models/*.cpp the CMakeLists references resolves to a real file.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 7caf256581

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

# additive_merge.py resolves only that, and refuses when
# either side edited existing text, so a real disagreement
# still hard-fails here rather than being papered over.
if python3 scripts/unsloth/additive_merge.py \

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Preserve the resolver before checking out the upstream tag

On every conflicted mix merge, this invocation cannot find the resolver: earlier the workflow runs git checkout --detach refs/tags/${BASE}, where BASE is fetched from ggml-org/llama.cpp, so the fork-only scripts/unsloth/additive_merge.py file is removed from the worktree. python3 therefore exits without resolving anything, the condition enters the abort branch, and the nightly still fails for the exact add/add conflicts this change intends to handle. Copy the resolver to a stable location such as RUNNER_TEMP before the upstream checkout, or retrieve it from the workflow commit explicitly.

Useful? React with 👍 / 👎.

# additive_merge.py resolves only that, and refuses when
# either side edited existing text, so a real disagreement
# still hard-fails here rather than being papered over.
if python3 scripts/unsloth/additive_merge.py \

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Preserve base-before-pin order when invoking the resolver

For an order-sensitive add/add conflict, this caller reverses the intended resolution order. Git's checkout -h defines --ours as the current side and --theirs as the merged side; here the accumulated base and earlier pins are therefore ours, while $SHA is theirs. However, additive_merge.py:112 emits theirs + ours because it was written for repin.py, which checks out the pin and merges upstream in the opposite direction. Once the resolver is made available, the nightly will consequently put the newest pin before upstream and earlier-pin additions, which can silently alter valid ordered tables or registration lists; pass the merge direction to the resolver or otherwise emit ours + theirs in this workflow.

Useful? React with 👍 / 👎.

@danielhanchen
danielhanchen merged commit 18670b9 into master Aug 6, 2026
2 checks passed
@danielhanchen
danielhanchen deleted the additive-resolve branch August 6, 2026 12:07
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant