Skip to content

Alpha v2 · Matchmaking and bot acceptance

Live on 14 September 2026: Play Alpha v2. The original-map 5v5 extension, adaptive bots and death animations from gameplay commit a272d8ae0d39fe2ce77f067471346a12a44138b6 are deployed on the existing Sydney host. Alpha v1 remains available with its persistent campaign.

Live release checks

  • An isolated Linux candidate on the actual host passed public/private matchmaking, the 30-second countdown, code joining, room isolation, late entry into an active bot seat and same-seat reconnect. Two rooms ran with four connected test players and sixteen bots; the short snapshot p99 was 95.0 ms.
  • The same authenticated journey passed through the public HTTPS/WSS endpoint after deployment, with a short snapshot p99 of 95.8 ms. These samples do not establish sustained host capacity.
  • Before cutover, two synthetic campaign characters gathered, crafted, formed a private party and observed replicated combat. After the game container was replaced, their existing sessions, exact inventory and party membership survived; fresh password sign-in and reconnect also passed.
  • A consistent SQLite backup passed integrity checks immediately before cutover. Its encrypted transfer to the Mac retained the same SHA-256. Across the cutover, all 10 accounts, 32 character records, 21 sessions, 801 transaction receipts, the party and migration metadata matched exactly. All six holdings retained ownership, stock and capture history; victories and unlocked frontier also matched.
  • The public entry page, client bundle and Alpha v2 guide matched the built files byte for byte. Chrome entered a live Blue bot seat at Reedwatch, rendered the original world and equipment, and displayed the Red home at the Sunken Bell with four neutral frontiers. War-map and supply-pack crafting guidance opened correctly. Leaving play returned the seat to bot control.
  • Deployment access from the approved RFM connection is enabled in both firewalls and verified with the existing SSH key. It remains enabled until Alex requests removal. The previous runtime image and private campaign backups are retained for recovery.

Automated and visible checks

  • 72 tests passed: original campaign and capture/work transactions, player combat and immunity, ten-seat limits, room isolation, active-game preference, private code validation, expiry, capacity errors, reconnect and rematches, account connections and hosting protections.
  • Behaviour checks reproduce close-range archer pressure (cancel draw → sword → bow after gaining space), two supply workers with three objective covers, and team searches after a capture reports unseen defenders.
  • Navigation startup now marks only cells near obstacles and shares immutable occupancy across identical worlds. Every grid cell was compared against the original collision test for both v1 and v2; results matched exactly. Individual room routes and actors remain separate.
  • Type checking and strict wiki/client builds passed. Existing large rendering-chunk and runtime base-argument build warnings remain.
  • The original map, red/blue surcoats and ground markings, team HUD, private waiting screen and countdown were inspected in the browser. Another browser entered that code after the round began and took a Red bot seat. Closing the QA browsers restored bot control.
  • Four authenticated socket clients exercised public waiting, a separate private room, code joining, public/private message isolation, late entry into the active public match and same-seat reconnect. Two rooms ran together with four humans and sixteen bots. The short localhost snapshot p99 was 74.4 ms; this is not a measurement of the live host.

The Linux AMD64 runtime also passed the authenticated two-room socket journey in an isolated local container with a one-CPU quota, a 650 MiB limit and a 256 MiB JavaScript heap. Its short snapshot p99 was 190.1 ms under local architecture emulation. This verifies the packaged flow; it does not certify the live host’s latency or sustained capacity.

Death animation checks

The 14 September client update replaces the rigid enemy tip-over and standing dead-player pose with an articulated collapse. Players, bots and humanoid enemies buckle and settle; wolves fall sideways. Names, health bars and team rings disappear while the body remains briefly and fades. Respawns restore the living model and materials without interpolating the corpse across the map. The first-person view lowers on death and resets on respawn; the overlay leaves the scene visible.

Nineteen death, character, wolf and weapon-attachment checks passed, including interrupted weapon poses, repeated deaths, corpse disposal, material restoration and respawn teleports. The original character assets were inspected in a local browser at collapse, settled, fade and restored states. The exact client bundle containing these changes is verified on the live host; the staged animation inspection was local.

Complete original-world simulations

The current bot behaviour completed 16 rounds: 6 Blue wins and 10 Red wins. Every round had real gathering/crafting by both teams, captures by both teams and PvP kills. Some rounds ended by taking the enemy home base, others by territory points. No capture materials, damage bonuses or bypassed work challenges were granted.

