Design doc for #38 (attachments storage) and #31 (storage backend choice). No implementation.
Attachments (#38): filesystem-on-PVC recommended behind a small blob interface (Put/Open/Delete) so MinIO stays a drop-in later. Size limit via admin setting (default 10 MiB, enforced pre-read + during stream). Server-side MIME sniffing with allowlist, nosniff, CSP sandbox, Content-Disposition rules; SVG never served inline.
Storage (#31): stay SQLite-only (WAL + modernc driver). No Postgres/Redis, no backend abstraction now; internal/store package boundary is the abstraction. Trigger conditions for revisiting documented in the doc.
Design doc for #38 (attachments storage) and #31 (storage backend choice). No implementation.
- **Attachments (#38):** filesystem-on-PVC recommended behind a small blob interface (Put/Open/Delete) so MinIO stays a drop-in later. Size limit via admin setting (default 10 MiB, enforced pre-read + during stream). Server-side MIME sniffing with allowlist, nosniff, CSP sandbox, Content-Disposition rules; SVG never served inline.
- **Storage (#31):** stay SQLite-only (WAL + modernc driver). No Postgres/Redis, no backend abstraction now; internal/store package boundary is the abstraction. Trigger conditions for revisiting documented in the doc.
Consumer: paste cans (#4).
- attachments: filesystem-on-PVC recommended, blob interface keeps MinIO
as a later drop-in; size limits via admin setting; sniffed-mime +
nosniff/sandbox serving rules
- storage backend: stay SQLite-only (WAL, modernc); no Postgres/Redis and
no backend abstraction until documented trigger conditions fire
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Design doc for #38 (attachments storage) and #31 (storage backend choice). No implementation.
Consumer: paste cans (#4).