Commit Graph
146 Commits
Author SHA1 Message Date
ДмитрийandClaude Sonnet 5.5 ffb1df3fce Phase 8 (part 2): live gates, smoke tool, pin at login, same policy on import and update
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-07 11:11:11 +05:00
ДмитрийandClaude Sonnet 5.5 426808527b Phase 8 (part 1): level-cap projection model, capabilities v2, session protocol v2, projected merge
Profile version 2 with a progression block (v1 migrated with no progression), the core's
projection decision (hold) applied to a working copy, per-realm context storage (schema 8),
key-wise merge of build records with the canonical level and xp frozen, session pin in the
v2 messages, mid-session progression change ends the session under the old pin.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-07 10:39:04 +05:00
ДмитрийandClaude Sonnet 5.5 297bd39101 Phase 8: level-cap projection audit
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-07 10:08:12 +05:00
ДмитрийandClaude Sonnet 5.5 35a2d5dea7 feat(portable): Phase 6.1 format v2 with strict v1 migration and job format; Phase 7 capability negotiation and extensions
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-07 06:54:11 +05:00
ДмитрийandClaude Sonnet 5.5 f6006edfaf docs(portable): Phase 6 verification and findings; harness collection-add
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-07 05:54:49 +05:00
ДмитрийandClaude Sonnet 5.5 843eb9b2eb feat(portable): Phase 6 live tests, harness commands, host collection sync
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-06 17:38:04 +05:00
ДмитрийandClaude Sonnet 5.5 b2b2009b0d feat(portable): Phase 6 audit, appearance section, collections channel (WIP: Manager side)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-06 17:29:34 +05:00
ДмитрийandClaude Sonnet 5.5 cfcace8337 portable: Phase 5 - in-place update arms the next session; verification record
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-06 14:35:55 +05:00
ДмитрийandClaude Sonnet 5.5 9870a3814c portable: Phase 5 - live bridge, online importer client, session harness, docs
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-06 14:15:21 +05:00
ДмитрийandClaude Sonnet 5.5 d64bb882fa portable: Phase 5 - session protocol, owner/host store split, host driver, simulated-realm matrix
OwnerService/HostService exchange only SessionOffer, PortableSessionStarted, PortableCheckpoint and
OwnerAck. Every checkpoint is merge3(C0, B0, current B1); sequences are monotonic and idempotent;
stale/superseded/malformed/oversized messages change nothing. Design and login-path audit in
docs/PORTABLE_SESSIONS.md.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-06 13:32:53 +05:00
ДмитрийandClaude Sonnet 5.5 ca46c1809b docs(portable): record the Phase 4 manual real-client smoke test and its findings
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-06 12:43:43 +05:00
ДмитрийandClaude Sonnet 5.5 7f15ffe69f portable: Phase 4 - real-server round trip stages, smoke harness, reconcile docs
Live stages drive real worldservers on both realms (A -> B -> play -> reconcile -> A -> B) with
independent expectations; portable_smoke example for the manual real-client test;
docs/PORTABLE_RECONCILE.md; reset script for the disposable realms.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-06 10:41:23 +05:00
ДмитрийandClaude Sonnet 5.5 9210be98b5 portable: Phase 4 core - three-way merge, persistent baselines/pet mappings, in-place update, session reconcile
merge3(target, base, ours) applies only the base->ours delta; session reconcile is
(C0, B0, B1, lenient), in-place update is (realm now, synced snapshot, new canonical, strict).
Item/pet mappings gain presence (present/filtered/realm_local) so realm-filtered state is
told from player deletion. Updates are journaled like imports (marker + alloc row) and
recovered from the realm. Live tests cover filtered vs deleted items, checkpoints, pets,
conflicts, lost answers, atomic rollback and the A->B->A->B round trip without a server.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-06 09:44:31 +05:00
ДмитрийandClaude Sonnet 5.5 e8f99c16b7 feat(portable): offline importer into a stopped realm, with journaled recovery (Phase 3)
Imports a canonical snapshot into a stopped disposable realm through the existing
Db abstraction, in one MySQL transaction: guids allocated inside the transaction
from the realm's own tables and every reference remapped, orphan cleanup, name
and start-position handling, self-asserting result, and a marker row. Untrusted
strings and blobs reach SQL only as hex literals from a typed encoder.

Manager mappings are recorded only after the realm commit, in one local
transaction; an import journal (schema 3) plus the marker recover a crash
between the two commits. Preflight refuses wrong ruleset, running realm,
missing account/content and more before anything is written.

Stock character_talent rows are never written: a real worldserver asserts on a
non-talent row. Item identity no longer includes the crafter (v2).