Seed Ends swapped Input profiles Winner Blue / Red points Captures Gather / craft PvP kills
1 No 0.75 / 0.75 Red 577 / 900 3 40 / 19 13
1 Yes 0.75 / 0.75 Red 549 / 900 9 52 / 27 7
2 No 0.75 / 0.75 Red 582 / 900 3 39 / 16 7
2 Yes 0.75 / 0.75 Red 555 / 900 7 43 / 24 8
3 No 0.75 / 0.75 Blue 900 / 570 4 33 / 16 3
3 Yes 0.75 / 0.75 Blue 900 / 701 4 51 / 17 6
4 No 0.75 / 0.75 Blue 900 / 410 6 46 / 21 10
4 Yes 0.75 / 0.75 Blue 594 / 482 6 45 / 20 6
9 No 0.9 / 0.35 Blue 900 / 191 6 52 / 22 7
9 No 0.35 / 0.9 Red 453 / 653 6 34 / 19 4
1 No 3 proxy humans vs 1 proxy human Red 660 / 900 4 30 / 20 19
2 No 3 proxy humans vs 1 proxy human Red 674 / 900 4 30 / 16 6
3 No 3 proxy humans vs 1 proxy human Blue 900 / 479 4 40 / 17 8
4 No 3 proxy humans vs 1 proxy human Red 666 / 900 9 48 / 27 13
77 No 0.75 / 0.75 Red 669 / 900 3 34 / 16 8
77 No 0.75 / 0.75 Red 669 / 900 3 34 / 16 8

The stronger input profile won both direction checks. In the four mixed-control samples, the one-proxy-human/four-bot Red team won two and the three-proxy-human/two-bot Blue team won two. Seed 77 replayed the same winner, time, score, work totals and kills. Scripted input proxies are not real human playtest subjects; these outcomes demonstrate possibility and variable bot play, not calibrated competitive balance.

Earlier bots could stall when defenders remained behind scenery. Team search patrols resolved the reproduced mixed-control seed 3 stall; regression checks now cover that behaviour. Supply workers reserve nodes, use separate approach spots and steer apart. They maintain their own capture supplies even when human teammates hold unused packs.

Rounds lasted 10.5–15.5 simulated minutes. Largest per-round p99 tick: 2.96 ms; largest individual tick: 26.52 ms on the local headless runtime.

Remaining acceptance

The initial configuration permits two rooms on the existing host, with five seats per team. Rooms pause when empty and expire (public: two minutes; private: ten minutes). Codes reset on a host restart. No extra paid hosts are provisioned.

The live cutover and short hosted room checks passed. Real three-versus-one human sessions, physical Xbox-controller acceptance and sustained hosted combat remain open. V1 uses its existing persistent database; v2 room databases and temporary characters are separate.

Reproduce with npm run test:clash-balance -- 4, npm run test:clash, node tools/clash-network-check.mjs http://127.0.0.1:8199, and npm run simulate:clash -- 3 1680.

Play guide · M6 scope

PVP art, perimeter and mob release · 14 September 2026

The production image at the verified cutover is cf9ead4dee28d1e2fef0a084c6bed5231151000e. This includes the goblin rebuild, PVP perimeter, paired camp budgets and the earlier locally tested PVP town, bow, bot and mob-animation work. Both source commits, including the final horizon follow-up d7cac3acce67ea94b16b5ad16c70504a017e1715, are verified in the private GitHub repository.

  • 101 regression tests, all character-asset validation, TypeScript checks and the same-origin wiki/client build passed. Four final-map simulations ended through town capture, including both team colours and a 3-versus-1 input-proxy roster. See the town verification for seeds and limits.
  • The packaged Linux AMD64 candidate passed public/private isolation, 15-second waiting room, bot-seat takeover, reconnect and two simultaneous rooms. Its short snapshot p99 was 122.2 ms; this is not a capacity certification.
  • Cutover verified zero connected players and retained the previous image. The consistent pre-release snapshot passed SQLite integrity checks. Its SHA-256 was b63e849603764d73abe13bda692890a9e094d0bb0620771d30f90b9bb96d1f64; the private Mac copy matched and separately passed integrity checks. Snapshot data is excluded from Git.
  • All 14 pre-existing accounts, 32 character records, 803 receipts, party records and campaign ownership/progress matched across the cutover. One clearly named release-QA account was subsequently created for the visible public-domain journey; no existing account was changed.
  • The public PVE, PVP, map and wiki routes returned successfully. Main/world bundles and sampled goblin GLBs matched the locally built bytes. The real browser joined Red in a private round and Blue through public matchmaking, rendered both towns, displayed the five neutral frontiers and tower objectives, and opened the map. No warning/error console entries were captured. The QA account was signed out afterward.
  • The follow-up lowers distant trees and blends foothills into regional haze. Its 17 town/navigation checks and repeated seed-9 match pass, as do typecheck and build. Deployment of that refinement is pending restoration of SSH access from the changed connection address; the already deployed main update remains healthy. No firewall rule or credential was changed during this release.

