Skip to content

fix(server): reject non-enterable exit destinations - #507

Closed
zoeyrose wants to merge 4 commits into
mainfrom
fix/issue-472-exit-destination
Closed

zoeyrose wants to merge 4 commits into
mainfrom
fix/issue-472-exit-destination

Conversation

@zoeyrose

Copy link
Copy Markdown
Member

Summary

Fix Classic exit validation so destinations that cannot accept a player, including Asteria's roof-only tiled target, are neither advertised as actionable nor entered.

Implementation / behavior

  • Add one server-owned destination eligibility semantic shared by MAP2 cue generation and exit activation.
  • Cache static destination validation at exit/map lifecycle boundaries while keeping scripted and other player-dependent rules dynamic.
  • Validate the landing before removing the player and preserve the existing adjacent fallback when it finds a legal square.
  • Add regression and bounded many-player serialization coverage for invalid, blocked, fallback, automatic-link, tiled, explicit-path, and shop-mat exits.
  • Document the final exit and MAP2 behavior in server/doc/MAP_RENDERING.md.

Validation

The final implementation will be validated with focused server and MAP2 tests, cache instrumentation, the Classic profile build/test, and the Asteria runtime scenario. Exact results will be recorded in the delivery-owned update after final-head convergence.

Limitations / follow-up

This delivery protects players from malformed or non-enterable destinations without rewriting the Asteria content. Making the roof layer intentionally playable is a separate content decision.

Closes #472

@codecov

codecov Bot commented Aug 30, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 74.01961% with 106 lines in your changes missing coverage. Please review.

Files with missing lines Patch % Lines
server/src/types/exit.c 73.35% 32 Missing and 65 partials ⚠️
server/src/plugins/plugin_python/atrinik_object.c 58.82% 3 Missing and 4 partials ⚠️
server/src/server/object.c 90.90% 0 Missing and 2 partials ⚠️

📢 Thoughts on this report? Let us know!

@zoeyrose zoeyrose moved this to Review in Atrinik work Aug 30, 2026
@zoeyrose

Copy link
Copy Markdown
Member Author

Delivery update

  • Final head: badc32fe6e17670466b9cda0fda7b46993e08490; merge base: 9336aaae33c039bdddb5beeed54a317ebfe3fd23.
  • Final review found no known actionable findings; the issue-focused exit, request, object, and Python cohorts pass.
  • Local Classic server validation passed 53/54 tests; the sole failure is the separately reproduced QUIC face-batch loopback reset in server-unit-toolkit.socket_asset.
  • The aggregate build all probe remains environment-blocked because dxc and spirv-cross are unavailable locally.
  • All applicable remote PR checks pass. PR fix(server): reject non-enterable exit destinations #507 is ready for maintainer review; issue fix(server): reject non-enterable exit destinations #472 remains open.

@zoeyrose

zoeyrose commented Sep 1, 2026

Copy link
Copy Markdown
Member Author

Closing this PR without merge per the revised direction for atrinik/classic#472.

The work is moving to atrinik/content and is split into:

  • content#255: implement the authored-exit content validator and required CI check.
  • content#256: repair the Asteria stair and every equivalent static finding the validator reveals.

No source from this PR will be merged. The branch, worktree, and delivery evidence are preserved for historical reference.

@zoeyrose zoeyrose closed this Sep 1, 2026
@github-project-automation github-project-automation Bot moved this from Review to Done in Atrinik work Sep 1, 2026
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): reject non-enterable exit destinations

1 participant