Resolve pure add/add pin conflicts automatically, and pin the slim kimi-k3 PR - #71
Conversation
There was a problem hiding this comment.
💡 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 \ |
There was a problem hiding this comment.
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 \ |
There was a problem hiding this comment.
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 👍 / 👎.
Two changes, both aimed at the failure that has cost the nightly three days.
Pin set.
unslothai#48is replaced byunslothai#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#26185drops 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.pyalready 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 withmerge.conflictStyle=diff3so 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:The three conflicts in
src/llama-arch.cpp,src/llama-model.cppandtools/mtmd/CMakeLists.txtwere allcase LLM_ARCH_KIMI_K3:/ source-list additions. The resulting tree has no conflict markers and everymodels/*.cppthe CMakeLists references resolves to a real file.