Agent Zero
29d55cb187
Phase 6: DMS & Attachments — Streaming, Deduplikation, API-Bereinigung
...
Check Cross-Plugin Imports / check (push) Has been cancelled
6.4 Upload streamen:
- attachment_service.save_attachment: Streamt in 1MB Chunks statt await file.read()
- routes/attachments.py: Uebergibt UploadFile direkt statt bytes
6.5 Download streamen:
- DMS preview_file: FileResponse fuer LocalStorage (automatisches Streaming)
- Kein storage.read() mehr fuer LocalStorage
6.6 Tenantlokale Deduplikation:
- DMS Upload: Prueft content_hash vor Erstellung, wiederverwendet existierendes File
- attachment_service: Dedup bereits vorhanden, jetzt mit Streaming kompatibel
- Migration 0098: Partial Unique Index (tenant_id, content_hash) WHERE content_hash IS NOT NULL AND deleted_at IS NULL
6.7 API-Ausgabe bereinigt:
- attachment_service: storage_path und content_hash aus API-Ausgaben entfernt
- DMS routes: content_hash aus 4 API-Endpunkten entfernt
Tests: 54/54 bestanden (17 Workspace + 13 API Token + 24 Command)
2026-08-03 14:21:43 +02:00
Agent Zero
4efdc8e036
Fix: Migration 0097 — api_tokens.updated_at Spalte hinzufuegen
...
ApiToken Modell erbt von TenantMixin (TimestampMixin) das updated_at erwartet.
Migration 0001 hat api_tokens ohne updated_at erstellt.
Migration 0083 hat deleted_at hinzugefuegt aber updated_at verpasst.
2026-08-03 14:10:04 +02:00
Agent Zero
3eb11b1745
Phase 1: Migrationsaudit + Forward-Migrationen 0093-0096
...
Audit (docs/migration_history_audit.md):
- files.size_bytes: INTEGER (Alembic) vs BIGINT (Produktion/Plugin)
- GIN-Indizes: Fehlendes USING GIN in Alembic 0002
- guest_users: ix_guest_users_email_tenant fehlt UNIQUE in Alembic 0059
- plugins.name: Doppelter Unique-Index in Produktion
Forward-Migrationen:
- 0093: files.size_bytes INTEGER → BIGINT
- 0094: GIN-Indizes reparieren + plugins.name doppelten Index entfernen
- 0095: guest_users email+tenant_id UNIQUE INDEX (mit Dubletten-Check)
- 0096: Workspace tenant_integrity (tenant-bound FKs)
Tests: 41/41 bestanden (17 Workspace + 24 Command)
Alembic Head: 0096
2026-08-03 13:29:16 +02:00
Agent Zero
07a99975ec
Phase 5: Outbox DLQ, Monitoring, Consumer-Registry
...
- Migration 0092: DLQ columns (error_message, failed_at) + consumer_inbox RLS fix
- outbox.py: DLQ logic, replay functions, stats, consumer registry
- app/routes/outbox.py: 5 API endpoints (stats, failed, replay, replay-all, consumer-registry)
- outbox_deliveries tracking per consumer handler
- 18/18 tests passing
2026-08-02 23:25:54 +02:00
Agent Zero
745bc4f2d8
feat: Phase 2 — Migration 0091: FK-Constraints für 74 Tenant-Tabellen
...
- 74 Tabellen erhalten FOREIGN KEY (tenant_id) REFERENCES tenants(id) ON DELETE CASCADE
- 10 globale Tabellen ausgeschlossen (sequences, system_settings, currencies, etc.)
- Orphan-Cleanup: SET tenant_id = NULL für verwaiste Einträge
- Idempotent: IF NOT EXISTS für alle Constraints
- Downgrade: Drop aller FK-Constraints
2026-08-01 23:04:15 +02:00
Agent Zero
89b775b9ef
fix: legacy app.tenant_id policies on _old tables + seed_admin.py rewrite
...
- Migration 0090: Drop legacy tenant_isolation policies on companies_old,
company_contacts_old, contacts_old that used app.tenant_id variable.
Create new policies using app.current_tenant_id for crm_api/crm_worker.
- seed_admin.py: Rewrite to use migration engine (crm_migration) for
bootstrap, set tenant context, create Tenant + Role + User + UserTenant.
No longer passes tenant_id as User parameter.
Fixes: 3 legacy app.tenant_id policies found in Gate 2 verification.
Fixes: seed_admin.py incompatible with current User model.
2026-07-31 22:23:38 +02:00
Agent Zero
b5191f0d11
gate2: migration 0089 — add updated_at to sessions table (model uses TimestampMixin but table was missing column)
2026-07-31 22:15:29 +02:00
Agent Zero
10296137e9
gate2: fix migration 0085 — revoke default privileges before dropping crm_runtime, handle dependent_objects_still_exist
2026-07-31 21:20:59 +02:00
Agent Zero
010ef448e7
gate2: fix all migrations for fresh DB installation
2026-07-31 19:16:11 +02:00
Agent Zero
d37388423d
gate2: fix ix_contacts_tenant_id conflict — drop old index before recreate in 0021
2026-07-31 18:51:15 +02:00
Agent Zero
e43a906cde
gate2: fix ix_contacts_tenant_id duplicate (index=True in 0021 vs create_index in 0002)
2026-07-31 18:34:35 +02:00
Agent Zero
dd7ad461d8
gate2: fix duplicate column/index in migrations for fresh DB installation
2026-07-31 18:20:09 +02:00
Agent Zero
224a5ea9af
gate2: fix migration 0019 duplicate deleted_at on roles (IF NOT EXISTS)
2026-07-31 17:50:07 +02:00
Agent Zero
3032ad2cbf
gate4: migration 0088 — auth RLS policies for password_reset_tokens and audit_log
2026-07-31 12:04:27 +02:00
Agent Zero
437c107ee8
gate: migration 0087 add timestamps to password_reset_tokens, backup uploaded to Forgejo
2026-07-31 09:23:34 +02:00
Agent Zero
1a980ba9d8
gate: migration 0086, crm_migration BYPASSRLS, audit_log fix, CI test for app.tenant_id
...
- Migration 0086: Remove FORCE RLS from 5 global tables
- Migration 0085: crm_migration keeps BYPASSRLS for data migrations
- Migration 0085: Remove audit_log from crm_auth grants
- auth_service.py: Audit log via separate API session (crm_api with tenant context)
- tests/test_no_legacy_tenant_var.py: CI test for app.tenant_id in policies
2026-07-31 09:02:40 +02:00
Agent Zero
15f0a07d4e
phase1: fix auth_service tenant context for audit_log, add sessions+audit_log to crm_auth grants
...
- auth_service.py: set tenant context before audit log write in login
- migration 0085: add sessions and audit_log to AUTH_TABLES for crm_auth
- Login now works on production with RLS enabled
2026-07-31 02:28:29 +02:00
Agent Zero
100b9f705c
phase1: separate DB roles, RLS restoration, login on crm_auth
...
Check Cross-Plugin Imports / check (push) Has been cancelled
- config.py: add auth_database_url, worker_database_url, migration_database_url
- db/__init__.py: separate engines for auth/worker/migration + get_auth_db/get_worker_db
- auth.py: all auth endpoints use get_auth_db (crm_auth role)
- auth_service.py: remove login fallback, require active membership, check status
- auth_service.py: switch_tenant checks active membership status
- alembic/env.py: use migration_database_url for Alembic
- docker-compose.yml: add AUTH_DATABASE_URL, WORKER_DATABASE_URL
- .env.example: add all 4 DB URLs with separate roles
- migration 0085: transfer ownership to crm_migration, fix BYPASSRLS,
enable RLS+FORCE on all tenant tables, drop old policies, create new
fail-closed policies scoped to crm_api+crm_worker, revoke excessive grants,
grant minimal crm_auth access, drop crm_runtime, set default privileges
- tests/test_rls_coverage.py: automated RLS coverage check (13 tests)
- tests/test_cross_tenant_security_v2.py: RLS tests with unprivileged role
2026-07-31 02:05:16 +02:00
Agent Zero
0692fce2e4
fix: RLS fail-closed migration + per-tenant startup code
2026-07-31 01:31:41 +02:00
Agent Zero
7fbbe420bd
fix: comprehensive system audit fixes (55+ issues)
...
Check Cross-Plugin Imports / check (push) Has been cancelled
CRITICAL:
- Fix SQL injection in prestart.sh (parameterized query)
- Fix secret key validation (always validate, not just production)
- Fix workspace model partial index bug (func.text -> text)
- Fix HealthResponse schema (add checks field)
- Fix Tenant import in permissions.py (NameError on every auth request)
- Fix README tech stack (React instead of Alpine.js)
- Delete broken test_cross_tenant_security_v2.py
- Add fail-closed RLS migration 0084 (48 tenant tables)
HIGH:
- Add GeneralRateLimitMiddleware for all API routes
- Add file type blocklist for DMS and attachment uploads
- Fix guest auth: Pydantic schema, tenant_slug required, CSRF bypass
- Fix CSRF bypass path matching (in -> endswith)
- Add worker healthcheck in docker-compose.yml
- Add ARQ max_tries=3 for job retries
- Fix 28 bare pass in mail services (-> logger.debug)
- Fix print() -> logger in main.py and ai_assistant
- Fix duplicate email handling (catch IntegrityError -> 409)
- Add session revocation (invalidate_all_user_sessions)
- Add resource limits to all containers
- Fix CORS default (localhost -> production domain)
- Fix SameSite=Lax -> Strict
- Fix Redis password visibility in healthcheck
- Fix npm vulnerabilities (19 -> 9)
- Fix Sidebar OOM (wildcard lucide import -> curated ICON_MAP)
MEDIUM:
- Localize ErrorBoundary to German
- Wire Mail.tsx save/delete filter to API
- Document system_notif plugin (no routes needed)
- Fix datetime.utcnow() -> datetime.now(UTC)
- Pin litellm version (>=1.0,<2.0)
- Move CSRF token from sessionStorage to in-memory
- Fix restore_backup error handling and transaction
- Fix Dms.tsx useEffect cleanup
- Add skip-to-content link for accessibility
- Add selectinload imports to 3 services
- Add .env.example missing variables
- Fix AppShell/TopBar/Sidebar test mocks
NEW TESTS:
- test_guest_auth.py (6 tests)
- test_user_service.py (8 tests)
- test_backup_service.py (5 tests)
NEW SCHEMAS:
- saved_filter, saved_view, user_preference, workspace, entity_policy
Tests: 22/22 PASSED
2026-07-31 00:58:05 +02:00
Agent Zero
076134b445
migration: add missing deleted_at columns to 9 TenantMixin tables (0083)
2026-07-30 10:16:26 +02:00
Agent Zero
8acc00c559
migration: add sensitivity column to custom_field_definitions (0082)
2026-07-30 09:27:04 +02:00
Agent Zero
d4ffbeca50
phase12: disable RLS on all system/auth/config/plugin tables (final migration)
2026-07-30 00:47:43 +02:00
Agent Zero
8833444dcb
phase12: disable RLS on audit_log and sessions (written during login)
2026-07-30 00:20:20 +02:00
Agent Zero
02af9ebaa2
phase12: disable RLS on all system/auth/config tables for crm_api startup
2026-07-30 00:15:58 +02:00
Agent Zero
42d004c2c9
phase12: disable RLS on automation tables (written at startup)
2026-07-30 00:06:43 +02:00
Agent Zero
0d7602db3a
phase12: disable RLS on tax_rates (startup table)
2026-07-29 23:42:25 +02:00
Agent Zero
1611b2450e
phase12: disable RLS on startup tables (system_settings, currencies, taxes, sequences, saved_filters, saved_views, webhooks)
2026-07-29 23:33:56 +02:00
Agent Zero
54c275580f
phase6: standardized event envelope (aggregate_type, aggregate_id, occurred_at, correlation_id, schema_version) + outbox_deliveries table
2026-07-29 22:50:27 +02:00
Agent Zero
bd50a85483
fix: add created_at/updated_at to workspace_users (TenantMixin inherits TimestampMixin)
2026-07-29 18:40:09 +02:00
Agent Zero
8094b6d13f
fix: add deleted_at to workspace tables (TenantMixin includes SoftDeleteMixin)
2026-07-29 18:38:06 +02:00
Agent Zero
2423053477
phase5: workspace backend — models, service, routes, migration 0072
2026-07-29 18:32:35 +02:00
Agent Zero
8322adb73f
phase4: entity_attachments table + DMS unified storage + attachment service rewritten + download via DMS
2026-07-29 17:52:55 +02:00
Agent Zero
840795b5b9
phase2: 4 DB roles (crm_migration/api/worker/auth) + docker-compose updated + GRANT USAGE + RLS verified with unprivileged role
2026-07-29 16:49:09 +02:00
Agent Zero
8da803156e
phase1: RLS simplified to tenant isolation only + canAccess fallback removed + useUserPermissions hook + security kernel docs
2026-07-29 16:36:51 +02:00
Agent Zero
0448962d08
fix: visibility.py Defense-in-Depth tenant_id filter + entity_permissions deleted_at migration + cross-tenant tests
2026-07-29 16:12:04 +02:00
Agent Zero
f1a2484055
fix: WeasyPrint URL fetcher + attachment improvements + webhook error propagation + WebSocket conversation check + RLS disabled on system tables (bootstrap fix)
Check Cross-Plugin Imports / check (push) Has been cancelled
2026-07-29 13:19:21 +02:00
Agent Zero
0f4e51c4b3
fix: consumer_inbox table for outbox idempotency + tenant_plugin_activation table
2026-07-29 12:49:15 +02:00
Agent Zero
de53bcff25
fix: guest_sessions Redis index for revocation + RLS on all tenant tables (migration 0064)
2026-07-29 12:46:50 +02:00
Agent Zero
bfd4ff8dd5
fix: migration 0061 — remove non-existent tables from RLS list
2026-07-29 12:40:15 +02:00
Agent Zero
e1d522c6a2
fix: missing notification entity_type/entity_id migration (0063)
2026-07-29 12:35:44 +02:00
Agent Zero
8539a6402c
P1.6: secure guest invitation tokens (secrets.token_urlsafe + SHA-256 hash + one-time use + session revocation)
2026-07-29 12:30:00 +02:00
Agent Zero
26bf8d3a31
P0+P1 fixes: RCE sandbox, SQL injection, RLS tenant isolation, DB roles, test syntax, attachment, permission registry, membership check
Check Cross-Plugin Imports / check (push) Has been cancelled
2026-07-29 12:28:08 +02:00
Agent Zero
680d5ab6f1
fix: migration 0058 checkconstraint + all sprint 20-23 deployed
2026-07-29 03:10:26 +02:00
Agent Zero
24690fb674
sprint20-23: tests + documentation + guest access + infrastructure + migrations 0059
2026-07-29 02:53:37 +02:00
Agent Zero
ddf73ee42e
sprint14-19: ABAC UI rule editor + permission templates + bulk share + analytics + delegation + resolution strategies + migrations 0056-0058
2026-07-29 02:47:03 +02:00
Agent Zero
e0003b9384
sprint12+13: zentrale rechte settings page + ABAC engine backend (model, migration 0055, service, routes)
2026-07-29 02:42:16 +02:00
Agent Zero
b7ccd9e6c3
sprint8: fix migration 0054 — skip existing owner_id columns
2026-07-29 02:35:32 +02:00
Agent Zero
958e412152
sprint8: plugin entities owner_id migration 0054 + calendar owned_mixin
Check Cross-Plugin Imports / check (push) Has been cancelled
2026-07-29 02:33:16 +02:00
Agent Zero
88c04286af
sprint6+7: permission notifications + audit trail + notification entity filter + mail account permissions + migration 0053
Check Cross-Plugin Imports / check (push) Has been cancelled
2026-07-29 02:18:17 +02:00