Skip to content

Refresh llama.cpp upstream canary patch queue - #839

Merged
i386 merged 1 commit into
mainfrom
codex/fix-llama-upstream-canary
Jun 13, 2026
Merged

Refresh llama.cpp upstream canary patch queue#839
i386 merged 1 commit into
mainfrom
codex/fix-llama-upstream-canary

Conversation

@i386

@i386 i386 commented Jun 13, 2026

Copy link
Copy Markdown
Collaborator

The llama.cpp upstream canary can apply the Skippy patch queue to the current ggml-org/llama.cpp master again.

What changed

  • Updated third_party/llama.cpp/upstream.txt from e22b0de60dff987d8905ba3cd9636134efb9b672 to c34b92235b2d6a07963f896085f9ca077ff400b4.
  • Refreshed the 82 carried llama.cpp patch files against that upstream.
  • Resolved upstream graph API drift in the Skippy runtime-slice patches, including current n_layer/is_recr naming and Qwen35/Qwen35MoE staged range typing.

Root cause

The scheduled canary was failing in Prepare requested llama.cpp upstream while applying patch 0006 to newer llama.cpp. The patch queue had drifted behind upstream graph changes, so git am --3way could no longer apply the carried Skippy graph patches to current master.

Validation

  • LLAMA_WORKDIR=/tmp/mesh-llm-canary-validate.4GsGPQ scripts/prepare-llama.sh latest
  • LLAMA_WORKDIR=/tmp/mesh-llm-canary-validate.4GsGPQ scripts/build-llama.sh
  • cargo check -p skippy-ffi -p skippy-runtime -p skippy-server -p skippy-model-package -p skippy-correctness -p llama-spec-bench

git diff --check reports whitespace inside regenerated mail-format patch files; those patch artifacts intentionally preserve upstream patch whitespace.

Summary by CodeRabbit

Release Notes

  • New Features

    • Extended runtime-slice execution support across 30+ model architectures enabling efficient staged inference
    • Advanced sampling configuration with min-p, logit bias, and chat grammar support
    • Chat template system with tool/JSON support and thinking mode toggles
    • Session management APIs including checkpointing, trimming, and prefix caching
    • Backend device enumeration and selection capabilities
  • Performance Improvements

    • KV cache compaction during memory updates for optimized token processing
    • Streamlined batch allocation for single-token decoding
  • Enhancements

    • Batch token verification with activation frame support
    • Recurrent state export/import for session persistence
    • Configurable threading and batch sizing
    • External media prefill with position sideband support

@coderabbitai

coderabbitai Bot commented Jun 13, 2026

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Walkthrough

The patch series expands the Skippy ABI, adds runtime-slice graph filtering across many model builders, and introduces new APIs for activation frames, sampling, state/KV persistence, GGUF composition, and backend device enumeration.

Changes

Skippy ABI and runtime-slice evolution

Layer / File(s) Summary
ABI header and base exports
third_party/llama.cpp/patches/0001-Draft-skippy-ABI-header.patch, third_party/llama.cpp/patches/0002-Implement-skippy-model-info-ABI.patch, third_party/llama.cpp/patches/0003-Implement-single-stage-runtime-ABI-baseline.patch, third_party/llama.cpp/patches/0012-Add-stage-session-reset-ABI.patch, third_party/llama.cpp/patches/0013-Expose-stage-token-EOG-ABI.patch, third_party/llama.cpp/patches/0014-Position-stage-token-batches-from-session-offset.patch, third_party/llama.cpp/patches/0015-Optimize-native-KV-page-cell-lookup.patch, third_party/llama.cpp/patches/0016-Add-batched-token-verification-ABI.patch, third_party/llama.cpp/patches/0017-Expose-stage-chat-template-ABI.patch, third_party/llama.cpp/patches/0022-Add-stage-logit-bias-sampling-ABI.patch, third_party/llama.cpp/patches/0023-Add-stage-session-trim-ABI.patch, third_party/llama.cpp/patches/0024-Add-native-stage-session-checkpoint-ABI.patch, third_party/llama.cpp/patches/0025-Fix-staged-verification-activation-handoff.patch, third_party/llama.cpp/patches/0027-Expose-stage-chat-template-thinking-toggle.patch, third_party/llama.cpp/patches/0030-Expose-stage-KV-cache-type-config.patch, third_party/llama.cpp/patches/0032-Expose-selected-backend-device-ABI.patch, third_party/llama.cpp/patches/0033-Expose-external-media-prefill-ABI.patch, third_party/llama.cpp/patches/0035-Expose-stage-batch-and-flash-attention-config.patch, third_party/llama.cpp/patches/0036-Expose-tool-aware-chat-template-ABI.patch, third_party/llama.cpp/patches/0039-Restore-exact-prefix-state-cache-ABI.patch, third_party/llama.cpp/patches/0043-Default-stage-threads-like-llama-server.patch, third_party/llama.cpp/patches/0046-Remap-recurrent-state-imports-to-active-session.patch, third_party/llama.cpp/patches/0049-Avoid-rescaling-staged-activation-inputs.patch, third_party/llama.cpp/patches/0056-Expose-skippy-session-native-sequence-id.patch, third_party/llama.cpp/patches/0063-Allow-tied-output-embeddings-in-final-runtime-slices.patch, third_party/llama.cpp/patches/0067-Fix-StarCoder-positional-embeddings-in-runtime-slice.patch, third_party/llama.cpp/patches/0073-Expose-model-info-tensor-element-counts.patch, third_party/llama.cpp/patches/0074-Pad-activation-frame-decode-batches-to-native-input-.patch, third_party/llama.cpp/patches/0079-Trigger-lazy-chat-grammar-before-trailing-whitespace.patch, third_party/llama.cpp/upstream.txt
The base Skippy header and patch metadata are introduced and repeatedly revised while exposing core ABI enums, structs, lifecycle functions, model/session accessors, and metadata-only patch updates.
Runtime-slice graph filtering
third_party/llama.cpp/patches/0004-Implement-runtime-slice-tensor-filtering.patch, third_party/llama.cpp/patches/0006-Execute-runtime-slice-activation-frames.patch, third_party/llama.cpp/patches/0009-Support-Qwen35MoE-runtime-slice-packages.patch, third_party/llama.cpp/patches/0010-Handle-Qwen35MoE-recurrent-only-runtime-slices.patch, third_party/llama.cpp/patches/0018-Support-more-runtime-slice-model-families.patch, third_party/llama.cpp/patches/0029-Support-Qwen3MoE-runtime-slice-execution.patch, third_party/llama.cpp/patches/0047-Support-initial-dense-runtime-slice-families.patch, third_party/llama.cpp/patches/0048-Support-additional-dense-runtime-slice-families.patch, third_party/llama.cpp/patches/0049-Avoid-rescaling-staged-activation-inputs.patch, third_party/llama.cpp/patches/0050-Support-more-decoder-runtime-slice-families.patch, third_party/llama.cpp/patches/0051-Support-LFM2-runtime-slice-execution.patch, third_party/llama.cpp/patches/0052-Support-Mamba-runtime-slice-execution.patch, third_party/llama.cpp/patches/0053-Support-Jamba-runtime-slice-execution.patch, third_party/llama.cpp/patches/0054-Support-RWKV6-runtime-slice-execution.patch, third_party/llama.cpp/patches/0055-Support-Qwen2MoE-runtime-slice-execution.patch, third_party/llama.cpp/patches/0058-Support-Phi2-runtime-slice-execution.patch, third_party/llama.cpp/patches/0059-Support-Granite-runtime-slice-variants.patch, third_party/llama.cpp/patches/0061-Support-Hunyuan-MoE-runtime-slice-execution.patch, third_party/llama.cpp/patches/0062-Support-PhiMoE-runtime-slice-execution.patch, third_party/llama.cpp/patches/0064-Support-Qwen35-and-Hunyuan-VL-runtime-slices.patch, third_party/llama.cpp/patches/0065-Support-broad-llama-family-runtime-slices.patch, third_party/llama.cpp/patches/0066-Fix-BitNet-tied-output-runtime-slices.patch, third_party/llama.cpp/patches/0068-Support-DeepSeek-OCR-and-Qwen3-VL-MoE-runtime-slices.patch, third_party/llama.cpp/patches/0077-Support-Llama4-and-Mistral4-runtime-slices.patch
Stage filters are threaded through loader and graph builders to restrict layer ranges, gate embeddings/output tensors, and emit stage-boundary exits across many model families.
Activation frames, sampling, and chat
third_party/llama.cpp/patches/0005-Add-activation-frame-runtime-ABI.patch, third_party/llama.cpp/patches/0006-Execute-runtime-slice-activation-frames.patch, third_party/llama.cpp/patches/0018-Support-more-runtime-slice-model-families.patch, third_party/llama.cpp/patches/0019-Add-stage-sampling-config-ABI.patch, third_party/llama.cpp/patches/0020-Add-staged-batched-verification-frame-ABI.patch, third_party/llama.cpp/patches/0027-Expose-stage-chat-template-thinking-toggle.patch, third_party/llama.cpp/patches/0031-Expose-stage-generation-signal-ABI.patch, third_party/llama.cpp/patches/0033-Expose-external-media-prefill-ABI.patch, third_party/llama.cpp/patches/0036-Expose-tool-aware-chat-template-ABI.patch, third_party/llama.cpp/patches/0037-Apply-chat-grammar-during-stage-sampling.patch, third_party/llama.cpp/patches/0041-Compute-stage-generation-signals-lazily.patch, third_party/llama.cpp/patches/0042-Avoid-heap-batch-allocation-for-single-token-decode.patch, third_party/llama.cpp/patches/0057-Support-RWKV7-activation-sideband.patch, third_party/llama.cpp/patches/0071-Expose-external-decode-stage-filter-ABI.patch, third_party/llama.cpp/patches/0072-Support-external-media-prefill-in-staged-runtime-ABI.patch, third_party/llama.cpp/patches/0075-Carry-activation-frame-position-sideband.patch, third_party/llama.cpp/patches/0076-Support-Gemma3n-runtime-slices.patch, third_party/llama.cpp/patches/0078-Contain-chat-grammar-sampler-exceptions.patch, third_party/llama.cpp/patches/0079-Trigger-lazy-chat-grammar-before-trailing-whitespace.patch
Activation-frame descriptors, sampled decode paths, chat template APIs, generation signals, grammar samplers, and sideband payloads are added or revised together with related validation and error handling.
State, KV, checkpoint, and lanes
third_party/llama.cpp/patches/0011-Add-native-stage-KV-page-ABI.patch, third_party/llama.cpp/patches/0012-Add-stage-session-reset-ABI.patch, third_party/llama.cpp/patches/0016-Add-batched-token-verification-ABI.patch, third_party/llama.cpp/patches/0021-Add-recurrent-state-checkpoint-ABI.patch, third_party/llama.cpp/patches/0022-Add-stage-logit-bias-sampling-ABI.patch, third_party/llama.cpp/patches/0023-Add-stage-session-trim-ABI.patch, third_party/llama.cpp/patches/0024-Add-native-stage-session-checkpoint-ABI.patch, third_party/llama.cpp/patches/0034-Add-shared-execution-lanes-to-skippy-ABI.patch, third_party/llama.cpp/patches/0038-Add-resident-prefix-cache-ABI.patch, third_party/llama.cpp/patches/0039-Restore-exact-prefix-state-cache-ABI.patch, third_party/llama.cpp/patches/0040-Add-borrowed-resident-prefix-session-ABI.patch, third_party/llama.cpp/patches/0044-Allow-borrowing-resident-prefix-cache-sequences.patch, third_party/llama.cpp/patches/0045-Preserve-resident-prefix-lanes.patch, third_party/llama.cpp/patches/0046-Remap-recurrent-state-imports-to-active-session.patch, third_party/llama.cpp/patches/0082-Compact-KV-cache-cells-during-optimized-memory-updates.patch
State export/import, recurrent state, native KV pages, checkpoints, session trimming/reset, lane ownership, resident-prefix cache behavior, and KV compaction are introduced, removed, and reworked across the ABI and implementation.
GGUF composition, loading, and backend devices
third_party/llama.cpp/patches/0007-Implement-GGUF-slice-writer-ABI.patch, third_party/llama.cpp/patches/0008-Add-GGUF-package-part-composer-ABI.patch, third_party/llama.cpp/patches/0026-Strip-split-metadata-from-stage-GGUF-artifacts.patch, third_party/llama.cpp/patches/0028-Load-stage-models-from-ordered-GGUF-parts.patch, third_party/llama.cpp/patches/0030-Expose-stage-KV-cache-type-config.patch, third_party/llama.cpp/patches/0080-Expose-skippy-backend-device-enumeration-ABI.patch, third_party/llama.cpp/patches/0081-Add-min-p-sampler-to-skippy-sampling-chain.patch
GGUF slice writing, part composition, ordered multi-part loading, split-metadata stripping, backend-device enumeration, and related ABI header refactors are implemented together.
## Walkthrough The patch series expands the Skippy ABI, adds runtime-slice graph filtering across many model builders, and introduces new APIs for activation frames, sampling, state/KV persistence, GGUF composition, and backend device enumeration.

