feat(quests): journal lifecycle milestones - #223
Merged
Conversation
zoeyrose
marked this pull request as ready for review
August 14, 2026 18:09
zoeyrose
added a commit
to atrinik/classic
that referenced
this pull request
Aug 14, 2026
## Summary - add stable quest, progression, spell, savebed, death, lifesave, and respawn milestone producers to the private gameplay journal - emit only first/configured quest-objective milestones and exact kill-threshold crossings, leaving ordinary XP, combat, movement, and intermediate progress aggregate-only - correlate one-drop rewards, objective grants, death outcomes, respawns, stat loss, and lifesaves with stable bounded identities - document a complete current metrics-registry taxonomy, event-rate rationale, high-volume exclusions, and the producer transaction matrix - preserve trusted Python journal calls as no-ops when journaling is disabled while retaining strict configured-journal failure behavior ## Companion and dependencies - Content companion: atrinik/content#223 - Journal foundation: #159 (merged) - Metrics foundation: #162 (merged) - Profile-provenance follow-through: #212 Closes #161. ## Validation - owner-native `cmake --preset linux-debug && cmake --build --preset linux-debug --parallel && ctest --preset linux-debug --output-on-failure` — 51/51 passed at `27d1e7f1c`, including the 441-test Python plugin suite - hosted-style Linux coverage build and `ctest --preset linux-coverage --parallel 4 -LE performance` — 50/50 passed at `b3e3922fd`; the final focused debug/coverage test passes at `0883f274b` - companion `python3 tools/validate.py` — passed at `8c2692804`: 167 tests plus full catalog, schema, syntax, runtime collection, licensing, and provenance checks - two exact `./atrinik build all --profile issue-161-milestone-journal --test` attempts — the integrated Classic/content graph passed all 141 tests (including the complete performance matrix) and world generation on both attempts - latest-head hosted checks — passed, including Server/Core/Windows/security validation, integrated graph, CodeQL, and Codecov patch coverage - `git diff --check` and clean issue worktrees — passed After the successful integrated tests and world generation, both full-profile attempts hit the independent Worker dependency staging EACCES tracked at atrinik/atrinik#425. The narrower server-only wrapper path is independently broken by the newly merged shared-CMake source closure and is tracked at atrinik/atrinik#424. ## Review Five complete or focused base-to-head review rounds covered transaction failure/recovery, stable identity, overflow, duplicate/replay behavior, noise/scale, plugin ABI compatibility, test quality, privacy, and operations. Review findings corrected intent ordering, strict empty-transaction handling, lifesave correlation, and missing spell/savebed scenario assertions. The final whole-diff review has zero known actionable findings. ## Independent follow-ups found during delivery - atrinik/atrinik#418 — verify immutable source generations against exact Git trees - atrinik/atrinik#420 — retain the tracked resources runtime manifest in source generations - atrinik/atrinik#424 — include shared CMake modules in scoped Classic component sources - atrinik/atrinik#425 — preserve writable Worker dependency staging for `npm ci` - #318 — accept wrapper-owned inherited asset-directory descriptors during runtime startup The failed runtime smoke topology was inspected through wrapper `ps`/bounded logs and cleanly stopped; its generation-owned temporary state was released. No cleanup apply was used.
|
🎉 This PR is included in version 5.1.0 🎉 The release is available on:
Your semantic-release bot 📦🚀 |
This was referenced Aug 14, 2026
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
QuestManagerRelationship
Supports atrinik/classic#161. The Classic PR is the sole issue-closing path.
Depends on the trusted gameplay-journal Python API delivered by atrinik/classic#159 and consumed by the companion Classic branch
feat/161-milestone-journal.The scripted telemetry inventory in #222 does not overlap these files and remains independently mergeable.
Validation
python3 tools/validate.py— passed: 167 tests plus full catalog, schema, authored syntax, runtime collection, licensing, and provenance validationgit diff --check— passedReview
Two complete base-to-head review rounds found and fixed intent ordering, repeat-reset coverage, and dead local-state issues. The post-fix review has zero known actionable findings.
Tracked independent workspace/runtime limitations: atrinik/atrinik#418, atrinik/atrinik#420, atrinik/atrinik#424, atrinik/atrinik#425, and atrinik/classic#318.