# Changelog ## alpha 0.6.5.1015 - Extend the AI test path for CS Major autochess to support two-human games: `/自走棋加AI战队` now adds AI 战队 A and AI 战队 B when exactly two real players have registered. - Keep the same command for two- and three-human test modes. The tournament engine selects 2 人+2 AI or 3 人+1 AI from the current registration count. - Lock the roster after AI teams join, seed the four-team bracket as 1v4 and 2v3, and keep AI teams out of the human preparation order while preserving independent AI operations and story archives. ## alpha 0.6.4.1015 - Add a reviewed 2-8 player CS Major autochess extension with a fixed five-player starting lineup, one always-active coach, an eight-slot bench, and a six-candidate shop that shows complete game data. - Ship a fixed 60-player local pool with rifle, sniper, and in-game-leader roles; team and nation synergies; shared copy counts; and deterministic three-copy/two-star and nine-copy/three-star upgrades. - Keep all five player slots occupied. Lineup changes are one-for-one swaps, starters cannot be sold directly, and coach upgrades only add a 2%-10% team bonus. - Add player-selected firepower, stability, and clutch tactics. Resolve stability over firepower, firepower over clutch, clutch over stability, plus sniper/rifle/leader role counters before bounded +/-2% map variance. - Generate the competition format once at tournament start: two players go directly to the final, three play a round robin for two final places, four use seeded 1v4 and 2v3 semifinals, and five to eight play a complete round robin for four semifinal places. - Add an explicit three-human-plus-one-AI test mode. The host can add one deterministic local AI as seed four; it buys players, upgrades its coach, swaps its strongest lineup, and selects a counter tactic without an online model. - Give Taffy a persistent host state machine: welcome and format briefing, rotating human preparation order, turn enforcement, explicit handoffs, round introductions, matchup calls, overtime narration, advancement, and championship presentation. - Run group matches as BO3 and knockout matches as BO5. Simulate every map under MR15, including 15-15 overtime, 19-17/22-20 scores, and separately archived overtime stories. - Persist run state, idempotent action responses, structured battles, and every generated story in serialized SQLite transactions. Invalid archives roll back the full action. ## alpha 0.6.3.1015 - Replace instant personal lottery tickets with one persistent multiplayer lottery round per group: start, register/update, status, draw, and cancel. - Treat each ticket as three distinct digits from 0-9. Sort digits before storage so `347` and `743` represent the same selection. - Accept spaced and compact OCR forms. Ticket stakes are 1-500 coins with a default of 10 when omitted. - Return 0%, 50%, 120%, or 300% of the stake for matching zero, one, two, or three drawn digits. All settlement values remain integer coins. - Commit entry updates, stake differences, all-player payouts, cancellation refunds, and event replay responses in serialized SQLite transactions. - Raise the blackjack stake range to 1-500 coins. - Add per-game personal sequence numbers and `/游戏记录` (`/gamehistory`) for prize draws, lottery rounds, and blackjack hands. - Prefix game output with the configured player label and game number, such as `Jacky #1:...`; aliases share the same counter and account. ## alpha 0.6.2.1015 - Bound direct DeepSeek SSE reads to 30 seconds of total wall time in addition to the existing 18-second socket inactivity timeout. - Stop reading as soon as the SSE `[DONE]` marker arrives instead of waiting for the upstream connection to close. - Prevent a trickling or unfinished upstream response from occupying both generation workers for about 15 minutes and delaying later final replies. - Preserve fast ACK delivery, three-attempt retry behavior, two generation workers, and strict final-reply ordering. - Treat `/21点 开始 100` as a 100-coin stake and accept OCR forms with missing whitespace, such as `/21点开始100` and `/blackjackstart100`. - Keep blackjack play as explicit steps: start and deal first, then hit or stand in a separate command. Combined forms return this workflow without opening a game or deducting funds. - Prefix blackjack hands, status and settlement replies with the current group-scoped player's configured display label, such as `jacky:...`. ## alpha 0.6.1.1015 - Add three reviewed plugins: local context summaries for 100/200/300 messages, person and alias lookup, and single-player virtual coin games. - Provide corresponding Chinese and English commands, including `/context`, `/people`, `/person`, `/wallet`, `/draw`, `/lottery`, and `/blackjack`. - Grant each group-scoped person 1000 virtual coins once; persist account state, private blackjack decks, timeout/forfeit rules, and win/loss statistics. - Commit funds, game state and event replay responses in one SQLite transaction; retries never debit twice, and aliases share the canonical person's account. - Reconcile the message image after a two-second idle wait so a missed final XDamage notification does not strand an isolated message; drain buffered Xlib events before waiting on the socket. Preserve visual deduplication and guards. - Keep the generated feature list within the sender's 900-character boundary. - Document local extractive-summary coverage, OCR identity limitations, game payouts, persistence and rollback behavior. ## alpha 0.6.0.1015 - Replace repository-local and hardcoded deployment values with independent, profile-based configuration packages. - Add atomic config generation, activation, import, redacted/private export, schema validation, and migration of legacy environment/context material. - Move private person aliases, bot identity, debug sessions, incident reports, telemetry exports, and root-operation archives outside Git with strict permissions. - Remove fixed Steam rosters, aliases, display names, and SteamIDs from source. - Make `/steam` discover the configured account's public friend list at runtime. - Add `/steam时长 游戏名`, whitespace-free OCR forms, game-name fuzzy matching, bounded per-account playtime queries, privacy-state accounting, and caching. - Add `/steam时长 游戏名、玩家名` with exact, unique partial, and fuzzy persona matching while limiting game-library requests to the selected account. - Preserve optional group-person-to-SteamID mappings in private profiles, migrate legacy scoped rosters and aliases, and prefer that roster over public friend discovery. - Preserve multiline local-command output so `/debug` remains readable. - Remove the visible `好友` wording and add a dedicated Steam progress ACK. - Rename built-in plugin ownership from a personal namespace to `jwebot`. - Rename the SDK event field to the generic `mention_bot`. - Add a privacy-safe tracked-file/Git-object scanner that never prints matched values. - Add a six-stage new-host bootstrap, an eight-stage coordinated deployment progress display, runtime requirements, and zero-to-running documentation. - Add public repository, configuration, SDK, contribution, security, and licensing documentation. - Start the public history from a sanitized root after a verified private backup; pre-public operational history remains only in protected local archives. ## Pre-Public Milestones Earlier alpha work established: - adaptive OCR and XDamage capture; - guarded GUI send with visual confirmation; - durable ACK/final delivery ordering; - privacy-safe latency telemetry; - capability-limited SDK contracts; - signed extension artifacts and isolated Host execution; - reviewed command ownership and generated adapters; - coordinated production backup, health gates, and rollback. Private host, person, address, account, incident, and deployment details are intentionally omitted from the public changelog.