Changes

Skippy ABI and runtime-slice evolution

Layer / File(s) Summary
ABI header and base exports
third_party/llama.cpp/patches/0001-Draft-skippy-ABI-header.patch, third_party/llama.cpp/patches/0002-Implement-skippy-model-info-ABI.patch, third_party/llama.cpp/patches/0003-Implement-single-stage-runtime-ABI-baseline.patch, third_party/llama.cpp/patches/0012-Add-stage-session-reset-ABI.patch, third_party/llama.cpp/patches/0013-Expose-stage-token-EOG-ABI.patch, third_party/llama.cpp/patches/0014-Position-stage-token-batches-from-session-offset.patch, third_party/llama.cpp/patches/0015-Optimize-native-KV-page-cell-lookup.patch, third_party/llama.cpp/patches/0016-Add-batched-token-verification-ABI.patch, third_party/llama.cpp/patches/0017-Expose-stage-chat-template-ABI.patch, third_party/llama.cpp/patches/0022-Add-stage-logit-bias-sampling-ABI.patch, third_party/llama.cpp/patches/0023-Add-stage-session-trim-ABI.patch, third_party/llama.cpp/patches/0024-Add-native-stage-session-checkpoint-ABI.patch, third_party/llama.cpp/patches/0025-Fix-staged-verification-activation-handoff.patch, third_party/llama.cpp/patches/0027-Expose-stage-chat-template-thinking-toggle.patch, third_party/llama.cpp/patches/0030-Expose-stage-KV-cache-type-config.patch, third_party/llama.cpp/patches/0032-Expose-selected-backend-device-ABI.patch, third_party/llama.cpp/patches/0033-Expose-external-media-prefill-ABI.patch, third_party/llama.cpp/patches/0035-Expose-stage-batch-and-flash-attention-config.patch, third_party/llama.cpp/patches/0036-Expose-tool-aware-chat-template-ABI.patch, third_party/llama.cpp/patches/0039-Restore-exact-prefix-state-cache-ABI.patch, third_party/llama.cpp/patches/0043-Default-stage-threads-like-llama-server.patch, third_party/llama.cpp/patches/0046-Remap-recurrent-state-imports-to-active-session.patch, third_party/llama.cpp/patches/0049-Avoid-rescaling-staged-activation-inputs.patch, third_party/llama.cpp/patches/0056-Expose-skippy-session-native-sequence-id.patch, third_party/llama.cpp/patches/0063-Allow-tied-output-embeddings-in-final-runtime-slices.patch, third_party/llama.cpp/patches/0067-Fix-StarCoder-positional-embeddings-in-runtime-slice.patch, third_party/llama.cpp/patches/0073-Expose-model-info-tensor-element-counts.patch, third_party/llama.cpp/patches/0074-Pad-activation-frame-decode-batches-to-native-input-.patch, third_party/llama.cpp/patches/0079-Trigger-lazy-chat-grammar-before-trailing-whitespace.patch, third_party/llama.cpp/upstream.txt
The base Skippy header and patch metadata are introduced and repeatedly revised while exposing core ABI enums, structs, lifecycle functions, model/session accessors, and metadata-only patch updates.
Runtime-slice graph filtering
third_party/llama.cpp/patches/0004-Implement-runtime-slice-tensor-filtering.patch, third_party/llama.cpp/patches/0006-Execute-runtime-slice-activation-frames.patch, third_party/llama.cpp/patches/0009-Support-Qwen35MoE-runtime-slice-packages.patch, third_party/llama.cpp/patches/0010-Handle-Qwen35MoE-recurrent-only-runtime-slices.patch, third_party/llama.cpp/patches/0018-Support-more-runtime-slice-model-families.patch, third_party/llama.cpp/patches/0029-Support-Qwen3MoE-runtime-slice-execution.patch, third_party/llama.cpp/patches/0047-Support-initial-dense-runtime-slice-families.patch, third_party/llama.cpp/patches/0048-Support-additional-dense-runtime-slice-families.patch, third_party/llama.cpp/patches/0049-Avoid-rescaling-staged-activation-inputs.patch, third_party/llama.cpp/patches/0050-Support-more-decoder-runtime-slice-families.patch, third_party/llama.cpp/patches/0051-Support-LFM2-runtime-slice-execution.patch, third_party/llama.cpp/patches/0052-Support-Mamba-runtime-slice-execution.patch, third_party/llama.cpp/patches/0053-Support-Jamba-runtime-slice-execution.patch, third_party/llama.cpp/patches/0054-Support-RWKV6-runtime-slice-execution.patch, third_party/llama.cpp/patches/0055-Support-Qwen2MoE-runtime-slice-execution.patch, third_party/llama.cpp/patches/0058-Support-Phi2-runtime-slice-execution.patch, third_party/llama.cpp/patches/0059-Support-Granite-runtime-slice-variants.patch, third_party/llama.cpp/patches/0061-Support-Hunyuan-MoE-runtime-slice-execution.patch, third_party/llama.cpp/patches/0062-Support-PhiMoE-runtime-slice-execution.patch, third_party/llama.cpp/patches/0064-Support-Qwen35-and-Hunyuan-VL-runtime-slices.patch, third_party/llama.cpp/patches/0065-Support-broad-llama-family-runtime-slices.patch, third_party/llama.cpp/patches/0066-Fix-BitNet-tied-output-runtime-slices.patch, third_party/llama.cpp/patches/0068-Support-DeepSeek-OCR-and-Qwen3-VL-MoE-runtime-slices.patch, third_party/llama.cpp/patches/0077-Support-Llama4-and-Mistral4-runtime-slices.patch
Stage filters are threaded through loader and graph builders to restrict layer ranges, gate embeddings/output tensors, and emit stage-boundary exits across many model families.
Activation frames, sampling, and chat
third_party/llama.cpp/patches/0005-Add-activation-frame-runtime-ABI.patch, third_party/llama.cpp/patches/0006-Execute-runtime-slice-activation-frames.patch, third_party/llama.cpp/patches/0018-Support-more-runtime-slice-model-families.patch, third_party/llama.cpp/patches/0019-Add-stage-sampling-config-ABI.patch, third_party/llama.cpp/patches/0020-Add-staged-batched-verification-frame-ABI.patch, third_party/llama.cpp/patches/0027-Expose-stage-chat-template-thinking-toggle.patch, third_party/llama.cpp/patches/0031-Expose-stage-generation-signal-ABI.patch, third_party/llama.cpp/patches/0033-Expose-external-media-prefill-ABI.patch, third_party/llama.cpp/patches/0036-Expose-tool-aware-chat-template-ABI.patch, third_party/llama.cpp/patches/0037-Apply-chat-grammar-during-stage-sampling.patch, third_party/llama.cpp/patches/0041-Compute-stage-generation-signals-lazily.patch, third_party/llama.cpp/patches/0042-Avoid-heap-batch-allocation-for-single-token-decode.patch, third_party/llama.cpp/patches/0057-Support-RWKV7-activation-sideband.patch, third_party/llama.cpp/patches/0071-Expose-external-decode-stage-filter-ABI.patch, third_party/llama.cpp/patches/0072-Support-external-media-prefill-in-staged-runtime-ABI.patch, third_party/llama.cpp/patches/0075-Carry-activation-frame-position-sideband.patch, third_party/llama.cpp/patches/0076-Support-Gemma3n-runtime-slices.patch, third_party/llama.cpp/patches/0078-Contain-chat-grammar-sampler-exceptions.patch, third_party/llama.cpp/patches/0079-Trigger-lazy-chat-grammar-before-trailing-whitespace.patch
Activation-frame descriptors, sampled decode paths, chat template APIs, generation signals, grammar samplers, and sideband payloads are added or revised together with related validation and error handling.
State, KV, checkpoint, and lanes
third_party/llama.cpp/patches/0011-Add-native-stage-KV-page-ABI.patch, third_party/llama.cpp/patches/0012-Add-stage-session-reset-ABI.patch, third_party/llama.cpp/patches/0016-Add-batched-token-verification-ABI.patch, third_party/llama.cpp/patches/0021-Add-recurrent-state-checkpoint-ABI.patch, third_party/llama.cpp/patches/0022-Add-stage-logit-bias-sampling-ABI.patch, third_party/llama.cpp/patches/0023-Add-stage-session-trim-ABI.patch, third_party/llama.cpp/patches/0024-Add-native-stage-session-checkpoint-ABI.patch, third_party/llama.cpp/patches/0034-Add-shared-execution-lanes-to-skippy-ABI.patch, third_party/llama.cpp/patches/0038-Add-resident-prefix-cache-ABI.patch, third_party/llama.cpp/patches/0039-Restore-exact-prefix-state-cache-ABI.patch, third_party/llama.cpp/patches/0040-Add-borrowed-resident-prefix-session-ABI.patch, third_party/llama.cpp/patches/0044-Allow-borrowing-resident-prefix-cache-sequences.patch, third_party/llama.cpp/patches/0045-Preserve-resident-prefix-lanes.patch, third_party/llama.cpp/patches/0046-Remap-recurrent-state-imports-to-active-session.patch, third_party/llama.cpp/patches/0082-Compact-KV-cache-cells-during-optimized-memory-updates.patch
State export/import, recurrent state, native KV pages, checkpoints, session trimming/reset, lane ownership, resident-prefix cache behavior, and KV compaction are introduced, removed, and reworked across the ABI and implementation.
GGUF composition, loading, and backend devices
third_party/llama.cpp/patches/0007-Implement-GGUF-slice-writer-ABI.patch, third_party/llama.cpp/patches/0008-Add-GGUF-package-part-composer-ABI.patch, third_party/llama.cpp/patches/0026-Strip-split-metadata-from-stage-GGUF-artifacts.patch, third_party/llama.cpp/patches/0028-Load-stage-models-from-ordered-GGUF-parts.patch, third_party/llama.cpp/patches/0030-Expose-stage-KV-cache-type-config.patch, third_party/llama.cpp/patches/0080-Expose-skippy-backend-device-enumeration-ABI.patch, third_party/llama.cpp/patches/0081-Add-min-p-sampler-to-skippy-sampling-chain.patch
GGUF slice writing, part composition, ordered multi-part loading, split-metadata stripping, backend-device enumeration, and related ABI header refactors are implemented together.
## Sequence Diagram(s) ## Estimated code review effort 🎯 5 (Critical) | ⏱️ ~90+ minutes
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch codex/fix-llama-upstream-canary