Production import remains the designed in-core PortableImportService
(docs/PORTABLE_IMPORT_SERVICE.md); nothing of it is implemented.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-06 09:02:21 +05:00
ДмитрийandClaude Sonnet 5.5 d971fd5e28 fix(portable): carry only the minimal build/spec/starter/reset settings (Phase 2.1)
character_settings policy v2: the carry list is ten strict key patterns
(core.ascension_active_spec, _starter, _starter_live, _reset_credits,
_slot.active, _slot.#, _slot.#.build.#, _slot.#.bar.#, _build.#, _bar.#),
matched exactly, not by prefix. Spell charges, Destiny Weaver, dynamic XP,
Runemaster, prestige/glory, tutorial flags, Wildcard state and anything unknown
are quarantined in the opaque extension and never applied. The importer's own
marker source (coa.portable.) is dropped.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-06 08:36:34 +05:00
ДмитрийandClaude Sonnet 5.5 c590b82d27 feat(portable): read-only export of offline characters from a realm (Phase 2)
Reads one offline character out of a realm's characters database through the
existing Db abstraction: fixed SQL with the local guid as the only (numeric)
input, one consistent READ ONLY snapshot per character, hex-encoded text.
Maps the approved minimal v1 scope to the portable model; refuses online,
deleted, bot, active challenge/game mode/Manastorm and unknown-table cases.
Adds the 163-table registry, the settings policy, "Make Portable" in one store
transaction, and item mapping lifecycle with content identity (schema 2) so a
recycled local item guid never inherits an old portable item.

Recorded answers of a real MySQL drive the unit tests; live tests re-verify
them, read-only enforcement and snapshot consistency on a disposable server.
No realm database is written and nothing changes for existing installs.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-06 08:11:54 +05:00
ДмитрийandClaude Sonnet 5.5 adefa84885 docs: record approved Portable Characters decisions
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-06 07:13:25 +05:00
ДмитрийandClaude Sonnet 5.5 efd4b8bbf2 feat(portable): local canonical storage for portable characters (Phase 1)
Adds crates/coa-core/src/portable: UUIDv7 identities, namespaced content ids,
the v1 portable character model (validated, bounded, canonical), compressed
hashed snapshots, a union-only collection set, and a SQLite (WAL) store with
revisions, stale-revision rejection, rollback-as-new-revision, configurable
history, realm/item mappings and forward-only migrations.

No realm database, network or UI is touched; no existing behaviour changes.
45 new tests. Format documented in docs/PORTABLE_FORMAT.md.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-06 07:13:14 +05:00
ДмитрийandClaude Sonnet 5.5 9e84763f14 docs: Portable Characters Phase 0 audit and Phase 1 plan
Audit of the real characters schema (163 tables), save/load paths, CoA-specific
state (character_settings, wardrobe/vanity collections), id domains to remap,
running-realm hazards, Manager integration points, risks and open decisions.
Includes the exact proposed plan for Phase 1 (local canonical storage).
No production code.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-06 06:40:50 +05:00
ДмитрийandClaude Sonnet 5.5 0527e045ba docs: VPS infrastructure baseline (Phase -1)
Record how the OVHcloud VPS used for the future registry/relay was set up:
hardening, firewall policy, Docker layout, health check, recovery path.
No IP addresses, keys or credentials are stored.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-06 06:40:50 +05:00
Corfirean cd3a963f70 Merge pull request #21 from Corfirean/codex/fix-update-startup
Release Manager 0.6.4: fix server startup and resume failed validation
2026-10-05 14:07:36 +05:00
Дмитрий 6c771fae20 feat: allow launching installed server and client without updates v0.6.4 2026-10-05 14:01:37 +05:00
Дмитрий cfe0889a4f Fix embedded launcher startup and retry applied updates safely 2026-10-05 13:53:32 +05:00
Corfirean 07ec22798f Merge pull request #19 from Corfirean/codex/release-all-pending
Release client-only connections and scaling controls in Manager 0.6.3
v0.6.3
2026-10-05 03:26:16 +05:00
Дмитрий 5d865fcaea Prepare Manager 0.6.3 with remote clients and scaling settings 2026-10-05 03:15:05 +05:00
Дмитрий a67d51804b Expose partial LFG and open-world leech module settings 2026-10-05 03:09:02 +05:00
Дмитрий 7c096a4844 Merge remote-tracking branch 'origin/codex/client-only-mode' into codex/release-all-pending 2026-10-05 03:09:02 +05:00
Corfirean b90b377fc3 Merge pull request #17 from Corfirean/codex/reliable-server-updates
Recover failed updates and validate release database schemas
v0.6.2
2026-10-05 02:38:57 +05:00
Дмитрий a02130f587 Prepare Manager 0.6.2 release 2026-10-05 02:31:56 +05:00
Дмитрий f4e36f21eb Merge remote-tracking branch 'origin/master' into codex/reliable-server-updates 2026-10-05 02:31:00 +05:00
Дмитрий 65c9945626 Validate release databases and require full schema contracts 2026-10-05 01:56:36 +05:00
Corfirean f13398bbd7 Merge pull request #13 from lostmind84/feat/linux-b2-container-db
feat: database access through the container for Docker installations
2026-10-05 01:45:07 +05:00
Дмитрий f05f94ba01 Document standalone client connections 2026-10-05 01:24:01 +05:00
Дмитрий c39a7a0ac7 Let players download and update clients without a local server 2026-10-05 01:23:31 +05:00
Дмитрий e8367354ef Record update stages and migration results for support diagnosis 2026-10-05 00:14:15 +05:00
Дмитрий 461fa035d0 Validate race-class starts and protect existing character visibility 2026-10-04 23:58:51 +05:00
Дмитрий 3edc600f97 Recover database and file updates together after failures 2026-10-04 23:55:15 +05:00
Дмитрий c3d87e1ff2 Keep bot settings release note within changelog limit 2026-10-04 20:40:54 +05:00
Дмитрий d2496603e7 Configure both bot systems exclusively in the shared Bots tab 2026-10-04 20:40:36 +05:00
Дмитрий 2eea0e117c Add translated module settings and exclusive SQUID Playerbots controls 2026-10-04 20:26:39 +05:00
Дмитрий 2e3fb24e1a Run release socket tests without parallel timing contention v0.6.1 2026-10-04 15:43:50 +05:00
Дмитрий 146b1c50b9 Release Manager 0.6.1 and preserve Docker lifecycle compatibility 2026-10-04 15:43:29 +05:00
Дмитрий c02c635463 Fix settings input, client launch, server repair and simultaneous realms 2026-10-04 15:40:06 +05:00
Fabien F. 58b5ddeb07 feat: database access through the container for Docker installations
Db runs mysql, mysqldump and mysqladmin inside the database container with
docker exec -i when the server folder is a Docker installation, connecting over
TCP on the container's loopback like the repack's commands do on the host. The
password still travels only in MYSQL_PWD. Every caller keeps using Db unchanged
(accounts, backups, population, migrations, the RA service account), and the
host needs no MySQL client. The repack path is untouched: one line before its
tools are looked up. A stopped container or a missing one is reported as a
database that is not running.

Tested: 4 new tests (commands built for the container, no password on a command
line, repack unchanged, error classification), and a real run against the
Docker folder: SQL queries, a quick backup (156 characters tables), restore with
the previous database kept, a damaged backup refused, the RA service account
created by SQL, the world server console reached through its published
loopback port, an account created through it and listed by the Manager.
2026-10-03 21:21:26 +02:00
Дмитрий 162bfd1e04 Release Manager 0.6.0 with Chinese localization, realm sync and Linux preview v0.6.0 2026-10-03 22:50:01 +05:00
Дмитрий 85963b0bf0 Merge branch 'review/pr11' into release/0.6.0 2026-10-03 22:45:53 +05:00
Дмитрий 79d293e120 Merge branch 'review/pr5' into release/0.6.0
# Conflicts:
#	src-tauri/src/lib.rs
2026-10-03 22:45:53 +05:00
Дмитрий 46ba3fa3dc Merge branch 'review/pr9' into release/0.6.0 2026-10-03 22:45:37 +05:00
Дмитрий beb3b03010 Merge branch 'review/pr4' into release/0.6.0 2026-10-03 22:45:37 +05:00
Fabien F. 3da9628b79 feat: Docker runtime backend for Linux (start, stop, status)
A server folder with Settings/docker.json is a Docker installation: MySQL, the
auth server and the world server run in containers controlled through the
docker command line. Every other folder is a repack and goes through the
unchanged Windows code. driver::run, process::observe and layout::scan check
for the marker first and hand over to coa_core::docker.

- start: network, runtime image (libraries only, binaries are mounted from
  Core/), database healthy, world listening, then auth. A container that stops
  while starting reports the cause found in its log (DatabaseNotRunning,
  PortInUse, ...). New error code DockerUnavailable (docker missing, stopped,
  or not usable by this user).
- stop: world (180 s to save), auth, database; exit code 0 observed.
- observe: container state, health and port readiness mapped to the existing
  ServiceState. Readiness is a connection that stays open, because Docker's
  proxy accepts connections before the server inside listens.
- passwords go by environment, never on a command line; the remote console is
  published on 127.0.0.1 only; the server's own database updater is turned off
  (it needs a mysql client the image does not have and stops the server).

Tested: 18 new tests with an in-memory Docker, and a real run through
examples/drive: database, world (ready in 11 s) and auth started from a
package-shaped folder, stopped with exit code 0 and restarted.
Not included: installation, database setup, backups and SQL through the
container, updates, firewall/exposure, the client under Wine/Proton.
2026-10-03 12:44:20 +02:00