Java SDK E2E Test with Replay Snapshot
github/copilot-sdk
Creates a Java SDK end-to-end test for the Copilot SDK that runs against a recorded YAML snapshot through a replay proxy, so CI needs no real authentication.
Defines the verification bar every HOT-Step CPP change must clear before being called done — per-tier checks (TypeScript, C++ engine, UI, audio, end-to-end smoke generation) and honest result…
$ npx skills add scragnog/HOT-Step-CPP --skill validating-changes -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install scragnog/HOT-Step-CPP validating-changes --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/validating-changes .claude/skills/validating-changes && 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 "validating-changes" agent skill from https://github.com/scragnog/HOT-Step-CPP/tree/master/.claude/skills/validating-changes into .claude/skills/validating-changes/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "validating-changes", 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/validating-changesType 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 validating-changes -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install scragnog/HOT-Step-CPP validating-changes --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/validating-changes .agents/skills/validating-changes && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "validating-changes" agent skill from https://github.com/scragnog/HOT-Step-CPP/tree/master/.claude/skills/validating-changes into .agents/skills/validating-changes/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "validating-changes", 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 validating-changes -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install scragnog/HOT-Step-CPP validating-changes --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/validating-changes .cursor/skills/validating-changes && 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 "validating-changes" agent skill from https://github.com/scragnog/HOT-Step-CPP/tree/master/.claude/skills/validating-changes into .cursor/skills/validating-changes/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "validating-changes", 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/validating-changes--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 validating-changes -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install scragnog/HOT-Step-CPP validating-changes --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/validating-changes .gemini/skills/validating-changes && 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 "validating-changes" agent skill from https://github.com/scragnog/HOT-Step-CPP/tree/master/.claude/skills/validating-changes into .gemini/skills/validating-changes/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "validating-changes", 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 validating-changesInstalls 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 validating-changes -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/validating-changes .github/skills/validating-changes && 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 "validating-changes" agent skill from https://github.com/scragnog/HOT-Step-CPP/tree/master/.claude/skills/validating-changes into .github/skills/validating-changes/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "validating-changes", 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 validating-changes -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 validating-changes --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/validating-changes .opencode/skills/validating-changes && 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 "validating-changes" agent skill from https://github.com/scragnog/HOT-Step-CPP/tree/master/.claude/skills/validating-changes into .opencode/skills/validating-changes/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "validating-changes", 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.
validating-changesDefines the verification bar every HOT-Step CPP change must clear before being called done — per-tier checks (TypeScript, C++ engine, UI, audio, end-to-end smoke generation) and honest result…
Validating Changes is an agent skill from scragnog/HOT-Step-CPP. Defines the verification bar every HOT-Step CPP change must clear before being called done — per-tier checks (TypeScript, C++ engine, UI, audio, end-to-end smoke generation) and honest result reporting. Use when finishing any code change, deciding whether work is "done", running a smoke/e2e test, or reporting test/validation results.
Its SKILL.md is about 5.2k tokens, which your agent loads only when the skill is triggered. The skill folder holds 1 other file (for example `reference.md`).
It sits in Testing & QA, covering End-to-end testing. It works with C++ and TypeScript. The repository describes itself as: Turn dials. Summon bangers! NOW WITH MORE C++! Local AI music generation powered by GGML. The licence is MIT.
10 steps, taken from the first numbered list 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:
nodenpxcmakenpmtsxFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use npx and npm, which can reach the network depending on how they are called.
From 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.
Validating Changes loads about 5.2k tokens when it runs. Until then it costs about 89 tokens; SKILL.md has 2,369 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,369 words, ~5,176 tokens.
.claude/skills/validating-changes/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.HOT-Step CPP is a 3-tier app: a C++17/CUDA/GGML engine (engine/, spawned as
ace-server.exe on port 8085), a Node/TypeScript/Express server (server/src/,
port 3001), and a React 19 UI (ui/src/, Vite dev server on port 3000). Agents run the
app with dev.bat, detached, and verify through http://localhost:3000; :3001 is the
end-user prod address. A change
is NOT done until it clears the bar for every tier it touches. This skill defines
those bars, how to run a headless end-to-end smoke generation, and how to report
results honestly.
All commands are Windows PowerShell (; as separator, never &&).
Deep API/log detail lives in reference.md in this folder.
ONLY the human can judge audio quality, by ear. Never claim audio "sounds
fine" or "is broken" from metrics, file size, duration, RMS, spectrograms, log
silence, or the pipeline's quality-evaluator scores (stored in the quality_scores
DB column — advisory telemetry only). Say: "generation completed mechanically;
audio at <path> awaits your ear." WHY: metrics have repeatedly failed to predict
what the user hears; false verdicts destroy trust and mislead debugging.
PRESERVE EXPERIMENT ARTIFACTS. Never delete generated test audio, latents, or other outputs because you predict they are bad. The human verifies by ear and has lost artifacts to premature cleanup before. WHY: a generation costs GPU time and a seed; a deleted artifact may be unreproducible evidence.
Report outcomes faithfully. Failed tests are reported as FAILED with the actual output/error pasted. Skipped steps are reported as SKIPPED with the reason. Never write hedged "should work" / "probably fine". Distinguish what you ran and saw vs what you inferred vs what you did not verify. WHY: the user makes release and debugging decisions off your report.
Rebuild C++ only via dev-rebuild.bat at repo root — never engine\build.cmd
directly, under any circumstances. WHY: you cannot reliably tell whether the app
is running; the Node server auto-respawns ace-server 3 s after a non-clean exit
(server/src/index.ts:284-308), and the respawned exe file-locks the linker
output — infinite loop. dev-rebuild.bat is safe even when the app is stopped
(its shutdown request is a suppressed no-op).
Never push a v* tag to "test" a build. WHY: any pushed v* tag triggers the
full multi-platform Release workflow and drafts a GitHub Release. Throwaway compile
checks use a -CI-Test suffix; any push still requires explicit user approval.
Never cmake --build . --clean-first unless the GGML/CUDA layer itself
changed. WHY: CUDA kernel recompilation takes 20+ minutes. For stale-.obj
symptoms delete only engine/build/acestep-core.dir/ and
engine/build/Release/acestep-core.lib.
No npm run build during dev. Type-check with tsc only (§ below). WHY:
builds are slow and unnecessary until the user tests a prod (LAUNCH.bat) flow.
Never visually verify UI with a browser agent — ask the human; they provide
screenshots. Browser/Invoke-RestMethod IS fine for non-visual API checks.
WHY: the browser agent is too slow/unreliable in this environment.
A feature is not done until a USER can run it. Anything the app resolves
at runtime — model weights, a data file, a binary — must be reachable by
someone who downloaded a release, not just present on this machine. Run
node server/scripts/check-release-prereqs.mjs before any push (§ Tier 6).
WHY: this has shipped broken twice. MM3 training asked for two GGUFs that
existed only on the dev box (#137), and the MM3 caption corpus was committed
but never copied into the archives (#139). Both passed tsc, both built green,
both were dead on arrival for every user.
Don't clobber the user's generation queue. Jobs run one at a time on a single
GPU. Check GET /api/generate/queue before submitting a smoke generation, and
never call POST /api/generate/reset-queue (force-drains everything) without
asking. WHY: it cancels the user's in-flight work.
Bar: type-check clean. Zero errors.
Node 20 to 24 LTS, 24 recommended (
engines: >=20.0.0 <25.0.0inserver/package.json). If tsc/tsx/npm fails oddly, checknode --versionBEFORE blaming the change — a wrong Node version produces false validation verdicts.
cd D:\Ace-Step-Latest\hot-step-cpp\server; npx tsc --noEmit
cd D:\Ace-Step-Latest\hot-step-cpp\ui; npx tsc -bserver/package.json defines "typecheck": "tsc --noEmit". The UI uses project
references (ui/tsconfig.json → tsconfig.app.json + tsconfig.node.json, both
noEmit-safe), so npx tsc -b type-checks without emitting JS.dev.bat) the server runs under tsx watch (server/package.json
"dev": "tsx watch src/index.ts") — it auto-restarts on save. Server-side bar =
passing tsc plus a clean restart visible in the newest
logs/<session>/node_console.log (no stack trace after the restart).Bar: rebuild compiles AND the engine starts clean after relaunch (log check).
Recompile immediately after editing any engine/src/ or engine/tools/
file — don't wait to be asked:
D:\Ace-Step-Latest\hot-step-cpp\dev-rebuild.batWhat it does (verified in the script): POSTs http://localhost:3001/api/shutdown
(kills ace-server, Vite, and the Node server cleanly), waits up to 10 s for
ace-server.exe to exit, force-kills at 10 s, aborts at 15 s, then runs
engine\build.cmd.
The rebuild does NOT restart the app. Relaunch with dev.bat (detached) and check
http://localhost:3000 before any runtime verification. LAUNCH.bat is the end-user prod
launcher — agents don't run it.
Clean-start check — read the newest logs/<session>/ace_engine.log and confirm:
[Server] Scanning models in ... / [Registry] ... lines),[Server] Listening on 127.0.0.1:8085 appears,node_console.log has no [ace-server] Restarting in 3 seconds...
(that exact string = crash respawn, server/src/index.ts:304).$sess = (Get-ChildItem D:\Ace-Step-Latest\hot-step-cpp\logs | Sort-Object Name -Descending | Select-Object -First 1).FullName
Select-String -Path "$sess\ace_engine.log" -Pattern 'Listening on'
Select-String -Path "$sess\node_console.log" -Pattern 'Restarting in 3 seconds'After any upstream sync (the engine is a patched fork of acestep.cpp):
powershell -File D:\Ace-Step-Latest\hot-step-cpp\engine\verify-hooks.ps1Exit 0 = good. Note: CLAUDE.md says "3 hook files" but the script checks 5
things (the script is the truth): pipeline-synth-ops.cpp → hot-step-sampler.h
(loss is SILENT — compiles fine but all solvers/guidance/schedulers go dead),
model-store.h → hot-step-params.h, dit.h → adapter-merge.h +
adapter-runtime.h, tools/hot-step-server.cpp → hot-step-params.h, and a
linker sentinel hotstep_sampler_linked_ in hot-step-sampler.h.
Lua plugins (engine/plugins/) need no rebuild, but they load at engine
start — relaunch the app for a new/edited plugin to appear.
Bar: npx tsc -b clean + Vite HMR applies the change without console errors +
the human confirms the visuals. You cannot close this tier yourself. Ask the
user to look and wait for their screenshot/feedback.
Bar: the human's ear. There is no mechanical substitute — see Golden rules 1–2.
Your job ends at: generation succeeded mechanically, here is the file path
(server/data/audio/<uuid>.wav or http://localhost:3000/audio/<uuid>.wav in dev), here
are the seed and params for reproduction. Then wait.
Bar: job reaches status: "succeeded", a WAV exists on disk, and the per-generation
log ends with GENERATION COMPLETED. (Mechanical success only — quality is Tier 4.)
Full request/response/log detail: reference.md.
Pre-flight health — require engine.ready -eq $true:
Invoke-RestMethod http://localhost:3000/api/healthCheck the queue is free (don't queue behind/ahead of the user silently):
Invoke-RestMethod http://localhost:3000/api/generate/queueGet an auth token (POST /api/generate returns 401 without a Bearer token;
tokens are in-memory and reset on server restart):
$auth = Invoke-RestMethod http://localhost:3000/api/auth/auto
$hdr = @{ Authorization = "Bearer $($auth.token)" }Submit a fast smoke request — skipLm: $true skips the language-model phase
(the "LM" that writes audio codes/metadata before the DiT diffusion transformer
runs). Always pass duration explicitly: with skipLm the server defaults an
unset duration to 120 s (generate.ts:222).
$body = @{
prompt = 'minimal ambient techno, warm pads'
instrumental = $true
skipLm = $true
duration = 30
inferenceSteps = 8
seed = 42 # fixed seed = reproducible; or randomSeed = $true
} | ConvertTo-Json
$job = Invoke-RestMethod -Method Post -Uri http://localhost:3000/api/generate -Headers $hdr -ContentType 'application/json' -Body $body
$job.jobIdOmit skipLm if your change touches the LM phase — then the smoke must
exercise it.
Poll to completion (status values: pending | lm_running | synth_running | saving | succeeded | failed | cancelled):
do { Start-Sleep 3; $s = Invoke-RestMethod "http://localhost:3000/api/generate/status/$($job.jobId)";
"{0} {1}% {2}" -f $s.status, $s.progress, $s.stage
} while ($s.status -notin 'succeeded','failed','cancelled')
$s | ConvertTo-Json -Depth 5Built-in watchdogs (pollUntilDone, generate.ts:102-170): 2 min with no
stage/progress change ⇒ "Generation stalled"; wall-clock default 45 min. A
first-ever TensorRT run legitimately shows
Building TRT engine ... (first run only, ~5-10 min) — do not panic-cancel it.
There is 1 automatic retry with a randomized seed on transient failure.
Confirm outputs. On success $s.result.audioUrls is like
["/audio/<uuid>.wav"]. **The live data dir is server\data, NOT the repo-root
data\** (verified: config.data.dir resolves relative to server/src,
server/src/config.ts:191-199; root data/ is stale/legacy — never "verify"
outputs there). Files land in server\data\audio\; DB row in the songs table
of server\data\hotstep.db with the full request in generation_params.
Confirm the log. Per-generation logs are buffered in memory and flushed
only at finish/fail — mid-run, tail node_console.log (lines prefixed
[Gen:<jobId8>]) or ace_engine.log instead.
$sess = (Get-ChildItem D:\Ace-Step-Latest\hot-step-cpp\logs | Sort-Object Name -Descending | Select-Object -First 1).FullName
Get-Content (Get-ChildItem "$sess\generations" | Sort-Object LastWriteTime -Descending | Select-Object -First 1).FullName -Tail 40Success ends GENERATION COMPLETED.; failure ends GENERATION FAILED: <error>
(server/src/services/logger.ts:145,167).
Hand off to the human (Tier 4): file path + seed + params. Do not delete the artifacts.
Bar: node server/scripts/check-release-prereqs.mjs exits 0.
Applies to any change that adds a file the app looks for at runtime — a new model, a new data file, a new registry entry, a new packaged binary. This tier is invisible to every other bar: the path is resolved at runtime, so tsc passes, the build is green, and the feature is dead in every download.
node D:\Ace-Step-Latest\hot-step-cpp\server\scripts\check-release-prereqs.mjs
# --offline to skip the Hugging Face halfWhat it checks:
server/src/data/model-registry.json exists in
the Hugging Face repo it names, at the size the registry claims, in a repo
that is public. Companion files (LICENSE) too.server/src/data/ is packaged by
.github/workflows/release.yml, which copies the directory wholesale for all
three platforms. Put new runtime data there and it ships automatically; put it
anywhere else and it will not.What it CANNOT check, so do it by hand:
resolveMm3TrainModels
in server/src/services/training/mm3Train.ts takes the newest
mm3-rvq-*.gguf on disk — the registry has to publish something that matches
the prefix, and only a human knows that. fs.existsSync or a directory scan
against a models dir is the smell; grep for those when adding a feature.huggingface_hub
is installed and the token is in ~/.cache/huggingface/token, but ask before
pushing anything to a public repo, and credit the original author in the model
card if the weights are not ours.Bar: node tools/docs/check-docs.mjs exits 0, and the page that owns the changed
area describes the new behaviour.
Applies to any change a user or developer can see. The ownership table in
AGENTS.md ("Documentation is part of the change") names the page per source area.
Routes, plugins and the model registry feed generated tables, so those need
node tools/docs/build-docs.mjs rather than a hand edit. The generated blocks in
server/src/data/assistant-knowledge.md come from docs/user/, so a user-facing
page change also refreshes what the in-app assistant knows (picked up on the next
server start). Template and rules: docs/dev/docs-contributing.md.
node tools/docs/build-docs.mjs
node tools/docs/check-docs.mjsThe checker fails on a UI folder with no page, a stale generated table, a broken
relative link, an unindexed skill, or a studio page FEATURES.md does not link to.
It also runs inside check-release-prereqs.mjs and in CI (docs.yml).
| Path | Role |
|---|---|
dev-rebuild.bat | The ONLY sanctioned C++ rebuild entry point (shutdown → build) |
engine/verify-hooks.ps1 | Post-upstream-sync check of the 5 fork hooks |
server/src/routes/generate.ts | Generation queue, POST /api/generate, status/queue/cancel endpoints, watchdogs |
server/src/routes/health.ts | GET /api/health — engine readiness |
server/src/routes/auth.ts | GET /api/auth/auto — free Bearer token; getUserId guard |
server/src/services/generation/translateParams.ts | UI param names → engine AceRequest names |
server/src/services/aceClient.ts | HTTP client to ace-server :8085 (single-threaded httplib caveat) |
server/src/services/logger.ts | Session log folders + buffered per-generation logs |
server/src/config.ts | Ports, paths; config.data.dir = server/data |
logs/YYYY-MM-DD_HH-MM-SS/ | Per-session logs: ace_engine.log, node_console.log, generations/gen_<jobId>_<task>.log |
server/data/audio/ | Where generated audio actually lands |
| Symptom | Cause → fix |
|---|---|
503 Engine not ready: ... on POST /generate | ace-server still bootstrapping — wait; check /api/health engine.bootStatus |
| 401 Unauthorized | missing/stale Bearer token (in-memory, resets on Node restart) — re-hit /api/auth/auto |
Generation stalled — no progress for Ns | 2-min watchdog fired; engine wedged or emitting unrecognized progress — check ace_engine.log tail |
Generation failed on ace-server | engine-side failure — the real error is in ace_engine.log, not the Node response |
[ace-server] Restarting in 3 seconds... in node_console.log | engine crashed; repeated ⇒ missing DLL or a bad C++ change |
/api/health bootStatus Engine crashed N times — check logs for missing DLLs | crash limiter gave up (index.ts:296-302) — fix the crash, relaunch |
| Solvers/schedulers/guidance silently ignored after upstream sync (no error!) | lost hot-step-sampler.h hook — run engine/verify-hooks.ps1 |
| Adapter/sideband params vanish between LM and synth phases | LM echo drops ServerFields-only params; synth requests are rebuilt from the current request + LM fields only (generate.ts:312-328) — new sideband params must flow through that reconstruction, never a whitelist |
First run stuck on Building TRT engine 5–10 min | normal one-time TensorRT compile, not a hang |
| HTTP timeouts against :8085 during a generation | normal — ace-server is single-threaded httplib and can't answer mid-DiT-step (aceClient.ts:6-8) |
Output file "missing" from repo-root data\ | wrong directory — live outputs are in server\data\audio\ |
quality_scores telemetry is
advisory, never a verdict.server\data, root data\ is stale
(config.ts:191-199 + runtime log confirm).verify-hooks.ps1 checks 5 hooks, not the 3 CLAUDE.md lists —
the script is the truth.adapter_section_isolation still exists on the wire
(aceClient.ts, translateParams.ts) but the feature was reverted (commit
ee041e1, broke musical continuity) — don't "fix" it back in or count it as active.rebase_source/rebase_beta exist in
translateParams.ts but the cross-base fix is unvalidated — never report it working.server/src/config.ts (~line 117).mm3-rvq-*.gguf + mm3-enc-*.gguf that had never been
uploaded (#137, fixed 96d442fb); mm3-corpus.json was committed but not copied
into release archives (#139). Tier 6 exists because of these.GET /api/generate/queue first; reset-queue is destructive.CLAUDE.md (repo root) — orientation map, build/git rules.engine/docs/ARCHITECTURE.md — engine internals, request JSON, generation modes.docs/dev/plugins-authoring.md — Lua plugin authoring (plugins hot-load, no rebuild).docs/dev/releasing.md — release process (any pushed v* tag triggers a full
multi-platform CI build — never push casual v* tags).docs/plans/ — internal design/investigation docs. Gitignored, local-only —
may be absent on a fresh clone.© 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/validating-changes of scragnog/HOT-Step-CPP.
Open the folder on GitHubat commit 91e92a8
Validating Changes 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 |
|---|---|---|---|---|---|---|
| Validating Changes this skillscragnog/HOT-Step-CPP | 171 | — | ~5.2k | Automated safety check: Pass | MIT | |
| Java SDK E2E Test with Replay Snapshotgithub/copilot-sdk | 11k | — | ~1.8k | Automated safety check: Pass | MIT | |
| RStudio Selenium to Playwright Migrationrstudio/rstudio | 5.1k | — | ~3.6k | Automated safety check: Pass | Custom licence | |
| Interactive CLI Testing With tui-testslopus/happy | 24k | — | ~603 | Automated safety check: Pass | MIT | |
| Stitch SDK Pipelinegoogle-labs-code/stitch-sdk | 1.8k | — | ~2k | Automated safety check: Pass | Apache-2.0 | |
| Svelte Testingspences10/sveltest | 113 | — | ~579 | Automated safety check: Pass | MIT |
github/copilot-sdk
Creates a Java SDK end-to-end test for the Copilot SDK that runs against a recorded YAML snapshot through a replay proxy, so CI needs no real authentication.
rstudio/rstudio
Converts RStudio Python Selenium electron tests into TypeScript Playwright tests, checking each against a live RStudio before counting it as migrated.
slopus/happy
Tests interactive CLI and TUI programs with Microsoft's tui-test, driving prompts, arrow keys and screen output in a real pseudo-terminal.
google-labs-code/stitch-sdk
Run the full Stitch SDK generation pipeline. An agent skill from google-labs-code/stitch-sdk.
spences10/sveltest
Fix and create Svelte 5 tests with vitest-browser-svelte and Playwright.
crowdin/crowdin-api-client-js
Run end-to-end tests against the real Crowdin or Crowdin Enterprise API using credentials from .env.
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
Safely pulls upstream acestep.cpp changes into the HOT-Step engine fork without destroying its integration hooks.
Works with
Categories
Defines the verification bar every HOT-Step CPP change must clear before being called done — per-tier checks (TypeScript, C++ engine, UI, audio, end-to-end smoke generation) and honest result…. Validating Changes is an agent skill from scragnog/HOT-Step-CPP. Defines the verification bar every HOT-Step CPP change must clear before being called done — per-tier checks (TypeScript, C++ engine, UI, audio, end-to-end smoke generation) and honest result reporting.
Validating Changes fits situations like: finishing any code change; deciding whether work is done; running a smoke/e2e test; reporting test/validation results.
Run `npx skills add scragnog/HOT-Step-CPP --skill validating-changes -a claude-code`. Or copy the skill folder (.claude/skills/validating-changes in scragnog/HOT-Step-CPP) into .claude/skills/validating-changes in your project. Claude Code loads it when a task matches its description.
Run `npx skills add scragnog/HOT-Step-CPP --skill validating-changes -a codex`. Or copy the skill folder (.claude/skills/validating-changes in scragnog/HOT-Step-CPP) into .agents/skills/validating-changes 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 validating-changes -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/validating-changes, .gemini/skills/validating-changes, .github/skills/validating-changes and .opencode/skills/validating-changes in your project.
Going by SKILL.md and its folder, Validating Changes needs the command-line tools its instructions call (node, npx, cmake, npm and tsx). Our summary lists: Node.js.
SKILL.md contains no URLs. Its commands use npx and npm, which can reach the network depending on how they are called. 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.
Validating Changes is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 5.2k tokens (SKILL.md is roughly 21k 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 Validating Changes: Java SDK E2E Test with Replay Snapshot (github/copilot-sdk, 11k stars), RStudio Selenium to Playwright Migration (rstudio/rstudio, 5.1k stars), Interactive CLI Testing With tui-test (slopus/happy, 24k stars) and Stitch SDK Pipeline (google-labs-code/stitch-sdk, 1.8k 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.