Skip to content

id: design: Bevy incorporation — ID worlds as Bevy applications (ECS mapping of the entity/triple model) #5781

Open

Description

@dezren39

Summary

Design the incorporation of ID worlds into Bevy: how a world's entity/triple state maps onto Bevy's ECS, how journal events drive a Bevy application, and what it means for a Bevy app to host or join a world — as Bevy's own design line.

Motivation

Bevy currently appears only as a name inside other designs: #788 lists "Bevy or Qt" as candidate frameworks for the reference native shell (a conformance question), and #5686 lists "a game engine integration (Bevy named)" as one of five capability-provider targets (a provider-model question). Neither designs the incorporation itself — the state mapping, the event flow, the authority model. Drew's 2026-11-04 instruction is explicit: each platform thing gets its own design issue rather than riding inside a bundle. A game engine is also the stress case for the whole client story: tick-driven, frame-budgeted, and stateful in ways a terminal never is — if the shell contract and the triple model survive Bevy, they survive anything.

Sketch

  • State mapping: ID entities ↔ Bevy Entity; triples/components ↔ Bevy Components; the mapping's ownership rules (which side is authoritative for what) stated per data class — world state, presentation state, purely local state.
  • Event flow: journal appends and state deltas in; shell-contract input events out. How journal positions map to Bevy schedules/ticks, and what a frame is allowed to not apply yet (interpolation, prediction) without violating the presenter contract.
  • Authority postures: Bevy app as presenter-client; as world host (an embedded server); as both (id: Phase 13 F13.8 multi-server, multi-client topology; client-only mode always supported #790's simultaneity) — and which posture the design blesses first.
  • Determinism: the game loop against the deterministic replay infrastructure (its own design issue) — a recorded world stream replayed through Bevy must land on identical state; the soak/replay oracles are how engine integration bugs get caught.
  • Provider face: what the engine offers as a design(id): client-side capability providers — one provider model for ESP32/MQTT, terminal, Bevy, smartphone, and web #5686 capability provider — render surfaces, audio, input devices — under the same grant model as every other provider.

Open questions

Relations

Parent: epic #2056. Relations: #788 (shell contract + framework decision record — this design consumes it), #5686 (capability providers — Bevy as one provider class, designed there in the abstract, here concretely), #790 (client/server simultaneity), #3447 (crate seams). Filed in the 2026-11-04 gap pass (WS-F) per Drew's order that Bevy gets its own design issue.

Activity

  1. added
    app/idPackage/app: id (pkgs/ or apps/ in this repo)
    on Nov 5, 2026
  2. developing-today commented on Nov 5, 2026

    @developing-today
    Contributor
  3. dezren39 commented on Nov 5, 2026

    @dezren39
    MemberAuthor

    Field survey filed: #5931 (capability-provider research widening, per Drew's 2026-11-04 ruling) covers the current option space relevant to this issue in §4 (game-engine/Bevy) — Bevy 0.20 ecosystem state, bevy_ecs standalone (incl. no_std on ESP32), bevy_mod_scripting (Lua/Rhai; Rune on hold), lightyear/bevy_replicon replication vs journal replication, Fyrox/Godot variants. It is an inventory, not a decision — the section ends with the open questions this design needs to answer.

  4. added
    queue/queuedHas a queued task in the Supabase agent queue
    task/triageQueue packet kind: verify, reproduce, and route this item
    on Nov 5, 2026
  5. developing-today commented on Nov 5, 2026

    @developing-today
    Contributor

    🤖 Agent note · handed off

  6. added
    queue/parkedQueue task is parked (waiting on CI, time, or an event)
    status/parkedDeliberately paused with a recorded resume condition
    work/assignedQueue worker lifecycle state
    and removed
    queue/queuedHas a queued task in the Supabase agent queue
    on Nov 5, 2026
  7. dezren39 commented on Nov 5, 2026

    @dezren39
    MemberAuthor

    agent-note:v1
    task: 10185
    state: handed_off
    lane: code-a (execution lane: opencode)

    Picked up by Lane A shift (attempt 3/6). Revalidated 2026-11-05: issue #5781 is OPEN, no held / user/owned / do-not-merge / do-not-auto-edit labels. Execution lane is opencode — handed off to the opencode claimant (repeat handoff: prior park expired unbound). Parking 1800s for the claimant window.

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

Metadata

Metadata

Assignees

Labels

app/idPackage/app: id (pkgs/ or apps/ in this repo)queue/parkedQueue task is parked (waiting on CI, time, or an event)status/parkedDeliberately paused with a recorded resume conditiontask/triageQueue packet kind: verify, reproduce, and route this itemwork/assignedQueue worker lifecycle state

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions