Skip to content

fix(protocol): preserve initial login packets - #551

Merged
zoeyrose merged 6 commits into
mainfrom
fix/issue-550-login-packets
Sep 24, 2026
Merged

zoeyrose merged 6 commits into
mainfrom
fix/issue-550-login-packets

Conversation

@zoeyrose

@zoeyrose zoeyrose commented Sep 24, 2026 •

Copy link
Copy Markdown
Member

Summary

Correct initial-login item ordering and notification delay decoding, and expose existing notification/mapstats command constants to the embedded Python module.

Implementation / behavior

Keep item updates behind their initial introduction, read the notification delay once before clamping, and export generated command identifiers without changing the wire contract. Focused regressions cover the production paths and malformed input.

Validation

Validation results will be recorded after focused before/after regressions, pinned container builds and tests, and independent whole-diff review.

Limitations / follow-up

Offline validation does not complete real gameplay qualification. Runtime owner atrinik/atrinik#604 repeats that qualification after maintainer merge. Authored content remains a separate delivery.

Closes #550

Final validation and review

The final commit is 0058d6a904386c86b3f06844c66d9273baca6f9e.

  • The saved-player regression exercises normal inventory merges and insertion while logging in, after entering playing state, between PLAYER and the own-inventory snapshot, and after that snapshot. A different-container snapshot does not establish the initial inventory. The own snapshot's target and item contents are checked.
  • The real sign producer generates a fresh packet that is explicitly replayed into the actual client notification handler. Delay boundary and genuine truncation cases pass. The actual embedded Python module exports CLIENT_CMD_NOTIFICATION=26 and CLIENT_CMD_MAPSTATS=12.
  • Pinned CPU builds pass: server 54 tests, client 50 tests, libatrinik 18 tests, and server sanitizers 55 tests. The 16 GPU client tests are explicitly skipped in this offline CPU lane.
  • Optimized Release fixtures and the full client Release suite pass. The compound fixture uses function and data sections so the optimized linker can discard unrelated handlers; its checks remain active under NDEBUG. This fixes the initially observed Release-only test-link failure.
  • Both instrumented module suites pass. Coverage reports use the workflow-pinned Classic CI image and gcovr 7.2: server line coverage 62.9%, client 29.4%. Before/after hashes prove that reporting preserved all instrumented data and CMake caches.
  • Protocol generation and tests, dependency checks, server/client/repository Python tooling, imported history verification, changed-line clang-format and git diff --check pass.
  • GitHub Classic validation, CodeQL validation and Conventional PR title pass, including native Windows tests and trusted GPU-renderer coverage.
  • Independent whole-diff source review and final evidence audit found no remaining actionable local findings.

Earlier diagnostic runs exposed the intended regressions and two subsequently fixed test compilation issues. Failed tooling invocations and reporting attempts remain retained as failures; they are not counted as passing acceptance runs. A historical local formatter resource-planning violation is disclosed in the private delivery record; all final acceptance uses the subsequently reviewed container composition.

Real GPU/audio/gameplay qualification remains with atrinik/atrinik#604 after maintainer merge and verified artifact refresh. The separately owned authored-content correction is atrinik/content#264. This PR does not modify authored content, change wire IDs, or claim live gameplay qualification.

@codecov

codecov Bot commented Sep 24, 2026 •

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 83.33333% with 2 lines in your changes missing coverage. Please review.

Files with missing lines Patch % Lines
server/src/socket/item.c 71.42% 0 Missing and 2 partials ⚠️

📢 Thoughts on this report? Let us know!

@zoeyrose zoeyrose moved this to Review in Atrinik work Sep 24, 2026
@zoeyrose
zoeyrose marked this pull request as ready for review September 24, 2026 17:58
@zoeyrose
zoeyrose merged commit d926f6f into main Sep 24, 2026
27 checks passed
@zoeyrose
zoeyrose deleted the fix/issue-550-login-packets branch September 24, 2026 21:39
zoeyrose added a commit to atrinik/devcontainer that referenced this pull request Sep 24, 2026
## Summary

Pin the portable Classic consumer to the merged login and notification
fixes from atrinik/classic#551.

## Implementation / behavior

- Use merged Classic source `d926f6fd0418fb1af9060158c43d8d3ff5252580`
in `portable/contract.json`.
- Preserve the existing Debian baseline, canonical shader tools, source
and license verification, and normal publication workflow.

## Validation

The existing portable validation and real offline consumer jobs must
pass for this exact producer head. Final local and CI evidence will be
recorded before readiness.

## Limitations / follow-up

Immutable image and platform digests become available after maintainer
merge and successful normal semantic-release publication. Wrapper
atrinik/atrinik#615 consumes those published identities.

Closes #50

<!--
atrinik-delivery:body:da576fe5aa12e12dc4b268588209575ad66b327f67bc1c8eae511d7a14eea736:start
-->
## Delivery validation

Reviewed head: `0b268a4beb6f3b847728fed16c47c1618be39050`.

- Final-head local checks passed: 11 portable ABI tests, 21
dependency/shader/Vulkan tests, required-check aggregation tests, and
`git diff --check`.
- [Normal portable validation
run](https://github.com/atrinik/devcontainer/actions/runs/36064725484)
passed Dockerfile checks, the non-root baseline smoke, and all 83
offline Classic consumer tests. The retained artifact confirms Classic
`d926f6fd0418fb1af9060158c43d8d3ff5252580`, glibc 2.36, and generic
x86-64 compiler flags across 274 compile units.
- Independent whole-diff review found zero actionable issues. CodeQL,
PR-title policy, and the required aggregate passed. Unaffected Linux,
Classic CI, and Windows image jobs were skipped by the existing path
selector.
- This is CPU-only build/consumer evidence. It does not establish
hardware GPU gameplay qualification.

The published image index/platform digests remain pending maintainer
merge and the normal semantic-release publication workflow. No manual
release or registry publication was performed.

<!--
atrinik-delivery:body:da576fe5aa12e12dc4b268588209575ad66b327f67bc1c8eae511d7a14eea736:end
-->
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

fix(server): preserve valid initial login item and notification messages

1 participant