Players try bank commands (.w, .b, .d) that TWS doesn't have #3

Closed
opened 2026-10-12 10:09:28 -04:00 by goddard · 4 comments
Collaborator

18 of the 112 players who chatted between 7 and 12 October tried bank-style commands. Nothing on TWS answers them, so they retry or give up.

  • .w (8 players), .b (8), .money (3), .d (2), and .pay, .m and !bank (1 each). .w and .b are the most-tried commands on the fleet, ahead of .afk (6 players) and .help (4).
  • Players use the usual bank syntax: .w 2000, .w all, .d all, .pay natoxz 2000. On Verrückt #819, USEC-ZaX told another player "no bank".
  • No script handles any of them. The only chat commands are .help/.commands (tws_t5_common.gsc:109), .afk/.back (tws_t5_afk.gsc:42-44), .join (tws_t5_join.gsc:37) and .leaders (tws_t5_leaderboard.gsc:104), and T6 has the same set.

Balances have to outlive the match, so a bank needs an Electric Cherry endpoint that stores them by GUID (josh/electric-cherry#146). Withdrawn points also make high rounds easier, which affects the map records EC keeps.

Fix

  • .b shows the player's balance, .d <amount|all> deposits points and .w <amount|all> withdraws them, on T5 and T6.
  • Balances are stored per GUID through Electric Cherry, so they survive a map change and a server restart.
  • A deposit or withdrawal that fails (EC unreachable, not enough points or balance) leaves the player's points unchanged and tells them why.
  • .help lists the bank commands.
18 of the 112 players who chatted between 7 and 12 October tried bank-style commands. Nothing on TWS answers them, so they retry or give up. - `.w` (8 players), `.b` (8), `.money` (3), `.d` (2), and `.pay`, `.m` and `!bank` (1 each). `.w` and `.b` are the most-tried commands on the fleet, ahead of `.afk` (6 players) and `.help` (4). - Players use the usual bank syntax: `.w 2000`, `.w all`, `.d all`, `.pay natoxz 2000`. On Verrückt #819, USEC-ZaX told another player "no bank". - No script handles any of them. The only chat commands are `.help`/`.commands` (`tws_t5_common.gsc:109`), `.afk`/`.back` (`tws_t5_afk.gsc:42-44`), `.join` (`tws_t5_join.gsc:37`) and `.leaders` (`tws_t5_leaderboard.gsc:104`), and T6 has the same set. Balances have to outlive the match, so a bank needs an Electric Cherry endpoint that stores them by GUID ([josh/electric-cherry#146](https://gitea.thewrightserver.net/josh/electric-cherry/issues/146)). Withdrawn points also make high rounds easier, which affects the map records EC keeps. **Fix** - [ ] `.b` shows the player's balance, `.d <amount|all>` deposits points and `.w <amount|all>` withdraws them, on T5 and T6. - [x] Balances are stored per GUID through Electric Cherry, so they survive a map change and a server restart. - [x] A deposit or withdrawal that fails (EC unreachable, not enough points or balance) leaves the player's points unchanged and tells them why. - [x] `.help` lists the bank commands.
goddard added the
priority
low
type/featuregame/t5game/t6needs/ec
labels 2026-10-12 10:09:28 -04:00
josh was assigned by goddard 2026-10-12 10:09:28 -04:00
Author
Collaborator

Three more first-time players tried bank commands on 12 October:

  • LastStar98 typed .b and .w all, and BLOOD100SOLDIER typed .w all, at round 1 of Der Riese #1250. LastStar98 typed .d all at round 26.
  • pedrobrbr typed .dall, .b and .w 45555 on Der Riese #1260.

That brings it to 21 distinct players since 7 October.

Three more first-time players tried bank commands on 12 October: - LastStar98 typed `.b` and `.w all`, and BLOOD100SOLDIER typed `.w all`, at round 1 of Der Riese #1250. LastStar98 typed `.d all` at round 26. - pedrobrbr typed `.dall`, `.b` and `.w 45555` on Der Riese #1260. That brings it to 21 distinct players since 7 October.
Author
Collaborator

Reviewed 9cce0be438. Implementation reviewed; leaving this open for the remaining validation.

Checklist

  • Commands work in both games. Implemented and covered by portable fixtures, but reported live “Bank unavailable” failures remain unresolved; no successful T5/T6 balance/deposit/withdraw acceptance evidence was established.
  • Persistent balances. EC stores a shared GUID account; plugin journals preserve decisions across process restarts. Backend and native recovery tests pass.
  • Failure safety. Transfer fixtures verify failed/uncertain prepares, insufficient funds, state changes and journal-write failures leave points unchanged; saved commit decisions do not apply points twice.
  • Help. Both initialized modules register .b, .d and .w with common help.

Review notes

  • Reviewed scripts main at 3bb0b5178e and EC main at fa0baa8db5f7629de3f58f2e6bf8da0568018be0.
  • node tools/check_bank.mjs: 28 fixtures passed across T5 and T6. python3 tools/test_plugin_bank.py passed both engines using their pinned JSON headers, ASan/UBSan, native journal/acknowledgment tests, separate-process recovery and component syntax checks.
  • These are portable tests/shims, not Windows DLL linking, GSC compilation or live Plutonium VM validation.
  • Ascension #1346 recorded Josh’s .b but did not establish success. Its installed inventory matched the old bank 1.0.0 checksum while the plugin reported 2.0.0, so it is not proof that the new GSC endpoint code failed.

Next steps

  • Verify the deployed script checksum/version and compatible plugin on one T5 and one T6 server.
  • Use the diagnostics in #14 to identify the live failure, then demonstrate balance reads, deposits, withdrawals, insufficient funds and recovery without lost or duplicated points.
  • Keep pending journals intact; use the coordinated endpoint upgrade procedure in #13.
Reviewed 9cce0be438f17397faa963ea87fb87b30e3b6677. Implementation reviewed; leaving this open for the remaining validation. **Checklist** - [ ] **Commands work in both games.** Implemented and covered by portable fixtures, but reported live “Bank unavailable” failures remain unresolved; no successful T5/T6 balance/deposit/withdraw acceptance evidence was established. - [x] **Persistent balances.** EC stores a shared GUID account; plugin journals preserve decisions across process restarts. Backend and native recovery tests pass. - [x] **Failure safety.** Transfer fixtures verify failed/uncertain prepares, insufficient funds, state changes and journal-write failures leave points unchanged; saved commit decisions do not apply points twice. - [x] **Help.** Both initialized modules register `.b`, `.d` and `.w` with common help. **Review notes** - Reviewed scripts main at 3bb0b5178e40ea6d322093283edb39f160542a07 and EC main at fa0baa8db5f7629de3f58f2e6bf8da0568018be0. - `node tools/check_bank.mjs`: 28 fixtures passed across T5 and T6. `python3 tools/test_plugin_bank.py` passed both engines using their pinned JSON headers, ASan/UBSan, native journal/acknowledgment tests, separate-process recovery and component syntax checks. - These are portable tests/shims, not Windows DLL linking, GSC compilation or live Plutonium VM validation. - Ascension #1346 recorded Josh’s `.b` but did not establish success. Its installed inventory matched the old bank 1.0.0 checksum while the plugin reported 2.0.0, so it is not proof that the new GSC endpoint code failed. **Next steps** - Verify the deployed script checksum/version and compatible plugin on one T5 and one T6 server. - Use the diagnostics in #14 to identify the live failure, then demonstrate balance reads, deposits, withdrawals, insufficient funds and recovery without lost or duplicated points. - Keep pending journals intact; use the coordinated endpoint upgrade procedure in #13.
Author
Collaborator

Reviewed scripts main 3bb0b5178e again as part of the all-ticket audit, without requiring commit references. The previous verdict remains: implementation present, live acceptance incomplete; leaving open.

Checklist

  • Commands work in both games. Implemented and covered by portable fixtures, but reported live “Bank unavailable” failures remain unresolved; no successful T5/T6 balance/deposit/withdraw acceptance evidence was established.
  • Persistent balances. EC stores a shared GUID account; plugin journals preserve decisions across process restarts. Backend and native recovery tests pass.
  • Failure safety. Transfer fixtures verify failed/uncertain prepares, insufficient funds, state changes and journal-write failures leave points unchanged; saved commit decisions do not apply points twice.
  • Help. Both initialized modules register .b, .d and .w with common help.

Review notes

  • Reviewed scripts main at 3bb0b5178e and EC main at fa0baa8db5f7629de3f58f2e6bf8da0568018be0.
  • node tools/check_bank.mjs: 28 fixtures passed across T5 and T6. python3 tools/test_plugin_bank.py passed both engines using their pinned JSON headers, ASan/UBSan, native journal/acknowledgment tests, separate-process recovery and component syntax checks.
  • These are portable tests/shims, not Windows DLL linking, GSC compilation or live Plutonium VM validation.
  • Ascension #1346 recorded Josh’s .b but did not establish success. Its installed inventory matched the old bank 1.0.0 checksum while the plugin reported 2.0.0, so it is not proof that the new GSC endpoint code failed.

Next steps

  • Verify the deployed script checksum/version and compatible plugin on one T5 and one T6 server.
  • Use the diagnostics in #14 to identify the live failure, then demonstrate balance reads, deposits, withdrawals, insufficient funds and recovery without lost or duplicated points.
  • Keep pending journals intact; use the coordinated endpoint upgrade procedure in #13.

Current audit evidence

  • Re-read the current source and issue discussion. Scripts main has not changed since the prior review, so its 28 bank fixtures and native bank test results are reused, not described as newly rerun.
  • No successful T5/T6 live acceptance was established in this audit; the reported failure remains unresolved.
Reviewed scripts main 3bb0b5178e40ea6d322093283edb39f160542a07 again as part of the all-ticket audit, without requiring commit references. The previous verdict remains: implementation present, live acceptance incomplete; leaving open. **Checklist** - [ ] **Commands work in both games.** Implemented and covered by portable fixtures, but reported live “Bank unavailable” failures remain unresolved; no successful T5/T6 balance/deposit/withdraw acceptance evidence was established. - [x] **Persistent balances.** EC stores a shared GUID account; plugin journals preserve decisions across process restarts. Backend and native recovery tests pass. - [x] **Failure safety.** Transfer fixtures verify failed/uncertain prepares, insufficient funds, state changes and journal-write failures leave points unchanged; saved commit decisions do not apply points twice. - [x] **Help.** Both initialized modules register `.b`, `.d` and `.w` with common help. **Review notes** - Reviewed scripts main at 3bb0b5178e40ea6d322093283edb39f160542a07 and EC main at fa0baa8db5f7629de3f58f2e6bf8da0568018be0. - `node tools/check_bank.mjs`: 28 fixtures passed across T5 and T6. `python3 tools/test_plugin_bank.py` passed both engines using their pinned JSON headers, ASan/UBSan, native journal/acknowledgment tests, separate-process recovery and component syntax checks. - These are portable tests/shims, not Windows DLL linking, GSC compilation or live Plutonium VM validation. - Ascension #1346 recorded Josh’s `.b` but did not establish success. Its installed inventory matched the old bank 1.0.0 checksum while the plugin reported 2.0.0, so it is not proof that the new GSC endpoint code failed. **Next steps** - Verify the deployed script checksum/version and compatible plugin on one T5 and one T6 server. - Use the diagnostics in #14 to identify the live failure, then demonstrate balance reads, deposits, withdrawals, insufficient funds and recovery without lost or duplicated points. - Keep pending journals intact; use the coordinated endpoint upgrade procedure in #13. **Current audit evidence** - Re-read the current source and issue discussion. Scripts main has not changed since the prior review, so its 28 bank fixtures and native bank test results are reused, not described as newly rerun. - No successful T5/T6 live acceptance was established in this audit; the reported failure remains unresolved.
Author
Collaborator

Reviewed 9cce0be438, ab989395f7, and 463b4bcc51. The earlier bank failure now has a confirmed cause and a source fix; leaving this open only for the incomplete live acceptance.

Checklist

  • Commands on both engines. Implemented and passing portable/EC integration tests. Earlier live monitoring confirmed .b, .d all (500 points), and .w all (500 points) on Die Rise match 1350, with first-attempt settlement and one ledger entry per transfer. Shang's .b also succeeded. Successful T5 deposits/withdrawals and the remaining live failure/recovery checks have not been demonstrated.
  • Persistence. Accounts remain GUID-scoped in EC; native journal and separate-process recovery checks pass.
  • Failure safety. Failed/uncertain prepares and failed journal writes leave spendable points unchanged; durable replay does not reapply game points. Actual EC-service/SQLite fixtures pass.
  • Help. Both bank modules register balance, deposit, and withdrawal commands with common help.

Review notes

  • node tools/check_bank.mjs --ec-root /workspace/electric-cherry: 44 portable bank fixture groups passed, including the real EC bank service/migrations with isolated SQLite at EC revision 82e07ea33eedddd7b707f5e62c12d2e606a1e680.
  • python3 tools/test_plugin_bank.py --json-header ...: both T5 and T6 native storage/parser, separate-process replay, and registration-adapter checks passed with ASan/UBSan and each plugin's pinned JSON header. The default command initially lacked restored headers; the successful run used headers fetched at the exact recorded dependency revisions.
  • These are source/portable integration checks, not Windows DLL builds or live Plutonium failure injection. No production settings, journals, or server processes were changed.
  • The previous generic “Bank unavailable remains unexplained” assessment is superseded by #15: numeric GUIDs were rejected by EC; T5/T6 identity normalization now prevents that source defect. The live observations above were verified earlier in this conversation, not rerun for this review.

Next steps

  • Finish T5 balance/deposit/withdrawal acceptance and record insufficient-funds and interrupted-settlement behavior across both engines, with deployed script/plugin hashes and EC ledger evidence. Track old malformed journal repair in #15.
Reviewed 9cce0be438f17397faa963ea87fb87b30e3b6677, ab989395f7492ae18eda244f641c4ea279b20dd9, and 463b4bcc51871ef4f24f6360c35ff11c443be138. The earlier bank failure now has a confirmed cause and a source fix; leaving this open only for the incomplete live acceptance. **Checklist** - [ ] **Commands on both engines.** Implemented and passing portable/EC integration tests. Earlier live monitoring confirmed `.b`, `.d all` (500 points), and `.w all` (500 points) on Die Rise match 1350, with first-attempt settlement and one ledger entry per transfer. Shang's `.b` also succeeded. Successful T5 deposits/withdrawals and the remaining live failure/recovery checks have not been demonstrated. - [x] **Persistence.** Accounts remain GUID-scoped in EC; native journal and separate-process recovery checks pass. - [x] **Failure safety.** Failed/uncertain prepares and failed journal writes leave spendable points unchanged; durable replay does not reapply game points. Actual EC-service/SQLite fixtures pass. - [x] **Help.** Both bank modules register balance, deposit, and withdrawal commands with common help. **Review notes** - `node tools/check_bank.mjs --ec-root /workspace/electric-cherry`: 44 portable bank fixture groups passed, including the real EC bank service/migrations with isolated SQLite at EC revision 82e07ea33eedddd7b707f5e62c12d2e606a1e680. - `python3 tools/test_plugin_bank.py --json-header ...`: both T5 and T6 native storage/parser, separate-process replay, and registration-adapter checks passed with ASan/UBSan and each plugin's pinned JSON header. The default command initially lacked restored headers; the successful run used headers fetched at the exact recorded dependency revisions. - These are source/portable integration checks, not Windows DLL builds or live Plutonium failure injection. No production settings, journals, or server processes were changed. - The previous generic “Bank unavailable remains unexplained” assessment is superseded by #15: numeric GUIDs were rejected by EC; T5/T6 identity normalization now prevents that source defect. The live observations above were verified earlier in this conversation, not rerun for this review. **Next steps** - Finish T5 balance/deposit/withdrawal acceptance and record insufficient-funds and interrupted-settlement behavior across both engines, with deployed script/plugin hashes and EC ledger evidence. Track old malformed journal repair in #15.
Sign in to join this conversation.