Skip to content

Changelog

  • add versioned SQL migration catalog and history validation (db87b4a)
  • apply PostgreSQL migrations with isolated DbUp runner (6162c53)
  • persistence: simplify database config and entity registration (a7e9971)
  • ship and document versioned database migration workflow (bd72582)
  • validate migrations at startup and generate SQL drafts (c22019e)
  • generate third-party notices for migration runner (74530a2)
  • preserve migration atomicity and align CLI defaults (c30636f)
  • persistence: replace binary storage with async PostgreSQL facades
  • api: provision certificates and simplify peer permissions (45ebc45)
  • api: provision missing certificates on explicit opt-in (f913862)
  • api: support wildcard operation permissions for trusted peers (9366017)
  • docker: add login and two-realm Compose example (e2708cb)
  • docker: add login and two-realm Compose example (4011906)
  • persistence: add PostgreSQL schema foundation (cfc37a2)
  • persistence: replace binary storage with async PostgreSQL facades (412e3b5)
  • server: integrate PostgreSQL persistence lifecycle and schema commands (ac12088)
  • api: allow concurrent public certificate replacement on Windows (a2c91b5)
  • docker: preserve PostgreSQL secret values (3aa5493)
  • persistence: drain admitted captures before releasing save coordination (a17ceb8)
  • persistence: isolate FreeSql entity mappings (9b8a04d)
  • persistence: reject silently unmapped writable properties (b6c47c7)
  • server: retain all terminal capture failures during shutdown (5300502)
  • api: add opt-in server API configuration (ce4423c)
  • api: host the configured internal API server (1bab556)
  • api: start configured API listener with the server lifecycle (6672fa6)
  • docs: add Starlight documentation and release publication (14987bd)
  • docs: add the Starlight documentation website (3b903d5)
  • docs: import existing guides and library readmes (b44dceb)
  • network: restore standalone span serialization utilities (86bc49f)
  • network: restore standalone span serialization utilities (14221a7)
  • samples: add a plugin that registers a Lua module, a command and a metric provider (34b3e24)
  • scripts: install the released server with one command on Linux (a271384)
  • api: reject unusable server certificates before startup (dd9b648)
  • docs: preserve imported anchors and responsive images (9f4f7cd)
  • docs: serve documentation from the configured custom domain (a519cb5)
  • samples: reject undefined tones and keep host assemblies out of the bundle (20952f9)
  • samples: report the metric under its local name so the diagnostics service accepts it (b248c25)
  • scripts: keep the previous installation when the swap fails (45491fd)
  • scripts: tell the truth when an install fails after the files are in place (ee6cded)
  • packets: NetworkSession accepts and exposes INetworkConnection; ISessionService.GetOrCreate now accepts INetworkConnection. Recompile Server.Core consumers and plugins.
  • api: add a script that generates the private CA and leaf certificates (6ac4ccf)
  • api: add authenticated internal request/reply channels (f5de84f)
  • api: add versioned MessagePack framing (85b51ab)
  • api: authenticate peers with mutual TLS and local policies (155caed)
  • api: bound pending calls and outgoing work (0079e14)
  • api: dispatch authorized requests with bounded execution (54b4e40)
  • api: expose authenticated clients and servers with owned lifecycle (79ec6a2)
  • api: merge internal request/reply channel into develop (f5de84f)
  • api: register typed operations and freeze handler metadata (d3d2512)
  • diagnostics: add AddMetricProvider container extension (97a9498)
  • network: own bounded asynchronous connection setup (96583da)
  • network: support configured outbound stream preparation (ddca33f)
  • network: track role-local connections and owned cleanup (95e9824)
  • persistence: add the AddPersistenceEntity registration (f5a87e2)
  • persistence: let an entity declare its own collection (62fe55d)
  • scripting: add module attributes, engine contracts and registration (3c220c0)
  • scripting: add the engine, log and timer modules (1254614)
  • scripting: add the Lua script engine service (00b07e8)
  • scripting: add the Moongate.Scripting project on LuaCSharp 0.5.6 (1e5a126)
  • scripting: bind module functions to Lua by attribute (1c10d51)
  • scripting: cap the strings string.rep may build (ec34afc)
  • scripting: expose module constants and enums to Lua (f58328f)
  • scripting: generate editor definitions from the bound modules (6c47fa4)
  • scripting: guard the loop thread and drive LuaCSharp synchronously (97f4c88)
  • scripting: load script files and serve require from the scripts directory (79ff657)
  • scripting: make the module binder public and document the package (84fa4b8)
  • scripting: schedule coroutines on the timer wheel under an instruction budget (d43ab38)
  • server: add a script metrics console command (b05035d)
  • server: add flags-based server mode configuration (28e9af2)
  • server: add flags-based server mode configuration (#4) (2302fb8)
  • server: host the Lua script engine (56c4180)
  • server: register typed API handlers through the container (6d72508)
  • api: report certificate script failures and clean up partial output (9e3eb84)
  • api: retain admission until connection work completes (d700e4c)
  • network: preserve the actual bound endpoint during drain (ee503f1)
  • packets: distinguish requested closure from send failures (0fd415b)
  • scripting: annotate enum parameters as enum or string in definitions.lua (789e6a4)
  • scripting: annotate varargs as … and make definitions.lua robust to any constant (271d6a4)
  • scripting: cancel script timers on shutdown and publish errors from the loop (80b3ad5)
  • scripting: close the arithmetic bypass in the string cap and match Lua’s argument errors (960be94)
  • scripting: close the sandbox (379a2d4)
  • scripting: document the built-in modules and let a running coroutine own what it schedules (817d28e)
  • scripting: follow links when containing script paths (7c283fd)
  • scripting: give the logged print standard tostring semantics (860785a)
  • scripting: import Interfaces.Internal in the engine service (a8a65d9)
  • scripting: import Interfaces.Internal in the engine service (22614af)
  • scripting: keep a failing reload or wait off the game loop’s fault path (c0b5b25)
  • scripting: keep every coroutine failure inside the scheduler and scope the budget per unit (51b2fe1)
  • scripting: keep one cancellation source per coroutine so the budget survives wait (e3700f0)
  • scripting: let ValueTask.Result rethrow the original exception itself (1532d94)
  • scripting: make the instruction budget survive an abort and cover pcall (281b162)
  • scripting: name the member when a script constant getter throws (fe83b67)
  • scripting: report out-of-range integers as Lua errors and document the binder (e94cc54)
  • scripting: route Lua print through the server log (77a91ed)
  • scripting: run the engine’s start and stop on the game loop thread (30bb64e)
  • scripting: zero-pad control-character escapes in definitions.lua (fba7b33)
  • server: validate the scripting section with the server config (0607e30)
  • packets: separate connection sends from game sessions (a07e1dc)
  • core: add a packet hex formatter (d02d73d)
  • core: read the assembly codename from metadata (abde51e)
  • diagnostics: add typed snapshots and process metrics (80ae398)
  • diagnostics: collect and publish immutable snapshots (54b8636)
  • diagnostics: expose loop timer and session metrics (981504a)
  • diagnostics: integrate configurable diagnostic service with bootstrap (c4f6b25)
  • print the codename in the startup header, sourced from the Codename (a9da36e)
  • register IUltimaDataService with UltimaDataService at priority -10 and (a9da36e)
  • release: attach a SHA-256 checksum next to each release tarball. (948c746)
  • server: add single-instance startup and the Ultima data service (a9da36e)
  • server: write the log file as compact JSON (06395e3)
  • docker: copy Moongate.Ultima.csproj in the restore layer. The server has (948c746)
  • docker: hold the server root at /data, created and owned by the runtime (6f682e2)
  • docker: let the licence into the build context (01780ff)
  • give UltimaConfig.UltimaPath a default instead of leaving it null. (a9da36e)
  • tests: build the plugin fixtures in the requested configuration (abc6cca)
  • config: load TOML server settings and create defaults (939246b)
  • core: add entity primitives and expand utility coverage (0bb77bd)
  • core: add runtime utilities and shared buffer infrastructure (e3434c2)
  • core: add TOML serialization utilities (63731c3)
  • core: default TOML property names to snake_case (e5ced0c)
  • core: port geometry primitives from legacy Moongate (4256a4d)
  • logging: log service startup and improve console layout (eac6b87)
  • network: add bounded pending frame buffer (544faac)
  • network: add opcode diagnostics and wire session events (035dc28)
  • network: add standalone ping and login packets (0fe330a)
  • network: add supported client features packet (a846be3)
  • network: expose listener endpoints and scaffold network service (7faecf8)
  • network: frame incoming Ultima Online packets (3e0e0fa)
  • network: infer packet direction during registration (fdbb70e)
  • network: port standalone TCP transport from Moonwell (d9e1f9b)
  • network: request listener shutdown when network service stops (f863145)
  • packets: add queued replies and initial packet handlers (349d0da)
  • packets: log registered packet and handler counts at startup (0be9311)
  • packets: register typed handlers and dispatch on the game loop (d51d704)
  • persistence: add durable binary collection storage (f048f77)
  • persistence: add saving all registered live entities (929dac3)
  • persistence: add typed data access and ZLinq queries (103d407)
  • persistence: add verified backup and restore (5823827)
  • persistence: merge binary persistence into develop (13b88b4)
  • persistence: separate world capture from durable writes (6ed72f6)
  • plugins: add lifecycle event subscriptions (5cc00c3)
  • server-core: add account and command enums with session account type (93990da)
  • server-core: add command context and definition metadata (d70ed2d)
  • server-core: add command executor contract and deferred registry (0c2063f)
  • server: add bootstrap lifecycle and circular buffer coverage (d39f1c0)
  • server: add command system service with source and account gates (837e604)
  • server: add console host and Docker setup (0ffc583)
  • server: add console input loop dispatching operator commands (f8a41ec)
  • server: add dedicated game loop with bounded work queue (2ef60c5)
  • server: add echo command and register the command system at startup (45b5715)
  • server: add fluent bootstrap service registration (88faa8c)
  • server: add pinned console prompt service with terminal seam (7c9996d)
  • server: add plugins with versioned dependencies (d5fb2df)
  • server: add service registration and single-file publishing (6313ba0)
  • server: coordinate periodic and final world saves (7431d31)
  • server: enable the interactive console prompt at startup (ef392ba)
  • server: expose event bus service wrapper (54c2d73)
  • server: integrate packet handling with TCP lifecycle (0b8179b)
  • server: integrate persistence lifecycle (c9fe6b4)
  • server: load plugin bundles before service startup (8203099)
  • server: port timer wheel into the game loop (142221c)
  • server: register directory configuration and refresh startup banner (d9b2f97)
  • server: route serilog console output around the prompt row (4b54821)
  • sessions: add separate network and game session models (29b1673)
  • sessions: port session registry and register singleton service (3afd670)
  • ultima: initialize asset library with SkiaSharp (00c185a)
  • ci: let each release asset build fail independently (c05fae0)
  • ci: pin release-please to main and build assets from the tagged commit (06de8f8)
  • ci: use release-please’s include-v-in-tag instead of tag-format (e2015a4)
  • docker: include persistence in cached restore (55ff990)
  • game-loop: describe the batch limit accurately in startup logs (7a84ea3)
  • network: coordinate TCP listener lifecycle and cleanup (4d5d816)
  • network: preserve send failures and drain connection resources (d68e8f3)
  • network: reject admitted sends after logical closure (6d96037)
  • network: reject empty client version frames (7cd11b7)
  • network: reject whitespace versions before game-loop dispatch (876bbd9)
  • persistence: close capture and disposal races (ac90bfa)
  • persistence: preserve collection cleanup after owner shutdown (7dc2cfd)
  • plugins: preserve metadata startup cleanup failures (6adcedd)
  • plugins: publish lifecycle tasks before callback reentry (0fe5847)
  • server: align persistence lifecycle namespaces (05afb42)
  • server: force process termination when shutdown leaves it running (7f811cc)
  • server: harden console prompt logging, input faults and row width (2ec598b)
  • server: reject network startup after shutdown begins (c3e324b)
  • server: reject zero-valued command source and document console authority (7e56727)
  • server: stop the prompt writer retrying a failed console write (fb693c0)
  • sessions: enforce terminal mutation precedence (3251161)
  • network: bound frame buffers and remove redundant receive copies (d839eec)
  • server: drop the forced-termination guard (186f55f)