The initial stopped-server backup attempt used a read-only volume mount that prevented SQLite's normal sidecar handling. It failed safely and restarted the previous game. The corrected backup path used SQLite's read-only backup connection with a writable volume while the game writer was stopped; integrity and record comparisons then passed before cutover.

14 September: Red road, round training and bot melee commitment

  • Replaced the old diagonal Sunken Bell road with a continuous gate-to-Sluice boardwalk. Cleared collision footprints from the gate corridor; turned the wheel, operator pose and bot approach toward Red. PVE geometry stays unchanged. Eye-height local renderer views checked the courtyard, gate, bend and wheel.
  • Added disposable seat-owned training for all four weapons: ranks 1–6, capped at +15% damage and 20% shorter class-ability cooldowns. Actual damage, useful blocks, successful work and first captures earn XP; overkill/friendly fire/repeated capture rewards do not. Support and burst-combat earning limits and cross-training keep multiple roles useful. Same-seat reconnect/bot takeover retains training; room rematch resets only that room. No account or campaign skill writes.
  • Fixed the mace orbit gap: desired stopping distance is now inside actual attack reach, and melee bots stop strafing during attacks. Readiness, stamina, distance and group size select abilities; basic strikes fill cooldown gaps. Three contact-distance regressions require repeated real hits and class-ability hits through normal movement/combat inputs.
  • Keyboard interaction is E, class abilities Q/F/R, fullscreen Shift+F. Controller mappings remain X and Y/B/LB. Prompts, generated wiki and server interaction guidance agree.
  • Full suite: 261/261 passed, plus the added fullscreen shortcut regression (focused suite 15/15) and extended room-reset checks (8/8). Typecheck and same-origin build passed. Local socket journey passed public/private isolation, 15-second warmup, active bot takeover and reconnect; snapshot p99 74 ms with two rooms.
  • Local real-client Red private round checked the training HUD, team details, E prompts and Q/F/R labels. Browser automation did not establish actual OS fullscreen activation; shortcut gating is covered by input tests.
  • Final balance sample: 10 completed rounds; Blue 6, Red 4. Scenarios include mirrored starting sides, unequal bot skill, four 3-vs-1 input-proxy configurations and a repeated deterministic seed. All require both teams to capture, gather, craft and land PVP damage. Input proxies use bot-driven ordinary commands, not real humans; these results are a regression sample, not a statistical fairness claim. An earlier 12-round intermediate sample also completed.
  • Local save backed up with SQLite backup API and integrity check before restarting the previously stopped 8198 server. SHA-256 9e45728f40d94768ddbe94c5413e366e9921bb71a249a5e3718373fefce852c6; private backup remains outside the repository. No live save mutation. Live SSH still times out; deployment remains pending the previously requested RFM access update.

PVP HUD simplification

The follow-up HUD revision replaces the permanent territory/town list with a 45-pixel-high match strip, combines objective direction with the single next-action panel, integrates training above a compact vector-icon hotbar, and fades old chat during play while preserving history on Enter. Town danger/finished-round alerts and contextual interaction prompts remain. Detailed team training and private codes stay in the map menu. PVE layouts are unchanged.

Verified in a real local Red private round with the production client build. At a 760×600 viewport, the match strip, objective, loadout, class meter, vitals and help stayed within the viewport with no panel overlap; normal viewport restored afterward. Keyboard/controller and frontier-guidance checks passed, as did typecheck and the same-origin build. The local 8198 server is running with the existing save; source commits are backed up separately from deployment.

Red entrance follow-up: full road width and visual joins

Player feedback exposed a gap in the earlier road check: it checked the centre line, while overlapping boardwalk prefabs left posts at joins and collider-free aqueduct pillars visibly cut through the approach. The replacement uses one rounded route for terrain, scenery clearance and a fitted six-metre deck. Old crossing paving is removed; the complete aqueduct is set beside the route, with authoritative PVP-only pillar collision. PVE map data and collision behaviour are preserved.

  • 76 route, town, progression, clash, Reach and environment regressions pass. New checks cover seven lanes across the full deck, collision displacement, every pair of road quads for overlap, and ordinary movement along the centre and both edges in both directions.
  • The actual world renderer was inspected in a disposable local route fixture: before/after at the affected pillars, an overhead view, the town gate, and close views of the plank joins. Both approximately 108-metre edge walks completed using shared player movement. This fixture does not simulate a connected combat session.
  • The deck and nailheads use two batched draw calls. The same approach view measured 205 scene draws after versus 203 before; this is a local renderer sample, not an FPS or hosting capacity claim.
  • Full 5v5 bot simulations with seeds 77 and 81 both completed by town capture: Blue at 655.3 seconds and Red at 1201.9 seconds. Both teams captured, gathered, crafted and fought. These are navigation regressions, not a new competitive-balance claim.
  • TypeScript checks and the same-origin wiki/client production build pass. The browser fixture reported no console warnings or errors. This verification does not establish a live deployment.

