docs(dev): снимок для контура вырезает openspec/config.yaml
Вопрос разработчика при переносе в контур: .claude/ и CLAUDE.md вырезаются, а openspec/config.yaml с контекстом агента остаётся. Решение владельца 06.10.2026: вырезать, как CLAUDE.md. Блоки context/rules — инструкции агенту с путями ../docs и ../fixtures, которые в контуре никуда не ведут; openspec CLI в контуре нет, specs/ и design.md читаются без него. - prepare-contour-snapshot.sh: rm, проверка раздела 5, SNAPSHOT.md - contour-transfer-guide.md: таблица раздела 1, разделы 2, 3, 9 Проверено прогоном скрипта на tabular-parser@3b32462. Closes #36 Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012vJkmBGKKqMoEMzvsXG3y2
This commit is contained in:
parent
cfe47b16ff
commit
6edb62c592
@ -14,8 +14,8 @@ Gitea в контуре нет)
|
|||||||
| Что | В контур | Почему |
|
| Что | В контур | Почему |
|
||||||
|---|---|---|
|
|---|---|---|
|
||||||
| `api/` (код, тесты, `contracts/`, `rules/`, `alembic/`, `scripts/`), `web/` (arm-core), `README.md`, `Makefile`, `setup/`, `raisa_config.yml`, `api/.env.example`, `api/.env.test` | да | это и есть сервис по шаблону платформы |
|
| `api/` (код, тесты, `contracts/`, `rules/`, `alembic/`, `scripts/`), `web/` (arm-core), `README.md`, `Makefile`, `setup/`, `raisa_config.yml`, `api/.env.example`, `api/.env.test` | да | это и есть сервис по шаблону платформы |
|
||||||
| `openspec/specs/`, `openspec/changes/archive/`, `openspec/config.yaml` | да | спецификация системы и журнал решений (`design.md`); без них код в контуре нечем объяснять |
|
| `openspec/specs/`, `openspec/changes/archive/` | да | спецификация системы и журнал решений (`design.md`); без них код в контуре нечем объяснять |
|
||||||
| `.claude/`, `CLAUDE.md` | **нет** | инструкции и skills AI-агента, инструментарий внешней разработки |
|
| `.claude/`, `CLAUDE.md`, `openspec/config.yaml` | **нет** | инструкции и контекст AI-агента (в `config.yaml` — блоки `context`/`rules` с путями `../docs`, `../fixtures`), инструментарий внешней разработки; `openspec` CLI в контуре нет, `specs/` и `design.md` читаются без него |
|
||||||
| `docs/superpowers/` (планы, ledger) | **нет** | рабочие артефакты процесса, содержат локальные пути разработчика |
|
| `docs/superpowers/` (планы, ledger) | **нет** | рабочие артефакты процесса, содержат локальные пути разработчика |
|
||||||
| `Dockerfile`, `.dockerignore` | **нет** | образ для локального `make check-full`; в контуре образ собирает платформа своим CI (шаблон держит `Dockerfile` в `.gitignore`) |
|
| `Dockerfile`, `.dockerignore` | **нет** | образ для локального `make check-full`; в контуре образ собирает платформа своим CI (шаблон держит `Dockerfile` в `.gitignore`) |
|
||||||
| История коммитов | **нет** | снимок одним коммитом; в истории снаружи — трейлеры `Co-Authored-By: Claude …`, `Claude-Session`, ссылки на внешний Gitea |
|
| История коммитов | **нет** | снимок одним коммитом; в истории снаружи — трейлеры `Co-Authored-By: Claude …`, `Claude-Session`, ссылки на внешний Gitea |
|
||||||
@ -35,8 +35,8 @@ Gitea в контуре нет)
|
|||||||
нет. Цели `make up`, `test-integration`, `check-full` в контуре не запускаются; `docker-build` удалена из `Makefile`.
|
нет. Цели `make up`, `test-integration`, `check-full` в контуре не запускаются; `docker-build` удалена из `Makefile`.
|
||||||
- `docs` и `fixtures` рядом с сервисом — тесты идентичности контракта и тесты на реальных данных пропускаются
|
- `docs` и `fixtures` рядом с сервисом — тесты идентичности контракта и тесты на реальных данных пропускаются
|
||||||
(раздел 5), сверка ORM с DBML (`make dbml-check` в arm-core) не выполняется.
|
(раздел 5), сверка ORM с DBML (`make dbml-check` в arm-core) не выполняется.
|
||||||
- `tea`, `codegraph`, `openspec` (CLI), хуки `.claude/hooks` — инструментарий процесса; в снимке только их следы в
|
- `tea`, `codegraph`, `openspec` (CLI), хуки `.claude/hooks` — инструментарий процесса; его конфигурация
|
||||||
`openspec/config.yaml` (контекст для агента, безвреден).
|
(`.claude/`, `CLAUDE.md`, `openspec/config.yaml`) вырезается.
|
||||||
- Внешний Gitea `git.aepif.ru` — ссылки вида `https://git.aepif.ru/RSHB/arm-core/pulls/19` в архивах change'ей
|
- Внешний Gitea `git.aepif.ru` — ссылки вида `https://git.aepif.ru/RSHB/arm-core/pulls/19` в архивах change'ей
|
||||||
скрипт превращает в `RSHB/arm-core#19` (номера относятся к внешнему Gitea, в контуре их нет).
|
скрипт превращает в `RSHB/arm-core#19` (номера относятся к внешнему Gitea, в контуре их нет).
|
||||||
|
|
||||||
@ -64,13 +64,13 @@ docs/scripts/prepare-contour-snapshot.sh scan-gateway /tmp/contour
|
|||||||
Что делает скрипт (репозиторий-источник не меняется):
|
Что делает скрипт (репозиторий-источник не меняется):
|
||||||
|
|
||||||
1. `git archive <ref>` → `/tmp/contour/<repo>/` — дерево коммита без `.git` и без игнорируемых файлов.
|
1. `git archive <ref>` → `/tmp/contour/<repo>/` — дерево коммита без `.git` и без игнорируемых файлов.
|
||||||
2. Удаляет `.claude/`, `CLAUDE.md`, `docs/superpowers/`, `Dockerfile`, `.dockerignore`.
|
2. Удаляет `.claude/`, `CLAUDE.md`, `openspec/config.yaml`, `docs/superpowers/`, `Dockerfile`, `.dockerignore`.
|
||||||
3. Правит `Makefile`: цель `venv` → `python3.11 -m venv` + `pip install -r requirements-dev.txt` с `setup/pip.conf`
|
3. Правит `Makefile`: цель `venv` → `python3.11 -m venv` + `pip install -r requirements-dev.txt` с `setup/pip.conf`
|
||||||
(переменная `PYTHON`, по умолчанию `python3.11`); удаляет цель `docker-build` и её упоминания в `check-full`, `.PHONY`,
|
(переменная `PYTHON`, по умолчанию `python3.11`); удаляет цель `docker-build` и её упоминания в `check-full`, `.PHONY`,
|
||||||
`help`.
|
`help`.
|
||||||
4. Заменяет ссылки на внешний Gitea на `RSHB/<repo>#<n>`.
|
4. Заменяет ссылки на внешний Gitea на `RSHB/<repo>#<n>`.
|
||||||
5. Пишет `SNAPSHOT.md` (источник, хеш, дата, что вырезано).
|
5. Пишет `SNAPSHOT.md` (источник, хеш, дата, что вырезано).
|
||||||
6. Проверяет: нет `.claude`/`CLAUDE.md`/планов/`Dockerfile`, нет локальных путей (`/Users/…`, `/home/…`), нет `uv` и
|
6. Проверяет: нет `.claude`/`CLAUDE.md`/`openspec/config.yaml`/планов/`Dockerfile`, нет локальных путей (`/Users/…`, `/home/…`), нет `uv` и
|
||||||
`git.aepif.ru`, на месте платформенные файлы (`raisa_config.yml`, `setup/`, `run_server.py`, `requirements.txt`,
|
`git.aepif.ru`, на месте платформенные файлы (`raisa_config.yml`, `setup/`, `run_server.py`, `requirements.txt`,
|
||||||
`.env.test`, `contracts/`). Любая проблема — код возврата 1 и список.
|
`.env.test`, `contracts/`). Любая проблема — код возврата 1 и список.
|
||||||
|
|
||||||
@ -175,6 +175,5 @@ git diff <коммит sync> HEAD -- . ':!SNAPSHOT.md' > /tmp/contour-arm-core.p
|
|||||||
скрипт их не переписывает. Ориентир для контура — этот документ и `SNAPSHOT.md`.
|
скрипт их не переписывает. Ориентир для контура — этот документ и `SNAPSHOT.md`.
|
||||||
- В `openspec/changes/archive/*/` остаются относительные пути вида `../docs/openspec/...` и `../fixtures/...`: это
|
- В `openspec/changes/archive/*/` остаются относительные пути вида `../docs/openspec/...` и `../fixtures/...`: это
|
||||||
ссылки на внешний workspace, в контуре они никуда не ведут.
|
ссылки на внешний workspace, в контуре они никуда не ведут.
|
||||||
- `openspec/config.yaml` содержит контекст для AI-агента (упоминает `../docs`, фикстуры, стек); на сборку не влияет.
|
|
||||||
- Тесты, которые снаружи пропускаются без `fixtures`, в контуре не выполняются никогда. Поэтому перед каждым снимком снаружи
|
- Тесты, которые снаружи пропускаются без `fixtures`, в контуре не выполняются никогда. Поэтому перед каждым снимком снаружи
|
||||||
обязателен `make check-full` с доступными `docs` и `fixtures` (`dev/checks.md`, раздел «Порядок перед PR»).
|
обязателен `make check-full` с доступными `docs` и `fixtures` (`dev/checks.md`, раздел «Порядок перед PR»).
|
||||||
|
|||||||
@ -40,10 +40,11 @@ mkdir -p "$DEST"
|
|||||||
git -C "$REPO" archive "$REF" | tar -x -C "$DEST"
|
git -C "$REPO" archive "$REF" | tar -x -C "$DEST"
|
||||||
|
|
||||||
# --- 1. Вырезать то, чего в контуре нет ------------------------------------------------------------------------
|
# --- 1. Вырезать то, чего в контуре нет ------------------------------------------------------------------------
|
||||||
# .claude/, CLAUDE.md — инструкции и skills AI-агента; docs/superpowers/ — планы и ledger (в них локальные пути);
|
# .claude/, CLAUDE.md, openspec/config.yaml — инструкции и контекст AI-агента (config.yaml: блоки context/rules с путями
|
||||||
# Dockerfile/.dockerignore — локальная сборка образа, платформа собирает образ своим CI. openspec/ остаётся:
|
# ../docs и ../fixtures; openspec CLI в контуре нет, specs/ и design.md читаются без него); docs/superpowers/ — планы и
|
||||||
# это спецификация проекта и решения (design.md).
|
# ledger (в них локальные пути); Dockerfile/.dockerignore — локальная сборка образа, платформа собирает образ своим CI.
|
||||||
rm -rf "$DEST/.claude" "$DEST/CLAUDE.md" "$DEST/docs/superpowers" "$DEST/Dockerfile" "$DEST/.dockerignore"
|
# openspec/specs/ и openspec/changes/archive/ остаются: это спецификация проекта и решения (design.md).
|
||||||
|
rm -rf "$DEST/.claude" "$DEST/CLAUDE.md" "$DEST/openspec/config.yaml" "$DEST/docs/superpowers" "$DEST/Dockerfile" "$DEST/.dockerignore"
|
||||||
rmdir "$DEST/docs" 2>/dev/null || true
|
rmdir "$DEST/docs" 2>/dev/null || true
|
||||||
|
|
||||||
# --- 2. Makefile: venv через python -m venv + pip с Nexus, без uv; без docker-build --------------------------------
|
# --- 2. Makefile: venv через python -m venv + pip с Nexus, без uv; без docker-build --------------------------------
|
||||||
@ -131,8 +132,8 @@ cat > "$DEST/SNAPSHOT.md" <<EOF
|
|||||||
Источник: внешний репозиторий проекта \`RSHB/$NAME\`, коммит \`$HASH\` ($DATE, «${SUBJECT}»).
|
Источник: внешний репозиторий проекта \`RSHB/$NAME\`, коммит \`$HASH\` ($DATE, «${SUBJECT}»).
|
||||||
Снимок без истории; подготовлен \`prepare-contour-snapshot.sh\` ($(date +%Y-%m-%d)).
|
Снимок без истории; подготовлен \`prepare-contour-snapshot.sh\` ($(date +%Y-%m-%d)).
|
||||||
|
|
||||||
Чего здесь нет по сравнению с источником: \`.claude/\`, \`CLAUDE.md\`, \`docs/superpowers/\` (инструментарий и планы
|
Чего здесь нет по сравнению с источником: \`.claude/\`, \`CLAUDE.md\`, \`openspec/config.yaml\`, \`docs/superpowers/\`
|
||||||
разработки снаружи), \`Dockerfile\`/\`.dockerignore\` (образ собирает платформа). Соседних репозиториев \`docs\` и
|
(инструментарий, контекст агента и планы разработки снаружи), \`Dockerfile\`/\`.dockerignore\` (образ собирает платформа). Соседних репозиториев \`docs\` и
|
||||||
\`fixtures\` в контуре нет: тесты идентичности контракта и тесты с маркером \`fixtures\` пропускаются — это ожидаемо.
|
\`fixtures\` в контуре нет: тесты идентичности контракта и тесты с маркером \`fixtures\` пропускаются — это ожидаемо.
|
||||||
Копия контракта — \`api/contracts/\`, спецификация — \`openspec/specs/\`, решения — \`openspec/changes/archive/*/design.md\`.
|
Копия контракта — \`api/contracts/\`, спецификация — \`openspec/specs/\`, решения — \`openspec/changes/archive/*/design.md\`.
|
||||||
|
|
||||||
@ -141,7 +142,7 @@ EOF
|
|||||||
|
|
||||||
# --- 5. Проверки ----------------------------------------------------------------------------------------------------
|
# --- 5. Проверки ----------------------------------------------------------------------------------------------------
|
||||||
fail=0
|
fail=0
|
||||||
for p in .claude CLAUDE.md docs/superpowers Dockerfile .dockerignore; do
|
for p in .claude CLAUDE.md openspec/config.yaml docs/superpowers Dockerfile .dockerignore; do
|
||||||
if [ -e "$DEST/$p" ]; then echo "ошибка: в снимке остался $p" >&2; fail=1; fi
|
if [ -e "$DEST/$p" ]; then echo "ошибка: в снимке остался $p" >&2; fail=1; fi
|
||||||
done
|
done
|
||||||
if grep -rIn "/Users/\|/home/[a-z]" "$DEST" >/dev/null 2>&1; then
|
if grep -rIn "/Users/\|/home/[a-z]" "$DEST" >/dev/null 2>&1; then
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user