Bank requests currently use tws_bank_url, which the host agent generates from its own controller address. That address may differ from the public endpoint reachable by game containers.
Use https://ec.thewrightserver.net/api/bank directly for both T5 and T6 bank requests. Keep the existing per-instance authentication.
t5/scripts/tws_t5_bank.gsc:9-11 reads tws_bank_url and uses the public endpoint only as a fallback; T6 follows the same configuration pattern.
Electric Cherry's agent/ec_agent.py:1960-1963 derives the game-bank URL from the agent's configured controller address when generating electric_cherry_bank.cfg.
The agent also checks journal endpoint identity during settlement, so the script endpoint change needs coordinated EC handling rather than merely changing the script constant.
Moon's bank failures prompted this change, but an incorrect endpoint has not yet been confirmed as their cause. Related bank work: scripts #3 and EC #146.
Fix
Set the bank base URL to https://ec.thewrightserver.net/api/bank in both bank scripts, without a dvar override.
Keep tws_server_id and the private tws_bank_token supplied through EC's generated configuration.
Stop generating tws_bank_url in electric_cherry_bank.cfg; leave the host agent's own controller connection unchanged.
Update documentation to distinguish the public game-bank endpoint from the agent's controller address.
Handle existing pending journals explicitly: changing endpoints must not strand or discard outstanding commit/cancel decisions. Align the agent's journal endpoint validation with the public game-bank endpoint while preserving authenticated, instance-scoped settlement and refusing arbitrary journal URLs.
Bump affected component versions and update changelogs.
Validation
Both scripts use the public endpoint even when the agent has a different controller URL or an old tws_bank_url setting remains.
On T5 and T6, verify .b, deposits, withdrawals, and settlement retries.
Verify that an empty balance displays zero and .w all returns an insufficient-balance message.
Verify pending-journal recovery across the endpoint change without duplicate transactions or lost points, including agent settlement during rebuild/removal.
Bank requests currently use `tws_bank_url`, which the host agent generates from its own controller address. That address may differ from the public endpoint reachable by game containers.
Use **`https://ec.thewrightserver.net/api/bank`** directly for both T5 and T6 bank requests. Keep the existing per-instance authentication.
- `t5/scripts/tws_t5_bank.gsc:9-11` reads `tws_bank_url` and uses the public endpoint only as a fallback; T6 follows the same configuration pattern.
- Electric Cherry's `agent/ec_agent.py:1960-1963` derives the game-bank URL from the agent's configured controller address when generating `electric_cherry_bank.cfg`.
- The agent also checks journal endpoint identity during settlement, so the script endpoint change needs coordinated EC handling rather than merely changing the script constant.
Moon's bank failures prompted this change, but an incorrect endpoint has **not** yet been confirmed as their cause. Related bank work: [scripts #3](https://gitea.thewrightserver.net/josh/tws-zombies-scripts/issues/3) and [EC #146](https://gitea.thewrightserver.net/josh/electric-cherry/issues/146).
**Fix**
- [x] Set the bank base URL to `https://ec.thewrightserver.net/api/bank` in both bank scripts, without a dvar override.
- [x] Keep `tws_server_id` and the private `tws_bank_token` supplied through EC's generated configuration.
- [x] Stop generating `tws_bank_url` in `electric_cherry_bank.cfg`; leave the host agent's own controller connection unchanged.
- [x] Update documentation to distinguish the public game-bank endpoint from the agent's controller address.
- [x] Handle existing pending journals explicitly: changing endpoints must not strand or discard outstanding commit/cancel decisions. Align the agent's journal endpoint validation with the public game-bank endpoint while preserving authenticated, instance-scoped settlement and refusing arbitrary journal URLs.
- [x] Bump affected component versions and update changelogs.
**Validation**
- [x] Both scripts use the public endpoint even when the agent has a different controller URL or an old `tws_bank_url` setting remains.
- [ ] On T5 and T6, verify `.b`, deposits, withdrawals, and settlement retries.
- [ ] Verify that an empty balance displays zero and `.w all` returns an insufficient-balance message.
- [ ] Verify pending-journal recovery across the endpoint change without duplicate transactions or lost points, including agent settlement during rebuild/removal.
Reviewed 3bb0b5178e, 54f43019942e19ca4e74ca92d8aed4d602fb4300 (josh/electric-cherry). Implementation reviewed; leaving this open for the remaining validation.
Checklist
Fixed endpoint. Both bank scripts use the public HTTPS constant and ignore stale tws_bank_url values; initialization/request fixtures verify this.
Private authentication. Both retain tws_server_id and the private token; request fixtures verify authorization.
Agent configuration. EC agent 1.9.1 generates only the token in the private config and leaves its enrolled controller URL unchanged.
Documentation. Both repos distinguish game-bank and agent URLs and require a rebuild to drain journals when the endpoint changes.
Journal recovery implementation. The agent accepts only public and host-legacy endpoint identities, settles through the authenticated controller operation, rejects arbitrary URLs, and preserves unresolved storage. Rebuild/removal tests cover both games, lost acknowledgments and original request identities.
Versioning. Bank scripts are 2.0.0; the EC companion agent is 1.9.1, with matching changelogs.
Override regression. Portable fixtures prove requests use the public endpoint despite old/internal/non-HTTPS dvars.
T5/T6 live commands. Balance, deposit, withdrawal and settlement acceptance still need confirmation with the updated deployed artifacts.
Live empty account behavior. Zero balance and insufficient-balance messages pass fixtures but have not been demonstrated in both games.
Live endpoint upgrade. Agent/native recovery tests pass, but the full deployed game-to-agent-to-EC migration path has not been exercised in this review.
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.
EC agent suite: 332 tests passed, including public/legacy journal handling and endpoint rejection.
Next steps
Deploy/verify bank scripts 2.0.0 and the signed companion agent, following the documented rebuild procedure if the old endpoint differed.
Demonstrate the three remaining live validation items on T5 and T6. Portable successes do not resolve the ongoing bank failure; use #14 diagnostics to isolate it.
Reviewed 3bb0b5178e40ea6d322093283edb39f160542a07, 54f43019942e19ca4e74ca92d8aed4d602fb4300 (josh/electric-cherry). Implementation reviewed; leaving this open for the remaining validation.
**Checklist**
- [x] **Fixed endpoint.** Both bank scripts use the public HTTPS constant and ignore stale `tws_bank_url` values; initialization/request fixtures verify this.
- [x] **Private authentication.** Both retain `tws_server_id` and the private token; request fixtures verify authorization.
- [x] **Agent configuration.** EC agent 1.9.1 generates only the token in the private config and leaves its enrolled controller URL unchanged.
- [x] **Documentation.** Both repos distinguish game-bank and agent URLs and require a rebuild to drain journals when the endpoint changes.
- [x] **Journal recovery implementation.** The agent accepts only public and host-legacy endpoint identities, settles through the authenticated controller operation, rejects arbitrary URLs, and preserves unresolved storage. Rebuild/removal tests cover both games, lost acknowledgments and original request identities.
- [x] **Versioning.** Bank scripts are 2.0.0; the EC companion agent is 1.9.1, with matching changelogs.
- [x] **Override regression.** Portable fixtures prove requests use the public endpoint despite old/internal/non-HTTPS dvars.
- [ ] **T5/T6 live commands.** Balance, deposit, withdrawal and settlement acceptance still need confirmation with the updated deployed artifacts.
- [ ] **Live empty account behavior.** Zero balance and insufficient-balance messages pass fixtures but have not been demonstrated in both games.
- [ ] **Live endpoint upgrade.** Agent/native recovery tests pass, but the full deployed game-to-agent-to-EC migration path has not been exercised in this review.
**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.
- EC agent suite: 332 tests passed, including public/legacy journal handling and endpoint rejection.
**Next steps**
- Deploy/verify bank scripts 2.0.0 and the signed companion agent, following the documented rebuild procedure if the old endpoint differed.
- Demonstrate the three remaining live validation items on T5 and T6. Portable successes do not resolve the ongoing bank failure; use #14 diagnostics to isolate it.
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
Fixed endpoint. Both bank scripts use the public HTTPS constant and ignore stale tws_bank_url values; initialization/request fixtures verify this.
Private authentication. Both retain tws_server_id and the private token; request fixtures verify authorization.
Agent configuration. EC agent 1.9.1 generates only the token in the private config and leaves its enrolled controller URL unchanged.
Documentation. Both repos distinguish game-bank and agent URLs and require a rebuild to drain journals when the endpoint changes.
Journal recovery implementation. The agent accepts only public and host-legacy endpoint identities, settles through the authenticated controller operation, rejects arbitrary URLs, and preserves unresolved storage. Rebuild/removal tests cover both games, lost acknowledgments and original request identities.
Versioning. Bank scripts are 2.0.0; the EC companion agent is 1.9.1, with matching changelogs.
Override regression. Portable fixtures prove requests use the public endpoint despite old/internal/non-HTTPS dvars.
T5/T6 live commands. Balance, deposit, withdrawal and settlement acceptance still need confirmation with the updated deployed artifacts.
Live empty account behavior. Zero balance and insufficient-balance messages pass fixtures but have not been demonstrated in both games.
Live endpoint upgrade. Agent/native recovery tests pass, but the full deployed game-to-agent-to-EC migration path has not been exercised in this review.
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.
EC agent suite: 332 tests passed, including public/legacy journal handling and endpoint rejection.
Next steps
Deploy/verify bank scripts 2.0.0 and the signed companion agent, following the documented rebuild procedure if the old endpoint differed.
Demonstrate the three remaining live validation items on T5 and T6. Portable successes do not resolve the ongoing bank failure; use #14 diagnostics to isolate it.
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.
The EC agent test result above belongs to the explicitly listed prior EC revision, not the newer EC main. The public-endpoint companion implementation remains present.
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**
- [x] **Fixed endpoint.** Both bank scripts use the public HTTPS constant and ignore stale `tws_bank_url` values; initialization/request fixtures verify this.
- [x] **Private authentication.** Both retain `tws_server_id` and the private token; request fixtures verify authorization.
- [x] **Agent configuration.** EC agent 1.9.1 generates only the token in the private config and leaves its enrolled controller URL unchanged.
- [x] **Documentation.** Both repos distinguish game-bank and agent URLs and require a rebuild to drain journals when the endpoint changes.
- [x] **Journal recovery implementation.** The agent accepts only public and host-legacy endpoint identities, settles through the authenticated controller operation, rejects arbitrary URLs, and preserves unresolved storage. Rebuild/removal tests cover both games, lost acknowledgments and original request identities.
- [x] **Versioning.** Bank scripts are 2.0.0; the EC companion agent is 1.9.1, with matching changelogs.
- [x] **Override regression.** Portable fixtures prove requests use the public endpoint despite old/internal/non-HTTPS dvars.
- [ ] **T5/T6 live commands.** Balance, deposit, withdrawal and settlement acceptance still need confirmation with the updated deployed artifacts.
- [ ] **Live empty account behavior.** Zero balance and insufficient-balance messages pass fixtures but have not been demonstrated in both games.
- [ ] **Live endpoint upgrade.** Agent/native recovery tests pass, but the full deployed game-to-agent-to-EC migration path has not been exercised in this review.
**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.
- EC agent suite: 332 tests passed, including public/legacy journal handling and endpoint rejection.
**Next steps**
- Deploy/verify bank scripts 2.0.0 and the signed companion agent, following the documented rebuild procedure if the old endpoint differed.
- Demonstrate the three remaining live validation items on T5 and T6. Portable successes do not resolve the ongoing bank failure; use #14 diagnostics to isolate it.
**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.
- The EC agent test result above belongs to the explicitly listed prior EC revision, not the newer EC main. The public-endpoint companion implementation remains present.
Reviewed 3bb0b5178e and its EC companion 54f43019942e19ca4e74ca92d8aed4d602fb4300 against scripts main 463b4bcc51. The endpoint implementation remains correct; leaving the outstanding live validation items open.
Checklist
Public endpoint and private identity. Both scripts still use the fixed public /api/bank URL, ignore stale URL dvars, and retain EC-provided server/token authentication.
Agent and documentation. Current EC generates the private token without changing the host controller URL; both repos describe the separate transports and coordinated migration.
Journal migration design. EC's agent accepts public and enrolled-controller legacy scopes for operation-bound settlement, rejects arbitrary endpoints, and retains unresolved storage. This session's EC agent suite passed all 340 tests at 82e07ea33eedddd7b707f5e62c12d2e606a1e680.
Versions and override regression. Script/changelog updates are present and the fixed-endpoint fixtures pass.
Live commands and settlement retry on both games. Earlier verified live evidence now includes T6 balance/deposit/withdrawal and T5 balance, but not the full two-engine matrix.
Live empty-account behavior. Portable checks cover zero balance and insufficient-balance .w all; complete in-game evidence remains outstanding.
Live endpoint transition. The confirmed Moon malformed-GUID cancellation recovery is not proof of the entire old-endpoint-to-public-endpoint migration with lost acknowledgments. That transition still needs a controlled acceptance run.
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.
Correcting the endpoint alone could not fix the numeric GUID defect subsequently identified in #15. Current diagnostics make those layers distinguishable.
Next steps
Finish the three live validation items above while preserving journal scope, exact request identities, and bank accounting. Record installed versions/hashes and ledger results; do not rewrite URLs or delete journals as a substitute for settlement.
Reviewed 3bb0b5178e40ea6d322093283edb39f160542a07 and its EC companion 54f43019942e19ca4e74ca92d8aed4d602fb4300 against scripts main 463b4bcc51871ef4f24f6360c35ff11c443be138. The endpoint implementation remains correct; leaving the outstanding live validation items open.
**Checklist**
- [x] **Public endpoint and private identity.** Both scripts still use the fixed public `/api/bank` URL, ignore stale URL dvars, and retain EC-provided server/token authentication.
- [x] **Agent and documentation.** Current EC generates the private token without changing the host controller URL; both repos describe the separate transports and coordinated migration.
- [x] **Journal migration design.** EC's agent accepts public and enrolled-controller legacy scopes for operation-bound settlement, rejects arbitrary endpoints, and retains unresolved storage. This session's EC agent suite passed all 340 tests at 82e07ea33eedddd7b707f5e62c12d2e606a1e680.
- [x] **Versions and override regression.** Script/changelog updates are present and the fixed-endpoint fixtures pass.
- [ ] **Live commands and settlement retry on both games.** Earlier verified live evidence now includes T6 balance/deposit/withdrawal and T5 balance, but not the full two-engine matrix.
- [ ] **Live empty-account behavior.** Portable checks cover zero balance and insufficient-balance `.w all`; complete in-game evidence remains outstanding.
- [ ] **Live endpoint transition.** The confirmed Moon malformed-GUID cancellation recovery is not proof of the entire old-endpoint-to-public-endpoint migration with lost acknowledgments. That transition still needs a controlled acceptance run.
**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.
- Correcting the endpoint alone could not fix the numeric GUID defect subsequently identified in #15. Current diagnostics make those layers distinguishable.
**Next steps**
- Finish the three live validation items above while preserving journal scope, exact request identities, and bank accounting. Record installed versions/hashes and ledger results; do not rewrite URLs or delete journals as a substitute for settlement.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Bank requests currently use
tws_bank_url, which the host agent generates from its own controller address. That address may differ from the public endpoint reachable by game containers.Use
https://ec.thewrightserver.net/api/bankdirectly for both T5 and T6 bank requests. Keep the existing per-instance authentication.t5/scripts/tws_t5_bank.gsc:9-11readstws_bank_urland uses the public endpoint only as a fallback; T6 follows the same configuration pattern.agent/ec_agent.py:1960-1963derives the game-bank URL from the agent's configured controller address when generatingelectric_cherry_bank.cfg.Moon's bank failures prompted this change, but an incorrect endpoint has not yet been confirmed as their cause. Related bank work: scripts #3 and EC #146.
Fix
https://ec.thewrightserver.net/api/bankin both bank scripts, without a dvar override.tws_server_idand the privatetws_bank_tokensupplied through EC's generated configuration.tws_bank_urlinelectric_cherry_bank.cfg; leave the host agent's own controller connection unchanged.Validation
tws_bank_urlsetting remains..b, deposits, withdrawals, and settlement retries..w allreturns an insufficient-balance message.Reviewed
3bb0b5178e, 54f43019942e19ca4e74ca92d8aed4d602fb4300 (josh/electric-cherry). Implementation reviewed; leaving this open for the remaining validation.Checklist
tws_bank_urlvalues; initialization/request fixtures verify this.tws_server_idand the private token; request fixtures verify authorization.Review notes
3bb0b5178eand EC main at fa0baa8db5f7629de3f58f2e6bf8da0568018be0.node tools/check_bank.mjs: 28 fixtures passed across T5 and T6.python3 tools/test_plugin_bank.pypassed both engines using their pinned JSON headers, ASan/UBSan, native journal/acknowledgment tests, separate-process recovery and component syntax checks..bbut 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
Reviewed scripts main
3bb0b5178eagain as part of the all-ticket audit, without requiring commit references. The previous verdict remains: implementation present, live acceptance incomplete; leaving open.Checklist
tws_bank_urlvalues; initialization/request fixtures verify this.tws_server_idand the private token; request fixtures verify authorization.Review notes
3bb0b5178eand EC main at fa0baa8db5f7629de3f58f2e6bf8da0568018be0.node tools/check_bank.mjs: 28 fixtures passed across T5 and T6.python3 tools/test_plugin_bank.pypassed both engines using their pinned JSON headers, ASan/UBSan, native journal/acknowledgment tests, separate-process recovery and component syntax checks..bbut 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
Current audit evidence
Reviewed
3bb0b5178eand its EC companion 54f43019942e19ca4e74ca92d8aed4d602fb4300 against scripts main463b4bcc51. The endpoint implementation remains correct; leaving the outstanding live validation items open.Checklist
/api/bankURL, ignore stale URL dvars, and retain EC-provided server/token authentication..w all; complete in-game evidence remains outstanding.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.Next steps