chore: CLAUDE.md, ARCHITECTURE.md, OpenSpec и Makefile для arm-web (#1)

Обвязка из adopt-project.sh дополнена описанием репозитория по коду: источники истины
для фронта, ветка test как интеграционная, правило «запросы только через api/client».
.gitignore: исправлена склейка строк (package-lock.json.superpowers/), добавлен dist/.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EAKRDNzXtRrwmWz9z6PZu3
This commit is contained in:
Andrey Epifancev 2026-10-08 00:13:42 +04:00
parent 062bf434c0
commit 190458c8bc
5 changed files with 104 additions and 48 deletions

4
.gitignore vendored
View File

@ -1,5 +1,7 @@
node_modules/ node_modules/
dist/
.env .env
package-lock.json.superpowers/ package-lock.json
.superpowers/
.bounded .bounded
.DS_Store .DS_Store

View File

@ -1,15 +1,25 @@
# Архитектура # Архитектура arm-web
{{Карта модулей на одну страницу: что где лежит, границы, потоки данных. Читается агентом перед architectural brainstorming. Обновляется вместе со спеками.}} SPA поверх API arm-core (`/api/v1`). Своих данных и бизнес-вычислений нет: всё производное (чек-лист, сводная ОСВ,
статусы) считает сервер, фронт показывает и отправляет действия пользователя.
## Модули ## Модули
| Модуль | Ответственность | Зависит от | | Модуль | Ответственность | Зависит от |
|---|---|---| |---|---|---|
| | | | | `src/api/` | HTTP-клиент, токен, разбор ошибок | `conf/`, `auth/token` |
| `src/auth/` | профиль `/me`, dev-вход, права для меню | `api/` |
| `src/services/api/` | вызовы ресурсов arm-core | `api/`, `types/` |
| `src/store/` | состояние экранов (Redux Toolkit) | `services/api/` |
| `src/types/` | DTO API (повторяют `arm-core/api/src/schemas/`) | — |
| `src/components/` | примитивы UI (таблица, теги, заголовок) | antd |
| `src/widgets/` | блоки экранов | `components/`, `store/`, `services/api/` |
| `src/layouts/` | страницы-маршруты | `widgets/` |
## Границы ## Границы
- Что не должно импортировать что. - Сетевые запросы — только через `src/api/client.ts`; `fetch` напрямую не вызывается.
- `components/` не знают про store и API; `types/` ни от чего не зависят.
- `services/api/mocks.ts` не импортируется из рабочих путей.
## Открытые вопросы ## Открытые вопросы
- - Судьба `arm-core/web` (дубль основы этого репозитория) — решает владелец.

View File

@ -1,28 +1,57 @@
# arm-web # CLAUDE.md — arm-web (фронт АРМ КА)
Общий контекст системы — `../CLAUDE.md` и `../docs/` (workspace). Этот файл — только про этот репозиторий.
Язык общения, коммитов, комментариев и документации — русский; идентификаторы — английские, как в DBML и API.
## Что это ## Что это
{{ОДНИМ АБЗАЦЕМ: что делает система, для кого, главный сценарий.}} SPA кредитного аналитика АРМ КА: справочники групп, консолидации ГК по периодам, карточка версии с чек-листом
документов, загрузка и проверка первичных файлов (ОСВ, ББ/ОФР из PDF), дальше — сводная ОСВ и шаги консолидации.
Бэкенд — `arm-core` (`/api/v1`, единственный источник данных). Репозиторий выделен из `arm-core/web`
(06.10.2026, автор основы — команда фронта); `arm-core/web` пока не удалён — его судьба не решена.
## Ветки
- `main` — не трогаем до решения владельца.
- `test` — интеграционная ветка прототипа: все PR (`feat/<issue>-<slug>`) вливаются в `test`, не в `main`.
## Источники истины для фронта
1. OpenAPI arm-core и гайд `../docs/dev/frontend-api-guide.md` — эндпоинты, тела, коды ошибок. Типы в `src/types/`
повторяют схемы бэка (`arm-core/api/src/schemas/`), поля не придумываем.
2. Пользовательский путь — `../docs/context/10-user-journey.md`; макет — `../docs/mockup/` (по одному экрану через
`../docs/mockup/INDEX.md`).
3. Права — данные: меню скрывается по кодам прав из `/me`, доступ решает сервер (`src/auth/permissions.ts`).
- `../reference-old-arm/` — только чтение: инфраструктурные идеи (PDFResultViewer) можно смотреть, эндпоинты старого
АРМ (`/fsl/...`, `/osv/by-file-id`, `POST /files`) в arm-core не существуют.
## Стек и ограничения ## Стек и ограничения
- {{Язык, сборка, тесты — например: Python 3.12, uv, pytest.}} - React 18 + TypeScript strict, rsbuild, antd 6 (основной UI-кит; daisyui/tailwind — из шаблона), react-router 7,
- {{Жёсткие ограничения среды исполнения — без чего код не должен собираться.}} Redux Toolkit, pdfjs-dist; линтер — biome (ширина 140, одинарные кавычки).
- Пакеты `raisa-*` — `optionalDependencies` (вне банка недоступны); `package-lock.json` в git не хранится (как в шаблоне:
в банке зависимости ставятся через Nexus).
- env только `REACT_APP_*` через `src/conf/config.ts`; `REACT_APP_API_URL` — адрес arm-core, `REACT_APP_ROOT_PATH` =
`ROOT_PATH` бэка.
## Архитектура ## Архитектура
- `src/core/` (или {{ваш путь}}) — чистая логика без зависимостей от фреймворка/платформы. Покрывается тестами полностью. - `src/api/` — единый HTTP-клиент `apiFetch` / `api.get|post|put|patch|del`: префикс `${API_URL}/api/v1`, Bearer-токен,
- `src/{{adapter}}/` — тонкая обёртка над платформой. Тестируется руками или интеграционно. `ApiError {status, code, message}` по трём формам `detail`, событие `armka:unauthorized` на 401. **Все запросы — только
- {{Ключевые интерфейсы/порты между ними, если есть.}} через него** (прямой `fetch` теряет токен и разбор ошибок).
- `src/services/api/` — функции по ресурсам arm-core (consolidations, files, directories/…); `mocks.ts` — моки на время
разработки, в рабочих путях не импортируются.
- `src/auth/` — `AuthGate` (профиль `/me`), `DevLogin` (`POST /dev/token`, только не в production), `token.ts`.
- `src/store/` — Redux Toolkit: `store.ts`, слайсы `companyGroupsSlice`, `consolidations`, `files` (+ `thunks.ts`).
- `src/layouts/` — страницы (маршруты в `src/App.tsx`), `src/widgets/` — блоки экранов, `src/components/` — примитивы
(`GenericTable`, `TableTag`, `PageTitle`), `src/types/` — DTO API.
## Команды ## Команды
- `{{npm test / pytest}}` — весь набор тестов. Зелёным считается только весь набор. - `make install` — `npm install`.
- `{{npm run build / ...}}` — сборка. - `make check` — biome + `tsc --noEmit` + `rsbuild build`. Зелёным считается только всё вместе; **перед PR**, вывод —
- `{{npm run dev / ...}}` — локальный запуск. в описание PR.
- `make start` — dev-сервер (`rsbuild dev`); бэкенд — локальный стенд arm-core по `../docs/dev/qa-guide.md`.
## Тесты ## Тесты
- Golden-тесты: `tests/fixtures/<name>.*` + эталон `<name>.expected.*`. Внешние сервисы в тестах мокаются. Автотестов пока нет; проверка — `make check` и ручной прогон пути по стенду arm-core с фикстурами из `../fixtures`.
- {{Где лежит тестовое окружение (vault, БД, песочница).}}
## Первая подсистема ## Для владельца
{{Что делается первым и почему. Тестовая инфраструктура — Task 1 первого плана.}} Пользователь слаб во фронте: на TS/React-изменения агент делает код-ревью сам и объясняет решения простым языком.
## OpenSpec и superpowers ## OpenSpec и superpowers
- Вход в любую задачу — superpowers:brainstorming. Skills openspec-propose и openspec-explore сами по себе не запускать. - Вход в любую задачу — superpowers:brainstorming. Skills openspec-propose и openspec-explore сами по себе не запускать.

19
Makefile Normal file
View File

@ -0,0 +1,19 @@
.PHONY: install lint typecheck build check start
install:
npm install
lint:
npx biome check src
typecheck:
npx tsc --noEmit
build:
npm run build
# Перед PR: всё вместе, вывод — в описание PR
check: install lint typecheck build
start:
npm run start

View File

@ -1,32 +1,28 @@
schema: spec-driven schema: spec-driven
# Project context (optional) context: |
# This is shown to AI when creating artifacts. Репозиторий arm-web — фронт системы АРМ КА (ДКБ, Россельхозбанк): SPA кредитного аналитика поверх API arm-core (/api/v1).
# Add your tech stack, conventions, style guides, domain knowledge, etc. Workspace из нескольких репозиториев; общий контекст — ../CLAUDE.md и ../docs/ (репозиторий arm-ka-docs).
# Example: Источники истины: OpenAPI arm-core и ../docs/dev/frontend-api-guide.md (контракт), ../docs/context/10-user-journey.md
# context: | (путь пользователя), ../docs/mockup/ (макет, по одному экрану через INDEX.md), ../docs/context/05-domain-rules.md (правила).
# Tech stack: TypeScript, React, Node.js Стек: React 18 + TypeScript strict, rsbuild, antd 6, Redux Toolkit, react-router 7, pdfjs-dist, biome.
# We use conventional commits Интеграционная ветка — test (PR вливаются в неё, main не трогаем). Язык документов и коммитов — русский.
# Domain: e-commerce platform
# Per-artifact rules (optional) rules:
# Add custom rules for specific artifacts. proposal:
# Example: - Перечислять экраны (номера макета) и эндпоинты arm-core, которые затрагиваются
# rules: - Чего нет в API arm-core — не придумывать на фронте; пробел API — отдельный change/issue в arm-core
# proposal: - Раздел «Non-goals» обязателен
# - Keep proposals under 500 words specs:
# - Always include a "Non-goals" section - Сценарии — по шагам пользовательского пути на локальном стенде arm-core с фикстурами ../fixtures
# tasks: design:
# - Break tasks into chunks of max 2 hours - Производные консолидации считает сервер; фронт не дублирует вычисления
- Все запросы — через src/api/client.ts
tasks:
- Задачи не больше половины дня, с указанием файлов
# Per-operation guidance (optional) operations:
# Add advisory guidance for how apply and archive work should be conducted. apply:
# This is separate from artifact rules above. guidance:
# Example: - Работать в ветке feat/<issue>-<slug> от test; PR в test
# operations: - После изменений — make check (biome, tsc, build)
# apply:
# guidance:
# - Keep test summaries concise
# archive:
# guidance:
# - Summarize the archive outcome before finishing