Skip to content

Feature/advancement sync - #26

Open
janhoeck wants to merge 22 commits into
version/26.1from
feature/advancement-sync
Open

Feature/advancement sync#26
janhoeck wants to merge 22 commits into
version/26.1from
feature/advancement-sync

Conversation

@janhoeck

@janhoeck janhoeck commented Aug 9, 2026

Copy link
Copy Markdown
Contributor

No description provided.

janhoeck and others added 22 commits August 9, 2026 18:36
Design for syncing player advancements from <world>/advancements/<uuid>.json
alongside the existing statistics path: three new tables in the microservice,
full-snapshot replace per (player, server), no history. Triggered on quit,
world save and shutdown.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Tables are created manually by the operator. nativeUuid maps to the native
UUID type on Postgres, and indexes move out of CREATE TABLE.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Eleven TDD tasks covering API models, file parsing, change detection,
microservice tables and persistence, and the Paper trigger points.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Pre-flight ruling: flushPlayerAdvancements would have duplicated
flushPlayerStats verbatim. Both now go through flushViaReflection with an
accessor name.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
The convention plugin declares surf-api-core as compileOnly only, so key()
and logger() never reach testCompileClasspath. Found while implementing
task 1.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Instant.parse accepts arbitrary offsets since JDK 12, so the offset test
was satisfied by the second strategy and the OffsetDateTime branch had no
coverage. Split into an offset-instant case and a second-less case.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
The flag was copied from StatsFileServiceImpl and silently replaces a JSON
null for criteria/done with the property default, so a malformed entry was
accepted instead of skipped and logged. Contradicted the plan's own global
constraint. Test added for both null fields.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Addresses reviewer finding: coerceInputValues flag silently converts null values to
defaults instead of throwing, which contradicts the global constraint that malformed
entries must be skipped and logged. Removing this flag ensures entries with null
criteria or done fields are properly rejected.

Adds test case covering entries with null criteria or done fields.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant