Files
docs/CONTRIBUTING.md
T

18 KiB
Raw Blame History

Ведение документации

Docs даёт самостоятельное понимание продукта, понятий, функций и архитектуры. За актуальность затронутого объяснения отвечает автор изменения; review сопоставляет текст с требованиями, реализацией и принятыми решениями.

Владельцы фактов

Вид знания Где поддерживается
Согласованное проверяемое поведение: требования и сценарии Основные спецификации в specs/openspec/specs/
Предложения изменений, их проектирование и задачи OpenSpec changes в существующем Store wealth-ledger-specs, specs/openspec/changes/
Понимание системы, областей и взаимодействий Тематические страницы docs
Принятые решения и подтверждённые причины Единственный журнал docs/adr
Конкретная реализация и технические контракты Код, тесты, схемы, конфигурация; публичный OpenAPI формирует backend
Размещение кода, conventions, команды разработки и проверки Локальные инструкции frontend/backend
Выбор репозитория и типа знания Корневой AGENTS

История аудитов и проверок остаётся в Git, Issues и PR. CHANGELOG.md генерируется release-it из commits; вручную дублировать его на тематических страницах не нужно. Процесс разработки и инструкции агентов принадлежат локальным инструкциям репозиториев. ADR фиксируют решения самой системы, а не организацию работы.

Основные спецификации описывают и согласованное текущее поведение. Различие specs и docs не является разделением на будущее и настоящее. Docs объясняет смысл контракта, не вводя независимо редактируемые требования.

Потребность читателя и структура

Используем Diátaxis для задачи страницы, тематическую структуру для размещения:

Потребность Содержание
Разобраться — explanation Понятия, связи, ответственность, потоки и подтверждённые причины
Найти точные сведения — reference Определения, значения, единицы, состояния и ограничения интерпретации
Решить задачу — how-to Условия применения, предпосылки, действия, проверка результата и известные отклонения
Научиться через действие — tutorial Учебная цель, безопасные исходные данные, последовательность и наблюдаемый результат

У страницы одна основная потребность; краткий контекст и перекрёстные ссылки допустимы. Обзор и маршрут чтения не называются tutorial. Если безопасного учебного сценария нет, достаточно честного маршрута чтения.

Отдельный файл нужен самостоятельной теме или задаче, которой тесно в существующем объяснении. Не создаём четыре жанра для каждой области, пустые каталоги и заглушки. Отчёты аудитов и исследований не размещаются в docs. По итогам исследования принятое значимое решение с основаниями, альтернативами и последствиями оформляется в ADR; подтверждённые системные знания включаются в тематические страницы. Исследование без принятого решения не становится ADR автоматически. Архитектура остаётся общей: нет параллельных деревьев frontend/backend, arc42/C4 или второго архитектурного руководства. Папка области не означает микросервис.

Текст и новые редакционные инструкции пишем по-русски, сохраняя технические идентификаторы. Обычные новые файлы — английский kebab-case.md, служебные — README.md, CONTRIBUTING.md, AGENTS.md. Один термин имеет краткое определение в глоссарии, развёрнутое объяснение — в своей области. Имена исторических решений и язык нормативных спецификаций сохраняются.

Факты, неизвестность и расхождения

До существенного утверждения установи, что его подтверждает: спецификация фиксирует договорённость, код и проверки — механизм, ADR — причины выбора. Незавершённый change подтверждает намерение. Учитывай локальную ветку и diff; текущая ветка не становится автоматически проверенным состоянием всей системы.

Основная ветка docs должна описывать последнее согласованное и проверенное реализованное состояние workspace. Предложения находятся в change-артефактах или рабочих ветках. При поставке только части сценария не обещай готовность целого.

При конфликте различай устаревшие docs, устаревшую спецификацию, дефект реализации и незавершённое изменение. Исправляй подтверждённо устаревшее объяснение. Спорное требование или дефект не меняй скрытно; существенное расхождение отметь рядом с описанием, если без него читатель будет введён в заблуждение. Отсутствие найденного доказательства формулируй как «не удалось подтвердить».

Не выводи мотивацию из факта использования технологии. Retries, TTL, лимиты, формулы, гарантии, роли и окружения описывай только по подтверждённому источнику. Локальная конфигурация не доказывает production-топологию. Примеры используют вымышленные данные или безопасные fixtures; секреты и реальные брокерские данные не входят в документацию или диагностические отчёты.

Ссылки и единые определения

Основной материал объясняет систему без открытия исходников или conventions. Адресная ссылка на требование, ADR, репозиторий или технический артефакт дополняет объяснение. Не копируй DTO, весь OpenAPI или внешний API reference. Нужные точные значения сопровождай определяющим источником, чтобы не создать конкурирующую норму. Паспорта страниц, Evidence-секции и номера строк не требуются.

