Quick answer: Capture the generation seed, the run state and distance, and the speed on endless runner bug reports, because the genre procedurally generates infinite levels at increasing speed where generation can create impossible sections and collision breaks at high speed. The seed-and-speed context is what makes an endless runner generation or collision bug reproducible.
Endless runner games procedurally generate an infinite level that the player navigates at an ever-increasing speed, dodging obstacles and collecting pickups until they fail. This procedural, high-speed, infinite nature creates a distinctive bug profile: the generation can produce impossible sections that cannot be passed, the collision can break at the high speeds the genre reaches, and the difficulty scaling over a long run can produce issues. Like other procedural and physics-speed games, these depend on the generation and the speed. Tracking endless runner bugs means capturing the generation seed, run state, and speed behind a procedurally-generated, high-speed run.
Procedural generation at speed defines the genre
An endless runner procedurally generates an infinite level, assembling the path, obstacles, and pickups as the player runs, at a speed that typically increases over the run, so the player faces faster and faster procedurally-generated content until they fail. This procedural, high-speed, endless nature is the genre essence, and it produces the characteristic bugs: the generation must always produce passable content, the collision must work at the increasing speed, and the difficulty must scale fairly over a potentially long run.
The bugs are in this: a procedurally-generated section that is impossible to pass, an unfair arrangement the generation produced, a collision bug at the high speed where the player and obstacles move fast, a difficulty-scaling issue that makes the run unfair at high speed or distance. Like roguelikes and other procedural games, these depend on the generation, and like racing and physics games, the high speed stresses the collision. Understanding that procedural generation at speed defines the endless runner, with bugs in the generation passability, the high-speed collision, and the difficulty scaling, frames the bug tracking: capture the seed, run state, and speed behind the run that hit a bug.
Capture the generation seed and run state
Because endless runners are procedurally generated, capture the generation seed and the run state, so you can reproduce the exact level the player was running, as in any procedural game where the seed regenerates the content. If your generation is deterministic from a seed, capturing the seed lets you regenerate the same infinite level, and the run state, the distance, the situation, tells you where in the generated level the bug occurred.
Capture the run distance especially, since the run state is largely defined by how far the player has run, which determines the speed and the generated content at that point, and a bug at a particular distance is reproducible when you know the seed and the distance. With the seed and run state, you can regenerate the level and reach the point where the bug occurred, much as you would replay a roguelike seed to a depth. Capturing the generation seed and run state is the foundation, providing the procedural level and the position in it from which an endless runner bug, especially a generation bug, emerged, letting you regenerate and reach the situation.
Capture the speed and collision context
Endless runners reach high speeds as the run progresses, and the high speed stresses the collision, since the player and obstacles move fast and a fast-moving collision can tunnel or resolve wrong, like the high-speed collision bugs in racing games. Capture the speed and the collision context when a collision bug is reported, the player speed, the obstacle, the collision result, since a collision bug is often speed-dependent and the speed reveals it.
A report of an unfair collision, a hit that should have missed, a collision that did not register, becomes diagnosable when you can see the speed and the collision context, revealing whether the high speed caused a collision glitch, like the player moving far enough per frame to clip an obstacle. The speed is the key condition, since a collision bug at high speed will not reproduce at low speed, much as racing collision bugs depend on velocity. Capturing the speed and collision context lets you reproduce the high-speed collision situations where endless runner collision bugs occur, which is essential given the genre ever-increasing speed that pushes the collision to its limits.
Watch generation passability and difficulty scaling
The critical endless runner bug is the impossible section, where the procedural generation produces a part of the level that cannot be passed, an unfair obstacle arrangement, a gap too wide, a configuration that guarantees failure, which is the endless runner equivalent of a roguelike soft lock or an unbeatable wave. Capture the generation context, the seed and the section, when a player reports an impossible section, so you can regenerate it and verify whether it is genuinely impassable.
And watch the difficulty scaling, since the genre increasing speed and difficulty over the run must scale fairly, and a scaling bug, difficulty that ramps too fast, an unfair spike, generation that becomes impossible at high speed, breaks the run. Capture the run distance and speed with difficulty-related reports, since these depend on the scaling at that point. Watching generation passability, to catch the impossible sections that the procedural generation can produce, and difficulty scaling, to catch the unfair ramps, covers the fairness dimensions of endless runner bugs, where the procedural generation and the speed scaling must always remain passable and fair for the run to be playable.
Setting it up with Bugnet
Add an in-game report option and attach the generation seed, the run state and distance, the speed, and the collision context as custom fields. Bugnet stores them so an endless runner bug arrives with the generation, run, and speed context needed to regenerate the level, reach the point of the bug, and reproduce a generation, collision, or scaling issue in the procedural, high-speed run.
Group identical reports into occurrence counts, watching whether impossible-section reports cluster around a seed or generation pattern, or collision bugs at high speeds. Because endless runners are procedural and high-speed, the captured seed-and-speed context is what lets you reproduce the generation and collision bugs, regenerating the exact level and the high-speed situation, and the clustering points you at the generation patterns that produce impossible sections, keeping the procedurally-generated, ever-faster run passable and fair, which is exactly where the genre bugs threaten the playability.
Fuzz the generation and test at speed
Because the critical endless runner bug is the impossible section the generation can produce, fuzz the generation, running it over many seeds headless and asserting every generated section is passable, that the obstacle arrangements are always navigable, much as you would fuzz a roguelike for soft locks. This catches the impossible sections, the unfair generation, before players hit them, by exercising the generation far more than play could.
And test the collision and gameplay at the high speeds the genre reaches, since the high-speed collision bugs only appear at speed, and a runner tested only at the slow early speeds will have collision bugs at the fast late speeds, much like testing physics at the relevant velocities. Pair the generation fuzzing and high-speed testing with your captured reports, which surface the generation and collision bugs players hit that you did not anticipate. Together they keep the endless runner passable and fair across the procedural generation and the increasing speed, ensuring the infinite, accelerating run the genre is built on stays playable, which the generation fuzzing and speed testing directly protect.
Endless runners generate infinite levels at speed. Capture the seed and the speed, and fuzz the generation for impossible sections.