[devops] Каркас: uv-проект, docker-compose, Makefile, CI #1
Notifications
Due Date
No due date set.
Blocks
#2 [core] privacy: scrub() и pseudo_id() + тесты
MedITron/PTSRaiAgent
#3 [core] Движок шкал: схема config/scales + скоринг PHQ-9, GAD-7, PCL-5, AUDIT-C, PC-PTSD-5, C-SSRS
MedITron/PTSRaiAgent
#4 [core] Safety: лексикон + LLM-сигнал, кризисный скрипт, recall 100% на наборе
MedITron/PTSRaiAgent
#6 [backend] Модель данных: identity / clinical / audit, репозитории, create_all
MedITron/PTSRaiAgent
Reference: MedITron/PTSRaiAgent#1
Reference in New Issue
Block a user
Описание
Пустой репозиторий. Нужен скелет, на который лягут все зоны. ADR-003 (один Postgres, две БД, без Redis/Alembic), ADR-004 (офлайн по умолчанию), ADR-008 (
config/).Желаемый результат
pyproject.toml(uv, Python 3.11+): fastapi, uvicorn, sqlalchemy[asyncio], asyncpg, pydantic-settings, pyyaml, aiogram 3, gigachat, apscheduler, streamlit, plotly, httpx; dev: ruff, pytest, pytest-asyncio.app/{core,dialog,channels,llm,db,api,scheduler,integrations}/,dashboard/,config/,data/,scripts/,tests/.app/config.py—Settings(BaseSettings): DB-URL обеих БД,PSEUDO_KEY,LLM_PROVIDER=mock|gigachat,GIGACHAT_*,TG_BOT_TOKEN(опц.),DEMO_CLOCK=true,TZ.docker-compose.yml:postgres(init-скрипт создаёт БДidentityиclinicalи две роли; clinical-роль без прав на identity),app(FastAPI :8000 + шедулер + бот, если задан токен),dashboard(Streamlit :8501). Работает без интернета после сборки.Makefile:up,down,seed,lint(ruff),test(pytest),demo-reset..env.exampleпо SPEC §15 +LLM_PROVIDER,DEMO_CLOCK..gitea/workflows/ci.yml: ruff + pytest на PR в dev/main.Подзадачи
app/config.pyКак проверить
cp .env.example .env && make up→curl localhost:8000/health= 200,localhost:8501открывается;make lint testзелёные (пустой smoke-тест).Лог выполнения
2026-10-03
requires-python >=3.11,<3.14), структура пакетовapp/{core,dialog,channels,llm,db,api,scheduler,integrations},app/config.py(единственное место чтения env,env_ignore_empty), FastAPI/health, заглушка Streamlit, Dockerfile (один образ на app и dashboard), compose: postgres с двумя БДidentity/clinicalи раздельными ролями (REVOKE CONNECT FROM PUBLIC), Makefile,.env.example, CI.gitea/workflows/ci.yml.make lint testзелёные;docker compose up→/health200, дашборд 200;clinical_appк базеidentityне подключается («no CONNECT privilege»).docs/(иначе форматирует python-блоки в markdown).