← All decisions

Category: architecture

  1. #0002Restructure into a single glemy package with 4 target modules (io, pe, cs, render), rooted at the repo root
  2. #0003No bundler for the browser build; raw Gleam ESM output plus a hand-written index.html
  3. #0004Model game entities as a plain immutable List(Entity) in pe, not an ECS
  4. #0010Present the game runner's frames via Canvas2D putImageData, not a WebGPU canvas context
  5. #0015Present via a native GPUCanvasContext under Deno, not TypeScript+Playwright, for maximum type safety
  6. #0031Architecture cleanup: deleted the unused glemy/cs compute-shader layer, added ARCHITECTURE.md as the standing rule set
  7. #0039Formal modularization thresholds (ARCHITECTURE.md), grounded in SRP/cohesion research not line-count alone -- and one real extraction the audit found: pe/collision_sweep.gleam
  8. #0040Systematic DevOps tooling organization: a researched taxonomy (kind, packaging weight, fixture placement, discoverability) for tools/, not an ad hoc layout
  9. #0041The project's public website (goals, devlog, live demo) lives in a separate glemy-website repo, not this one
  10. #0042Establish a project-level Technical Architecture Document: engine/game boundary, deployment/live-demo strategy, and versioning policy
  11. #0044Generalize pe's SoundEvent into GameEvent, returned as #(Model, List(GameEvent)) from tick rather than carried as a Model field
  12. #0045Content-hash glemy-website's built static assets: style.css per-file, the play-demo build as one renamed directory
  13. #0046Split the live demo into pinned stable and always-latest edge release channels, promoted via a committed ref file
  14. #0047Formalize the Core API surface and introduce the glemy/games/<name>/ convention, moving all Suika-specific rule logic out of pe
  15. #0048Rename pe to physics, pair render colors with entities instead of a parallel list, give render.Canvas a public constructor, and fix doc-comment drift left by decision 0047
  16. #0049Extend the Core API with three small utility modules (cooldown, stopwatch, random) and physics.entity_count, and reject a generic PreviewQueue abstraction
  17. #0050Add physics/bounds.clamp_x and physics.settle_all, reject a bounds.y_from_top helper, and fix a real float.clamp/bounce_axis divergence on degenerate bounds
  18. #0051Split glemy/game.gleam into glemy/game_tiers.gleam plus a shared game_ffi.mjs, in preparation for a second game runner
  19. #0052Build Breakout's pure game logic (glemy/games/breakout, rect/brick/paddle) with rectangles kept entirely outside physics, and confirm physics.update does not generalize to a second genre
  20. #0053Wire Breakout's rendering/input (glemy/game_breakout), redesign Brick with a stable id for DOM reconciliation, and extract shared browser-check bootstrap at its second real caller
  21. #0055Add Breakout to glemy-website's game catalog, generalizing game_card into a parameterized component at its second real caller
  22. #0057Fix the Breakout stable-channel deploy crash and replace decision 0046's manual-only stable promotion with CI-gated automatic promotion
  23. #0058Promote circle-vs-Rect detection and the x-fraction/rect-to-CSS helpers from games/breakout into Core, at RM-034's second real caller
  24. #0059Build the platformer's pure game logic (glemy/games/platformer), confirming a third distinct wall/landing policy and a real Landed-event design bug found by direct testing
  25. #0060Wire the platformer's rendering/input (glemy/game_platformer), verified via a new browser-check using captured-GPU-uniform position checks
  26. #0061Close out RM-034: circle-vs-Rect detection generalizes to Core, wall/landing restitution policy does not (three games, three distinct answers)
  27. #0062Decompose wall-handling into caller-parameterized Core primitives (resolve_axis/resolve_high_only), parameterize physics.update's wall step, instead of leaving it unused by 2 of 3 games
  28. #0063Dedupe a Shell-side pattern into game_ffi.mjs's setElementVisibilityMessage, mirroring decision 0062's Core-side reasoning one layer up
  29. #0064Extract the three reference games into a new glemy-games repository
  30. #0065Set Hex-publish metadata (0.1.0, BSD-3-Clause) and audit the public API surface, informed by glemy-games as a real external consumer