28e17a5b08
- refactor: replace inline AppError literals with model.New*Error constructors in service and handler layers - feat: PromoteStaged falls back to copy/delete when os.Rename returns EXDEV (cross-device link) - fix: upload error messages no longer leak internal multipart field names or parser implementation details - fix: upload size violations are converted to domain error ErrUploadTooLarge at the handler boundary - fix: download logs error and size mismatch when io.Copy fails or writes fewer bytes than expected - test: add tests for field name leak prevention, parser error sanitization, read errors after response start, and EXDEV fallback
Docs
| File | Content |
|---|---|
architecture.md |
Module layout, package boundaries |
decisions.md |
Technical decisions (ADR) |
roadmap.md |
Feature progress and status |
development.md |
Build, test, debug workflow |