Paddle Build
PaddlePaddle/Paddle
A skill your agent uses when needing to compile, rebuild, or install Paddle from source after code changes.
Safely pulls upstream acestep.cpp changes into the HOT-Step engine fork without destroying its integration hooks.
$ npx skills add scragnog/HOT-Step-CPP --skill upstream-sync -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install scragnog/HOT-Step-CPP upstream-sync --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/scragnog/HOT-Step-CPP.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/upstream-sync .claude/skills/upstream-sync && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "upstream-sync" agent skill from https://github.com/scragnog/HOT-Step-CPP/tree/master/.claude/skills/upstream-sync into .claude/skills/upstream-sync/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "upstream-sync", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/scragnog/HOT-Step-CPP/tree/master/.claude/skills/upstream-syncType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add scragnog/HOT-Step-CPP --skill upstream-sync -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install scragnog/HOT-Step-CPP upstream-sync --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/scragnog/HOT-Step-CPP.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.claude/skills/upstream-sync .agents/skills/upstream-sync && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "upstream-sync" agent skill from https://github.com/scragnog/HOT-Step-CPP/tree/master/.claude/skills/upstream-sync into .agents/skills/upstream-sync/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "upstream-sync", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add scragnog/HOT-Step-CPP --skill upstream-sync -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install scragnog/HOT-Step-CPP upstream-sync --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/scragnog/HOT-Step-CPP.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.claude/skills/upstream-sync .cursor/skills/upstream-sync && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "upstream-sync" agent skill from https://github.com/scragnog/HOT-Step-CPP/tree/master/.claude/skills/upstream-sync into .cursor/skills/upstream-sync/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "upstream-sync", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/scragnog/HOT-Step-CPP.git --path .claude/skills/upstream-sync--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add scragnog/HOT-Step-CPP --skill upstream-sync -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install scragnog/HOT-Step-CPP upstream-sync --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/scragnog/HOT-Step-CPP.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.claude/skills/upstream-sync .gemini/skills/upstream-sync && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "upstream-sync" agent skill from https://github.com/scragnog/HOT-Step-CPP/tree/master/.claude/skills/upstream-sync into .gemini/skills/upstream-sync/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "upstream-sync", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install scragnog/HOT-Step-CPP upstream-syncInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add scragnog/HOT-Step-CPP --skill upstream-sync -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/scragnog/HOT-Step-CPP.git skills-src && mkdir -p .github/skills && cp -r skills-src/.claude/skills/upstream-sync .github/skills/upstream-sync && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "upstream-sync" agent skill from https://github.com/scragnog/HOT-Step-CPP/tree/master/.claude/skills/upstream-sync into .github/skills/upstream-sync/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "upstream-sync", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add scragnog/HOT-Step-CPP --skill upstream-sync -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install scragnog/HOT-Step-CPP upstream-sync --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/scragnog/HOT-Step-CPP.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.claude/skills/upstream-sync .opencode/skills/upstream-sync && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "upstream-sync" agent skill from https://github.com/scragnog/HOT-Step-CPP/tree/master/.claude/skills/upstream-sync into .opencode/skills/upstream-sync/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "upstream-sync", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
upstream-syncSafely pulls upstream acestep.cpp changes into the HOT-Step engine fork without destroying its integration hooks.
Upstream Sync is an agent skill from scragnog/HOT-Step-CPP. Safely pulls upstream acestep.cpp changes into the HOT-Step engine fork without destroying its integration hooks. Use when syncing/merging upstream acestep.cpp updates, verifying or repairing hook files, or diagnosing "unresolved external symbol hotstepsamplerlinked" or dead solvers/schedulers/guidance after a sync.
Its SKILL.md is about 5k tokens, which your agent loads only when the skill is triggered. The skill folder holds 1 other file (for example `reference.md`).
It works with C++. The repository describes itself as: Turn dials. Summon bangers! NOW WITH MORE C++! Local AI music generation powered by GGML. The licence is MIT.
6 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 91e92a8. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
gitcmakeFrom the folder's file list and the shell code blocks in SKILL.md.
Hosts in commands or code, which the agent is likely to contact:
github.comFrom URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Upstream Sync loads about 5k tokens when it runs. Until then it costs about 84 tokens; SKILL.md has 2,016 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from scragnog/HOT-Step-CPP at commit 91e92a8, republished under its MIT licence (© scragnog). 2,016 words, ~4,962 tokens.
.claude/skills/upstream-sync/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.acestep.cpp (https://github.com/ServeurpersoCom/acestep.cpp) into this fork's engine/.unresolved external symbol hotstep_sampler_linked_, or a build that compiles clean but all solvers/schedulers/guidance modes stopped working.Background you need (no prior context assumed): The C++ engine in engine/ is a fork of acestep.cpp, a GGML port of the ACE-Step music model. The generation pipeline is LM → DiT → VAE, where DiT = Diffusion Transformer, the denoising model. HOT-Step replaces upstream's DiT sampling loop (dit-sampler.h) with its own (hot-step-sampler.h) that adds 17 solvers, 9 schedulers, guidance modes, and Lua plugins. The fork is not a git merge — it is file-copy based, using three zones:
| Zone | What | Sync strategy |
|---|---|---|
| Upstream Zone | Most of engine/src/*.h / *.cpp — kept byte-identical to upstream | Direct Copy-Item from a vanilla clone |
| HOT-Step Zone | engine/src/hot-step-*, engine/src/solvers/, engine/src/schedulers/, engine/src/guidance/, engine/src/mastering.h, engine/src/adapter-runtime.h, engine/src/adapter-merge.h, engine/src/model-registry.h, engine/tools/hot-step-server.cpp — never exists upstream | Never conflicts; never copy |
| Modified Upstream Zone | Exactly 3 files: pipeline-synth-ops.cpp, model-store.h, dit.h — upstream files carrying HOT-Step #include hooks | Manual merge only, NEVER direct-copy |
⚠ Zone model drift (verified 2026-07-14): two of this table's assumptions no longer hold.
src/solvers/now EXISTS upstream (added 2026-05-06, commit8974778— modular Euler/SDE/DPM++3M/STORK4 dispatch). Its 7 filenames collide with the fork's ownengine/src/solvers/(created independently 2026-04-18, commit889c250, different interface). The Phase 2 copy loop MUST also exclude everything undersrc/solvers/— a direct copy clobbers HOT-Step's native solvers with incompatible upstream versions.- The Upstream Zone has eroded. As of 2026-07-14, 11 of the 13 upstream-touched files since
31cc9eaare fork-modified (e.g.qwen3-lm.hcarries safetensors loading via fork-onlyweight-source.h/config-json.h;backend.h,dit-graph.h,vae.h,request.*,wav.h,qwen3-enc.h,pipeline-synth.*also differ). Do NOT assume direct-copy safety from this table — before copying any file, verify pristineness: diff the fork's copy againstgit show <lastSynced>:src/<file>from the upstream clone (with--strip-trailing-cr). Pristine → copy; modified → manual merge.
engine/tools/ace-server.cpp is upstream's server kept as a direct-copy reference only — not compiled. The shipped ace-server binary is built from engine/tools/hot-step-server.cpp (see engine/CMakeLists.txt:416-418).
The full workflow doc lives at docs/plans/upstream-sync-workflow.md, which is gitignored (local-only) — other machines will not have it. This skill is the portable distillation, with two known errors in that doc corrected (see reference.md).
acestep.cpp pins its own ggml (ServeurpersoCom/ggml). HOT-Step does not follow that pin:
engine/ggml is pinned to HOT-ggml's hot-step-neutral branch, which is ggml-org master plus
HOT-Step's ggml changes as commits (docs/dev/ggml-fork.md).
Copying acestep.cpp files never touches engine/ggml. If a synced file needs a newer ggml
op or fix, land it on HOT-ggml first (cherry-pick from ServeurpersoCom/ggml or ggml-org),
then move the gitlink, then rerun engine/verify-hooks.ps1 (hooks 7-17 cover the fork).
pipeline-synth-ops.cpp, model-store.h, dit.h). WHY: copying pipeline-synth-ops.cpp wholesale is the silent failure — it compiles clean but kills every HOT-Step sampler feature (see hook table below). This actually happened once; the whole defense system exists because of it.engine/verify-hooks.ps1 after copying files and BEFORE building. WHY: it catches hook loss in seconds; a build wastes minutes and a silent regression wastes hours.v1.5-upstream-sync-* tag (or anything without explicit user approval). WHY: any pushed v* tag triggers the full multi-platform CI release build. The tag is fine locally.dev-rebuild.bat at repo root, NEVER engine/build.cmd directly. WHY: the app may be running without you knowing (you cannot reliably tell); the Node server auto-respawns ace-server on crash → infinite respawn + file-lock loop. dev-rebuild.bat handles clean shutdown and is a safe no-op when nothing is running. It does not relaunch the app afterwards: start it again with dev.bat (detached) and check http://localhost:3000.cmake --build . --clean-first. WHY: CUDA kernel recompile is 20+ min. Stale .obj? Delete only engine/build/acestep-core.dir/ and engine/build/Release/acestep-core.lib.hot-step-* file), and never add hot-step-* files to the upstream clone. WHY: keeps future syncs a trivial copy.master, stage explicit paths only, never git add -A.| File | Hook | If clobbered by direct copy |
|---|---|---|
engine/src/pipeline-synth-ops.cpp | #include "hot-step-sampler.h" at line 9 (replaces upstream's dit-sampler.h). Lines 10–12 are also fork-only: hot-step-sampler-trt.h, adapter-trt.h, stream-pipeline.h | SILENT at compile time — all solvers/schedulers/guidance/custom timesteps/DCW/APG go dead. Caught only by the linker sentinel |
engine/src/model-store.h | #include "hot-step-params.h" at line 53 (provides AdapterGroupScales) | Compile error (self-catching) |
engine/src/dit.h | #include "adapter-merge.h" (line 11) + #include "adapter-runtime.h" (line 13); line 12 hot-step-build-flags.h is also fork-only | Compile error (self-catching) |
Why the sampler hook failure is silent: the hook is a substitution, not an addition. Upstream dit-sampler.h and fork hot-step-sampler.h both provide a function named dit_ggml_generate. A whole-file copy of upstream pipeline-synth-ops.cpp replaces both the include AND the call site (pipeline-synth-ops.cpp:1503) with mutually-consistent upstream versions — everything compiles, HOT-Step's sampler simply stops being called.
The defense — linker sentinel: engine/src/hot-step-sampler.h:1312 defines external-linkage symbol hotstep_sampler_linked_; engine/tools/hot-step-server.cpp:51-52 references it. If the include reverts to dit-sampler.h, the symbol vanishes and the link fails with unresolved external symbol hotstep_sampler_linked_. That exact error means: re-hook hot-step-sampler.h in pipeline-synth-ops.cpp. Mechanism detail: reference.md.
powershell -File "D:\Ace-Step-Latest\hot-step-cpp\engine\verify-hooks.ps1"Exit 0 = intact, exit 1 = broken. It runs 5 checks (not 3 — the script is authoritative over the docs): the three hook files above, plus hot-step-server.cpp → hot-step-params.h include, plus the sentinel string in hot-step-sampler.h (engine/verify-hooks.ps1:15-68).
Prerequisite: fork committed locally (Rule 3). The vanilla upstream clone lives at D:\Ace-Step-Latest\acestepcpp\acestep.cpp (a separate repo; if this machine lacks it, git clone https://github.com/ServeurpersoCom/acestep.cpp there first).
git -C D:\Ace-Step-Latest\acestepcpp\acestep.cpp pull origin masterRead the last-synced commit from the marker. The marker uses KEY=VALUE lines — parse the UPSTREAM_COMMIT= line (the workflow doc's "first non-comment line" snippet is WRONG for this format):
$lastSynced = ((Get-Content "D:\Ace-Step-Latest\hot-step-cpp\engine\UPSTREAM_SYNC" | Where-Object { $_ -match '^UPSTREAM_COMMIT=' }) -replace '^UPSTREAM_COMMIT=','').Trim()
git -C D:\Ace-Step-Latest\acestepcpp\acestep.cpp log --oneline "$lastSynced..HEAD" -- src/ tools/ace-server.cpp
git -C D:\Ace-Step-Latest\acestepcpp\acestep.cpp diff --stat "$lastSynced..HEAD" -- src/ tools/ace-server.cppZero commits → already up to date, stop.
cd D:\Ace-Step-Latest\acestepcpp\acestep.cpp
$excludeFiles = @("pipeline-synth-ops.cpp", "model-store.h", "dit.h") # NEVER direct-copy
$changedFiles = git diff --name-only "$lastSynced..HEAD" -- src/
foreach ($f in $changedFiles) {
$basename = Split-Path $f -Leaf
if ($excludeFiles -contains $basename) {
Write-Host "SKIP (modified upstream): $f — manual merge in Phase 3" -ForegroundColor Yellow
continue
}
Copy-Item "D:\Ace-Step-Latest\acestepcpp\acestep.cpp\$f" "D:\Ace-Step-Latest\hot-step-cpp\engine\$f" -Force
Write-Output "Copied: $f"
}
# New upstream files — any new .cpp needs an engine/CMakeLists.txt entry:
git diff --diff-filter=A --name-only "$lastSynced..HEAD" -- src/Do NOT copy upstream src/dit-sampler.h expecting it to matter — the fork's engine/src/dit-sampler.h is dead code (nothing compiled includes it; the active sampler is hot-step-sampler.h). Copying it is harmless but see Phase 4.
cd D:\Ace-Step-Latest\acestepcpp\acestep.cpp
foreach ($f in @("src/pipeline-synth-ops.cpp", "src/model-store.h", "src/dit.h")) {
if (git log --oneline "$lastSynced..HEAD" -- $f) { Write-Host "NEEDS MERGE: $f" -ForegroundColor Yellow }
}For each flagged file: review git diff $lastSynced..HEAD -- src/<file> in the upstream clone, then hand-port those changes into the fork's copy without removing the hooks:
pipeline-synth-ops.cpp: keep the fork-only includes (lines 9–12) and the fork's extended dit_ggml_generate call site (line 1503). This file has diverged well beyond the include line — treat the fork's copy as the base and port upstream's diff into it, never the reverse.dit.h: keep the includes at lines 11–13 (adapter-merge.h, hot-step-build-flags.h, adapter-runtime.h).model-store.h: keep the hot-step-params.h include (line 53).git -C D:\Ace-Step-Latest\acestepcpp\acestep.cpp log --oneline "$lastSynced..HEAD" -- src/dit-sampler.hIf changed: review the diff and hand-port relevant bug fixes into engine/src/hot-step-sampler.h. Do NOT overwrite hot-step-sampler.h with upstream's file. If upstream changed the dit_ggml_generate signature, update both the fork's signature in hot-step-sampler.h (a superset with extra params) and the call site in pipeline-synth-ops.cpp:1503 to stay compatible.
powershell -File "D:\Ace-Step-Latest\hot-step-cpp\engine\verify-hooks.ps1" # MUST pass BEFORE building
cmd /c "D:\Ace-Step-Latest\hot-step-cpp\dev-rebuild.bat" # never engine\build.cmd directlyPost-sync validation checklist:
logs/YYYY-MM-DD_HH-MM-SS/ace_engine.log shows a [DiT] Guidance: line. This is the definitive runtime proof the HOT-Step sampler is active — upstream's sampler never prints it. (A bare [DiT] Solver: line is NOT proof: upstream also prints one at the upstream clone's own src/dit-sampler.h:397 — NOT the fork's stale copy at engine/src/dit-sampler.h, which predates that feature and contains no such line. The HOT-Step version additionally includes the scheduler name — format Solver: <name> (<scheduler>, N NFE/step, order N) from hot-step-sampler.h:503.)Write the marker in its real KEY=VALUE format (the workflow doc's Phase 6 heredoc writes an obsolete bare-hash format — do not use it):
$newHead = git -C D:\Ace-Step-Latest\acestepcpp\acestep.cpp rev-parse HEAD
@"
UPSTREAM_REPO=acestep.cpp
UPSTREAM_COMMIT=$newHead
SYNC_DATE=$(Get-Date -Format "yyyy-MM-dd")
SYNC_NOTES=<one-line summary of what came in>
"@ | Set-Content "D:\Ace-Step-Latest\hot-step-cpp\engine\UPSTREAM_SYNC"
cd D:\Ace-Step-Latest\hot-step-cpp
$shortHash = $newHead.Substring(0, 7)
git add engine/UPSTREAM_SYNC engine/src/
git commit -m "sync: upstream acestep.cpp at $shortHash"
git tag -a "v1.5-upstream-sync-$shortHash" -m "sync: upstream acestep.cpp at $shortHash"Do not push the tag (Golden rule 4). If also updating engine/CMakeLists.txt or engine/tools/, stage those paths explicitly too.
| Path | Role |
|---|---|
engine/UPSTREAM_SYNC | Sync marker: last-synced upstream commit, KEY=VALUE format |
engine/verify-hooks.ps1 | 5-check hook verifier; run after copy, before build |
engine/src/pipeline-synth-ops.cpp | Modified-upstream: sampler hook (line 9) + extended call site (line 1503) |
engine/src/model-store.h | Modified-upstream: hot-step-params.h hook (line 53) |
engine/src/dit.h | Modified-upstream: adapter hooks (lines 11–13) |
engine/src/hot-step-sampler.h | The fork's active DiT sampler; linker sentinel at lines 1311–1315 |
engine/src/dit-sampler.h | Upstream's sampler — dead code in the fork, nothing includes it |
engine/tools/hot-step-server.cpp | Compiled server binary source; sentinel consumer at lines 51–52 |
engine/tools/ace-server.cpp | Upstream server, direct-copy reference only, NOT compiled |
engine/src/_backup_pre_sync/ | Git-tracked snapshot of engine/src/ taken before the 2026-04-26 sync — read-only rollback reference |
D:\Ace-Step-Latest\acestepcpp\acestep.cpp\ | Vanilla upstream clone (separate repo, machine-specific path) |
docs/plans/upstream-sync-workflow.md | Original workflow doc — gitignored, local-only, has 2 stale snippets |
| Symptom | Cause | Fix |
|---|---|---|
Linker: unresolved external symbol hotstep_sampler_linked_ | pipeline-synth-ops.cpp direct-copied from upstream; include reverted to dit-sampler.h | Restore line 9 #include "hot-step-sampler.h" and re-merge the fork's call site (line 1503) plus fork-only includes (lines 10–12); re-run verify-hooks |
Compiles clean but solver/scheduler/guidance selections dead or ignored; engine log missing [DiT] Guidance: | Sampler hook clobbered AND sentinel lost (e.g. hot-step-sampler.h itself damaged) — the fully silent regression | verify-hooks checks 1 and 5; restore from git history; rebuild |
Compile error: AdapterGroupScales undefined in model-store.h | model-store.h direct-copied; lost line-53 include | Re-add #include "hot-step-params.h"; re-merge upstream diff |
Compile errors for adapter merge/runtime symbols via dit.h | dit.h direct-copied; lost lines 11–13 includes | Re-add includes; re-merge upstream diff |
| Infinite ace-server respawn + file locks during rebuild | Built via engine/build.cmd while the app runs | Use dev-rebuild.bat from repo root |
| CI release build unexpectedly kicked off | Pushed a v1.5-upstream-sync-* (or any v*) tag | Never push sync tags; delete the remote tag immediately if it happens |
$lastSynced resolves to UPSTREAM_REPO=acestep.cpp and git errors on the range | Used the workflow doc's stale marker-parse snippet | Parse the UPSTREAM_COMMIT= line (Phase 1 above) |
pipeline-synth-ops.cpp once silently disabled every HOT-Step sampler feature with a clean build. The linker sentinel + verify-hooks.ps1 were built in response (design doc: docs/plans/2026-05-05-harden-upstream-sync-implementation.md, local-only).9d38f00 on 2026-07-14 (fork commit a178b57, local tag v1.5-upstream-sync-9d38f00), done via per-file 3-way merge (git merge-file with base = previous sync point) rather than direct copy — required by the zone-model drift above. Previous sync: 31cc9ea on 2026-04-26.9d38f00; ~60 commits pending. Headline items: LM perf overhaul (qwen3-lm.h +552 lines — persistent graph arenas, static batched decode graph replay, set_rows KV writes; new headers graph-arena.h/static-graph.h, no CMake entry needed), snake autofuse pass + fused Vulkan/CUDA snake, K/V→F16 cast before flash_attn_ext (touches hook file dit.h!), WAV PCM24 fixes, GGML_CUDA_GRAPHS default ON, SYCL/Intel Arc cmake support. LM/snake work requires bumping engine/ggml (fork at e705c5fe 2026-05-25; upstream submodule at b677b63c 2026-07-08). The turbo-CFG-clobber fix (b8ba253) is ALREADY in the fork. Upstream's dit-sampler.h refactor + src/solvers/ are dead code for the fork (see zone-drift warning) — harvest math fixes only.verify-hooks.ps1 runs 5 checks across 4 files. The script wins.KEY=VALUE marker format. Use this skill's corrected versions.dit-sampler.h would probably be a compile error rather than silent, because the fork's call site passes an extended argument list upstream's signature lacks. Only the whole-file copy is believed truly silent. Not empirically tested.hot-step-hooks-verify.h compile guard, static_assert in the clobbered file, making dit-sampler.h a 2-line shim. Details in reference.md._backup_pre_sync/ details, DONE/NOT-DONE hardening ledger, marker file contents.docs/plans/upstream-sync-workflow.md — original workflow (gitignored/local-only; may be absent on other machines; two snippets stale).docs/plans/2026-05-05-harden-upstream-sync-implementation.md — hardening design history (gitignored/local-only).CLAUDE.md § "Upstream sync" — the short committed summary.engine/docs/ARCHITECTURE.md — engine internals (committed).© scragnog, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 1 other file in .claude/skills/upstream-sync of scragnog/HOT-Step-CPP.
Open the folder on GitHubat commit 91e92a8
Upstream Sync next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Upstream Sync this skillscragnog/HOT-Step-CPP | 171 | — | ~5k | Automated safety check: Pass | MIT | |
| Paddle BuildPaddlePaddle/Paddle | 24k | — | ~1k | Automated safety check: Pass | Apache-2.0 | |
| Fory Releaseapache/fory | 4.6k | — | ~2.9k | Automated safety check: Pass | Apache-2.0 | |
| ONNX Runtime Shape Inference Safety Auditmicrosoft/onnxruntime | 22k | — | ~3.3k | Automated safety check: Pass | MIT | |
| Code Audit3stoneBrother/code-audit | 893 | 1 repos | ~2.7k | Automated safety check: Pass | None | |
| Qt C++ Code Reviewx-tools-author/x-tools | 1.1k | 2 repos | ~4.3k | Automated safety check: Pass | BSD-3-Clause |
PaddlePaddle/Paddle
A skill your agent uses when needing to compile, rebuild, or install Paddle from source after code changes.
apache/fory
Prepare an Apache Fory release candidate from a clean release branch, including the version bump, RC tag, JVM staging, ASF source artifacts, SVN upload, and vote email.
microsoft/onnxruntime
Finds and fixes out-of-range output writes in ONNX Runtime operator shape-inference functions where a getNumOutputs guard admits too few outputs.
3stoneBrother/code-audit
Professional code security audit skill covering 55+ vulnerability types.
x-tools-author/x-tools
Read-only review of Qt6 C++ code that combines a deterministic lint script with six parallel analysis agents and reports only high-confidence issues.
doxygen/doxygen
Keeps all Doxygen and Doxywizard translations up to date across three mechanisms: translator C++ classes (src/translatorxx.h), Qt .ts locale files for the Doxywizard GUI (addon/doxywizard/i18n/)…
scragnog/HOT-Step-CPP
The standard way to run a listening test in HOT-Step - a local HTML score sheet next to the renders where Rob plays each track, scores it 1-5 on named criteria, and the page charts the two score…
scragnog/HOT-Step-CPP
Explains where HOT-Step generation time goes (LM/DiT/VAE), how the TensorRT paths activate, how to benchmark from logs, and which knobs trade quality for speed.
scragnog/HOT-Step-CPP
Maps HOT-Step's native MiniMax-Music3 backend — engine port modules, endpoints, server/UI integration, parity/fixture infrastructure, and the hard-won trap list.
scragnog/HOT-Step-CPP
The validated recipe for training MiniMax-Music3 planner-LM style adapters (artist/album clones) with ace-train mm3-lm-train and the Training Studio.
scragnog/HOT-Step-CPP
Runbook for cutting and publishing a HOT-Step CPP release via a v git tag that triggers the multi-platform CI build and drafts a GitHub Release.
scragnog/HOT-Step-CPP
Diagnoses HOT-Step CPP generation failures, engine crashes, hangs, and startup problems from the logs/ session folders.
Works with
Safely pulls upstream acestep.cpp changes into the HOT-Step engine fork without destroying its integration hooks. Upstream Sync is an agent skill from scragnog/HOT-Step-CPP.cpp changes into the HOT-Step engine fork without destroying its integration hooks.
Upstream Sync fits situations like: syncing/merging upstream acestep.cpp updates; repairing hook files; diagnosing unresolved external symbol hotstepsamplerlinked; dead solvers/schedulers/guidance after a sync.
Run `npx skills add scragnog/HOT-Step-CPP --skill upstream-sync -a claude-code`. Or copy the skill folder (.claude/skills/upstream-sync in scragnog/HOT-Step-CPP) into .claude/skills/upstream-sync in your project. Claude Code loads it when a task matches its description.
Run `npx skills add scragnog/HOT-Step-CPP --skill upstream-sync -a codex`. Or copy the skill folder (.claude/skills/upstream-sync in scragnog/HOT-Step-CPP) into .agents/skills/upstream-sync in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add scragnog/HOT-Step-CPP --skill upstream-sync -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/upstream-sync, .gemini/skills/upstream-sync, .github/skills/upstream-sync and .opencode/skills/upstream-sync in your project.
Going by SKILL.md and its folder, Upstream Sync needs the command-line tools its instructions call (git and cmake).
SKILL.md names 1 domain. In commands or code: github.com; the agent is likely to contact it when it follows the instructions. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Upstream Sync is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 5k tokens (SKILL.md is roughly 20k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Upstream Sync: Paddle Build (PaddlePaddle/Paddle, 24k stars), Fory Release (apache/fory, 4.6k stars), ONNX Runtime Shape Inference Safety Audit (microsoft/onnxruntime, 22k stars) and Code Audit (3stoneBrother/code-audit, 893 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
scragnog (a GitHub user) maintains it in scragnog/HOT-Step-CPP, which has 171 GitHub stars. The repository holds 18 skills in this directory. The repository was last updated on October 7, 2026.
Source: scragnog/HOT-Step-CPP on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.