Repository navigation
fix(quests): isolate repeat reset prerequisites - #172
Merged
Merged
Conversation
This was referenced Aug 12, 2026
Closed
zoeyrose
added a commit
that referenced
this pull request
Aug 12, 2026
## Summary - make the repeat-quest reset regression establish its available-quest-point prerequisite - isolate and restore player level plus quest-point state - preserve production reset and cooldown behavior - canonical `main` change: #172 ## Validation - `python3 -m compileall -q maps/python` - `python3 tools/validate.py` - `git diff --check` ## Program context Classic PR atrinik/classic#180 proved that the v1.8.10 runtime correction reaches the repeat-reset assertion. The remaining failure is a fixture precondition: the test player has only one available quest point, and production correctly retains terminal repeat state until another point is available. The test now establishes and asserts available quest points, isolates quest-point/player-level state, and restores every mutation with `addCleanup`. Production quest behavior is unchanged. This `fix` maintenance change must publish the next 1.8.x runtime so Classic consumes the corrected fixture. It does not close atrinik/atrinik#356 or atrinik/classic#169.
|
🎉 This PR is included in version 2.9.2 🎉 The release is available on:
Your semantic-release bot 📦🚀 |
zoeyrose
added a commit
that referenced
this pull request
Aug 23, 2026
## Base update #170 and #171 are merged. This branch is rebased directly onto merged #171 (`66a3f0c53`), so the PR now contains only its gameplay/server changes. It contains no inherited #171 client/protocol files or metaserver Worker files; the Worker implementation is owned by its separate repository. ## Summary - distribute kill XP across the skills that actually contributed damage, while preserving party sharing, anti-kill-steal boundaries, XP caps, and loot eligibility - make trap finding/disarming probabilistic and anti-reroll, retain a meaningful trip risk, increase direct trap damage, prevent double-triggering reusable traps, and calculate trap XP like level-relative kill XP - send depletion as applied in its first item update and refresh flags/tooltips immediately after death/stat drain - recommend the implemented `remove depletion` spell in authored content - ignore zero-value/non-progressive disease symptoms during symptom reduction Closes #121. Closes #144. ## Validation - full warning-as-error Linux client/server build after realignment - all 25 CTest targets, including QUIC network integration and Python plugin runtime - focused attack, living, and rune regression suites - narrow archetype collection confirming the corrected depletion tooltip - targeted clang-tidy review, repository formatting, and `git diff --check` - audited the complete `master...HEAD` file list to confirm the separately owned Worker implementation is absent ## Review attention The branch includes bounded/tag-validated per-victim contribution state and deterministic per-player/trap probability hashing. Live balance attention should focus on mixed-skill boss fights, party members changing maps at death, corpse-heavy level 10-30 areas, high-skill disarmers, and reusable/multi-payload runes.
zoeyrose
added a commit
that referenced
this pull request
Aug 23, 2026
## Summary - make the repeat-quest reset regression establish its available-quest-point prerequisite - isolate and restore player level plus quest-point state - preserve production reset and cooldown behavior - paired `1.x` companion: #173 ## Validation - `python3 -m compileall -q maps/python` - `python3 tools/validate.py` - `git diff --check` ## Program context Classic PR atrinik/classic#180 proved that the v1.8.10 runtime correction reaches the repeat-reset assertion. The remaining failure is a fixture precondition: the test player has only one available quest point, and production correctly retains terminal repeat state until another point is available. The test now establishes and asserts available quest points, isolates quest-point/player-level state, and restores every mutation with `addCleanup`. Production quest behavior is unchanged. This PR does not close atrinik/atrinik#356 or atrinik/classic#169; release and lock gates remain.
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.
Summary
1.xcompanion: fix(quests): isolate repeat reset prerequisites #173Validation
python3 -m compileall -q maps/pythonpython3 tools/validate.pygit diff --checkProgram context
Classic PR atrinik/classic#180 proved that the v1.8.10 runtime correction reaches the repeat-reset assertion. The remaining failure is a fixture precondition: the test player has only one available quest point, and production correctly retains terminal repeat state until another point is available.
The test now establishes and asserts available quest points, isolates quest-point/player-level state, and restores every mutation with
addCleanup. Production quest behavior is unchanged.This PR does not close atrinik/atrinik#356 or atrinik/classic#169; release and lock gates remain.