Monorepo felépítés
A repó pnpm + Turborepo (nem npm-workspaces). A napi fejlesztői workflow:
cd apps/desktop && npm start (build:renderer + build:main + electron).
craftingtable/
├─ apps/
│ ├─ desktop/ # Electron: main + preload + csomagolás
│ │ ├─ src/main/ # sidecar indítás, ablakok, menü, updater
│ │ ├─ src/preload/ # contextBridge (port, token, MCP-token, OS-hívások)
│ │ ├─ electron-builder.yml
│ │ └─ resources/bin/ # ide kerül a Go bináris build-időben
│ └─ web/ # ugyanaz a React app, RemoteEngineClient-tel
├─ packages/
│ ├─ engine-client/ # EngineClient interfész + Local/Remote impl.
│ └─ …
├─ engine/ # Go modul — lásd Architektúra → Rétegek
│ ├─ cmd/craftingtable-engine/
│ ├─ internal/
│ └─ schemas/ # JSON Schema fájlok — az IGAZSÁGFORRÁS
├─ turbo.json
└─ pnpm-workspace.yaml
A típus-szerződés
A JSON sémák egyetlen forrása az engine/schemas/*.json (JSON Schema 2020-12). Ebből
generálódik a Go struct (go generate) és a TypeScript típus. A CI újragenerál és
git diff --exit-code-dal ellenőrzi — ha eltér, piros build. Így soha nem csúszhat el a Go
és a TS típus.
Kódkonvenciók (kivonat)
- Go: rétegszabály
transport → domain → store; hiba-wrapping (%w); szentinel hibák a domainben; minden I/Ocontext.Context-tel; atomi fájlírás (temp +rename). - TS/React:
strict: true,anytilos; a UI-ban tilos közvetlenfs/child_process/path— minden azEngineClient-en megy. Nincs külön state-management-könyvtár, sima React Context +useState/useReducer+ sajátuse-entityhook. - Commit: Conventional Commits (
feat(structure): …). Egy PR = egy user story vagy annak egy AC-je.