08. Руководство разработчика¶
Пример только для среды
git. Эта глава иллюстрирует один возможный сценарий на примере GitHub и разнесённых по репозиториям подсистем (каталоги.reqи.src). RENAR к конкретной реализации среды не привязан; ваши перехватчики и пайплайны могут быть устроены иначе. Общезначимые главы — §6 Иерархия требований, §8 Спецификации, §10 Жизненный цикл и контрольные точки качества. Альтернатива без VCS как файловой базы — 04-document-store-substrate.md.Выдуманная компания AcmeCorp: платформа
acme-platformи четыре подсистемы —acme-portal,acme-ai,acme-orchestrator,acme-site. Имена в примерах замените на свои; ссылки на нормативные главы этого не затрагивают.
1. Что нужно знать перед стартом¶
Два типа репозиториев. Каждая подсистема имеет два отдельных репозитория:
| Репозиторий | Суффикс | Что внутри | Кто пишет |
|---|---|---|---|
| Требования | .req |
BR, SR — что система должна делать | Архитектор, Tech Lead |
| Исходный код | .src |
Код, тесты, CI/CD | Разработчик |
Разделение намеренное: требования версионируются независимо от кода, имеют другой цикл рецензирования и другие права доступа.
Иерархия: Система (acme-platform) → Подсистема (acme-portal, acme-ai, acme-orchestrator, acme-site) → Модуль (если есть). Каждый уровень имеет свой .req репозиторий; требования верхнего уровня — родители для требований ниже.
Три уровня требований:
BR — Бизнес-требование (зачем это нужно бизнесу)
└── SR — Системное требование (что делает система)
└── TR — Требование к задаче (конкретика для реализации)
↑ это поля вашей задачи в трекере, не файл
TR не является файлом — это Goal + Acceptance Criteria в задаче трекера.
2. Первоначальная настройка локального окружения¶
Шаг 1. Уточните у Tech Lead, с какой подсистемой работаете: acme-portal (клиентский портал), acme-ai (AI-pipeline), acme-orchestrator (оркестратор), acme-site (публичный сайт).
Шаг 2-3. Создайте структуру и клонируйте репозитории:
mkdir -p ~/projects/acmecorp/acme-platform && cd ~/projects/acmecorp/acme-platform
# Обязательно для всех — родительские требования системы (только чтение):
git clone git@github.com:acmecorp/acme-platform/acme-platform.req
# Обязательно — репозитории вашей подсистемы:
SUBSYSTEM=acme-portal # замените на свою
mkdir -p $SUBSYSTEM
git clone git@github.com:acmecorp/acme-platform/$SUBSYSTEM/$SUBSYSTEM.req $SUBSYSTEM/$SUBSYSTEM.req
git clone git@github.com:acmecorp/acme-platform/$SUBSYSTEM/$SUBSYSTEM.src $SUBSYSTEM/$SUBSYSTEM.src
# По необходимости — требования смежных подсистем (только чтение):
mkdir -p acme-ai && git clone git@github.com:acmecorp/acme-platform/acme-ai/acme-ai.req acme-ai/acme-ai.req
Шаг 4. Проверка: find ~/projects/acmecorp -maxdepth 4 -name ".git" -type d | sed 's|/.git||' | sort. Ожидаемый результат для разработчика Acme Portal:
~/projects/acmecorp/acme-platform/acme-platform.req
~/projects/acmecorp/acme-platform/acme-portal/acme-portal.req
~/projects/acmecorp/acme-platform/acme-portal/acme-portal.src
3. Структура папок на локальной машине¶
Локальная структура зеркалит иерархию репозиториев в хостинге — относительные пути ../.. между репозиториями становятся предсказуемыми.
С раскладкой по каталогам (раскладка носителя) см. guide/03 §14: каноническая схема репозитория + закрепление
.src→.reqчерез submodule (возможность V5). Здесь — типичное локальное размещение для IDE: несколько рядом лежащих клонов без обязательного submodule в рабочей папке.
~/projects/acmecorp/acme-platform/
acme-platform.req/ # требования системы (read-only)
acme-portal/
acme-portal.req/ # требования вашей подсистемы
acme-portal.src/ # код вашей подсистемы — здесь вы работаете
acme-ai/{acme-ai.req,acme-ai.src}/ # клонируется по необходимости
acme-orchestrator/{acme-orchestrator.req,acme-orchestrator.src}/
acme-site/{acme-site.req,acme-site.src}/
Правило: не меняйте имена папок — они совпадают с именами проектов в git-хостинге. Это позволяет скриптам и CI работать с одними путями везде.
4. Настройка рабочего пространства в IDE¶
VS Code Workspace. Создайте <subsystem>.code-workspace в папке подсистемы:
cat > ~/projects/acmecorp/acme-platform/acme-portal/acme-portal.code-workspace << 'EOF'
{
"folders": [
{ "path": "acme-portal.src", "name": "Code — Acme Portal" },
{ "path": "acme-portal.req", "name": "Requirements — Acme Portal" },
{ "path": "../acme-platform.req", "name": "Requirements — System (read only)" }
],
"settings": { "files.exclude": { "**/.git": true } }
}
EOF
Открыть: code ~/projects/acmecorp/acme-platform/acme-portal/acme-portal.code-workspace. В боковой панели — три репозитория одновременно.
JetBrains (IntelliJ, WebStorm, PyCharm). Откройте каждый репозиторий как отдельный модуль через File → Attach Project или Project Structure → Modules.
5. Работа с требованиями¶
5.1 Как читать. Перед началом задачи прочитайте SR (acme-portal.req/sr/SR-NN-*.md). В frontmatter SR найдите поле parent — ссылка на родительский BR:
parent: { id: BR-01, repo: "acmecorp/acme-platform/acme-platform.req", file: "br/BR-01-order-ai-dev.md" }
Откройте родительский BR — это «зачем существует функциональность».
5.2 Трассировка. Цепочка: Задача TASK-42 → SR-01 (acme-portal.req/sr/...) → BR-01 (acme-platform.req/br/...). Если что-то непонятно — поднимайтесь вверх.
5.3 Изменить требование. Разработчик создаёт Issue в .req репозитории с описанием несоответствия SR ↔ реальное поведение. Tech Lead / Архитектор вносит изменение:
cd acme-portal.req
git checkout -b change/TZ-2026-002-totp
# Редактируете файл SR; обновляете version + updated в frontmatter; добавляете запись в source[]
git add sr/SR-01-auth.md
git commit -m "[delta:TZ-2026-002] SR-01 v1.2: добавить TOTP"
# Создаёте MR/PR в git-хостинге
Запрещено: коммитить изменения требований напрямую в
mainбез MR/PR и ревью.
5.4 Что нельзя делать. Менять acme-platform.req без согласования с архитектором; менять требования смежных подсистем (acme-ai.req, acme-orchestrator.req); удалять файлы требований (только переводить в status: deprecated); создавать файлы версий (SR-01-v1.md, SR-01-v2.md) — история в git log.
6. Работа с задачами¶
6.1 Перед тем как взять задачу — все пункты QG-0 Approval Gate выполнены (reference/01 §14.4; pre-v1.0 legacy «Context Gate»):
- Сформулирована цель (Goal); есть Acceptance Criteria — конкретные, тестируемые, независимые.
- Есть хотя бы один негативный сценарий в AC.
- Задача ссылается на SR (поле в трекере); назначен тип работы.
- Если затрагивает безопасность — Threat Surface задекларирован.
Если чего-то нет — не берите задачу в работу, вернитесь к Supervisor/Tech Lead.
6.2 Acceptance Criteria. Каждый AC — отдельный тест. Хорошие AC: POST /auth/login возвращает 200 и JWT-токен при верных credentials; POST /auth/login возвращает 401 при неверном пароле (негативный сценарий); POST /auth/login возвращает 422, если поле email отсутствует; JWT-токен истекает через 24 часа.
Плохие AC (задачу брать нельзя): «Логин должен работать корректно»; «Обработка ошибок должна быть надёжной»; «Система должна быть безопасной».
6.3 Если AC непонятен или противоречит SR: прочитайте SR + родительский BR; создайте комментарий в задаче с конкретным вопросом; не интерпретируйте молча — AI интерпретирует молча, именно поэтому и нужны чёткие требования.
7. Git-процесс¶
7.1 Работа с кодом (.src). Стандартный feature-branch workflow:
cd acme-portal/acme-portal.src
git checkout main && git pull
git checkout -b feat/TASK-42-totp-auth
# ... работа ...
git add src/auth/totp.py
git commit -m "feat(auth): реализовать TOTP-аутентификацию (TASK-42)"
# Создать MR/PR в git-хостинге
Формат коммита: <type>(<scope>): <описание> (<TASK-ID>).
7.2 Работа с требованиями (.req). Ветка для изменения требования (см. §5.3 выше).
7.3 Привязка MR/PR к задаче. В описании MR/PR указывайте: Closes #42 + Related SR: SR-01 (acme-portal.req). Если изменение затрагивает несколько .req репозиториев — Related: acmecorp/acme-platform/acme-platform.req#15.
7.4 Именование веток:
| Что делаете | Ветка |
|---|---|
| Новая функциональность | feat/TASK-NN-slug |
| Исправление бага | fix/TASK-NN-slug |
| Изменение требования | change/TZ-YYYY-NNN-slug |
| Новое требование | feat/BR-NN-slug или feat/SR-NN-slug |
8. Частые сценарии¶
Сценарий 1. Новая задача: открыть в трекере → проверить QG-0 → найти ссылку на SR → открыть SR в acme-portal.req/sr/ → прочитать SR + родительский BR (если нужен контекст) → создать ветку feat/TASK-NN-slug в .src → реализовать + написать тесты по AC → MR/PR → ревью → merge.
Сценарий 2. Несоответствие между SR и требованием задачи: НЕ делать ничего молча → комментарий в задаче («SR-01 §4 описывает X, задача требует Y — противоречие, прошу уточнить») → дождаться ответа Supervisor/Architect → не брать задачу в работу до устранения.
Сценарий 3. Понять откуда взялось требование. В .req репозитории: git log -- sr/SR-01-auth.md (история изменений) или git show <commit-hash> (детали конкретного изменения). Или в frontmatter файла найдите поле source — ссылка на ТЗ и его раздел.
Сценарий 4. Интеграция (Acme Portal → Acme AI). Клонируйте требования смежной подсистемы, добавьте в workspace; откройте acme-platform.req/specs/int/SPEC-INT-01-acme-portal-acme-ai.md — там описан контракт. Интеграционные контракты canonical-формы — SPEC-INT-NN (standard/08 §8.5.4), не legacy INT-SR. SR подсистемы ссылается через constrained-by: [SPEC-INT-NN]. SPEC-INT всегда живёт в acme-platform.req/specs/int/ — не внутри подсистем.
Сценарий 5. Дельта-ТЗ. Работа архитектора/Tech Lead, но разработчику: дождаться merge MR с обновлёнными SR → git pull в .req → прочитать tz/TZ-YYYY-NNN-index.md (список изменённых требований) → проверить, затрагивают ли изменения ваши текущие задачи → если да — обновить или закрыть по согласованию с Supervisor.
Сценарий 6. Обновить локальные репозитории требований:
find ~/projects/acmecorp -name "*.req" -type d | while read repo; do
echo "Updating $repo..."
git -C "$repo" pull --ff-only
done
9. Права доступа — кто что может менять¶
| Репозиторий | Разработчик | Tech Lead | Архитектор |
|---|---|---|---|
acme-platform.req (системные BR/SR) |
Только чтение | Только чтение | Запись через MR |
acme-portal.req (SR подсистемы) |
Только чтение | Запись через MR | Запись через MR |
acme-portal.src (код) |
Запись через MR | Запись + ревью | — |
acme-ai.req (чужая подсистема) |
Только чтение | Только чтение | — |
Если нужно изменить требование — создайте Issue в .req репозитории, не коммитьте напрямую.
10. Быстрый справочник¶
Куда смотреть когда непонятно:
| Вопрос | Где |
|---|---|
| Что должна делать система? | acme-portal.req/sr/SR-NN-*.md |
| Зачем это нужно бизнесу? | acme-platform.req/br/BR-NN-*.md |
| Откуда взялось это требование? | frontmatter source → ТЗ |
| Как изменилось требование? | git log -- sr/SR-NN-*.md |
| Как работает интеграция с Acme AI? | acme-platform.req/specs/int/SPEC-INT-01-*.md |
| Что изменилось по последнему ТЗ? | acme-platform.req/tz/TZ-YYYY-NNN-index.md |
Чеклист перед созданием MR: код покрывает все AC из задачи; есть тесты на негативные сценарии; MR/PR содержит ссылку Closes #NN; если изменилось поведение — создан Issue в .req для обновления SR.
Команды Git (наиболее частые):
git -C <portal.req> pull # обновить требования
git -C <portal.req> log -- sr/SR-01-auth.md # история конкретного SR
grep -r "id: SR-01" ~/projects/acmecorp/ --include="*.md" # найти требование по ID
grep -r "SR-01" ~/projects/acmecorp/ --include="*.md" # все задачи, ссылающиеся на SR-01
Глоссарий: BR — бизнес-требование; SR — системное требование; TR — Goal + AC в трекере; AC — Acceptance Criteria; QG-0 — Approval Gate (canonical v1.0; pre-v1.0 legacy «Context Gate»); .req — git-репозиторий с требованиями подсистемы; .src — git-репозиторий с кодом; SPEC-INT — интеграционная спецификация (canonical v1.0; pre-v1.0 INT-SR); delta-ТЗ — дополнение к ТЗ при повторном заказе; deprecated — устаревшее требование (не удаляется, только помечается).