28 Commits

Author SHA1 Message Date
Andrey Epifancev
b489f6e0b3 Срез 0 [4.3]: эмулятор ИС Сканирование (src/scan_emulator), unit-тесты, отметка задачи
process_once(root, fixtures, delay): новые <uuid>_<имя> -> ответ из фикстуры (точное имя, затем префикс,
file_uid подставляется) либо INVALID_DOCUMENT, атомарная запись ответа, затем переименование в .done.
Цикл python -m src.scan_emulator с корректной остановкой по SIGINT/SIGTERM.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-04 03:10:36 +04:00
Andrey Epifancev
97ce49eed2 docs: решения R-9 и исполнителя задач 4.1, 4.2 в design.md slice-0-skeleton
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-04 03:06:46 +04:00
Andrey Epifancev
5fb046fced Срез 0 [4.2] T8.1-T8.3: inbox_name заменяет символы Windows/SMB, poll ждёт занятый файл, put терпит отказ mkdir при существующем Input
T8.1: inbox_name заменяет `: < > " | ? *` и управляющие символы на `_`, убирает завершающие точки/пробелы;
ValueError только если имени не осталось. validate_name/put остаются строгими.
T8.2: SmbHotFolder.poll возвращает None на STATUS_SHARING_VIOLATION/STATUS_DELETE_PENDING (ИС ещё пишет ответ),
монопольное открытие сохранено.
T8.3: при ошибке mkdir, кроме EEXIST/ENOENT, put продолжает, если smbclient.path.isdir(Input); иначе исходная ошибка.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-04 03:05:02 +04:00
Andrey Epifancev
1695573b35 Срез 0 [4.2]: SmbHotFolder поверх smbclient (src/gateway/smb.py), фабрика create_hotfolder, unit-тесты, отметка задачи
SmbHotFolder: UNC-корень \\host\SMB_PATH (или полный UNC в SMB_PATH), put — `.<name>.part` + smbclient.replace,
poll — open_file(rb), ENOENT (в т.ч. нет каталога) -> None, healthy — listdir корня без исключений.
create_hotfolder(settings): local -> LocalHotFolder, smb -> SmbHotFolder с ленивым импортом модуля (R-6);
отсутствие импорта src.gateway.smb в режиме local проверяется в отдельном интерпретаторе.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-04 02:57:31 +04:00
Andrey Epifancev
ad5cb7f0f0 Срез 0 [4.2] T7.4: общие проверки имени и job_id в hotfolder.py, запрет символов Windows/SMB
validate_name/validate_job_id вынесены из LocalHotFolder для повторного использования в SmbHotFolder.
Дополнительно отвергаются `: < > " | ? *` и управляющие символы 0x00-0x1F (в put, answer_path и inbox_name);
пробелы и кириллица в именах допустимы.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-04 02:53:48 +04:00
Andrey Epifancev
6d1f42fe1b Срез 0 [4.1]: протокол HotFolder и LocalHotFolder (src/gateway/hotfolder.py), unit-тесты на tmp_path, отметка задачи
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-04 02:48:47 +04:00
Andrey Epifancev
434ae51434 docs: решения исполнителей задач 2.1, 2.2, 3.1 в design.md slice-0-skeleton
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-04 02:47:21 +04:00
Andrey Epifancev
8c8237954e Срез 0 [3.1] T6.1, T6.2: is_supported_major без int() — шаблон схемы ^1\.\d+$, тесты на длинную строку и "01.0"
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-04 02:45:54 +04:00
Andrey Epifancev
5821497713 Срез 0 [3.1]: pydantic-модели контракта v1.0 (src/contract), конструкторы конвертов, тесты контракта, отметка задачи
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-04 02:43:08 +04:00
Andrey Epifancev
24ebde013a Срез 0 [3.1]: api/contracts — копии схем и examples контракта v1.0 из docs/contracts (cp, байт в байт)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-04 02:41:44 +04:00
Andrey Epifancev
b5ac55084d Срез 0 [2.2]: .env.example дополнен, .env.test, тесты на .env.test (T2.6), отметка задачи
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-04 02:38:46 +04:00
Andrey Epifancev
d1bcff8f5c Срез 0 [2.2]: Dockerfile и .dockerignore (без raisa_*), .dockerignore больше не в .gitignore
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-04 02:38:46 +04:00
Andrey Epifancev
7f99f50434 Срез 0 [2.1] T4.1: make venv фильтрует raisa_* и в requirements.txt
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-04 02:35:10 +04:00
Andrey Epifancev
55fa7ce25c Срез 0 [2.1]: ruff format и правки линтера в коде шаблона, отметка задачи
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-04 02:33:18 +04:00
Andrey Epifancev
5a818b4356 Срез 0 [2.1]: pyproject (ruff, mypy), requirements-dev, Makefile, маркеры pytest
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-04 02:33:01 +04:00
Andrey Epifancev
8d52d9bbd2 docs: решения R-8 и решения исполнителя задачи 1.2 в design.md slice-0-skeleton
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-04 02:31:50 +04:00
Andrey Epifancev
6036625193 Срез 0 [1.2]: вернуть пины argon2-cffi и argon2-cffi-bindings (нужны miniopy-async)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-04 02:30:54 +04:00
Andrey Epifancev
b6eecfcf34 Срез 0 [1.2]: каркас приложения без БД и фронта, настройки scan-gateway
- app.py: create_app(settings), SMB-сессия только при SCAN_HOTFOLDER_MODE=smb, без SPA/CORS/РАИСА/nkeys;
  /healthcheck отдаёт uptime и version
