Repository navigation
Conversation
Store Classic and regular history independently, restore a validated Classic target through the native carousel, and keep the history badge anchored to the requested center card. Release history control on explicit user navigation while preserving it during the client base-skin fallback and restored-target transition. Normalize Classic and regular IDs during deactivation so the protected target is not mistaken for a different skin. This commit also restores the missing Classic helper imports in HistoricModeHandler; without them, the target-preservation branch raised NameError and silently fell through its defensive exception handler. Source commits consolidated: 1efe6d17, 66d43660, 22b98203, and the HistoricMode import correction originally carried by 485f65a8. Verification: separate history tests previously passed in the development environment; the current handler and plugin pass Python and JavaScript syntax checks.
Restore Classic history from the validated catalog, normalize legacy 600xx champion keys into the resource per-champion history scope, and compare native carrier IDs with resource IDs at the mode boundary. Project the saved target through ClassicWheel, keep the history marker and toast on the requested center card, and suppress automatic automatic carousel movement after explicit native carousel navigation so the selector does not flicker back to history. Resolve historic chroma names through either raw or resource cache IDs while leaving regular history storage and comparison behavior unchanged. Verification: local history scope, native carrier activation, JavaScript syntax, and Python compilation checks passed.
Reuse the wheel's carrier-compatible carousel movement and presentation events instead of maintaining a second carousel navigator. Keep Classic history active while the wheel projects parent cards and scope unowned-skin saving to the Classic history storage. Regular-mode history deactivation remains unchanged. Validation: covered by final branch syntax and git diff checks. No separate live-client run is claimed for this commit.
Attach the history marker and label to the current wheel control host, clear stale presentation when leaving JADE, and prevent duplicated notices during native carousel refreshes. Validation: covered by final branch syntax and git diff checks. No separate live-client run is claimed for this commit.
Let the Classic history plugin claim the history presentation layer only after its bridge subscriptions and assets are initialized. The regular HistoricMode plugin now stops rendering only when the current session is JADE and the matching Classic history owner is ready. It remains available in ordinary modes and as the JADE fallback when the dedicated plugin is absent or fails to initialize. This keeps the UI switch inside the history feature PR and avoids using ClassicWheel readiness as a global proxy for unrelated plugin control. Validation: covered by final branch syntax and git diff checks. No separate live-client run is claimed for this commit.
Route the regular history and target files through their existing path helpers while keeping the new Classic files separate. This preserves upstream behavior and test substitution points without changing the Classic history scope or file names. Validation: the upstream corrupt-history and missing-history tests pass; Python compilation and git diff checks pass.
Use the carrier-aware ClassicWheel helpers when that base PR is present, while retaining the upstream Skin0 behavior when this feature branch is reviewed or merged on its own. This keeps the history PR functionally isolated: it does not copy the wheel implementation or modify the shared Classic core module. Validation: 39 focused injection, Classic library, history, Pengu bridge, chroma, and countdown tests passed.
ccccxp
force-pushed
the
pr/classic-history
branch
from
October 18, 2026 14:42
7b1c465 to
f87b9af
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What this adds
This restores the last successfully injected Classic skin for each champion, moves the native carousel to that target, and shows the history badge and closable history notice when the target reaches the center.
Classic and regular history are stored separately. A manual card, arrow, skin, or chroma selection immediately releases history control, preventing the carousel from snapping back to the saved target. History also yields to an active Classic random selection.
Why a separate plugin
The regular history plugin uses ordinary skin IDs and the regular selector lifecycle. Classic history must wait for the live Classic catalog, move through the fixed native carousel, survive temporary carrier reports, and attach its marker to client-reused card elements.
ROSE-ClassicHistoricowns only the Classic marker and notice. It delegates movement and selection protection to ClassicWheel. The regular plugin remains unchanged outside Rift Classic and stays available as a fallback if the Classic plugin is absent or fails to initialize.Carrier and resource compatibility
History stores resource skin IDs rather than carrier IDs. With #344 alone it uses upstream's Skin0 +
classic/path. If #318 is present, the same saved target follows Rose's automatic choice between native default +classic-native/and Skin0 +classic/. This PR does not choose or mix carrier package families.For standalone review, optional wheel helpers fall back to upstream Skin0 behavior instead of making this branch import ClassicWheel code.
Validation
Changed files
Pengu Loader/plugins/ROSE-ClassicHistoric/index.jsPengu Loader/plugins/ROSE-HistoricMode/index.jspengu/communication/broadcaster.pypengu/communication/message_handler.pythreads/handlers/injection_trigger.pyui/handlers/historic_mode_handler.pyutils/core/historic.py