@i386 i386 changed the title [codex] Refresh llama.cpp upstream canary patch queue Refresh llama.cpp upstream canary patch queue Jun 13, 2026
@i386
i386 marked this pull request as ready for review June 13, 2026 02:24
@i386 i386 mentioned this pull request Jun 13, 2026

@coderabbitai coderabbitai 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.

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (4)
third_party/llama.cpp/patches/0011-Add-native-stage-KV-page-ABI.patch (1)

276-437: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Silent failure on payload size mismatch at end of import.

Line 436 returns the result of src == static_cast<const char *>(input) + input_bytes without setting an error message if bytes consumed don't match. If there's any miscalculation in the V-transposed copy loop, this silently returns false with no diagnostic.

Proposed fix
-    return src == static_cast<const char *>(input) + input_bytes;
+    if (src != static_cast<const char *>(input) + input_bytes) {
+        error = "native KV page import consumed unexpected number of bytes";
+        return false;
+    }
+    return true;
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@third_party/llama.cpp/patches/0011-Add-native-stage-KV-page-ABI.patch` around
lines 276 - 437, The function llama_kv_cache::stage_import_kv_page currently
returns the boolean of (src == input + input_bytes) without setting error on
mismatch; change this by checking the final consumed byte count after the K/V
copy loops (compare src - static_cast<const char *>(input) to input_bytes) and
if they differ set a descriptive error on the error string (e.g. "imported
payload size mismatch: consumed X bytes, expected Y bytes") and return false;
keep the successful path returning true. Place this check just before the
current return and reference the local symbols src, input, input_bytes and
error, so any mismatch (including V-transposed loop mistakes) yields a clear
error message instead of silent failure.
third_party/llama.cpp/patches/0020-Add-staged-batched-verification-frame-ABI.patch (1)

180-270: ⚠️ Potential issue | 🟡 Minor

Fix missing token_ids argument to skippy_decode_activation_frame in patch 0020

  • 0018-Support-more-runtime-slice-model-families.patch adds const llama_token * token_ids to skippy_decode_activation_frame(...).
  • In 0020-Add-staged-batched-verification-frame-ABI.patch, the decode branch calls skippy_decode_activation_frame(session, input_desc, input_payload, token_count, false, out_error) (omits token_ids).
  • 0025-Fix-staged-verification-activation-handoff.patch corrects this by passing token_ids (..., input_payload, token_ids, token_count, false, out_error), so compilation relies on 0025 being applied.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@third_party/llama.cpp/patches/0020-Add-staged-batched-verification-frame-ABI.patch`
around lines 180 - 270, In skippy_verify_tokens_frame the call to
skippy_decode_activation_frame is missing the new token_ids parameter introduced
earlier; update the decode branch inside skippy_verify_tokens_frame so the call
passes token_ids (i.e., change skippy_decode_activation_frame(session,
input_desc, input_payload, token_count, false, out_error) to include token_ids
as the argument before token_count), ensuring the function signature matches the
updated skippy_decode_activation_frame declaration and compilation succeeds.
third_party/llama.cpp/patches/0057-Support-RWKV7-activation-sideband.patch (1)

350-353: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Defensive check should verify sufficient space for sideband data.

The condition at line 353 checks desc->payload_bytes >= hidden_bytes, but when the RWKV7 flag is set, the sideband data spans another hidden_bytes after the hidden portion. If validation is bypassed or buggy, this could allow reading beyond the payload buffer.

The copy logic at lines 507-515 correctly checks input_desc->payload_bytes < hidden_bytes * 2. For consistency and defense-in-depth, this check should also be >= hidden_bytes * 2:

Suggested fix
         if (desc != nullptr &&
             payload != nullptr &&
             (desc->flags & SKIPPY_ACTIVATION_FLAG_RWKV7_V_FIRST) != 0 &&
-            desc->payload_bytes >= hidden_bytes) {
+            desc->payload_bytes >= hidden_bytes * 2) {
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@third_party/llama.cpp/patches/0057-Support-RWKV7-activation-sideband.patch`
around lines 350 - 353, The conditional that validates the payload for RWKV7
sideband (checking desc != nullptr, payload != nullptr, (desc->flags &
SKIPPY_ACTIVATION_FLAG_RWKV7_V_FIRST) != 0, and desc->payload_bytes >=
hidden_bytes) is insufficient because RWKV7 includes an extra hidden_bytes of
sideband data; update the check on desc->payload_bytes to require at least
hidden_bytes * 2 (matching the input_desc->payload_bytes < hidden_bytes * 2
check used later) so the branch that handles RWKV7 activation-sideband cannot
read past the payload buffer.
third_party/llama.cpp/patches/0075-Carry-activation-frame-position-sideband.patch (1)

106-118: ⚠️ Potential issue | 🟠 Major | ⚡ Quick win

Position fallback may leave uninitialized data for unusual n_pos_per_embd values.

When positions == nullptr and n_pos_per_embd is neither 1 nor 4, the else branch (lines 114-117) only fills n_tokens positions but pos_storage was allocated for n_tokens * n_pos_per_embd elements. This could leave uninitialized positions in the batch for models with n_pos_per_embd values like 2 or 3.

Consider zero-initializing pos_storage at allocation or extending the fallback logic.

🛡️ Proposed fix: zero-initialize or handle all cases
-    std::vector<llama_pos> pos_storage(expected_position_count);
+    std::vector<llama_pos> pos_storage(expected_position_count, 0);
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@third_party/llama.cpp/patches/0075-Carry-activation-frame-position-sideband.patch`
around lines 106 - 118, The fallback branch that runs when positions == nullptr
only fills the first n_tokens entries leaving pos_storage (allocated for
n_tokens * n_pos_per_embd) partially uninitialized for n_pos_per_embd != 1 or 4;
update the fallback to fully initialize all n_pos_per_embd slots by replacing
the simple loop with a nested loop that for each token i and each slot k sets
pos_storage[k * n_tokens + i] = session->n_past + i (or alternatively
zero-initialize pos_storage at allocation with memset/{}), ensuring pos_storage,
n_pos_per_embd, n_tokens and session->n_past are used to locate and fill every
element when positions == nullptr.
🧹 Nitpick comments (3)
third_party/llama.cpp/patches/0007-Implement-GGUF-slice-writer-ABI.patch (1)

69-71: 💤 Low value

Potential overflow on large GGUF files with 32-bit long.

std::fseek takes a long offset, which may overflow on 32-bit platforms or Windows (where long is 32 bits) when seeking beyond 2GB. This affects both skippy_skip (here) and skippy_write_slice_gguf (line 426).

Consider using platform-specific 64-bit seek functions (fseeko/_fseeki64) for large file support, or document the limitation.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@third_party/llama.cpp/patches/0007-Implement-GGUF-slice-writer-ABI.patch`
around lines 69 - 71, The skippy_skip implementation (and the seek in
skippy_write_slice_gguf) uses std::fseek with a cast to long which can overflow
on 32-bit platforms; change these seeks to use a 64-bit seek API (fseeko on
POSIX or _fseeki64 on Windows) via conditional compilation: detect _WIN32 to
call _fseeki64 with a 64-bit offset type, otherwise use fseeko with off_t, and
keep a fallback to std::fseek for platforms that lack 64-bit variants; update
skippy_skip and the seek in skippy_write_slice_gguf to use this wrapper so large
GGUF files seek correctly.
third_party/llama.cpp/patches/0016-Add-batched-token-verification-ABI.patch (1)

56-74: 💤 Low value

Returning token 0 on null logits could mask errors.

When llama_get_logits_ith returns nullptr, the function returns token 0 which may be a valid token (BOS/padding). This could silently produce incorrect verification results if logits computation fails for a batch position.

Consider returning a sentinel value like -1 (which is commonly used for invalid tokens) or propagating the error to the caller.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@third_party/llama.cpp/patches/0016-Add-batched-token-verification-ABI.patch`
around lines 56 - 74, The helper skippy_greedy_sample_ith currently returns
token 0 when llama_get_logits_ith returns nullptr which can mask errors; change
the function to return a sentinel for "invalid" (e.g. use int32_t as the return
type or an existing LLAMA_TOKEN_INVALID constant) and return -1 (or that
constant) on nullptr from llama_get_logits_ith, and then update all callers of
skippy_greedy_sample_ith to check for the sentinel and handle the error path
instead of treating it as a valid token; reference skippy_greedy_sample_ith and
llama_get_logits_ith when making the change.
third_party/llama.cpp/patches/0037-Apply-chat-grammar-during-stage-sampling.patch (1)

182-211: 💤 Low value

Silent success on JSON parse exceptions may mask configuration errors.

When json::parse(metadata_json) throws, the code clears chat sampling and returns skippy_success(out_error). This silently ignores malformed metadata JSON, making it difficult for callers to diagnose why grammar sampling isn't active. Consider returning an error status or at minimum logging/reporting the parse failure.

Potential fix to report parse errors
     } catch (const std::exception & e) {
         skippy_clear_chat_sampling(session);
-        return skippy_success(out_error);
+        skippy_set_error(out_error, SKIPPY_STATUS_INVALID_ARGUMENT,
+            ("failed to parse chat sampling metadata: " + std::string(e.what())).c_str());
+        return SKIPPY_STATUS_INVALID_ARGUMENT;
     } catch (...) {
         skippy_clear_chat_sampling(session);
-        return skippy_success(out_error);
+        skippy_set_error(out_error, SKIPPY_STATUS_INVALID_ARGUMENT, "failed to parse chat sampling metadata");
+        return SKIPPY_STATUS_INVALID_ARGUMENT;
     }
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@third_party/llama.cpp/patches/0037-Apply-chat-grammar-during-stage-sampling.patch`
around lines 182 - 211, The code currently swallows JSON parse exceptions and
returns skippy_success, hiding malformed metadata; update the JSON parsing path
inside skippy_init_chat_grammar_sampler (the json::parse(metadata_json)
handling) to catch parse exceptions and propagate an error instead of returning
success — create and set a descriptive skippy_error (or call an existing helper
to populate out_error) and return false (or appropriate failure code) so callers
know grammar metadata failed to parse, and include the parse exception message
in the error for diagnostics.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Outside diff comments:
In `@third_party/llama.cpp/patches/0011-Add-native-stage-KV-page-ABI.patch`:
- Around line 276-437: The function llama_kv_cache::stage_import_kv_page
currently returns the boolean of (src == input + input_bytes) without setting
error on mismatch; change this by checking the final consumed byte count after
the K/V copy loops (compare src - static_cast<const char *>(input) to
input_bytes) and if they differ set a descriptive error on the error string
(e.g. "imported payload size mismatch: consumed X bytes, expected Y bytes") and
return false; keep the successful path returning true. Place this check just
before the current return and reference the local symbols src, input,
input_bytes and error, so any mismatch (including V-transposed loop mistakes)
yields a clear error message instead of silent failure.

In
`@third_party/llama.cpp/patches/0020-Add-staged-batched-verification-frame-ABI.patch`:
- Around line 180-270: In skippy_verify_tokens_frame the call to
skippy_decode_activation_frame is missing the new token_ids parameter introduced
earlier; update the decode branch inside skippy_verify_tokens_frame so the call
passes token_ids (i.e., change skippy_decode_activation_frame(session,
input_desc, input_payload, token_count, false, out_error) to include token_ids
as the argument before token_count), ensuring the function signature matches the
updated skippy_decode_activation_frame declaration and compilation succeeds.

In `@third_party/llama.cpp/patches/0057-Support-RWKV7-activation-sideband.patch`:
- Around line 350-353: The conditional that validates the payload for RWKV7
sideband (checking desc != nullptr, payload != nullptr, (desc->flags &
SKIPPY_ACTIVATION_FLAG_RWKV7_V_FIRST) != 0, and desc->payload_bytes >=
hidden_bytes) is insufficient because RWKV7 includes an extra hidden_bytes of
sideband data; update the check on desc->payload_bytes to require at least
hidden_bytes * 2 (matching the input_desc->payload_bytes < hidden_bytes * 2
check used later) so the branch that handles RWKV7 activation-sideband cannot
read past the payload buffer.

In
`@third_party/llama.cpp/patches/0075-Carry-activation-frame-position-sideband.patch`:
- Around line 106-118: The fallback branch that runs when positions == nullptr
only fills the first n_tokens entries leaving pos_storage (allocated for
n_tokens * n_pos_per_embd) partially uninitialized for n_pos_per_embd != 1 or 4;
update the fallback to fully initialize all n_pos_per_embd slots by replacing
the simple loop with a nested loop that for each token i and each slot k sets
pos_storage[k * n_tokens + i] = session->n_past + i (or alternatively
zero-initialize pos_storage at allocation with memset/{}), ensuring pos_storage,
n_pos_per_embd, n_tokens and session->n_past are used to locate and fill every
element when positions == nullptr.

---

Nitpick comments:
In `@third_party/llama.cpp/patches/0007-Implement-GGUF-slice-writer-ABI.patch`:
- Around line 69-71: The skippy_skip implementation (and the seek in
skippy_write_slice_gguf) uses std::fseek with a cast to long which can overflow
on 32-bit platforms; change these seeks to use a 64-bit seek API (fseeko on
POSIX or _fseeki64 on Windows) via conditional compilation: detect _WIN32 to
call _fseeki64 with a 64-bit offset type, otherwise use fseeko with off_t, and
keep a fallback to std::fseek for platforms that lack 64-bit variants; update
skippy_skip and the seek in skippy_write_slice_gguf to use this wrapper so large
GGUF files seek correctly.

In `@third_party/llama.cpp/patches/0016-Add-batched-token-verification-ABI.patch`:
- Around line 56-74: The helper skippy_greedy_sample_ith currently returns token
0 when llama_get_logits_ith returns nullptr which can mask errors; change the
function to return a sentinel for "invalid" (e.g. use int32_t as the return type
or an existing LLAMA_TOKEN_INVALID constant) and return -1 (or that constant) on
nullptr from llama_get_logits_ith, and then update all callers of
skippy_greedy_sample_ith to check for the sentinel and handle the error path
instead of treating it as a valid token; reference skippy_greedy_sample_ith and
llama_get_logits_ith when making the change.

In
`@third_party/llama.cpp/patches/0037-Apply-chat-grammar-during-stage-sampling.patch`:
- Around line 182-211: The code currently swallows JSON parse exceptions and
returns skippy_success, hiding malformed metadata; update the JSON parsing path
inside skippy_init_chat_grammar_sampler (the json::parse(metadata_json)
handling) to catch parse exceptions and propagate an error instead of returning
success — create and set a descriptive skippy_error (or call an existing helper
to populate out_error) and return false (or appropriate failure code) so callers
know grammar metadata failed to parse, and include the parse exception message
in the error for diagnostics.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: a62febfe-267a-4cfb-a27f-e2671dc7ea69

📥 Commits

Reviewing files that changed from the base of the PR and between 226d1c6 and b352f1b.

📒 Files selected for processing (83)
  • third_party/llama.cpp/patches/0001-Draft-skippy-ABI-header.patch
  • third_party/llama.cpp/patches/0002-Implement-skippy-model-info-ABI.patch
  • third_party/llama.cpp/patches/0003-Implement-single-stage-runtime-ABI-baseline.patch
  • third_party/llama.cpp/patches/0004-Implement-runtime-slice-tensor-filtering.patch
  • third_party/llama.cpp/patches/0005-Add-activation-frame-runtime-ABI.patch
  • third_party/llama.cpp/patches/0006-Execute-runtime-slice-activation-frames.patch
  • third_party/llama.cpp/patches/0007-Implement-GGUF-slice-writer-ABI.patch
  • third_party/llama.cpp/patches/0008-Add-GGUF-package-part-composer-ABI.patch
  • third_party/llama.cpp/patches/0009-Support-Qwen35MoE-runtime-slice-packages.patch
  • third_party/llama.cpp/patches/0010-Handle-Qwen35MoE-recurrent-only-runtime-slices.patch
  • third_party/llama.cpp/patches/0011-Add-native-stage-KV-page-ABI.patch
  • third_party/llama.cpp/patches/0012-Add-stage-session-reset-ABI.patch
  • third_party/llama.cpp/patches/0013-Expose-stage-token-EOG-ABI.patch
  • third_party/llama.cpp/patches/0014-Position-stage-token-batches-from-session-offset.patch
  • third_party/llama.cpp/patches/0015-Optimize-native-KV-page-cell-lookup.patch
  • third_party/llama.cpp/patches/0016-Add-batched-token-verification-ABI.patch
  • third_party/llama.cpp/patches/0017-Expose-stage-chat-template-ABI.patch
  • third_party/llama.cpp/patches/0018-Support-more-runtime-slice-model-families.patch
  • third_party/llama.cpp/patches/0019-Add-stage-sampling-config-ABI.patch
  • third_party/llama.cpp/patches/0020-Add-staged-batched-verification-frame-ABI.patch
  • third_party/llama.cpp/patches/0021-Add-recurrent-state-checkpoint-ABI.patch
  • third_party/llama.cpp/patches/0022-Add-stage-logit-bias-sampling-ABI.patch
  • third_party/llama.cpp/patches/0023-Add-stage-session-trim-ABI.patch
  • third_party/llama.cpp/patches/0024-Add-native-stage-session-checkpoint-ABI.patch
  • third_party/llama.cpp/patches/0025-Fix-staged-verification-activation-handoff.patch
  • third_party/llama.cpp/patches/0026-Strip-split-metadata-from-stage-GGUF-artifacts.patch
  • third_party/llama.cpp/patches/0027-Expose-stage-chat-template-thinking-toggle.patch
  • third_party/llama.cpp/patches/0028-Load-stage-models-from-ordered-GGUF-parts.patch
  • third_party/llama.cpp/patches/0029-Support-Qwen3MoE-runtime-slice-execution.patch
  • third_party/llama.cpp/patches/0030-Expose-stage-KV-cache-type-config.patch
  • third_party/llama.cpp/patches/0031-Expose-stage-generation-signal-ABI.patch
  • third_party/llama.cpp/patches/0032-Expose-selected-backend-device-ABI.patch
  • third_party/llama.cpp/patches/0033-Expose-external-media-prefill-ABI.patch
  • third_party/llama.cpp/patches/0034-Add-shared-execution-lanes-to-skippy-ABI.patch
  • third_party/llama.cpp/patches/0035-Expose-stage-batch-and-flash-attention-config.patch
  • third_party/llama.cpp/patches/0036-Expose-tool-aware-chat-template-ABI.patch
  • third_party/llama.cpp/patches/0037-Apply-chat-grammar-during-stage-sampling.patch
  • third_party/llama.cpp/patches/0038-Add-resident-prefix-cache-ABI.patch
  • third_party/llama.cpp/patches/0039-Restore-exact-prefix-state-cache-ABI.patch
  • third_party/llama.cpp/patches/0040-Add-borrowed-resident-prefix-session-ABI.patch
  • third_party/llama.cpp/patches/0041-Compute-stage-generation-signals-lazily.patch
  • third_party/llama.cpp/patches/0042-Avoid-heap-batch-allocation-for-single-token-decode.patch
  • third_party/llama.cpp/patches/0043-Default-stage-threads-like-llama-server.patch
  • third_party/llama.cpp/patches/0044-Allow-borrowing-resident-prefix-cache-sequences.patch
  • third_party/llama.cpp/patches/0045-Preserve-resident-prefix-lanes.patch
  • third_party/llama.cpp/patches/0046-Remap-recurrent-state-imports-to-active-session.patch
  • third_party/llama.cpp/patches/0047-Support-initial-dense-runtime-slice-families.patch
  • third_party/llama.cpp/patches/0048-Support-additional-dense-runtime-slice-families.patch
  • third_party/llama.cpp/patches/0049-Avoid-rescaling-staged-activation-inputs.patch
  • third_party/llama.cpp/patches/0050-Support-more-decoder-runtime-slice-families.patch
  • third_party/llama.cpp/patches/0051-Support-LFM2-runtime-slice-execution.patch
  • third_party/llama.cpp/patches/0052-Support-Mamba-runtime-slice-execution.patch
  • third_party/llama.cpp/patches/0053-Support-Jamba-runtime-slice-execution.patch
  • third_party/llama.cpp/patches/0054-Support-RWKV6-runtime-slice-execution.patch
  • third_party/llama.cpp/patches/0055-Support-Qwen2MoE-runtime-slice-execution.patch
  • third_party/llama.cpp/patches/0056-Expose-skippy-session-native-sequence-id.patch
  • third_party/llama.cpp/patches/0057-Support-RWKV7-activation-sideband.patch
  • third_party/llama.cpp/patches/0058-Support-Phi2-runtime-slice-execution.patch
  • third_party/llama.cpp/patches/0059-Support-Granite-runtime-slice-variants.patch
  • third_party/llama.cpp/patches/0060-Support-Hunyuan-Dense-runtime-slice-execution.patch
  • third_party/llama.cpp/patches/0061-Support-Hunyuan-MoE-runtime-slice-execution.patch
  • third_party/llama.cpp/patches/0062-Support-PhiMoE-runtime-slice-execution.patch
  • third_party/llama.cpp/patches/0063-Allow-tied-output-embeddings-in-final-runtime-slices.patch
  • third_party/llama.cpp/patches/0064-Support-Qwen35-and-Hunyuan-VL-runtime-slices.patch
  • third_party/llama.cpp/patches/0065-Support-broad-llama-family-runtime-slices.patch
  • third_party/llama.cpp/patches/0066-Fix-BitNet-tied-output-runtime-slices.patch
  • third_party/llama.cpp/patches/0067-Fix-StarCoder-positional-embeddings-in-runtime-slice.patch
  • third_party/llama.cpp/patches/0068-Support-DeepSeek-OCR-and-Qwen3-VL-MoE-runtime-slices.patch
  • third_party/llama.cpp/patches/0069-Avoid-double-counting-optional-filtered-tensors.patch
  • third_party/llama.cpp/patches/0070-Skip-recurrent-layers-in-native-KV-page-export.patch
  • third_party/llama.cpp/patches/0071-Expose-external-decode-stage-filter-ABI.patch
  • third_party/llama.cpp/patches/0072-Support-external-media-prefill-in-staged-runtime-ABI.patch
  • third_party/llama.cpp/patches/0073-Expose-model-info-tensor-element-counts.patch
  • third_party/llama.cpp/patches/0074-Pad-activation-frame-decode-batches-to-native-input-.patch
  • third_party/llama.cpp/patches/0075-Carry-activation-frame-position-sideband.patch
  • third_party/llama.cpp/patches/0076-Support-Gemma3n-runtime-slices.patch
  • third_party/llama.cpp/patches/0077-Support-Llama4-and-Mistral4-runtime-slices.patch
  • third_party/llama.cpp/patches/0078-Contain-chat-grammar-sampler-exceptions.patch
  • third_party/llama.cpp/patches/0079-Trigger-lazy-chat-grammar-before-trailing-whitespace.patch
  • third_party/llama.cpp/patches/0080-Expose-skippy-backend-device-enumeration-ABI.patch
  • third_party/llama.cpp/patches/0081-Add-min-p-sampler-to-skippy-sampling-chain.patch
  • third_party/llama.cpp/patches/0082-Compact-KV-cache-cells-during-optimized-memory-updates.patch
  • third_party/llama.cpp/upstream.txt

@i386
i386 merged commit d17b222 into main Jun 13, 2026
41 of 59 checks passed
@i386
i386 deleted the codex/fix-llama-upstream-canary branch June 13, 2026 03:52
michaelneale added a commit that referenced this pull request Jun 14, 2026
* origin/main: (29 commits)
  MoA: don't let small-model consensus pre-empt a still-running large model (#837)
  fix(console): render thinking traces as markdown
  Add bounded direct path repair (#846)
  Fix skippy smoke PR gate (#850)
  Stabilize skippy smoke chain startup (#849)
  fix(ci): switch back to auto-assign workflow
  fix(website): polish longform visual explainer (#843)
  fix: gemma thinking
  Carry GLM llama MTP patches (#840)
  Refresh llama.cpp canary patch queue (#839)
  Add transport-aware Skippy stage ordering (#814)
  Share Skippy stage wire byte accounting (#818)
  Report Skippy artifact cold-start costs (#815)
  fix: debug output capturing for TUI / panics (#827)
  fix(hero): visual corrections for iPhone SE size devices (#838)
  Add Skippy stage role metadata (#816)
  Add Skippy request cache epoch telemetry (#817)
  Consolidate agent skills and fix stale docs (Windows deploy, repo map, design docs) (#836)
  feature(version): normalize version markers for different build types (#831)
  fix(website): fix visual regressions (#835)
  ...

# Conflicts:
#	AGENTS.md
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