Files
snake-python/dbschema/default.gel
T
daniel156161 a2414f0b3d
Build and Push Docker Container / build-and-push (push) Successful in 2m18s
feat: add Zenith strategy and move latency tracing
- Register Zenith 1.1 with balanced duel verdicts and forced-outcome overrides.
- Prioritize permanent-trail space in Constrictor and health-aware hazard routes.
- Deduct executor queue delays and return fallback directions on move timeouts.
- Correlate response headers, replay timings, and sampled structured trace logs.
- Move shared metrics publication off the response path without losing local counts.
- Allow configurable tournament opponents and add a psql helper recipe.
- Preserve empty latency values through compact replay encoding and migration.
- Update Arena game links and use default assets for missing customizations.
- Cover strategy, HTTP lifecycle, tracing, replay codecs, and dashboard behavior.
- Validate with 260 passing Python tests, 4 skips, and 2 passing JavaScript tests.
2026-11-05 01:11:31 +01:00

96 lines
1.9 KiB
Plaintext

module default {
function is_winner_me(winner: str) -> bool
using (winner = "me");
function gameboard_url(id: uuid) -> str
using ("https://arena.battlesnake.com/games/" ++ <str>id);
type GameBoard {
overloaded required id: uuid {
readonly := true;
constraint exclusive;
}
url := gameboard_url(.id);
required created_at: datetime {
readonly := true;
}
required turns: int32 {
readonly := true;
}
required map: str {
readonly := true;
default := "standard";
}
required single type: GameType {
readonly := true;
on source delete delete target if orphan;
}
required single ruleset: Ruleset {
readonly := true;
on source delete delete target if orphan;
}
required winner: str {
readonly := true;
}
multi moves: Moves {
default := <Moves>{};
on source delete delete target;
on target delete allow;
}
required single snake: Snake {
readonly := true;
on source delete delete target if orphan;
}
is_winner_me := is_winner_me(.winner);
has_moves := exists(.moves);
}
type GameType {
required name: str {
readonly := true;
}
required is_ladder: bool {
readonly := true;
}
constraint exclusive on ( (.name, .is_ladder) );
}
type Ruleset {
required name: str {
readonly := true;
}
required version: str {
readonly := true;
}
required settings: json {
readonly := true;
}
constraint exclusive on ( (.name, .version, .settings) );
}
type Snake {
required type: str {
readonly := true;
}
constraint exclusive on ( .type );
}
type Moves {
required turn: int32 {
readonly := true;
}
required snake_move: str {
readonly := true;
}
required game_board: json {
readonly := true;
}
calculations: array<json> {
readonly := true;
}
}
}