Route resets at a climbing gym
A climbing gym resets its routes every few weeks: close the route, strip the old holds, set new ones, inspect the wall, and reopen only if the inspection passes. Rope routes and boulders do some steps differently, as the lesson’s feeds decode differently, but the order and the rule that a failed inspection keeps a route closed belong to every reset. Each level starts from the previous level’s finished code, so you can begin at any of them.
A teammate’s pull request adds two features the setters asked for. The board lists the routes set this week, for climbers. The quick refresh swaps a few holds on a route without stripping it, for routes that only need freshening; the pull request reasons that nothing was taken down, so nothing needs inspecting. You are reviewing it. The gym’s safety rule is unchanged: a route reopens only after it passes its inspection (and, for a competition route, its forerun).
A quick-refreshed route with loose bolts reopens. The board advertises routes that failed inspection and are closed, so climbers walk to a taped-off wall.
Reproduce Run new QuickRopeReset().reset({ name: "Arete", problems: ["bolts"] }): it reopens and goes on the board. Run new RopeReset().reset({ name: "Arete", problems: ["anchors"] }): it stays closed, but it is on the board.
Acceptance criteria A quick refresh keeps holds and swaps a few (“keep holds > swap holds”) and then passes the route’s own inspection, and forerun where it has one, before it reopens. The board lists a route once, and only when it reopens; a route that stays closed is not on it, whatever its type, the checker’s included. Every earlier rule still holds: the order, a failed inspection or forerun keeping a route closed, route types without a forerun unchanged. Keep each part of the pull request only in a form that keeps these rules. Notes Each case clears the board, runs one reset, and prints its line followed by “ | board: ” and the board’s routes, or (empty). Keep the names and signatures, including QuickRopeReset and QuickBoulderReset (Go: QuickReset; Rust: QuickRope and QuickBoulder); the checker calls them. Go only: a quick refresh of a competition route is checked too.