CLAUDE.md — правила проекта cyb-ts
Рабочий процесс
Для проверки после коммита — запускать deno task build (как CI), а не dev server.
Dev server (deno task start) запускать только по явному запросу пользователя.
Проверка после изменений
После каждого изменения кода — обязательно пересобирать и проверять результат:
- Web (cyb-ts):
deno task build— полный production билд - Desktop (cyb-shell):
cd cyb && make dmg— release билд + DMG - Не оставлять только
cargo check— нужен полныйmake dmgчтобы убедиться что артефакт обновился - DMG находится в
cyb/target/release/cyb.dmg
Git
- Push только по запросу — никогда не пушить без явного указания пользователя
- Атомарные коммиты — один коммит на одну функцию/изменение, не смешивать несвязанные правки
Планы и решения
Все утверждённые планы сохраняются в .claude/plans/, а не во временные папки.
Файл reference/roadmap.md — общий roadmap проекта.
Стек
- Runtime: Deno 2 (task runner, build, dev server, lint)
- Bundler: Rspack 1.7 (Rust-based)
- Package manager: Deno (
deno installдля node_modules) - Test runner: отсутствует (Jest удалён, тесты в src/ временно не запускаются)
- Framework: React 18, TypeScript 5
Сборка
# Установка зависимостей:
# Все команды через Deno:
Важно:
DENO_NO_PACKAGE_JSON=1используется во всех deno tasks чтобы Deno не парсил package.jsonpackage.json scriptsудалены (кромеgenerate-graphql-types) — всё вdeno.json- Yarn больше не нужен —
react-force-graphзаменён наreact-force-graph-3d(без aframe/VR/AR)
Структура
src/components/— переиспользуемые UI компонентыsrc/containers/— контейнеры страниц (legacy, мигрировать в pages/features)src/pages/— страницыsrc/features/— фичи (feature-sliced подход)src/services/— сервисы (IPFS, backend, scripting, etc.)src/redux/— Redux storesrc/utils/— утилиты (encoding.ts — замена Buffer для Web APIs)src/contexts/— React context providerssrc/hooks/— кастомные хукиsrc/generated/— сгенерированные GraphQL типы
Безопасность
- Iframe: sandbox атрибут обязателен для любого IPFS/gateway контента
- CSP: Content-Security-Policy задана в
src/index.html - Scripting output: DOMPurify санитизация Rune script content_result в
src/services/scripting/services/postProcessing.ts - Secrets: хранятся в localStorage (unencrypted) — ключ
secrets
Node polyfills
@rspack/plugin-node-polyfillудалён — был глобальный полифилл всех Node APIsrc/utils/encoding.ts— замена Buffer.from() на Web APIs (toHex, toBase64, toBytes, fromBytes)ProvidePluginточечно инжектитprocessиBufferдля сторонних пакетовresolve.fallbackв rspack конфиге — полифиллы для сторонних пакетов (crypto, stream, etc.)