- Related collection lookup used internal name as document ID, but
Appwrite collections have user-facing IDs. Extract sequence from
internal name and use findOne by $sequence instead.
- Increase all schema polling timeouts from 240s to 360s for CI
dedicated mode parallel load.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Updates utopia-php/database with fix for inline relationship data
without $id not being auto-converted to Document objects. The
Relationships hook now converts associative arrays to Documents before
type-checking, allowing auto-ID generation to work.
Also increases testEventTrigger timeout to 120s and Realtime concurrent
test timeout to 90s for CI resilience.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Functions testEventTrigger: increase assertEventually from 20s to 60s
to accommodate shared mode queue latency and cold starts
- Realtime testConcurrentRealtimeTrafficCoroutines: already has 45s
WebSocket timeout and TimeoutException handling for CI resilience
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Metadata decorator: look for relatedCollection inside options array
since new Attribute format nests it there
- Skip decorators during silenced operations to prevent $databaseId etc.
from leaking into internal write operations
- Fix aggregate test queries to use Query::count('*', 'total') instead
of Query::count('total') which treats 'total' as a column name
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Add getDatabaseResourceType() helper to map database types to resource constants
- Use database-specific resourceType for CSV/JSON import/export instead of hardcoded TYPE_DATABASE
- Skip attribute validation for schemaless databases (DocumentsDB/VectorsDB) in exports
- Parse JSON export queries in migration worker
- Restore MigrationsBase from 1.9.x and append VectorsDB/DocumentsDB E2E tests
The V17 filter now correctly parses cursorAfter/search/isNotNull queries
with their full parameters (attribute, values) instead of stripping them
to method-only objects.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
V17 filter's str_contains($method, '.') throws when $method is a Method
enum. Guard with is_string() since enum cases never contain dots.
Proxy test: delete rule before site to avoid cascade-delete race.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
All call sites now use $user->isApp() and $user->isPrivileged() instance
syntax instead of static User::isApp() / $user::isPrivileged() calls.
Added setUser() to Request class for consistency with Response.
https://claude.ai/code/session_01JLPDurUgyj7qViA8JqQFTH
Revert the is_int preservation — SDKs declare $sequence as string,
so the API must always return a string. Updated tests to match.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Document/Row model filters now preserve int type for $sequence instead of always casting to string
- V21 response filter recursively casts $sequence on nested relationship documents
- Added unit tests for nested document/row $sequence casting
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>