From c0ee4ecccfd6bbde0469b8cc9f27e79624e9cf06 Mon Sep 17 00:00:00 2001 From: Kindred Bot Date: Thu, 19 Feb 2026 20:58:03 +0000 Subject: [PATCH] docs: sync Silo server documentation Auto-synced from kindred/silo main branch. --- docs/src/silo-server/MODULES.md | 22 +++++++++------------- docs/src/silo-server/frontend-spec.md | 14 +++++++------- docs/src/silo-server/overview.md | 6 +++--- 3 files changed, 19 insertions(+), 23 deletions(-) diff --git a/docs/src/silo-server/MODULES.md b/docs/src/silo-server/MODULES.md index d7480b5172..589e0c4db8 100644 --- a/docs/src/silo-server/MODULES.md +++ b/docs/src/silo-server/MODULES.md @@ -23,7 +23,7 @@ These cannot be disabled. They define what Silo *is*. |-----------|------|-------------| | `core` | Core PDM | Items, revisions, files, BOM, search, import/export, part number generation | | `schemas` | Schemas | Part numbering schema parsing, segment management, form descriptors | -| `storage` | Storage | MinIO/S3 file storage, presigned uploads, versioning | +| `storage` | Storage | Filesystem storage | ### 2.2 Optional Modules @@ -470,12 +470,10 @@ Returns full config grouped by module with secrets redacted: "default": "kindred-rd" }, "storage": { - "endpoint": "minio:9000", - "bucket": "silo-files", - "access_key": "****", - "secret_key": "****", - "use_ssl": false, - "region": "us-east-1", + "backend": "filesystem", + "filesystem": { + "root_dir": "/var/lib/silo/data" + }, "status": "connected" }, "database": { @@ -566,7 +564,7 @@ Available for modules with external connections: | Module | Test Action | |--------|------------| -| `storage` | Ping MinIO, verify bucket exists | +| `storage` | Verify filesystem storage directory is accessible | | `auth` (ldap) | Attempt LDAP bind with configured credentials | | `auth` (oidc) | Fetch OIDC discovery document from issuer URL | | `odoo` | Attempt XML-RPC connection to Odoo | @@ -602,11 +600,9 @@ database: sslmode: disable storage: - endpoint: minio:9000 - bucket: silo-files - access_key: silominio - secret_key: silominiosecret - use_ssl: false + backend: filesystem + filesystem: + root_dir: /var/lib/silo/data schemas: directory: /etc/silo/schemas diff --git a/docs/src/silo-server/frontend-spec.md b/docs/src/silo-server/frontend-spec.md index 6eb6ab3908..2214508db7 100644 --- a/docs/src/silo-server/frontend-spec.md +++ b/docs/src/silo-server/frontend-spec.md @@ -337,7 +337,7 @@ Supporting files: | File | Purpose | |------|---------| | `web/src/components/items/CategoryPicker.tsx` | Multi-stage domain/subcategory selector | -| `web/src/components/items/FileDropZone.tsx` | Drag-and-drop file upload with MinIO presigned URLs | +| `web/src/components/items/FileDropZone.tsx` | Drag-and-drop file upload | | `web/src/components/items/TagInput.tsx` | Multi-select tag input for projects | | `web/src/hooks/useFormDescriptor.ts` | Fetches and caches form descriptor from `/api/schemas/{name}/form` | | `web/src/hooks/useFileUpload.ts` | Manages presigned URL upload flow | @@ -421,7 +421,7 @@ Below the picker, the selected category is shown as a breadcrumb: `Fasteners › ### FileDropZone -Handles drag-and-drop and click-to-browse file uploads with MinIO presigned URL flow. +Handles drag-and-drop and click-to-browse file uploads. **Props**: @@ -435,7 +435,7 @@ interface FileDropZoneProps { interface PendingAttachment { file: File; - objectKey: string; // MinIO key after upload + objectKey: string; // storage key after upload uploadProgress: number; // 0-100 uploadStatus: 'pending' | 'uploading' | 'complete' | 'error'; error?: string; @@ -462,7 +462,7 @@ Clicking the zone opens a hidden ``. 1. On file selection/drop, immediately request a presigned upload URL: `POST /api/uploads/presign` with `{ filename, content_type, size }`. 2. Backend returns `{ object_key, upload_url, expires_at }`. -3. `PUT` the file directly to the presigned MinIO URL using `XMLHttpRequest` (for progress tracking). +3. `PUT` the file directly to the presigned URL using `XMLHttpRequest` (for progress tracking). 4. On completion, update `PendingAttachment.uploadStatus` to `'complete'` and store the `object_key`. 5. The `object_key` is later sent to the item creation endpoint to associate the file. @@ -589,10 +589,10 @@ Items 1-5 below are implemented. Item 4 (hierarchical categories) is resolved by ``` POST /api/uploads/presign Request: { "filename": "bracket.FCStd", "content_type": "application/octet-stream", "size": 2400000 } -Response: { "object_key": "uploads/tmp/{uuid}/{filename}", "upload_url": "https://minio.../...", "expires_at": "2026-02-06T..." } +Response: { "object_key": "uploads/tmp/{uuid}/{filename}", "upload_url": "https://...", "expires_at": "2026-02-06T..." } ``` -The Go handler generates a presigned PUT URL via the MinIO SDK. Objects are uploaded to a temporary prefix. On item creation, they're moved/linked to the item's permanent prefix. +The Go handler generates a presigned PUT URL for direct upload. Objects are uploaded to a temporary prefix. On item creation, they're moved/linked to the item's permanent prefix. ### 2. File Association -- IMPLEMENTED @@ -612,7 +612,7 @@ Request: { "object_key": "uploads/tmp/{uuid}/thumb.png" } Response: 204 ``` -Stores the thumbnail at `items/{item_id}/thumbnail.png` in MinIO. Updates `item.thumbnail_key` column. +Stores the thumbnail at `items/{item_id}/thumbnail.png` in storage. Updates `item.thumbnail_key` column. ### 4. Hierarchical Categories -- IMPLEMENTED (via Form Descriptor) diff --git a/docs/src/silo-server/overview.md b/docs/src/silo-server/overview.md index 3262f0649f..eb6fcd0264 100644 --- a/docs/src/silo-server/overview.md +++ b/docs/src/silo-server/overview.md @@ -34,7 +34,7 @@ silo/ │ ├── ods/ # ODS spreadsheet library │ ├── partnum/ # Part number generation │ ├── schema/ # YAML schema parsing -│ ├── storage/ # MinIO file storage +│ ├── storage/ # Filesystem storage │ └── testutil/ # Test helpers ├── web/ # React SPA (Vite + TypeScript) │ └── src/ @@ -55,7 +55,7 @@ silo/ See the **[Installation Guide](docs/INSTALL.md)** for complete setup instructions. -**Docker Compose (quickest — includes PostgreSQL, MinIO, OpenLDAP, and Silo):** +**Docker Compose (quickest — includes PostgreSQL, OpenLDAP, and Silo):** ```bash ./scripts/setup-docker.sh @@ -65,7 +65,7 @@ docker compose -f deployments/docker-compose.allinone.yaml up -d **Development (local Go + Docker services):** ```bash -make docker-up # Start PostgreSQL + MinIO in Docker +make docker-up # Start PostgreSQL in Docker make run # Run silo locally with Go ```