СИСТЕМНАЯ ИНСТРУКЦИЯ: Это ГЛАВНАЯ директива для всех сессий разработки. Ты ОБЯЗАН строго следовать этому жизненному циклу.
- Чтение отчета: Найди последний файл
doc/Sessions/SessionXXX.md. - ГЛУБОКИЙ АНАЛИЗ ИСТОРИИ (КРИТИЧНО):
- Раздел "Git commits" в отчете — это ключ к контексту.
- Ты ОБЯЗАН просмотреть каждый коммит из списка, используя
git show --stat <hash>(чтобы видеть файлы) иgit show <hash>(чтобы видеть изменения). - ЦЕЛЬ: Полностью восстановить в памяти, какие файлы менялись, какая логика была добавлена/изменена, чтобы продолжить работу бесшовно, как будто перерыва не было.
- Просто прочитать сообщение коммита — НЕДОСТАТОЧНО.
- План: Изучи раздел "Instructions for Next Session" из отчета.
- Контекст: Прочти архитектурные документы, указанные в отчете.
- Отчет: Создай или обнови отчет
doc/Sessions/SessionXXX.mdпо следующему шаблону:
# Session <N> — <Краткое название темы сессии>
**Date:** YYYY-MM-DD HH:MM (Timezone)
**Branch:** <branch_name>
**Version:** <current_version>
---
# 1. Work Done in This Session
## Work summary
- <Краткое описание выполненной задачи 1>
- <Краткое описание выполненной задачи 2>
- <Результаты сборки/тестов>
## Git commits
(ВАЖНО: Этот список нужен для следующей сессии, чтобы восстановить контекст через git show)
- `<hash> <commit_message>`
- `<hash> <commit_message>`
---
# 2. Instructions for Next Session
## Required documents to review before work
1. `doc/SolidWorks-WorkFlow/README.md`
2. `doc/SolidWorks-WorkFlow/Docs_Index.md`
3. `doc/SolidWorks-WorkFlow/System/SystemArchitecture.md`
4. `doc/TODO/todo-plan.md`
5. `doc/Sessions/Session<N>.md` (THIS REPORT)
## Plans for next session
- <Что осталось сделать>
- <Какие модули требуют внимания>- Микро-классы: Никаких файлов > 300 строк. Логика должна быть разбита на маленькие классы с единственной ответственностью.
- Фасады: Каждый модуль должен иметь Фасад (
*facade.ts), который выступает ЕДИНСТВЕННОЙ точкой входа для внешнего взаимодействия. - Закрытые модули: Если модуль работает и проверен, НЕ ТРОГАЙ ЕГО. Новый функционал = Новый модуль (или строго аддитивные изменения).
Перед тем как создать или обновить todo-plan.md, необходимо:
- Создать или обновить Архитектурный документ в
doc/SolidWorks-WorkFlow/Contracts/(например,doc/SolidWorks-WorkFlow/Contracts/NewFeature_Architecture.md). - В этом документе утвердить: проблему, решение, структуру классов, контракты.
- Только после утверждения этого документа пользователем, мы берем его за основу и нарезаем на Фазы и Стримы в
todo-plan.md.
-
Источник правды:
doc/TODO/todo-plan.mdсодержит Стратегию. -
Операционный вид: Используй свой 'todo' для отслеживания текущего активного пункта из
todo-plan.md.todo-plan.md- может содержать несколько фаз и в каждой фазе несколько Stream с перечнем микро задач - не более 3-х файлов исправлений или вновь созданных. Полностью Реализованныйtodo-plan.mdпереименовывается с префиксом последней реализованной Фазы (например - todo-plan-phase3.md) и кладется в папку - doc/TODO/Archive/ На его месте создается новыйtodo-plan.mdпод новые задачи. -
Ограничение: Разбивай работу на Микро-задачи. Каждая задача должна затрагивать ≤ 3 файлов.
-
Шаблон todo-plan.md:
# План разработки (Development TODO Plan) ## Правила выполнения (Execution Rules): - **TODO Plan** состоит из Phase (Фаз). В каждой Phase некоторое колличество - Stream (стрим), в каждом Стриме - некоторое кол-во подзадач. - Каждая подзадача должна затрагивать не более 3 файлов. - Каждая подзадача оформляется парой пунктов: (1) реализация/изменения, (2) `Git Commit: ...` (отдельной строкой). - Если по факту разработки оказывается, что конкретная подзазача Stream затрагивает больше 3 файлов - такая задача должна быть разбита на более мелкие и список задач в Стриме переписывается.
-
Gates (автоматически через Husky hooks):
git commit→.husky/pre-commit:npm test,./scripts/check-architecture.sh,npm run lint,npm run check:tsprune,npx ultracite fixgit push→.husky/pre-push:npm run check:dup,npm run check:links- Ручной прогон этих команд обычно не нужен (только для диагностики).
-
Таргетные сборки выполняем вручную только когда нужно проверить затронутый пакет/клиент, и обязательно перед закрытием Stream/Phase:
npm run build --workspace <package>,npm run build:webview,npm run typecheck:webview.- Commit: После зеленых гейтов — Git Commit с максимально релевантным описанием (код + доки) и апдейт
todo-plan.md(дата, статус, хеш). - Stream завершается после того, как все его задачи закрыты таргетными сборками затронутых пакетов/клиентов и коммитами. Для серийных задач допускается диагностический прогон
npm run build --workspace <package>по цепочке (например, Claude → Codex → core), чтобы локализовать ошибки без запускаbuild-all. - Real-time Документация:
Любое изменение архитектуры/логики требует синхронного обновления и todo-plan.md и документации (
doc/SolidWorks-WorkFlow/System/SystemArchitecture.mdи др.) ДО коммита - чтоб измененные документы также попали в Git Commit. - Phase завершается на чистом дереве:
запускаем
./scripts/build-all.sh(он повышает версии и вызывает./scripts/build-release.sh --use-current-version), переносим tarball’ы вdoc/tmp/releases/, фиксируем результаты вdoc/Sessions/. - doc/TODO/todo-plan.md необходимо постоянно в риалтайме обновлять, после каждой подзадачи обязательный коммит, после каждого коммита его номер и наименование заносить, статус задачи тут же менять.
- [STATUS] <задача 1 — scope: ≤3 файлов/пакетов; ожидаемый commit message>
- [STATUS] Git Commit:
<commit_message>(hash: TBD) - [STATUS] <задача 2 — scope: ≤3 файлов/пакетов; ожидаемый commit message>
- [STATUS] Git Commit:
<commit_message>(hash: TBD)
Статусы: `TODO`, `IN_PROGRESS`, `DONE`, `BLOCKED`. Каждый пункт обязан иметь «scope» (файлы или пакеты) и целевой commit message; для пунктов `Git Commit` фиксируется хеш. Микрозадачи обновляются сразу после коммита. - Commit: После зеленых гейтов — Git Commit с максимально релевантным описанием (код + доки) и апдейт
Для каждой подзадачи Stream из todo-plan.md:
- Реализация: Пиши код (помни: Микро-классы, Фасады, классы не более 300 строк).
- Документация (Real-time): Если меняется логика или архитектура — ОБНОВИ
doc/SolidWorks-WorkFlow/System/SystemArchitecture.md(или другие доки) ПРЯМО СЕЙЧАС. Коммит должен содержать и код, и обновленную документацию. - Верификация: Гейты запускаются автоматически через Husky (
.husky/pre-commit,.husky/pre-push). Ручной прогон нужен только для диагностики:npm test ./scripts/check-architecture.sh npm run lint npm run check:tsprune npx ultracite fix npm run check:dup npm run check:links - Коммит: ТОЛЬКО после зеленых гейтов.
- Формат сообщения:
feat: <описание>илиfix: <описание> - Авто-обновление: Сразу отметь пункт как
[DONE]вtodo-plan.md, если фича завершена.
- Формат сообщения:
- НИКОГДА не обходи Husky hooks / quality gates (например
git commit --no-verify) иcheck-architecture.sh. - НИКОГДА не редактируй версии в
package.jsonвручную (используйbuild-all.sh). - ВСЕГДА держи
doc/SolidWorks-WorkFlow/System/SystemArchitecture.mdи другие связанные с подзадачей документы из папки - doc/ в синхронизации с изменениями кода (в том же коммите).
- Перед сборкой релиза актуализируй документы: в первую очередь
README.mdиCHANGELOG.md, а также связанные архитектурные материалы изdoc/. Релиз собирается только для версии, указанной в этих документах. - Перед началом убедись, что
npm installвыполнен — отсутствие зависимостей ломаетbuild:webview. - Закрой все микро‑задачи/стримы: для затронутых пакетов должны пройти таргетные
npm run build --workspace …(илиnpm run build:webview,npm run typecheck:webview) + гейты качества (обычно автоматически через.husky/pre-commitи.husky/pre-push). Только после этого чистим рабочее дерево. - Проверь, что
git statusпустой (никаких staged/unstaged). Версии пакетов/манифестов руками не меняем — это сделает скрипт. - Выполни
./scripts/build-all.shиз корня. Скрипт поднимет версии, пересоберёт Claude/Codex/Gemini, core, CEF launcher, UI и соберёт tarball’ы в~/.codeai-hub/releasesиdoc/tmp/releases/. Если что-то упало — исправь проблему и перезапусти толькоbuild-all.sh. - Снова убедись, что
git statusпустой (все изменения отbuild-all.shзакоммичены, если это отдельная итерация). - Выполни
./scripts/build-release.sh --use-current-version. Скрипт использует текущую версию изpackage.json, прогоняет финальные гейты (архитектура, type-check, compile, SDK exclusions, prune dev deps) и собирает VSIX. При падении повторно запускаем толькоbuild-release.shпосле исправления причин. - После успеха проверь вывод
scripts/build-release.sh: должны появиться строкиVerifying SDK exclusions,Removing dev dependencies...,✅ Package created. Забериcodeai-hub-<version>.vsixиз корня и при необходимости скопируй свежие tarball’ы из~/.codeai-hub/releasesвdoc/tmp/releases/. - Зафиксируй изменения (включая версии и манифесты), обнови
doc/TODO/todo-plan.md, создай новыйdoc/Sessions/SessionXXX.md. - Только после этого передавай VSIX или делись релизом.
This project uses Ultracite, a zero-config Biome preset that enforces strict code quality standards through automated formatting and linting.
- Format code:
npx ultracite fix - Check for issues:
npx ultracite check - Diagnose setup:
npx ultracite doctor
Biome (the underlying engine) provides extremely fast Rust-based linting and formatting. Most issues are automatically fixable.
Write code that is accessible, performant, type-safe, and maintainable. Focus on clarity and explicit intent over brevity.
- Use explicit types for function parameters and return values when they enhance clarity
- Prefer
unknownoveranywhen the type is genuinely unknown - Use const assertions (
as const) for immutable values and literal types - Leverage TypeScript's type narrowing instead of type assertions
- Use meaningful variable names instead of magic numbers - extract constants with descriptive names
- Use arrow functions for callbacks and short functions
- Prefer
for...ofloops over.forEach()and indexedforloops - Use optional chaining (
?.) and nullish coalescing (??) for safer property access - Prefer template literals over string concatenation
- Use destructuring for object and array assignments
- Use
constby default,letonly when reassignment is needed, nevervar
- Always
awaitpromises in async functions - don't forget to use the return value - Use
async/awaitsyntax instead of promise chains for better readability - Handle errors appropriately in async code with try-catch blocks
- Don't use async functions as Promise executors
- Use function components over class components
- Call hooks at the top level only, never conditionally
- Specify all dependencies in hook dependency arrays correctly
- Use the
keyprop for elements in iterables (prefer unique IDs over array indices) - Nest children between opening and closing tags instead of passing as props
- Don't define components inside other components
- Use semantic HTML and ARIA attributes for accessibility:
- Provide meaningful alt text for images
- Use proper heading hierarchy
- Add labels for form inputs
- Include keyboard event handlers alongside mouse events
- Use semantic elements (
<button>,<nav>, etc.) instead of divs with roles
- Remove
console.log,debugger, andalertstatements from production code - Throw
Errorobjects with descriptive messages, not strings or other values - Use
try-catchblocks meaningfully - don't catch errors just to rethrow them - Prefer early returns over nested conditionals for error cases
- Keep functions focused and under reasonable cognitive complexity limits
- Extract complex conditions into well-named boolean variables
- Use early returns to reduce nesting
- Prefer simple conditionals over nested ternary operators
- Group related code together and separate concerns
- Add
rel="noopener"when usingtarget="_blank"on links - Avoid
dangerouslySetInnerHTMLunless absolutely necessary - Don't use
eval()or assign directly todocument.cookie - Validate and sanitize user input
- Avoid spread syntax in accumulators within loops
- Use top-level regex literals instead of creating them in loops
- Prefer specific imports over namespace imports
- Avoid barrel files (index files that re-export everything)
- Use proper image components (e.g., Next.js
<Image>) over<img>tags
Next.js:
- Use Next.js
<Image>component for images - Use
next/heador App Router metadata API for head elements - Use Server Components for async data fetching instead of async Client Components
React 19+:
- Use ref as a prop instead of
React.forwardRef
Solid/Svelte/Vue/Qwik:
- Use
classandforattributes (notclassNameorhtmlFor)
- Write assertions inside
it()ortest()blocks - Avoid done callbacks in async tests - use async/await instead
- Don't use
.onlyor.skipin committed code - Keep test suites reasonably flat - avoid excessive
describenesting
Biome's linter will catch most issues automatically. Focus your attention on:
- Business logic correctness - Biome can't validate your algorithms
- Meaningful naming - Use descriptive names for functions, variables, and types
- Architecture decisions - Component structure, data flow, and API design
- Edge cases - Handle boundary conditions and error states
- User experience - Accessibility, performance, and usability considerations
- Documentation - Add comments for complex logic, but prefer self-documenting code
Most formatting and common issues are automatically fixed by Biome. Run npx ultracite fix before committing to ensure compliance.