- config.py: ENV_FILE, get_settings() с lru_cache, параметры горячих папок/NATS, блок OPENBAO__SMB необязателен,
  валидация режимов local/smb; убраны DBSettings и OPENBAO.DATABASE
- exception_handlers.py: убрана зависимость от sqlalchemy
- requirements.txt: убраны asyncpg, SQLAlchemy, alembic, argon2-cffi(+bindings), raisa_*, greenlet, Mako
- api/.env.example: минимальный local-режим против compose; unit-тесты config/app

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-04 02:27:42 +04:00
Andrey Epifancev
31a50879c2 Срез 0: вырезать фронт и БД-каркас шаблона
Удалены web/, setup/.npmrc, api/alembic/, api/alembic.ini, api/src/db/,
api/src/models/, api/src/repositories/. Из setup/setup.sh убраны npm-шаги.
Из .gitignore убрана строка Dockerfile (образ сервиса будет под git).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-04 02:23:15 +04:00
Andrey Epifancev
fe0fc0ea08 docs: решения контроллера R-1..R-7 (pre-flight) в design.md slice-0-skeleton
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-04 02:21:59 +04:00
Andrey Epifancev
80cfd20e8b chore: .gitignore — перенос строки после .cursorignore (шаблон без завершающего перевода строки)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-03 17:54:50 +04:00
Andrey Epifancev
5aa75eee00 chore: план исполнения SDD из tasks.md change'а, служебные каталоги в .gitignore
docs/superpowers/plans/2026-10-03-slice-0-skeleton*.md сгенерирован 1:1 из openspec/changes/slice-0-skeleton/tasks.md
(заголовки «Task N» для скриптов subagent-driven-development, Global Constraints из спеки и CLAUDE.md).
.gitignore: .codegraph/, .superpowers/, .bounded, .DS_Store.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-03 17:53:56 +04:00
aep
dab74844fa Merge pull request 'Срез 0 (proposal): соглашения шаблона в CLAUDE.md, change slice-0-skeleton — скелет scan-gateway и эмулятор' (#2) from feat/1-slice-0-skeleton into main
Reviewed-on: #2
2026-10-03 16:43:00 +03:00
Andrey Epifancev
6f2e227978 docs: change slice-0-skeleton под факты платформы — NATS без JetStream, Python 3.11, без CI и Nexus
Обмен с ядром на core NATS: подписка queue group, ack status=processing сразу по получении, process-local
LRU job_id против повторных запросов, публикация результата с повторами; удалены durable consumer / max_deliver /
ack_wait. Dockerfile python:3.11-slim; make check / make check-full вместо CI; raisa_* фильтруются при
dev-установке. Обновлены proposal, design (решения без обсуждения), specs, tasks, CLAUDE.md, openspec/config.yaml.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-03 16:21:47 +04:00
Andrey Epifancev
561eaa5c71 docs: соглашения шаблона в CLAUDE.md и OpenSpec change slice-0-skeleton
Срез 0 (issue #1): раздел «Соглашения шаблона» (что оставлено от шаблона команды, что
вырезается, что добавляется); change openspec/changes/slice-0-skeleton — proposal, design
с таблицей «Decisions made without discussion», спеки и tasks; в openspec/config.yaml
строки с двоеточием взяты в кавычки (YAML разбирал их как словари).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-03 02:43:41 +04:00
Andrey Epifancev
a9159aa872 chore: openspec init + контекст и правила change'ей 2026-10-03 00:26:48 +04:00
Andrey Epifancev
95a3d29cba chore: вычищены остатки доменного кода, каркас проходит tsc/biome/rsbuild 2026-10-02 23:35:01 +04:00
Andrey Epifancev
ad4f4559a9 chore: каркас из шаблона команды (DKB_ARMKA@ba172f8, доменный код удалён) 2026-10-02 23:15:38 +04:00