Imported from creepereye1204/hordegrid (
AGENTS.md). Install upstream withnpx skills add creepereye1204/hordegrid. Copyright stays with the author.
AGENTS.md — hordegrid
에이전트용 지도다. 백과사전이 아니다. "어디를 봐야 하는지"만 적고 세부는
docs/에 둔다. 이 파일이 120줄을 넘기면 내용을docs/로 내리고 링크만 남겨라. (CLAUDE.md는 이 파일의 심볼릭 링크)
한 줄 요약
서버 없이 브라우저끼리 WebRTC로 붙는 2~4인 협동 탑다운 좀비 서바이벌(박스헤드류).
게임 로직은 Rust → WASM 결정론적 시뮬레이션, 동기화는 GGRS 롤백, 매칭은 trystero(Nostr 공개 릴레이),
배포는 GitHub Pages 정적 호스팅. hordegrid는 가칭 — 박스헤드 이름·에셋은 쓰지 않는다 → SECURITY.md
작업 시작 전 반드시 읽을 것 (순서대로)
- docs/design-docs/core-beliefs.md — 절대 규칙. 위반 PR은 무조건 반려
- ARCHITECTURE.md — 레이어와 의존 방향
- docs/PLANS.md →
docs/exec-plans/active/— 지금 뭘 하는 중인지 - 작업 영역별 문서 (아래 표)
작업 영역 → 문서
| 건드리는 곳 | 먼저 읽을 문서 |
|---|---|
crates/sim (게임 규칙) |
determinism.md, product-specs/ |
crates/net (GGRS) |
netcode-rollback.md, references/ggrs-llms.txt |
crates/web (wasm-bindgen 경계) |
wasm-boundary.md, references/wasm-bindgen-llms.txt |
web/src/net |
signaling.md, references/trystero-llms.txt |
web/ 렌더/입력/UI |
FRONTEND.md, DESIGN.md |
| CI/배포 | RELIABILITY.md, references/github-pages-llms.txt |
| 설계·최적화·품질 기준 | patterns.md, performance.md, code-quality.md, QUALITY_SCORE.md |
| 모바일 | mobile-play.md — 모든 UI/입력 변경은 터치에서도 동작해야 함 |
| 기능 추가 판단 | PRODUCT_SENSE.md |
| 연결 실측 | tools/net-probe, 0002 |
| 외부 API | docs/references/*-llms.txt — 기억으로 API 쓰지 말고 여기부터, 없으면 조사 후 추가 |
명령어 (계약 — 이름이 바뀌면 이 표부터 고친다)
just check # fmt --check, clippy pedantic -D warnings, cargo test, tsc, vitest, web/scripts/lint-arch.mjs
just netsim # crates/net/tests/netsim.rs: 4피어 GGRS, 지연 250ms·지터 80·손실 10% 포함 체크섬 일치
just sim-test # sim 단위·결정론·게임플레이 AC 테스트 (release)
just diag # 봇 플레이 헤드리스 진단 (웨이브/킬/생존)
cargo run -p hg-sim --release --example bench # 최악 step 비용
just dev # wasm(debug) + wasm-bindgen + vite dev
just build # release wasm + wasm-opt + vite build → web/dist
# 미구현(TD-010): just desync (native↔wasm 비교), just gen-docs
PR 전 just check 필수. crates/net·입력 인코딩 변경 시 just netsim 추가.
Rust 툴체인 없이 UI 작업: cd web && npx vite → src/core/mock-wasm.ts가 sim 대신 동작(네트워크 게임 불가).
작업 루프
- 계획: 30분 넘는 작업은
docs/exec-plans/active/NNNN-slug.md생성 (PLANS.md 템플릿) - 구현: 체크박스 갱신. 결정이 바뀌면 계획 문서의 Decision log에 한 줄
- 검증: 위 명령어. 수치 예산은 QUALITY_SCORE.md
- 정리: 계획을
completed/로 이동, 남은 부채는 tech-debt-tracker.md - 문서와 코드가 다르면 문서를 먼저 고친다. 틀린 문서는 없는 문서보다 해롭다
하지 말 것 (자주 틀리는 것)
crates/sim에서f32/f64,HashMap/HashSet,std::time,rand,web-sys,Vec/Box(clippy.toml이 막음)State에Pod아닌 필드 추가 → 스냅샷·체크섬 붕괴.bytemuck::Podderive가 컴파일 타임에 막는다Fixed에 원시+ - *대신i32직접 연산 → release에선 조용히 wrap.fx헬퍼만 사용- 렌더/UI 코드가 sim 상태를 쓰기, 로컬 입력 즉시 반영 같은 "직접 예측" → GGRS가 한다
- JS에서
memory.buffer기반 TypedArray 캐싱 → wasm-boundary.md - 게임/시그널링 서버 추가,
SharedArrayBuffer·wasm 스레드 (Pages는 COOP/COEP 헤더 불가) wasm-pack도입 (rustwasm org 아카이브 이후 CLI 직접 사용으로 결정),docs/generated/손수정