aboutsummaryrefslogtreecommitdiff
path: root/internal/game
diff options
context:
space:
mode:
Diffstat (limited to 'internal/game')
-rw-r--r--internal/game/act_burn.go2
-rw-r--r--internal/game/hacking/liars_dice_test.go1
-rw-r--r--internal/game/hardening_tick_lifecycle_test.go3
-rw-r--r--internal/game/money.go5
-rw-r--r--internal/game/sys_triggers.go3
-rw-r--r--internal/game/tick_systems.go6
-rw-r--r--internal/game/tick_systems_test.go11
-rw-r--r--internal/game/wallet_test.go3
8 files changed, 14 insertions, 20 deletions
diff --git a/internal/game/act_burn.go b/internal/game/act_burn.go
index 706d0a7..4b3b437 100644
--- a/internal/game/act_burn.go
+++ b/internal/game/act_burn.go
@@ -424,7 +424,7 @@ func (g *Game) broadcastDrop(p *player.Player, itemID, itemName string) {
func (g *Game) FireTick() {
// Mandatory tick-system guard: the master per-tick subscriber can fire
// before SetHub during startup, and burning out a fire reaches
- // cancelStokers -> g.Hub.PlayersInRoom. See dev_guide/tick_order.md.
+ // cancelStokers -> g.Hub.PlayersInRoom.
if g.Hub == nil {
return
}
diff --git a/internal/game/hacking/liars_dice_test.go b/internal/game/hacking/liars_dice_test.go
index 83bed93..03f2b8d 100644
--- a/internal/game/hacking/liars_dice_test.go
+++ b/internal/game/hacking/liars_dice_test.go
@@ -10,7 +10,6 @@ import (
// "illegal use of non-zero Builder copied by value" on ordinary input — a
// forced challenge resolves on the very first bid. A panic here runs on the
// game owner goroutine, which has no recovery, so it terminated the server.
-// See dev_guide/concurrency.md for the owner's no-recovery guarantee.
func TestLiarsDiceForcedChallengeDoesNotPanic(t *testing.T) {
g := NewLiarsDiceGame()
diff --git a/internal/game/hardening_tick_lifecycle_test.go b/internal/game/hardening_tick_lifecycle_test.go
index d16c2c8..d9a348a 100644
--- a/internal/game/hardening_tick_lifecycle_test.go
+++ b/internal/game/hardening_tick_lifecycle_test.go
@@ -50,8 +50,7 @@ func TestFireTickNilHubIsSafe(t *testing.T) {
// TestSequenceTickFiresInDeterministicOrder guards the sorted iteration over
// g.sequences: map iteration randomly chose which simultaneous sequence
-// advanced first, contradicting the determinism contract in
-// dev_guide/tick_order.md.
+// advanced first, contradicting the deterministic-order contract.
func TestSequenceTickFiresInDeterministicOrder(t *testing.T) {
g := escapeTestGame()
g.sequences = make(map[string]*sequence)
diff --git a/internal/game/money.go b/internal/game/money.go
index 4c3316e..6317df8 100644
--- a/internal/game/money.go
+++ b/internal/game/money.go
@@ -6,8 +6,7 @@ package game
// economy journal and no two-phase recovery: startup simply refunds any stake
// still listed as pending, because a listed stake means the process died
// before the round resolved. Two-phase journal recovery was deliberately
-// removed as out of scope for a game this size; see
-// dev_guide/concurrency.md ("Durable money") before reintroducing it.
+// removed as out of scope for a game this size.
import (
"crypto/rand"
@@ -128,7 +127,7 @@ func addCreditsChecked(a, b int) (int, error) {
// same save that settled them.
//
// This is intentionally the entire recovery story. Two-phase journal recovery
-// is out of scope for this game (see dev_guide/concurrency.md).
+// is out of scope for this game.
func (g *Game) recoverPendingWagers() {
names, err := g.AccountStore.ListCharacterNames()
if err != nil {
diff --git a/internal/game/sys_triggers.go b/internal/game/sys_triggers.go
index d1ce336..790eb12 100644
--- a/internal/game/sys_triggers.go
+++ b/internal/game/sys_triggers.go
@@ -101,8 +101,7 @@ func (g *Game) startSequence(sess *net.Session, p *player.Player, steps []behavi
func (g *Game) SequenceTick() {
g.seqMu.Lock()
// g.sequences is a map: collect its keys and sort them so the per-tick
- // order in which simultaneous sequences advance is reproducible (the
- // determinism contract in dev_guide/tick_order.md).
+ // order in which simultaneous sequences advance is reproducible.
keys := make([]string, 0, len(g.sequences))
for key := range g.sequences {
keys = append(keys, key)
diff --git a/internal/game/tick_systems.go b/internal/game/tick_systems.go
index f85cdfa..8311ccf 100644
--- a/internal/game/tick_systems.go
+++ b/internal/game/tick_systems.go
@@ -1,15 +1,15 @@
package game
// tickSystem is one step of the canonical per-tick system sequence. Name is
-// the human-readable identifier also encoded in dev_guide/tick_order.md;
-// Run invokes the underlying system. The slice tickSystemOrder is the single
+// the human-readable identifier for the step; Run invokes the underlying
+// system. The slice tickSystemOrder is the single
// executable source of truth for the order in which per-tick systems fire.
//
// The order is what callers like the master subscriber in cmd/thoi/main.go
// (registered as engine subscription ID 1, which the engine fires before all
// dynamically-registered combat/aggro/respawn callbacks per processTick's
// registration-ID sort) depend on. Reordering this slice is a breaking change
-// to game behavior; keep dev_guide/tick_order.md in sync.
+// to game behavior.
type tickSystem struct {
Name string
Run func(*Game)
diff --git a/internal/game/tick_systems_test.go b/internal/game/tick_systems_test.go
index 82028d6..a701fd7 100644
--- a/internal/game/tick_systems_test.go
+++ b/internal/game/tick_systems_test.go
@@ -13,8 +13,8 @@ import (
)
// expectedTickSystemOrder is the canonical per-tick system sequence. It MUST
-// stay in sync with tickSystemOrder in tick_systems.go and with
-// dev_guide/tick_order.md. Updating one without the others is a bug.
+// stay in sync with tickSystemOrder in tick_systems.go. Updating one without
+// the other is a bug.
//
// The list is intentionally spelled out here (rather than derived from
// tickSystemOrder) so the test fails loudly when someone reorders, adds, or
@@ -48,17 +48,16 @@ var expectedTickSystemOrder = []string{
// TestTickSystemOrder asserts the canonical per-tick system sequence matches
// the documented order exactly. This is the regression guard referenced in
-// dev_guide/tick_order.md and in the master subscriber doc comment in
-// cmd/thoi/main.go.
+// the master subscriber doc comment in cmd/thoi/main.go.
func TestTickSystemOrder(t *testing.T) {
got := TickSystemOrder()
if len(got) != len(expectedTickSystemOrder) {
- t.Fatalf("tick system count changed: got %d, want %d (update expectedTickSystemOrder and dev_guide/tick_order.md)",
+ t.Fatalf("tick system count changed: got %d, want %d (update expectedTickSystemOrder)",
len(got), len(expectedTickSystemOrder))
}
for i, want := range expectedTickSystemOrder {
if got[i].Name != want {
- t.Errorf("tick system %d: got %q, want %q (reordered? update dev_guide/tick_order.md)",
+ t.Errorf("tick system %d: got %q, want %q (reordered?)",
i, got[i].Name, want)
}
}
diff --git a/internal/game/wallet_test.go b/internal/game/wallet_test.go
index a74ccd5..56789d8 100644
--- a/internal/game/wallet_test.go
+++ b/internal/game/wallet_test.go
@@ -3,8 +3,7 @@ package game
// Single-file money wallet regressions: a wager debits and records a pending
// stake in one atomic character save, a settlement credits and clears the
// stakes it returns in one save, a failed save reverts, and startup refunds
-// anything left in flight. See internal/game/money.go for the design and
-// dev_guide/concurrency.md for why two-phase recovery is out of scope.
+// anything left in flight. See internal/game/money.go for the design.
import (
"os"