Sign-in build default and two-second match start

The subsequent local sign-in failure exposed a build configuration error: a plain production build defaulted to backend port 8090 while the game was served on 8198. The previous restart's health and asset checks did not verify this authentication routing. Packaged clients now default to the page's origin for authentication, WebSockets and map data. Vite development retains port 8090, and explicit VITE_GAME_SERVER overrides still work.

Public and private PVP warmups now last two seconds. Lobby instructions use the shared duration instead of a separate hard-coded value. Existing matches still accept immediate bot-seat takeover.

  • 43 origin, login connection, room, clash and hosting checks pass, including both sides of the two-second transition. TypeScript and the wiki/client build pass without setting VITE_GAME_SERVER.
  • An isolated local network test passed authenticated joining, the two-second start, private codes, public/private isolation, active bot-seat takeover, reconnect and two simultaneous rooms. Its short snapshot p99 was 79.4 ms; this is not a capacity measurement.
  • The tested build was installed on 8198 and the server restarted with its existing save. Chrome's automated direct session probe was blocked by the browser; the ordinary player journey was subsequently observed in native Chrome running a PVP match, with the server confirming one human and nine bots. No browser protection was changed.
  • The pre-restart SQLite backup passed integrity checks and remains outside Git. PVE gameplay and persisted character/campaign data are preserved. These are local results, not a live deployment.

Blackwater waterworks detail — 15 September 2026, local verification

Blackwater now has a timber-framed mill with layered slate tiles, leaded windows, cut-end timber stacks, a retained millrace, turning bucket wheel, a joined aqueduct trough and animated falling water/foam. Masonry, worn timber and slate have generated close-range surface detail. Capture and resource coordinates remain unchanged, and PVE retains its original map.

The shared PVP plan supplies both the rendered structure locations and server collision footprints. The mill, channel, supporting pier and supplies sit on the same level ground. Old intersecting walls, vegetation and the isolated wheel/bell-tower proxy were removed. Working positions and both approaches remain clear. Grass is excluded from the water, foundations and paved court.

Validation: typecheck and production build; 33 focused Blackwater, road, town and frontier-animation checks; player-height inspection from both approaches, the wheel, mill and aqueduct; shared player movement along six routes in both directions; render ray checks against those routes; water-above-floor and wheel-contact checks. Two complete seeded 5v5 simulations finished: seed 77 Red captured Greyfen at 928.6 seconds, seed 81 Blue captured Sunken Bell at 758.1 seconds. These two runs establish progression through the changed layout, not a statistical balance claim. The added waterworks consists of 21 meshes and 39,020 triangles. Local review only; this entry does not claim a production deployment.

Blackwater follow-up: the tree at (125, -304) on the Mirewatch boardwalk is removed. PVP vegetation now uses the full rotated/scaled footprints of boardwalks, causeways, forest trails and town paving after all scenery is placed. Grass keeps an extra 0.85 m for blade spread and wind sway. Fourteen focused checks cover town clover/flowers, the reported tree, unchanged gather points/PVE source, actual generated grass, both walking directions and the previous Blackwater/Red-road checks. Both player-height approach views were inspected locally.

Blackwater release — 15 September 2026

Published revision ed9e52f784fa48260577a6d0e24bbfa1a5488cd3 includes the locally reviewed waterworks and vegetation fixes above. The runtime build context now explicitly includes authored server content. All 250 packaged application files matched the release manifest on the Linux host. An isolated candidate passed authenticated public/private matchmaking, the two-second warmup, late bot-seat takeover, reconnect and two simultaneous rooms. Its short snapshot p99 was 120.0 ms; this is not a capacity certification.

Cutover confirmed zero players and retained the previous image. The consistent final live-save backup passed integrity checks; the private Mac copy had the same SHA-256, cd181935285e7cb515fda6afca016222c325bc207d459fdc1dfd7facf116d59d. All 17 accounts, 32 characters, 28 sessions, 803 receipts, party and migration records matched across restart. All six holdings retained ownership and capture history, with campaign time continuing normally. No existing player record was changed by release verification.

