14 KiB
14 KiB
Roadmap: workspace/chat/files + artifacts
Цель
Следующий продуктовый приоритет для master-service:
- управление
workspace/chat/chat files - хранение и выдача
artifacts
Идея этапа: превратить текущий sandbox MVP в storage-centric control plane, где sandbox работает поверх явных пользовательских данных, а не только поверх chat_id.
Что считаем в scope этого roadmap
- workspace metadata
- chat metadata и chat directories
history.mdрядом с чатом- upload/list/download/delete/clear для chat files
- quota / usage accounting
- artifact metadata
- object storage adapter для artifacts
- delivery / mark-for-delete flow для artifacts
- интеграция storage model с текущим sandbox lifecycle
Что пока вне scope
- полноценный auth/access control
- access lease и WebSocket handoff
- multi-node orchestration как отдельный эпик
- full retention engine для workspace/account lifecycle
- внешние messenger integrations
Зафиксированные продуктовые решения
- trusted caller передает
user_id: UUID - в v1 один
Workspaceна одногоUser - metadata adapters пока делаем
in-memory - chat history в v1 хранится в
history.md - chat files отдаем через master: metadata API + download endpoint
- soft quota 10 GB блокирует quota-relevant write-path операции, но не делает hard reservation
- chat create сам по себе не блокируется quota check, пока не появляется значимый file/artifact payload
- delete в v1 — hard delete; chat delete запрещен при active sandbox
- artifact delivery подтверждается явным ack
- artifact blob отдается через presigned URL, metadata — через master
- object storage layout: один bucket на environment + prefixes
- artifact states:
created,stored,delivered,delivery_failed,marked_for_delete,deleted - artifact retention: после ack ->
marked_for_delete-> async cleanup; без ack действует отдельный TTL
Принципы выполнения
- Clean Architecture и dependency direction сохраняются
- filesystem и object storage живут только во внешних adapter/repository слоях
domain/иusecase/не знают про FastAPI, Docker, OpenTelemetry, env- один delivery slice = одна атомарная задача = один commit
- архитектурные развилки сначала фиксируются кратким ADR-lite в
docs/
Легенда исполнителей
primary-agent— архитектура, ADR, domain/contracts, финальная сборка решенийjunior— простые in-memory adapters и базовые unit-level задачиjunior+opus— usecase/adapter/API slices со средним уровнем связностиtest-engineer— regression и integration test packscode-reviewer— review-only этапы
Phase 0. Design checkpoints
R00. ADR: storage source of truth
- Рекомендуемый исполнитель:
primary-agent - Зачем: определить, что является source of truth для
Workspace,Chat,ChatFile,Artifact - Нужно решить: как устроен in-memory-first этап, как metadata связаны с filesystem paths, как sandbox получает path текущего chat
- Выход: ADR-lite + список сущностей и ownership boundaries
R01. ADR: artifact lifecycle
- Рекомендуемый исполнитель:
primary-agent - Зачем: зафиксировать states и delivery contract для artifact flow
- Нужно решить:
created -> stored -> delivered -> delivery_failed -> marked_for_delete -> deleted - Выход: ADR-lite + минимальный state machine
R02. ADR: chat history policy
- Рекомендуемый исполнитель:
primary-agent - Зачем: зафиксировать, как
history.mdсоотносится с metadata чата - Нужно решить: кто создает файл, кто пишет initial header, как читать/обновлять metadata без парсинга файла
- Выход: ADR-lite + правила sync между metadata и history file
Phase 1. Foundation for workspace/chat/file domain
R10. Domain model for user storage
- Рекомендуемый исполнитель:
primary-agent - Scope:
Workspace,Chat,ChatFile, domain errors - Layer:
domain/ - Выход: минимальные сущности, value objects, ошибки конфликтов/не-найдено/квота
- Depends on:
R00,R02
R11. Usecase ports for storage and metadata
- Рекомендуемый исполнитель:
primary-agent - Scope: repository/storage interfaces для workspace/chat/chat-file/history/quota
- Layer:
usecase/ - Выход: порты для metadata repo, file storage, usage reader, id generator, clock и trusted caller identity input
- Depends on:
R10
R12. In-memory metadata adapter foundation
- Рекомендуемый исполнитель:
junior - Scope: первая metadata implementation для workspace/chat/chat-file/artifact metadata
- Layer:
repository/ - Примечание: это промежуточный этап; durable DB идет отдельным follow-up после storage/product slice
- Выход: in-memory CRUD для workspace/chat/chat-file/artifact metadata
- Depends on:
R11
R13. Filesystem storage adapter foundation
- Рекомендуемый исполнитель:
junior+opus - Scope: storage adapter для chat directories,
history.md, uploads и file metadata extraction - Layer:
adapter/илиrepository/в зависимости от финальной границы - Выход: операции create/list/delete/read metadata для chat files, history path management и download path resolution
- Depends on:
R11
R14. Sandbox integration with chat metadata
- Рекомендуемый исполнитель:
junior+opus - Scope: перестать считать
chat_idединственным источником layout, использовать metadata-backed chat path - Layer:
usecase/+ outer adapters - Выход: sandbox mounts current chat directory, созданную через storage model
- Depends on:
R12,R13
Phase 2. Workspace and chat API
R20. Create workspace on first touch
- Рекомендуемый исполнитель:
junior+opus - Scope: auto-create workspace при первом запросе на user storage
- API: внутренний usecase + при необходимости явная HTTP ручка
- Выход: гарантированный
Workspaceдля пользователя поuser_id - Depends on:
R12
R21. Chat CRUD
- Рекомендуемый исполнитель:
junior+opus - Scope: create/get/list/delete chat
- API: versioned HTTP under
/api/v1 - Выход: first-class chat metadata вместо implicit-only
chat_id - Depends on:
R20,R12,R13
R22. History file lifecycle
- Рекомендуемый исполнитель:
junior+opus - Scope: создавать
history.mdвместе с chat directory, читать и обновлять metadata - Выход: первый стабильный contract для истории чата в filesystem
- Depends on:
R21,R13
R23. Chat file upload and file metadata API
- Рекомендуемый исполнитель:
junior+opus - Scope: upload/list/get metadata/delete single file/clear chat files
- API: HTTP adapter + schemas
- Выход: базовый file management API на chat scope + master download endpoint
- Depends on:
R21,R13
R24. Usage and quota accounting
- Рекомендуемый исполнитель:
junior+opus - Scope: считать storage usage по workspace/chat, мягкая quota 10 GB
- Выход: usecases и metrics для current usage; file/artifact write-path reject при превышении soft quota
- Depends on:
R23
R25. Tests and review for storage slice
- Рекомендуемый исполнитель:
test-engineer - Scope: unit + adapter + HTTP tests, boundary review
- Выход: regression coverage для workspace/chat/files
- Depends on:
R20-R24
Phase 3. Artifact pipeline
R30. Artifact domain and metadata model
- Рекомендуемый исполнитель:
primary-agent - Scope:
Artifactentity, states, delivery metadata, linkage touser/chat - Layer:
domain/,usecase/ - Выход: базовая artifact model + errors + repository ports для in-memory metadata stage
- Depends on:
R01,R12
R31. Object storage adapter
- Рекомендуемый исполнитель:
junior+opus - Scope: S3-compatible adapter for artifact blobs
- Layer: outer
adapter/orrepository/ - Выход: upload/get/delete primitives behind interface + presigned URL support
- Depends on:
R30
R32. Artifact registration and upload flow
- Рекомендуемый исполнитель:
junior+opus - Scope: usecase, который связывает metadata и object storage
- Выход: artifact можно зарегистрировать, сохранить blob и получить external reference
- Depends on:
R30,R31
R33. Artifact list/get metadata API
- Рекомендуемый исполнитель:
junior+opus - Scope: list artifacts by chat/user, get artifact metadata/status
- Выход: внешний API для управления artifact metadata и выдачи presigned download references
- Depends on:
R32
R34. Delivery acknowledgement flow
- Рекомендуемый исполнитель:
junior+opus - Scope: mark artifact as delivered / delivery_failed
- Выход: подтвержденный delivery state через explicit ack и база для retention
- Depends on:
R32
R35. Artifact delete / mark-for-delete policy
- Рекомендуемый исполнитель:
junior+opus - Scope: policy-driven cleanup hooks после delivery confirmation или TTL
- Выход: artifact lifecycle завершен, metadata и blob cleanup согласованы,
marked_for_deleteиспользуется как переходное состояние - Depends on:
R34
R36. Tests and review for artifact slice
- Рекомендуемый исполнитель:
test-engineer - Scope: unit + adapter + HTTP tests, boundary review
- Выход: regression coverage для artifact lifecycle и object storage integration
- Depends on:
R30-R35
Phase 4. Cross-slice hardening
R40. Observability for storage usage and artifacts
- Рекомендуемый исполнитель:
junior+opus - Scope: metrics по usage/quota, artifact upload latency, artifact errors
- Выход: dashboards and alerts for storage-centric flows
- Depends on:
R24,R32,R35
R41. Cleanup safety rules
- Рекомендуемый исполнитель:
junior+opus - Scope: не удалять chat files/artifacts, если есть активный sandbox или незавершенный delivery flow
- Выход: safe cleanup invariants
- Depends on:
R24,R35
R42. Docs refresh
- Рекомендуемый исполнитель:
primary-agent - Scope: README, ADRs, API docs, operator notes
- Выход: актуальная документация для storage and artifact flows
- Depends on: все предыдущие slices
Рекомендуемый порядок выполнения
Priority A — workspace/chat/files
R00R02R10R11R12R13R20R21R22R23R24R14R25
Priority B — artifacts
R01R30R31R32R33R34R35R36
Future follow-up after Priority A+B
- durable metadata repository instead of in-memory adapters
- auth/access control and access lease
- multi-node storage/session coordination
Priority C — hardening
R40R41R42
Что даст этот roadmap
После выполнения Priority A + B сервис сможет:
- создавать и хранить workspace/chat metadata
- управлять файлами пользователя в chat scope
- хранить историю чата в предсказуемом layout
- поднимать sandbox поверх first-class chat storage
- хранить artifact metadata и blob отдельно
- отдавать artifact metadata наружу и подтверждать доставку
То есть master-service станет не только sandbox orchestrator, но и полноценным control-plane для user storage и artifact lifecycle.