Files
rubik/docs/code-standards.md

2.1 KiB

Code Standards

Language & Toolchain

  • ES modules, modern JS (no TypeScript).
  • Svelte 5 with runes ($state, $derived, $effect, $props, $bindable).
  • Three.js for WebGL. Tween.js for animation.
  • Vite as build tool. Dev: npm run dev. Prod: npm run build.

Naming

  • Plain JS files: kebab-case with descriptive names (apply-move.js, pointer-gesture.js).
  • Svelte components: PascalCase.svelte per ecosystem convention (CubeView.svelte).
  • Functions and variables: camelCase. Constants: UPPER_SNAKE for module-level tuning knobs (DEAD_ZONE_PX, PIXELS_PER_QUARTER_TURN).

File Size

  • Code files must stay under 200 lines of code.
  • Refactor when a file exceeds the limit; split by concern (e.g., pointer-gesture.js + gesture-math.js).

Architecture Rules

  • Core (src/lib/core/) is pure JS. No Svelte, no Three.js imports. Authoritative cube state, move algebra, parser, scrambler, solved check. Unit-testable from Node.
  • Render (src/lib/render/) is the Three.js layer. Owns scene/camera/renderer, mesh construction, animation. May import from core/ but never the other way around.
  • Controls (src/lib/controls/) handles user input. Imports from render/ and core/ as needed.
  • Views (src/views/) are Svelte components. Each owns layout + Svelte state. May call into the other layers but never the inverse.
  • The Three.js cube model and the JS cube state are kept in sync explicitly via applyMove + syncMeshes (or, post-animation, via pivot.attach baking).

Style

  • Prefer composition over inheritance.
  • Fail loudly during development (throw on unknown move tokens), fail gracefully at runtime.
  • Comments: short, explain why, not what. File headers give a one-sentence purpose.

Git / Commits

  • Conventional commits (feat:, fix:, refactor:, chore:).
  • Never commit dotenv files, build artifacts, or secrets.
  • Run npm run build before pushing to catch compile errors.

Testing Strategy

  • Pure-JS smoke test at scripts/smoke-test-core.mjs covers the cube algebra.
  • No automated UI tests yet (matches sokoban). Manual smoke test: scramble → undo until solved → confirm timer stops.