The public HTML and six entry assets matched the tested bundle. PVP, Legacy PVE, map and wiki routes responded successfully; the live container was healthy and the public WebSocket endpoint correctly rejected an unauthenticated connection. The published entry screen was checked in the browser. Authenticated multiplayer verification was on the isolated candidate; this release check did not replay a full live match. The candidate and its temporary data were removed, and scheduled live-save backups remain active.

Staff basic bolt — 15 September 2026, local verification

PVP staff basics now fire a visible cyan bolt after a 0.22-second cast, with 0.68-second recovery, six mana cost and no stamina cost. The bolt deals 10 base damage to one target, travels at 28 m/s for 26 metres, and stops at terrain, cover or a frontal sword shield. Equipment and round staff mastery apply. Legacy PVE retains the original staff melee attack. Caster bots use the same attack between spells and switch to the bow when mana is depleted, returning to the staff once enough mana has recovered; close pressure still prompts a melee weapon switch.

Forty-seven focused combat/render checks pass, including authoritative timing, shield direction, cover at the muzzle, dodging, finite range, no friendly fire/splash, interrupted casts, bot commands, mastery attribution after a weapon switch, the authored crystal vertex offset and existing bow/ability regressions. Across the six mastery ranks and five equipment bonuses, staff basic DPS remains below 76% of fully drawn bow DPS, with less than half the per-shot damage. This compares basic attacks, not every spell/ability combination or player skill level.

Both player-height and other-player release views were checked with the actual renderer. A two-client authenticated socket check confirmed one bolt per click, replicated casting, moving projectile snapshots and shared removal. Two complete 5v5 simulations ended by town capture: seed 77 Blue at 635.2 seconds, seed 81 Red at 673.4 seconds. These are progression checks, not statistical competitive-balance proof. Typecheck and the wiki/client build pass. This change is for local playtesting; it has not been deployed to production.

Staff resource follow-up: the basic bolt spends six mana at cast start and no stamina. Client feedback and bot affordability checks match the server. An exhausted player can cast with sufficient mana; insufficient mana, duplicate requests and protected staging spend nothing. The preceding two full-match results describe the original stamina-cost version.

PVP Mirewatch cleanup: campaign NPC spawns, quest boards and quest triggers are removed from the match map; automatic Greyfen residents are PVE-only. Warden Sable remains in the campaign. Mirewatch's crossing prefab boardwalks are replaced by one fitted plank route around the signal and resource nodes, continuing into Blackwater. Shared route geometry also clears vegetation. Verification covers non-overlapping deck faces, scenery clearance across the width and actual movement in both directions; the PVE source remains unchanged.

The mana-cost staff version passed 48 focused combat checks and a complete seed-77 5v5 simulation: Blue captured Sunken Bell after 473.1 seconds. This is a progression smoke test, not a statistical balance claim.

Captured defenders and personal respawns — 19 September 2026, local verification

Captured PVP frontiers replenish their original balanced mob roster as Blue or Red guards after 15 seconds. Missing defenders replenish after 30 seconds when attackers are clear; survivors keep their health, allies do not block the whole camp, and a spawn point occupied by a player is deferred. Recapture transfers the next roster to its new owner. Guards ignore friendly players and bots, friendly attacks pass through them, and their projectiles retain allegiance after the shooter dies. Team tabards, ground rings, health bars and short guard labels identify them. Capturing an enemy home town still ends the round.

Personal PVP death waits increase to 15, 30, 45 and then 60 seconds, capped at one minute. The count resets with each round, persists through reconnects, and a new player does not inherit a bot's death count. Rejoining while dead displays the remaining countdown. Legacy PVE rules are unchanged.

Verification: 82 automated checks cover ownership, ordinary capture commands, replenishment, friendly-fire and projectile immunity, death timing, reconnect, campaign, rooms, combat, scaling and hosting. TypeScript passes. Player-height browser inspection used an isolated local capture fixture with the real server and renderer; both colours were checked and oversized labels were corrected. No production account or save was used.

An isolated authenticated network check passed the two-second public start, private-code joining, public/private isolation, active bot-seat takeover, same-seat reconnect and two concurrent rooms. All test accounts were confined to disposable local data. These checks are not a production release or a server-capacity measurement.

Ten final seeded simulations completed with 4 Blue wins and 6 Red wins. The matrix covered mirrored starts, opposing skill levels and three-versus-one human-seat proxies driven by normal bot inputs; it was not a real-human playtest. Both teams captured, gathered, crafted and dealt PVP damage in every run, and repeated seed 77 produced identical gameplay results. This small sample checks progression and determinism, not competitive balance certification. TypeScript and the production wiki/client build pass. These changes remain local and are not deployed live.