Skip to content

feat(room)!: replicate nested entity state - #290

Merged
nick2781 merged 14 commits into
mainfrom
feat/nested-room-sync
Nov 5, 2026
Merged

nick2781 merged 14 commits into
mainfrom
feat/nested-room-sync

Conversation

@nick2781

@nick2781 nick2781 commented Nov 5, 2026 •

Copy link
Copy Markdown
Member

Replaces the guest-room scalar-only messages with the framework's generic owning Entity publications. The server now captures real inventory rows and equipment child Entities; clients receive typed field patches, row lifetime changes, container replacements and child patches through one current Protobuf contract.

Adds potion pickup/consumption, weapon switching and power upgrades while preserving movement, HP/MP, explicit projections, bounded queues and reconnect recovery. JSON schema, shared vectors, native regressions and bilingual design/usage documents are updated together.

Depends on #289 and is held out of the merge queue until that predecessor merges. The branch includes its actual protected candidate and the deterministic shutdown-boundary regression repair.

Declares the room's Kernel, Map and Net providers so its Entity state and callbacks retire first. For ELF builds using static Protobuf, isolates the plugin's archive symbols and inline reflection entry points from the host's private descriptor pool; shared Protobuf, macOS and Windows linking remain unchanged.

Validation:

  • Room codec: 8 cases / 518 assertions; actual launcher/plugin native regression passed, including row deletion/reuse and child identity/patch checks.
  • Matching client: 22 portable check groups, schema/generator parity and Godot build passed.
  • Real server + two C# peers + two visible Godot clients passed movement, HP/MP, every inventory/equipment phase and fresh-identity reconnect. Server stopped on SIGINT/exit 0 with no forced termination.
  • Provider-dependency regression failed before the declaration and passes with it; the complete local codec/server/resource-cleanup target passes after the repair. Static/shared imported-library selection was checked in six CMake configurations. Hosted Linux verification of ELF isolation remains required.
  • Nimbus and clang-format 18 checks passed. Local Mac-only validation does not establish deployment or capacity.

BREAKING CHANGE: rebuild the room server and Godot client together. The former scalar-only room messages are removed and only handshake value 2 is accepted; there is no legacy protocol branch. Existing reusable C++ scalar APIs remain available.

Use real Kernel inventory rows and equipment child entities with the generic owning publication codec. Keep client state authoritative through atomic baselines and deltas, with fixed projections and reconnect recovery.

BREAKING CHANGE: the guest-room wire contract replaces scalar-only state with generic nested publications and explicit instance bindings. Rebuild the room server and Godot client together; only handshake value 2 is accepted.
@nick2781
nick2781 changed the base branch from feat/nested-entity-codec to main November 5, 2026 02:28
nick2781 and others added 2 commits November 5, 2026 02:38
Adds a reusable Protobuf boundary for owning nested Entity baselines and
deltas. Applications supply a fixed trusted projection; the codec
preserves typed values, row incarnations and container replacement/patch
semantics while rejecting duplicate indexed records and enforcing
separate wire, state and patch limits. Existing scalar APIs and the
current room contract remain unchanged in this PR.

Includes public header mappings, consumer wiring and bilingual API
documentation. The room/Godot integration follows separately.

Validation:
- Permanent check-nested-wire: GUID64 11 cases / 114 assertions; GUID32
11 cases / 115 assertions.
- clang-format 18 full tracked-file check and git diff checks passed.
- Nimbus build/link checks passed; both new protocol pages verified in
HTML, canonical Markdown and AI output.

These checks cover the codec and its bounds, not client transport,
deployment capacity or production qualification.
@nick2781
nick2781 marked this pull request as ready for review November 5, 2026 02:42
nick2781 and others added 8 commits November 5, 2026 11:03
Adds a reusable Protobuf boundary for owning nested Entity baselines and
deltas. Applications supply a fixed trusted projection; the codec
preserves typed values, row incarnations and container replacement/patch
semantics while rejecting duplicate indexed records and enforcing
separate wire, state and patch limits. Existing scalar APIs and the
current room contract remain unchanged in this PR.

Preserves the caller's Win32 GetMessage macro around Protobuf
declarations and codec implementation. The collision was reproduced
locally before the fix; hosted Windows acceptance remains required.

Includes public header mappings, consumer wiring and bilingual API
documentation. The room/Godot integration follows separately.

Validation:
- Permanent check-nested-wire: GUID64 13 cases / 122 assertions; GUID32
13 cases / 123 assertions, including both Win32 GetMessage macro/include
orders.
- clang-format 18 full tracked-file check and git diff checks passed.
- Nimbus build/link checks passed; both new protocol pages verified in
HTML, canonical Markdown and AI output.

These checks cover the codec and its bounds, not client transport,
deployment capacity or production qualification.
@nick2781
nick2781 added this pull request to the merge queue Nov 5, 2026
Merged via the queue into main with commit d2cbcff Nov 5, 2026
6 checks passed
@nick2781
nick2781 deleted the feat/nested-room-sync branch November 5, 2026 05:58
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