Add agent config with project guide
This commit is contained in:
parent
98550e6395
commit
d5cf379e1f
1 changed files with 82 additions and 0 deletions
82
.claude/CLAUDE.md
Normal file
82
.claude/CLAUDE.md
Normal file
|
|
@ -0,0 +1,82 @@
|
|||
playscii - ascii art and game creation tool (v9.18)
|
||||
|
||||
desktop GUI app using SDL2 + OpenGL. NOT a web app, no server component.
|
||||
originally from https://heptapod.host/jp-lebreton/playscii (mercurial).
|
||||
we maintain our own git repo.
|
||||
|
||||
|
||||
running
|
||||
-------
|
||||
just run launch the app (uv run python playscii.py)
|
||||
just check lint gate (ruff check + format)
|
||||
just lint ruff check --fix + ruff format
|
||||
just typecheck ty check (601 errors, legacy code, not in check gate)
|
||||
just test pytest (no tests yet, not in check gate)
|
||||
|
||||
|
||||
project structure
|
||||
-----------------
|
||||
all python source lives at the repo root (no src/ layout)
|
||||
~50 .py files, flat structure, no packages
|
||||
|
||||
playscii.py main entry point, app init, SDL2/OpenGL setup
|
||||
art.py art/canvas management, the core data model
|
||||
ui*.py ~20 UI modules (dialogs, panels, menus, toolbar, etc.)
|
||||
game_*.py game engine (objects, rooms, world, HUD)
|
||||
renderable*.py rendering pipeline (sprites, lines, framebuffer)
|
||||
formats/ import/export handlers (ANS, ATA, BMP, EDSCII, PNG, GIF, TXT)
|
||||
games/ bundled example games (crawler, fireplace, flood, maze, shmup, etc.)
|
||||
charsets/ 30+ classic computer character sets (.char + .png)
|
||||
palettes/ color palette definitions
|
||||
shaders/ GLSL shader files
|
||||
artscripts/ art animation scripts (.arsc files)
|
||||
art/ sample ASCII art (.psci files)
|
||||
docs/ documentation and design notes
|
||||
ui/ UI image resources
|
||||
|
||||
|
||||
dependencies
|
||||
------------
|
||||
runtime: appdirs, numpy, Pillow, PyOpenGL, PySDL2, packaging
|
||||
system: libSDL2, libSDL2_mixer (must be installed on the OS)
|
||||
dev: ruff, pytest
|
||||
|
||||
|
||||
gotchas
|
||||
-------
|
||||
art scripts and exec():
|
||||
art.py imports random at module level with a noqa comment. art scripts
|
||||
(.arsc files) are loaded via exec() in art.py's scope. they use random
|
||||
without importing it themselves. do NOT remove that import even though
|
||||
ruff flags it as unused. same pattern may apply to other "unused" imports
|
||||
in art.py — check before removing anything.
|
||||
|
||||
pdoc detection:
|
||||
playscii.py has a contextlib.suppress block that tries to import pdoc.
|
||||
the import MUST stay inside the suppress block. if it gets moved or
|
||||
removed, pdoc_available becomes unconditionally True and the help menu
|
||||
breaks when pdoc isn't installed.
|
||||
|
||||
SDL2 init ordering:
|
||||
many modules import from playscii.py's namespace or expect SDL2 to be
|
||||
initialized before they run. import order in playscii.py matters — E402
|
||||
is disabled for this reason.
|
||||
|
||||
mutable default arguments:
|
||||
B006 is disabled. many functions use mutable defaults (lists, dicts).
|
||||
changing these could alter behavior since some code may rely on the
|
||||
shared mutable state. do not "fix" these without testing.
|
||||
|
||||
variable naming:
|
||||
E741 is disabled. single-letter vars (l, x, y, z, i, r, g, b) are
|
||||
everywhere in the math/rendering/game code. this is intentional.
|
||||
|
||||
|
||||
ruff config
|
||||
-----------
|
||||
rules: E, F, I, UP, B, SIM
|
||||
13 rules are explicitly ignored (see pyproject.toml for rationale)
|
||||
line-length: 88, formatter handles what it can
|
||||
|
||||
when adding new code, write it clean. the ignored rules are concessions
|
||||
to legacy code, not a style guide for new work.
|
||||
Loading…
Reference in a new issue