Files
jellybit/openspec/config.yaml
T

63 lines
4.2 KiB
YAML

schema: spec-driven
context: |
Language: Russian
Пиши на русском, но:
- Структурные заголовки оставляй на английском:
## ADDED/MODIFIED/REMOVED Requirements, ### Requirement:, #### Scenario:
- Ключевые слова GIVEN/WHEN/THEN и RFC 2119 (SHALL/MUST/SHOULD) — на английском
- Технические термины (API, REST, JWT), пути и код — на английском
Имена capabilities:
- Capability — это ПОВЕДЕНИЕ/домен системы, а не пакет кода (совпадение с
именем пакета допустимо, но не критерий).
- Существительное, понятное без знания кода: ingest, recognition,
file-layout, review, notifications. НЕ qbt/worker (это реализация).
- Гранулярность по принципу «требования меняются вместе». Дробить, когда в
одной спеке смешиваются разные заботы. Переименовать дёшево (RENAMED
Requirements) — не дроби преждевременно в маленьком проекте.
RFC 2119 — это требование валидатора, не стиль:
- Каждое ### Requirement ОБЯЗАНО содержать литерал SHALL или MUST, иначе
`openspec validate` падает (проверено). Поэтому эти слова и WHEN/THEN не
русифицируем — они несут точную нормативную/структурную семантику.
Ревью (процесс, не артефакт):
- Нетривиальная/архитектурная задача — два чекпоинта: ревью дизайна (после
design/specs, ДО кода — дешевле чинить направление) и ревью кода (после
apply, до archive).
- Тривиальная задача — достаточно одного прохода (код).
Конвенции кода (соблюдать при apply):
- Логирование — только log/slog (структурированный JSON), без fmt.Println.
Логируем все вызовы внешних сервисов; healthcheck-эндпоинты — на DEBUG.
Детали: уровни, обязательные поля — docs/conventions/logging.md.
- Безопасность: никаких секретов в полях логов (пароли qBittorrent,
API-ключи LLM/метабаз, auth-заголовки).
- Конфигурация — только TOML; секреты рендерит деплой (Ansible+Vault) в
файл (config.toml не коммитится, 0600), env для конфига не используем;
валидация на старте. Детали: docs/conventions/config.md.
- Ошибки — stdlib, обёртка с контекстом (fmt.Errorf("...: %w", err)),
проверка errors.Is/errors.As, трансляция доменной ошибки в ответ на
внешней границе (наружу не отдаём текст внутренней ошибки). Детали:
docs/conventions/errors.md.
- Время — всегда с явным TZ (сервер в Europe/Moscow; логи — в UTC).
# Project context (optional)
# This is shown to AI when creating artifacts.
# Add your tech stack, conventions, style guides, domain knowledge, etc.
# Example:
# context: |
# Tech stack: TypeScript, React, Node.js
# We use conventional commits
# Domain: e-commerce platform
# Per-artifact rules (optional)
# Add custom rules for specific artifacts.
rules:
proposal:
- Capabilities называй по поведению/домену системы, не по пакету кода
specs:
- Каждое ### Requirement обязано содержать SHALL или MUST (иначе валидация падает)
- Заголовки и WHEN/THEN/GIVEN — на английском, остальной текст на русском