Skip to content

Per-phrase tiers 4/4: verify the mastery slider works end to end on an editor-saved pack #36

Closed

Description

@cchacs

Part of #3. Last: depends on Per-phrase tiers 1/4 and at least one of 2/4 or 3/4.

The point of #3 is that the master-difficulty slider (feedBack#48) should work for editor-authored sloppaks, not just GP-imported ones.

Scope

  • Author or derive distinct tiers for a phrase, save a sloppak, load it in the host, and confirm the mastery slider changes which notes are shown (the consumer is core's static/highway.js _rebuildMasteryFilter(), which reads phrases[].levels[]).
  • Capture this as a repeatable test or a documented manual script with fixtures.
  • Update the CHANGELOG note that says the slider is a no-op for editor-saved packs.

Acceptance criteria

  • The slider visibly changes the note set for an editor-saved pack with authored tiers.
  • A pack without authored tiers behaves as today.
  • The documentation no longer says the slider is a no-op.

Out of scope

Difficulty Ladder's own generation (that lives in the difficulty-ladder plugin).

Activity

  1. pullfrog commented on Oct 2, 2026

    @pullfrog
  2. pullfrog commented on Oct 10, 2026

    @pullfrog

    PR opened: #67

    Closed #36 (per-phrase tiers 4/4) with a repeatable end-to-end verification suite, tests/test_mastery_filter_e2e.py (5 tests), that mirrors core's highway mastery filter and drives it over the real save-path output (_repopulate_phrase_levels), plus the docs/CHANGELOG corrections for the "slider is a no-op" framing (new [Unreleased] entry; 1.4.3 note amended with a pointer). All three acceptance criteria pinned: authored tiers visibly change the rendered set per slider position, untiered packs render identically at every position (including the freshly-added-phrase empty-ladder case), and no documentation claims the slider is a no-op anymore.

    Verification: full pytest suite 502 passed / 5 skipped, npm test 400/400, npm run lint 0 errors (3 baseline warnings). A mutation check confirmed the tiered-pack tests fail if the save path's authored-tiers branch regresses. No product code changed.

    Reviewer (reviewfrog) findings were addressed: mirror-guard wording now scope the manual re-sync to core, Math.floor used for exactness, the handshape fall-through gate modeled, the max_difficulty > top-tier divergence pinned and documented, the fresh-phrase empty-ladder acceptance-2 case added, the cascade claim qualified, and the CHANGELOG no-op/chain wording tightened.

    Manual host-side verification remains the scripted step: Alt+P a phrase → save → load in host → drag the master-difficulty slider.

    Task list (1/7 completed)
    • Create feature branch pullfrog/36-mastery-slider-e2e-verification
    • Write tests/test_mastery_filter_e2e.py (mirror of core highway consumer + acceptance tests)
    • Update CHANGELOG: add [Unreleased] entry + amend 1.4.3 no-op note with superseded pointer
    • Run pytest suite + lint to verify
    • Self-review via reviewfrog subagent
    • Push branch + open PR
    • report_progress with PR link

    Pullfrog  | View workflow run | via Pullfrog | Using big-pickle (free) | 𝕏

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions