Срез 0: скелет tabular-parser — без фронта и БД, воркер NATS без JetStream, парсер-заглушка, контракт v1.0 #3
Loading…
x
Reference in New Issue
Block a user
No description provided.
Delete Branch "feat/1-slice-0-skeleton"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Issue #1 — реализация change
slice-0-skeleton(50 коммитов после merge proposal #2). Не закрывает issue: закрытие — послеopenspec archiveкомандой «закрывай».Что сделано
web/, Alembic,db/,models/,repositories/, SMB,raisa_*, лишние зависимости; шаблонныйREADME.mdзаменён описанием сервиса;CLAUDE.mdактуализирован.api/pyproject.toml(ruff, mypy),Makefile(venv,lint,test,test-integration,check,check-full,up),Dockerfile(python:3.11-slim) и.dockerignore,api/.env.example/api/.env.test,ENV_FILE.api/contracts/, pydantic-моделиsrc/contract/, тест идентичности с../docs/contracts(байт в байт).tabular-parser; ackprocessingдо чтения S3; process-local LRUjob_idпротив повторных запросов ядра; результатresults/{file_id}/{job_id}/result.jsonи конверт с повторами публикации; транспортные ошибки всегда становятся результатом (SCHEMA_MISMATCH,FILE_READ_ERROR,UNKNOWN_ERROR); корректная остановка;/healthcheckс полемnats.Parser,NullParser(NOT_IMPLEMENTED), каталогapi/rules/.Проверки
make check-fullна HEAD, exit 0: ruff, format, mypy чисто; 265 unit + 8 integration passed (реальные NATS и MinIO из composedocs/dev);docker buildок (образ 268 КБ в/app/api, без.env/.venv). Живой smoke: запрос →ack:<job>:1(processing) →result:<job>:1(error NOT_IMPLEMENTED);/healthcheck200nats=ok, в том числе с минимальным.env.openspec validate --strict— valid.Rulings I made
Полный список —
openspec/changes/slice-0-skeleton/design.md, таблица «Decisions made without discussion» (№8–47). Ключевые: R-13Parser.parseсинхронный, вызывается черезasyncio.to_thread; R-15 фоновый supervisor подключения NATS вместо несуществующегоretry_on_failed_connect; R-16PUBLISH_RETRIES=3— три повтора после первой попытки; R-17/healthcheck.nats=ok | down | off; R-18 нечитаемый запрос безjob_idлогируется и отбрасывается без ответа; R-20 приschema_version2.0SCHEMA_MISMATCHидёт без ack; R-21 дедуп поjob_id(LRU); R-34 добавлен.dockerignore(образ содержал.envи.venv); R-35SERVICE_NAME—Literal.Deferred (в follow-up issue при закрытии)
M-6 (
cert_check=Falseдля MinIO), M-9 (/healthcheckok при незавершённомon_connected, закрытие клиента терминально), M-10 (сырой текст исключений вerror.message, Срез 2), O-5 (модели контракта продублированы в arm-core), O-8 (enqueue=Trueв шаблонномlogger.py),stop()при отмене вызывающего,to_threadне отменяется приSTOP_TIMEOUT; для Среза 2 — неограниченная очередь, файл целиком в памяти,reply_deadlineне проверяется.��то нужно решить человеку
schema_version2.0 — spec docs говорит «с ack»; P-3 ключ дедупаjob_idили(job_id, attempt); P-4 порт сервиса в docs README) —openspec/changes/slice-0-skeleton/open-questions-proposal.md.Связанные
Тест идентичности контракта читает
../docs— PRRSHB/arm-ka-docs(контракт v1.0, compose) должен влиться раньше или одновременно.RSHB/arm-corePR #3;RSHB/arm-scan-gateway— в работе.🤖 Generated with Claude Code
https://claude.ai/code/session_012vJkmBGKKqMoEMzvsXG3y2
Требование «Ошибки транспорта превращаются в результат» приведено к коду: SCHEMA_MISMATCH публикуется, если читаемы job_id, file_id и attempt и job_id ещё не известен; иначе — лог (error/warning) без ack и результата. Добавлены два сценария (их покрывают test_unreadable_request_is_logged_and_dropped и test_malformed_request_for_{job_in_progress,done_job}_is_dropped). В proposal.md поле healthcheck nats — ok/down/off. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>- test_app: приложение с Settings только из MinIO, адреса NATS и DEBUG стартует, /healthcheck отвечает 200 с uptime, version, nats. - test_layout: в requirements.txt нет asyncpg, SQLAlchemy, alembic, smbprotocol, argon2-cffi, raisa_fastapi_protected_api; нет каталогов web/, api/alembic/, api/src/{db,models,repositories}/. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>