Skip to content

feat(quests): journal lifecycle milestones - #223

Merged
zoeyrose merged 1 commit into
mainfrom
feat/161-quest-milestone-journal
Aug 14, 2026
Merged

feat(quests): journal lifecycle milestones#223
zoeyrose merged 1 commit into
mainfrom
feat/161-quest-milestone-journal

Conversation

@zoeyrose

@zoeyrose zoeyrose commented Aug 14, 2026

Copy link
Copy Markdown
Member

Summary

  • centralize durable top-level and nested quest lifecycle milestones in the shared QuestManager
  • use stable qualified quest and nested-part identities with exact before/after status
  • journal repeat reset and objective removal while preserving kept objective items without false removal records
  • suppress duplicate start/completion/failure hooks and retain uncertain intents for reconciliation

Relationship

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 validation
  • composed Classic server suite — passed before the independent current-base scoped-source regression: 51/51 CMake tests, including 441 Python plugin tests
  • final owner-native Classic suite — passed at companion Classic head: 51/51, including the Python plugin suite
  • git diff --check — passed

Review

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.

@zoeyrose zoeyrose moved this to Review in Atrinik work Aug 14, 2026
@zoeyrose
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.
@zoeyrose
zoeyrose merged commit c251a70 into main Aug 14, 2026
7 of 8 checks passed
@zoeyrose
zoeyrose deleted the feat/161-quest-milestone-journal branch August 14, 2026 19:15
@github-project-automation github-project-automation Bot moved this from Review to Done in Atrinik work Aug 14, 2026
@github-actions

Copy link
Copy Markdown

🎉 This PR is included in version 5.1.0 🎉

The release is available on:

Your semantic-release bot 📦🚀

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

Labels

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

1 participant