generation-request-flow

Traces music generation requests through UI, Node queue, and C++ engine to locate dropped parameters.

151|22|Updated Apr 19, 2026
One-click install
npx skills add https://github.com/scragnog/HOT-Step-CPP --skill generation-request-flow-scragnog
Or copy as Structured Prompt for Agent
Please help me install this Agent Skill.
Skill: generation-request-flow
Source: https://github.com/scragnog/HOT-Step-CPP/tree/main/.claude/skills/generation-request-flow
Command: npx skills add https://github.com/scragnog/HOT-Step-CPP --skill generation-request-flow-scragnog

SYSTEM DOCUMENTATION & REQUIREMENTS

💡 This Skill includes references (resource) components.

What problem does it solve? In HOT-Step CPP, a parameter set in the UI can silently never reach the C++ sampler, and nothing errors. This Skill maps the full lifecycle of a generation request (UI form → Node job queue → engine LM → synth → SQLite row) and catalogs every point where a parameter can be lost, including the LM echo sideband gotcha and the yyjson int-vs-float trap. ## Core Features & Use Cases - End-to-end pipeline map: Documents the path from Zustand UI store through translateParams, aceClient, and hot-step-server.cpp into the DiT sampler, with verified file and line references. - Param-drop checklist: Eleven known silent-drop locations (LM echo rebuild, falsy guards, UI gating, LM cache staleness, multipart truncation, upstream sync hook loss) with failure signatures and fixes. - Five-layer procedure for adding parameters: Step-by-step instructions for threading a new generation parameter through UI state, Node translation, wire types, engine parsing, and the g_hotstep_params global. - Use Case: You add a new guidance knob to the UI but the engine keeps using the default. This Skill tells you to check the UI gate in getGlobalParams, the translateParams guard, and the int-safe get_num parse pattern before suspecting the engine. ## Quick Start Ask the assistant to trace why a generation parameter set in the UI is not reaching the engine, using the generation-request-flow skill.

Frequently Asked Questions about generation-request-flow

High-intent search queries and answers about installing and using this skill.

FAQPage Schema
Why is a generation parameter set in the UI ignored by the engine?

The most common cause is the LM echo sideband gotcha: server-side fields are not in the C++ AceRequest struct, so they vanish from the /lm response. The synth request must be rebuilt as a spread of the original aceReq plus only the 7 LM output fields.

How do I add a new generation parameter end-to-end?

Thread it through five layers: the Zustand globalParamsStore and GenerationParams type, translateParams camelCase-to-snake_case mapping, the AceRequest interface, ServerFields parsing in hot-step-server.cpp, and the g_hotstep_params copy. Never touch the LM-echo rebuild spread.

Why does a whole-number float parameter become zero in the C++ engine?

Bare yyjson_get_real() returns 0 for JSON integers, and JavaScript serializes 2.0 as 2. Use the int-safe get_num lambda in parse_server_fields so both integer and real JSON values parse correctly.

Does the LM cache cause stale audio codes after changing parameters?

The LM cache keys only LM-affecting params and stores only the 7 LM output fields, so DiT and adapter changes intentionally reuse cached codes. A new LM-affecting param must be added to computeLmCacheKey or stale codes are served.

What task modes does the generation engine support?

The engine supports text2music, cover, cover-nofsq, repaint, lego, extract, and complete task types. Node's isCoverTask list skips the LM phase for cover, cover-nofsq, repaint, lego, and extract tasks.

Why do all solvers behave like euler after an upstream sync?

An upstream sync can silently drop the hot-step-sampler.h include from pipeline-synth-ops.cpp, leaving everything compiling but all sideband params dead. Run engine\verify-hooks.ps1 after every upstream sync to detect it.