Repository navigation
Releases
Dots v1.0.1
Fixed
- made capture polygon orientation and point-in-polygon tests use exact integer arithmetic at JavaScript-safe coordinate extremes, removing precision-loss edge cases without changing capture rules or scoring;
- treat an empty persisted JSON value as malformed data and remove it through the existing fail-closed cleanup path while preserving save schema version 1.
Changed
- reduced AI seed-scoring overhead by reusing immutable component maps and reduced capture/Canvas/autosave allocations without changing AI policy, move ordering, evaluation weights, gameplay rules, scoring, or persistence format;
- moved native Tauri AI computation off the main thread, tightened start-menu focus handling, document language/accessibility behavior, local Web Audio cleanup, and viewport/capture rendering internals;
- upgraded the verified application/tooling baseline including Tauri 2.11.5, tauri-plugin-opener 2.5.5, Vitest 5.0.1, Vite 8.3.0, and vite-plugin-pwa 1.3.0 after full regression validation;
- hardened release, WASM, RustSec, generated-asset, CodeQL, RuStore, Node, Python/Pillow, Android JDK, and provenance checks, including version-bound RuStore metadata and reproducible store assets;
- refreshed and ASO-optimized RuStore publisher copy and screenshots while keeping the storefront product name, offline/privacy model, and supported feature claims aligned with the shipped application.
Dots v1.0.0
Changed
- aligned Rust game-core and Tauri package metadata/lockfiles with source version 0.10.0;
- strengthened the required CI
buildgate with locked Rust dependency validation, authoritative game-core tests, and Clippy warnings-as-errors while keeping the separate native Rust workflow focused on the Tauri shell integration check; - made Android release/store tooling use the committed local Tauri CLI without rewriting
package.jsonat runtime and generate canonical icons before initializing the Android project; - reduced capture traversal allocation overhead by using typed directed-edge identities instead of formatted strings, without changing capture topology or ordering;
- removed a redundant computer-work cancellation when starting a new game from the start menu.
- closed residual dependency-security gaps by explicitly denying the optional macOS
fseventsinstall script, enforcing cross-platform lockfile/install-script policy in required CI, and adding required/scheduled RustSec audits for both committed Cargo lockfiles, including strict authoritative-core warnings and an explicit platform-scoped Tauri GTK3 advisory exception; - made release/store automation more reproducible and least-privileged by disabling persisted release checkout credentials, pinning the RuStore Android NDK, and using the canonical npm/Tauri argument form;
- made the AI transposition cache include focus and extension context so equivalent board states reached through different search paths cannot reuse a value computed under different ranking inputs;
- enforced the cross-platform npm install-script policy before dependency installation in CI, audit, Pages deploy, GitHub release, native release, and RuStore asset workflows;
- made the Tauri
glibRustSec exception self-checking by rejecting affectedglibversions if they become reachable from any Android or macOS release target graph; - guarded native and RuStore release provenance so an already tagged version cannot receive rebuilt artifacts or store assets from a different
maincommit; - added synchronized npm/Rust/Tauri version verification and preserved hardened manual rebuild support for historical native tags;
- hardened npm further with npm 11+ engine enforcement, exact direct versions, registry-only SHA-512 lockfile sources, ambiguity-free install-script policy, and pre-install validation;
- added reusable PR repository audits, CodeQL, Semgrep, full-history Gitleaks, and high-severity Dependency Review while enforcing SHA-pinned Actions/containers and non-persisted checkout credentials through required CI;
- bound native artifact uploads and GitHub Release creation to the exact source commit resolved by the matching version tag;
- changed the Tauri RustSec policy from open-ended informational warnings to an explicit reviewed warning baseline, with Android/macOS target-graph enforcement for GTK3/proc-macro/
glibexceptions and only the current upstreamunic-*maintenance advisories accepted in shipped target graphs. - promoted the fully audited and hardened codebase to stable 1.0.0 release metadata with synchronized npm, Rust, Tauri, and lockfile versions, without changing gameplay rules, save format, scoring, or AI policy.
Dots v0.10.0
Added
- localized Dots-style start menu on the notebook grid with saved/current-game Continue, explicit Vs computer and Two players starts, Help, About, native-only Exit, and a persistent sound toggle;
- compact in-game Menu and Sound actions for returning to the start screen and muting/unmuting without restarting the application;
- lightweight local Web Audio sound design with distinct Red/Blue move ticks, capture accents, invalid-move feedback, and Undo feedback, generated without bundled audio files or network access.
Changed
- preference storage advanced to version 3 with automatic migration from versions 1 and 2 and sound enabled by default;
- the game surface is inert while the start menu is open, pending computer play is paused until the player explicitly continues or starts a game, and audio is lazily unlocked only from user interaction;
- source version advanced to 0.10.0 with no game-rule, scoring, save-log, AI-policy, SDK/NDK/ABI, or native-hardening changes.
Dots v0.9.5
Added
- canonical
branding/dots-icon-master.pngraster source of truth plus deterministic platform icon preparation for Web/PWA and Tauri builds; - explicit raster-source preservation rules preventing accidental tracing, vector replacement, in-place recompression, cropping, padding, recoloring, or other artwork changes.
Changed
- Web/PWA favicon and install icons, Tauri desktop/macOS icons, Android launcher/adaptive/round icons, and the RuStore 512×512 store icon now derive from the same approved raster master;
- removed the legacy SVG/PWA icon path and the separately drawn RuStore icon, and removed stale Android icon generation from native/store release workflows;
- source version advanced to 0.9.5 with no gameplay, rules, save-format, AI, scoring, accessibility, SDK/NDK/ABI, or native-hardening behavior changes.
Dots v0.9.4
Added
- shared Rust
crates/game-coreas the single production implementation of move legality, capture/house topology, release/scoring, replay validation, and deterministic AI search for both native Tauri and web/PWA builds; - Rust topology/tactical/paired-strength regression coverage migrated from the removed TypeScript rules/AI implementation, plus frontend session/persistence tests that execute against the compiled WASM core;
- permanent Rust CI, source-boundary enforcement, hardened web/native artifact verification, and dedicated Dependabot coverage for the shared Rust core.
Changed
-
web/PWA now executes the shared Rust core through optimized WASM while native Tauri links the same crate directly through four coarse IPC commands; the TypeScript layer is limited to DTO/session/persistence/Worker/UI orchestration;
-
removed the duplicate TypeScript rules, capture/scoring, AI search, AI-match harness, and their superseded reference tests after equivalent Rust regressions were established;
-
hardened Android release output with explicit non-debuggable JNI/app settings, minification/resource shrinking, native symbol/debug-section checks, and 16 KB ELF alignment validation, while macOS verification now checks universal architectures and stripped implementation symbols;
-
preserved gameplay rules, save format, AI policy/difficulty semantics, deterministic decisions, accessibility behavior, and PWA lifecycle while changing the implementation boundary;
-
source version advanced to 0.9.4 so hardened artifacts have a tag/source provenance distinct from the already published 0.9.3 release.
-
consolidated failure-tolerant JSON storage transport and record validation while keeping game, preference, and viewport schemas, keys, versions, and fail-closed behavior independent;
-
reduced repeated AI derived-state work with per-search inactive-stone caching and reuse of the existing danger difference without changing search policy, weights, deterministic ordering, or game rules;
-
committed
src-tauri/Cargo.lock, added Cargo Dependabot coverage, and made native/store automation verify the resolved Rust dependency graph with--locked; -
removed the one-off duplicate RuStore AAB workflow so
Native Releaseis the single Android release path, while RuStore asset generation now runs automatically only for relevantmainrelease/tooling changes or manually on demand; -
synchronized security, product, architecture, AI, and EN/RU repository documentation with the current Tauri/RuStore 0.9.3 structure and fixed stale repository/script references.
Dots v0.9.3
Added
- RuStore publication package with privacy policy, user agreement, Russian store metadata, and reproducible 512×512 icon, 1080×607 promo banner, and four 1080×1920 screenshots;
- dedicated local signing helpers that keep the RuStore app-signing private key offline and store only the separate AAB upload key in GitHub Actions secrets;
- AAB verification through JAR signature validation, Bundletool manifest inspection, and universal-APK generation before release upload.
Changed
- Android native releases now produce an upload-key-signed Android App Bundle (
.aab) instead of an APK while macOS continues to publish a universal DMG; - source version advanced to 0.9.3 with no gameplay, rules, save-format, AI, scoring, or web/PWA behavior changes.
Dots v0.9.2
Added
- compact localized About dialog with current package version, copyright notice, and project link;
- minimal Tauri 2 native shell sharing the existing TypeScript/Canvas UI across Android and macOS;
- native release workflow producing a signed universal Android APK and a universal Intel/Apple Silicon macOS DMG and attaching both artifacts to the matching GitHub Release.
Changed
- native builds use relative frontend assets and disable the browser PWA/service-worker layer while the GitHub Pages PWA remains unchanged;
- the About project link opens through the platform default browser in native builds with a GitHub-only opener permission scope;
- GitHub Pages deployment now runs the same high/critical npm audit gate before tests and production build;
- GitHub Release publication now independently runs reproducible install, dependency audit, the full test suite, TypeScript validation, production/PWA build, and artifact verification before creating a new tag/release;
- source version advanced to 0.9.2 with no gameplay, rules, save-format, AI, scoring, or web/PWA behavior changes.
Dots v0.9.1
Added
- regression coverage for invalid and unsafe authoritative game coordinates, unsafe persisted move logs, and PWA reconnect/foreground/periodic/update/cleanup lifecycle behavior.
Fixed
- authoritative placement and persisted move replay now reject coordinates outside JavaScript's safe-integer range instead of accepting ambiguous grid positions;
- stale cancelled browser AI generations no longer clear the thinking state of a newer computer request;
- failed explicit PWA update activation restores the update action and reports the existing PWA error status instead of leaving the action disabled.
Changed
- source version advanced to 0.9.1 as the stabilized pre-1.0 release-candidate baseline;
- game rules, save schema, AI search policy/difficulty semantics, scoring, and user-facing feature set are unchanged from 0.9.0.
Dots v0.9.0
Added
- dedicated browser Web Worker entry and typed request/response protocol for computer-turn computation while keeping
src/game/ai.tsbrowser-independent; - structured-clone regression coverage proving Map-based
GameStatesurvives the Worker transport contract; - Fit game viewport recovery that recenters/scales all placed stones with bounded automatic zoom;
- subtle latest-move ring and a move counter derived directly from session history;
- brief capture feedback derived from confirmed before/after active capture state, with reduced-motion-safe visual emphasis and localized live feedback;
- point-local invalid-placement feedback plus desktop mouse snap preview at the exact integer intersection that would be submitted;
- compact first-run board hint with persistent accessible Help dialog;
- responsive mobile primary-action toolbar keeping Undo, Fit game, Help, and New game visible;
- accessible in-app New game confirmation dialog replacing browser-native
window.confirm(); - production-build verification that requires the generated
ai-worker-*.jsasset in addition to the existing PWA/offline artifacts.
Changed
- browser computer search now executes off the UI thread; returned coordinates remain proposals and are accepted only through authoritative
playMove(); - pending computer work can be cancelled by Undo, New game, mode/difficulty changes, page hiding, or a newer request generation, and stale Worker responses are ignored;
- primary controls remain responsive while the computer is thinking so pending work can be cancelled or redirected safely;
- the first-run navigation hint disappears after the first legal move while Help remains available on demand;
- Canvas rendering now owns presentation-only latest-move, snap-preview, invalid-point, and confirmed-capture emphasis without changing legality or persistence;
- game rules, saved-game schema, AI search policy/difficulty behavior, tactical benchmark expectations, and scoring semantics are unchanged;
- source version advanced to 0.9.0 as the pre-1.0 game-UX/release-candidate foundation.
Dots v0.8.2
Added
- committed npm lockfile (lockfile v3) for reproducible dependency resolution;
- CI high/critical dependency audit gate with
npm audit --audit-level=high; - monthly Dependabot coverage for GitHub Actions in addition to npm dependencies;
- explicit Node.js
>=22engine requirement.
Fixed
- upgraded Vite from 7.1.3 to 7.3.6, clearing the high-severity Vite development-server/path advisories reported by npm audit;
- upgraded Vitest from 3.2.4 to 3.2.7, clearing the critical Vitest UI-server advisory;
- upgraded GitHub Actions to maintained Node-24 generations:
actions/checkout/actions/setup-nodev4→v7,actions/configure-pagesv5→v6,actions/upload-pages-artifactv3→v5, andactions/deploy-pagesv4→v5, eliminating the Node 20 runtime deprecation warnings from CI and Pages.
Changed
- CI and GitHub Pages now install exactly the committed dependency graph with
npm ci; - release and Pages workflows use maintained Node-24-compatible action runtimes;
- dependency/tooling hardening is now part of repository operational verification; gameplay, saves, PWA behavior, accessibility, and AI behavior are unchanged;
- source version advanced to 0.8.2.