Внутри docs используем относительные Markdown-ссылки. Между репозиториями — относительный путь через соседний корень, например ../specs/AI_INDEX.md из README. Проверяй регистр, файл и якорь в фактическом workspace. Перенос требует исправить входящие ссылки активных Markdown-документов; исторические архивы и dated audits сохраняют адреса своего времени. Короткий указатель оставляем только при реальной необходимости совместимости, без второй копии содержания.

Все содержательные страницы достижимы из подходящего тематического входа. Общий вход — README; второй ручной индекс с той же картой не нужен.

Архитектура, диаграммы и ADR

arc42 служит проверкой полноты вопросов: цели, ограничения, контекст, стратегия, структура, runtime, размещение, сквозные концепции, решения, качество, риски и термины. Архитектурный вход ведёт к раскрытым вопросам; пробелы обозначаются без выдуманных SLA, стейкхолдеров и quality tree.

C4 Context показывает WealthLedger одной системой, пользователей и внешние системы. Container показывает приложения и хранилища с технологиями и связями. Embedded SQLite не является сетевым сервером; генерация OpenAPI-клиента относится к разработке, не к runtime. Детализация Component нужна только для существенного вопроса. Deployment описывает конкретное подтверждённое окружение.

Новые диаграммы — Mermaid в Markdown: flowchart для структуры, sequenceDiagram для взаимодействий. Рядом укажи название, уровень или область, типы участников и смысл; подпиши связи, протоколы — только на уместном уровне. Одно представление имеет один поддерживаемый источник, другие страницы ссылаются на него. При конвертации прежней схемы сохраняй содержание и проверяй замену до удаления исходника. Синтаксис, рендер и согласованность с текстом проверяются отдельно; отсутствие рендерера явно указывается в отчёте.

Журнал ADR один: adr/. Сохраняй идентификатор, исторический контекст, статус, причины и связи решения. Подтверждённо заменённое решение связывается с новым, а не переписывается под текущее устройство. Новый ADR нужен принятому значимому решению с подтверждёнными причинами, не редакционному перемещению файла.

Обновление вместе с кодом

Фаза работы Docs-impact
Анализ Определи затронутые понятия, потоки и ограничения
Спецификация При согласовании требований включи нужные обновления docs в существующие задачи
Реализация Готовь текст параллельно, сохраняя различие поставленного и незавершённого поведения
Проверка Сопоставь требования, реализацию, текст и диаграммы
Завершение Закончи связанные обновления либо обоснуй отсутствие docs-impact

Изменение понимания системы требует обновления docs. Локальный рефакторинг без изменения смысла, сценариев и ограничений может его не требовать. Если есть OpenSpec change ID, используй его как общую ссылку связанных изменений репозиториев; отдельная система идентификаторов не вводится.

Review проверяет сохранность уникальных знаний, верность терминов и финансовых единиц, границы доступа, поведение ошибок, самостоятельность текста, нужные ссылки и отсутствие обещаний по незавершённым изменениям. Успешный lint этого не доказывает.

Проверки

Из корня docs с уже установленными зависимостями:

nvm use --silent
npm run verify

Существующий gate запускает Markdown lint с проверкой относительных ссылок и якорей, затем git diff --check. Он охватывает новые Markdown-файлы; обычный diff их не показывает, поэтому отдельно просмотри untracked-содержание. При изменениях соседних репозиториев выполни там git diff --check и проверь затронутые ссылки. Markdown-only правки не требуют тестов всего приложения.

Правило relative-links не проверяет внешние URL и HTML-ссылки. Mermaid-рендер в gate не входит; используй доступный локальный рендерер без отправки материалов наружу, установки стека или добавления новых валидаторов. Публикационного генератора в текущем docs не настроено.

Вручную пройди затронутые маршруты: новичок от продукта к ключевой области; разработчик от вопроса к объяснению и требованию; агент от типа задачи к нужным ограничениям, ADR и репозиторию. Отчёт различает синтаксис, ссылки, рендер, смысловую сверку и оставшиеся ограничения.

CI и обновления зависимостей

.gitea/workflows/verify.yml запускает этот gate на push и PR с Node из .nvmrc и установкой через npm ci. Checkout docs размещается внутри workspace из WealthLedger/main, рядом с frontend, backend и specs. Соседние репозитории для разработки берутся из develop; для main, PR в main и release/* — из полных SHA в .ci/refs.json. SHA всех пяти участников сохраняются в логе. Ошибка checkout, Markdown или относительной ссылки завершает job с FAIL. Это проверка ссылок на выбранные revisions, без Mermaid-render и semantic review.

security.yml при push, PR и ежедневно проверяет всю Git-историю через Gitleaks 8.30.1 с redacted-выводом и все npm dependencies через npm audit --include=dev --audit-level=low. Override smol-toml исправляет DoS в TOML parser markdownlint-cli2; его можно удалить, когда родительский пакет примет исправленную версию.

Renovate объединяет minor/patch updates; major требует согласования в Dependency Dashboard, automerge не включён. Required checks включаются отдельно в Gitea; workflow сам по себе не запрещает merge.

Версии и ветки: процесс релиза.