Appwrite® - complete cloud infrastructure for your web, mobile and AI apps. Including Auth, Databases, Storage, Functions, Messaging, Hosting, Realtime and more
This report presents the forensic synthetic code analysis of appwrite/appwrite, a TypeScript project with 56,587 GitHub stars. SynthScan v2.0 examined 422,749 lines of code across 2405 source files, recording 2139 pattern matches distributed across 11 syntactic categories. The overall adjusted score of 5.3 places this repository in the Low AI signal band.
The scanner applied 160+ deterministic lexical heuristics, multi-line block detectors, abstract syntax tree depth profilers, and a cross-file Jaccard similarity matrix to construct a statistically normalised synthetic code estimate. All matches are individually weighted by severity coefficient and contextual multiplier before summation, and the resulting headline score is temporally discounted to account for the repository's development history relative to the commercial emergence of large language model coding tooling (November 2022 onward).
This chart maps the temporal evolution of the adjusted synthetic code score across successive scan runs. An upward trajectory indicates ongoing incorporation of AI-generated code or expanding LLM-assisted scaffolding; a stable or declining trajectory may reflect active human refactoring, code removal, or the adoption of stricter authorship policies. The dashed secondary line (right axis) independently tracks total raw pattern hit count, which can diverge from the normalised score when codebase size changes significantly between scans.
Classifies detected patterns by their diagnostic confidence and structural impact. CRITICAL patterns (coefficient 10) represent definitive synthetic signatures — hallucinated imports, explicit LLM attribution metadata — virtually never produced by human authors. HIGH (5) indicates strong structural tells such as cross-file repetition or cross-linguistic idioms. MEDIUM (2) covers recognisable conversational padding and AI-specific vocabulary. LOW (1) captures subtle indicators like tautological comments and generic boilerplate that require density to carry independent signal.
This horizontal bar chart decomposes the repository's raw synthetic code score by top-level directory, allowing you to pinpoint precisely which modules or components carry the highest AI authorship density. Directories with disproportionately high scores relative to their size warrant targeted manual review: concentrated AI signatures often trace back to mass-generated configuration layers, auto-ported test suites, LLM-scaffolded boilerplate classes, or entire subsystems authored under heavy copilot assistance. Use this view to prioritise your human code-review effort.
The scanner identified 2139 distinct pattern matches across 11 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a statistically significant AI authorship indicator. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the diagnostic confidence level (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — comment-context matches receive a ×1.5 weight because LLMs systematically over-annotate. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier as dense clusters constitute far stronger evidence of synthetic authorship than isolated hits.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/unit/Advisor/AuthTest.php | 21 | public function testAdvisorApisOnlySupportAdminAndKeyAuth(Action $action): void | CODE |
| LOW | tests/unit/Advisor/Validator/CTAsTest.php | 43 | public function testAcceptsEntryWithoutParams(): void | CODE |
| LOW | tests/unit/Advisor/Validator/CTAsTest.php | 54 | public function testRejectsEntryMissingRequiredKeys(): void | CODE |
| LOW | tests/unit/Advisor/Validator/CTAsTest.php | 63 | public function testRejectsEntryWithEmptyStrings(): void | CODE |
| LOW | tests/unit/Advisor/Validator/CTAsTest.php | 74 | public function testRejectsEntryWithNonStringFields(): void | CODE |
| LOW | tests/unit/Advisor/Validator/CTAsTest.php | 85 | public function testRejectsEntryWithScalarParams(): void | CODE |
| LOW | tests/unit/Advisor/Validator/CTAsTest.php | 105 | public function testRejectsMoreThanMaxCount(): void | CODE |
| LOW | tests/unit/Advisor/Validator/CTAsTest.php | 122 | public function testAcceptsExactlyMaxCount(): void | CODE |
| LOW | tests/unit/Advisor/Validator/CTAsTest.php | 152 | public function testRejectsEntryWithEmptyService(): void | CODE |
| LOW | tests/unit/Advisor/Validator/CTAsTest.php | 163 | public function testRejectsEntryWithEmptyMethod(): void | CODE |
| LOW | tests/unit/Advisor/Validator/CTAsTest.php | 174 | public function testRejectsUnknownService(): void | CODE |
| LOW | tests/unit/Advisor/Validator/CTAsTest.php | 198 | public function testAcceptsCustomAllowedLists(): void | CODE |
| LOW | tests/unit/Advisor/Validator/CTAsTest.php | 218 | public function testDefaultMaxCountIsSixteen(): void | CODE |
| LOW | tests/unit/Docker/Compose/GeneratorTest.php | 23 | public function testSelectsDatabaseService(): void | CODE |
| LOW | tests/unit/Docker/Compose/GeneratorTest.php | 50 | public function testTogglesAssistantService(): void | CODE |
| LOW | tests/unit/Docker/Compose/GeneratorTest.php | 63 | public function testKeepsProductionWorkers(): void | CODE |
| LOW | tests/unit/Docker/Compose/GeneratorTest.php | 82 | public function testAddsLocalHostPathMount(): void | CODE |
| LOW | tests/unit/Docker/Compose/GeneratorTest.php | 92 | public function testRewritesLocalRelativeBindMountsToHostPath(): void | CODE |
| LOW | tests/unit/Docker/Compose/GeneratorTest.php | 106 | public function testDoesNotAddDatabaseDependencyWithoutPlaceholder(): void | CODE |
| LOW | tests/unit/Docker/Compose/GeneratorTest.php | 117 | public function testKeepsLongCommandsReadable(): void | CODE |
| LOW | tests/unit/Utopia/ResponseTest.php | 91 | public function testResponseModelRequired(): void | CODE |
| LOW | tests/unit/Utopia/ResponseTest.php | 106 | public function testResponseModelRequiredException(): void | CODE |
| LOW | tests/unit/Utopia/ResponseTest.php | 235 | public function testShowSensitiveRestoresPreviousState(): void | CODE |
| LOW | tests/unit/Utopia/RequestTest.php | 65 | public function testGetParamsWithMultipleMethods(): void | CODE |
| LOW | tests/unit/Utopia/RequestTest.php | 81 | public function testGetParamsWithAllRequired(): void | CODE |
| LOW | tests/unit/Utopia/RequestTest.php | 99 | public function testGetParamsWithAllOptional(): void | CODE |
| LOW | tests/unit/Utopia/RequestTest.php | 116 | public function testGetParamsMatchesMethodB(): void | CODE |
| LOW | tests/unit/Utopia/RequestTest.php | 132 | public function testGetParamsFallbackForMixedAndUnknown(): void | CODE |
| LOW | tests/unit/Utopia/RequestTest.php | 153 | public function testRouteIsScopedToRequestInstance(): void | CODE |
| LOW⚡ | tests/unit/Utopia/RequestTest.php | 168 | public function testGetHeaderLineReturnsStringValue(): void | CODE |
| LOW⚡ | tests/unit/Utopia/RequestTest.php | 175 | public function testGetHeaderLineReturnsDefaultWhenMissing(): void | CODE |
| LOW⚡ | tests/unit/Utopia/RequestTest.php | 181 | public function testGetHeaderLineJoinsMultipleValues(): void | CODE |
| LOW⚡ | tests/unit/Utopia/RequestTest.php | 190 | public function testGetHeadersSynthesizesCookieHeaderFromCookieJar(): void | CODE |
| LOW | tests/unit/Utopia/RequestTest.php | 205 | public function testGetHeadersOmitsCookieHeaderWhenNoCookies(): void | CODE |
| LOW | tests/unit/Utopia/RequestTest.php | 250 | public function testGetParamsDoesNotCacheRawParamsForServerError(): void | CODE |
| LOW | tests/unit/Utopia/RequestTest.php | 276 | public function testGetParamsDoesNotCacheRawParamsForUncodedException(): void | CODE |
| LOW⚡ | tests/unit/Utopia/Database/Query/RuntimeQueryTest.php | 647 | public function testSelectSpecificFieldsNotAllowed(): void | CODE |
| LOW⚡ | tests/unit/Utopia/Database/Query/RuntimeQueryTest.php | 653 | public function testSelectSingleFieldNotAllowed(): void | CODE |
| LOW⚡ | tests/unit/Utopia/Database/Query/RuntimeQueryTest.php | 659 | public function testValidateSelectQueryWithWildcard(): void | CODE |
| LOW⚡ | tests/unit/Utopia/Database/Query/RuntimeQueryTest.php | 667 | public function testValidateSelectQueryWithSpecificFields(): void | CODE |
| LOW⚡ | tests/unit/Utopia/Database/Query/RuntimeQueryTest.php | 675 | public function testValidateSelectQueryWithSingleField(): void | CODE |
| LOW⚡ | tests/unit/Utopia/Database/Query/RuntimeQueryTest.php | 683 | public function testSelectInAllowedQueries(): void | CODE |
| LOW⚡ | tests/unit/Utopia/Database/Query/RuntimeQueryTest.php | 688 | public function testIsSelectAllWithNonSelectQuery(): void | CODE |
| LOW⚡ | tests/unit/Utopia/Database/Query/RuntimeQueryTest.php | 694 | public function testValidateSelectQueryWithNonSelectQuery(): void | CODE |
| LOW⚡ | tests/unit/Utopia/Database/Query/RuntimeQueryTest.php | 703 | public function testFilterWithSelectAllReturnsPayload(): void | CODE |
| LOW⚡ | tests/unit/Utopia/Database/Query/RuntimeQueryTest.php | 711 | public function testFilterWithSelectAllAndOtherQueriesReturnsPayload(): void | CODE |
| LOW | tests/unit/Utopia/Database/Query/RuntimeQueryTest.php | 37 | public function testFilterWithNoMatchingQuery(): void | CODE |
| LOW | tests/unit/Utopia/Database/Query/RuntimeQueryTest.php | 45 | public function testFilterWithMatchingQuery(): void | CODE |
| LOW | tests/unit/Utopia/Database/Query/RuntimeQueryTest.php | 70 | public function testEqualMultipleValuesMatch(): void | CODE |
| LOW | tests/unit/Utopia/Database/Query/RuntimeQueryTest.php | 78 | public function testEqualMultipleValuesNoMatch(): void | CODE |
| LOW | tests/unit/Utopia/Database/Query/RuntimeQueryTest.php | 102 | public function testEqualMissingAttribute(): void | CODE |
| LOW | tests/unit/Utopia/Database/Query/RuntimeQueryTest.php | 127 | public function testNotEqualMultipleValues(): void | CODE |
| LOW | tests/unit/Utopia/Database/Query/RuntimeQueryTest.php | 177 | public function testLesserStringComparison(): void | CODE |
| LOW | tests/unit/Utopia/Database/Query/RuntimeQueryTest.php | 194 | public function testLesserEqualExactMatch(): void | CODE |
| LOW | tests/unit/Utopia/Database/Query/RuntimeQueryTest.php | 210 | public function testLesserEqualMultipleValues(): void | CODE |
| LOW | tests/unit/Utopia/Database/Query/RuntimeQueryTest.php | 244 | public function testGreaterMultipleValues(): void | CODE |
| LOW | tests/unit/Utopia/Database/Query/RuntimeQueryTest.php | 262 | public function testGreaterEqualExactMatch(): void | CODE |
| LOW | tests/unit/Utopia/Database/Query/RuntimeQueryTest.php | 278 | public function testGreaterEqualMultipleValues(): void | CODE |
| LOW | tests/unit/Utopia/Database/Query/RuntimeQueryTest.php | 304 | public function testIsNullMissingAttribute(): void | CODE |
| LOW | tests/unit/Utopia/Database/Query/RuntimeQueryTest.php | 329 | public function testIsNotNullMissingAttribute(): void | CODE |
| 1530 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | app/controllers/shared/api.php | 113 | // Step 1: Check if project is empty | COMMENT |
| LOW⚡ | app/controllers/shared/api.php | 118 | // Step 2: Get roles configuration | COMMENT |
| LOW⚡ | app/controllers/shared/api.php | 121 | // Step 3: Determine role for user | COMMENT |
| LOW⚡ | app/controllers/shared/api.php | 128 | // Step 4: Get scopes for the role | COMMENT |
| LOW⚡ | app/controllers/shared/api.php | 131 | // Step 5: API Key Authentication | COMMENT |
| LOW⚡ | app/controllers/shared/api.php | 457 | // Step 9: Validate scope permissions | COMMENT |
| LOW⚡ | app/controllers/shared/api.php | 463 | // Step 10: Check if user is blocked | COMMENT |
| LOW⚡ | app/controllers/shared/api.php | 468 | // Step 11: Verify password status | COMMENT |
| LOW⚡ | app/controllers/shared/api.php | 473 | // Step 12: Validate MFA requirements | COMMENT |
| LOW⚡ | app/controllers/shared/api.php | 481 | // Step 13: Handle Multi-Factor Authentication | COMMENT |
| LOW | app/controllers/shared/api.php | 382 | // Step 6: Update project and user last activity | COMMENT |
| LOW⚡ | tests/unit/Messaging/MessagingTest.php | 594 | // Step 1: guest subscribes. convertChannels preserves the literal form. | COMMENT |
| LOW⚡ | tests/unit/Messaging/MessagingTest.php | 599 | // Step 2: fromPayload publishes account.create alongside the user-scoped form. | COMMENT |
| LOW | tests/unit/Messaging/MessagingTest.php | 547 | // Step 2: A → B. | COMMENT |
| LOW | tests/unit/Messaging/MessagingTest.php | 558 | // Step 3: permissions-change for B (userId stays 'B'). | COMMENT |
| LOW | tests/unit/Messaging/MessagingTest.php | 569 | // Step 4: B → C. | COMMENT |
| LOW | tests/unit/Messaging/MessagingTest.php | 618 | // Step 3: in-band auth promotes the guest to user 'B'. | COMMENT |
| LOW | tests/benchmarks/bulk-operations/utils.js | 69 | // Step 1: Create Account | COMMENT |
| LOW | tests/benchmarks/bulk-operations/utils.js | 85 | // Step 2: Create Session | COMMENT |
| LOW | tests/benchmarks/bulk-operations/utils.js | 110 | // Step 3: Create Team | COMMENT |
| LOW | tests/benchmarks/bulk-operations/utils.js | 122 | // Step 4: Create Project | COMMENT |
| LOW | tests/benchmarks/bulk-operations/utils.js | 135 | // Step 5: Create API Key | COMMENT |
| LOW | …e/Services/Databases/Transactions/TransactionsBase.php | 3110 | // Step 1: Create new documents with age > 25 in transaction | COMMENT |
| LOW | …e/Services/Databases/Transactions/TransactionsBase.php | 3143 | // Step 2: Bulk update all documents with age > 25 to have status 'active' | COMMENT |
| LOW | …e/Services/Databases/Transactions/TransactionsBase.php | 3293 | // Step 1: Update some documents to have category 'special' in transaction | COMMENT |
| LOW | …e/Services/Databases/Transactions/TransactionsBase.php | 3320 | // Step 2: Bulk update all documents with category 'special' to have priority 'high' | COMMENT |
| LOW | …e/Services/Databases/Transactions/TransactionsBase.php | 3459 | // Step 1: Create temporary documents in transaction | COMMENT |
| LOW | …e/Services/Databases/Transactions/TransactionsBase.php | 3490 | // Step 2: Bulk delete all documents with type 'temporary' | COMMENT |
| LOW | …e/Services/Databases/Transactions/TransactionsBase.php | 3623 | // Step 1: Mark some documents for deletion by updating their status | COMMENT |
| LOW | …e/Services/Databases/Transactions/TransactionsBase.php | 3650 | // Step 2: Bulk delete all documents with status 'marked_for_deletion' | COMMENT |
| LOW⚡ | …ces/Project/PoliciesSessionDurationIntegrationTest.php | 44 | // Step 1: Set session duration to 5 seconds | COMMENT |
| LOW⚡ | …ces/Project/PoliciesSessionDurationIntegrationTest.php | 47 | // Step 2: Create user and a session | COMMENT |
| LOW⚡ | …ces/Project/PoliciesSessionDurationIntegrationTest.php | 76 | // Step 3: Poll until the 5s TTL elapses - session should expire | COMMENT |
| LOW⚡ | …ces/Project/PoliciesSessionDurationIntegrationTest.php | 82 | // Step 4: Raise duration to 10s - same session should still not be usable | COMMENT |
| LOW⚡ | …ces/Project/PoliciesSessionDurationIntegrationTest.php | 88 | // Step 5: Set duration to 1 year | COMMENT |
| LOW⚡ | …ces/Project/PoliciesSessionDurationIntegrationTest.php | 91 | // Step 6: Same session should still not be usable | COMMENT |
| LOW⚡ | …roject/PoliciesPasswordPersonalDataIntegrationTest.php | 87 | // Step 1: Enable password personal data policy | COMMENT |
| LOW⚡ | …roject/PoliciesPasswordPersonalDataIntegrationTest.php | 90 | // Step 2: Each of the four personal-data fields in the password must block user creation | COMMENT |
| LOW⚡ | …roject/PoliciesPasswordPersonalDataIntegrationTest.php | 97 | // Step 3: Disable password personal data policy | COMMENT |
| LOW⚡ | …roject/PoliciesPasswordPersonalDataIntegrationTest.php | 100 | // Step 4: The same categories of passwords should now be accepted (fresh data to avoid uniqueness conflicts) | COMMENT |
| LOW | …/Services/Project/MockPhonesSessionIntegrationTest.php | 35 | // Step 1: Configure two mock phones with distinct OTPs. | COMMENT |
| LOW⚡ | tests/e2e/Services/Project/SMTPBase.php | 369 | // Step 1: Set a custom replyToEmail. | COMMENT |
| LOW⚡ | tests/e2e/Services/Project/SMTPBase.php | 380 | // Step 2: Clear it with an empty string. | COMMENT |
| LOW⚡ | tests/e2e/Services/Project/SMTPBase.php | 385 | // Step 3: Verify the cleared value persists. | COMMENT |
| LOW⚡ | tests/e2e/Services/Project/SMTPBase.php | 396 | // Step 1: Configure SMTP with a sender email, then disable it. | COMMENT |
| LOW⚡ | tests/e2e/Services/Project/SMTPBase.php | 405 | // Step 2: Clear senderEmail while keeping SMTP disabled. | COMMENT |
| LOW⚡ | tests/e2e/Services/Project/SMTPBase.php | 414 | // Step 3: Verify the cleared value persists. | COMMENT |
| LOW⚡ | tests/e2e/Services/Project/SMTPBase.php | 615 | // Step 1: Set username and password. | COMMENT |
| LOW⚡ | tests/e2e/Services/Project/SMTPBase.php | 627 | // Step 2: Clear both credentials by passing empty strings. | COMMENT |
| LOW⚡ | tests/e2e/Services/Project/SMTPBase.php | 637 | // Step 3: Verify the cleared username persists (a no-params PATCH must not restore it). | COMMENT |
| LOW⚡ | tests/e2e/Services/Project/TemplatesBase.php | 565 | // Step 1: Set a custom en verification template with sender and reply-to fields. | COMMENT |
| LOW⚡ | tests/e2e/Services/Project/TemplatesBase.php | 582 | // Step 2: GET en verification template and ensure it reflects the custom values. | COMMENT |
| LOW⚡ | tests/e2e/Services/Project/TemplatesBase.php | 590 | // Step 3: Update the same template, clearing sender and reply-to fields to empty strings. | COMMENT |
| LOW⚡ | tests/e2e/Services/Project/TemplatesBase.php | 605 | // Step 4: GET again to confirm the cleared values persist. | COMMENT |
| LOW⚡ | …rvices/Project/PoliciesSessionAlertIntegrationTest.php | 84 | // Step 1: Disable session alerts | COMMENT |
| LOW⚡ | …rvices/Project/PoliciesSessionAlertIntegrationTest.php | 87 | // Step 2: Create user1 and two sessions | COMMENT |
| LOW⚡ | …rvices/Project/PoliciesSessionAlertIntegrationTest.php | 93 | // Step 3: No alert should arrive in the next 10 seconds | COMMENT |
| LOW⚡ | …rvices/Project/PoliciesSessionAlertIntegrationTest.php | 96 | // Step 4: Enable session alerts | COMMENT |
| LOW⚡ | …rvices/Project/PoliciesSessionAlertIntegrationTest.php | 99 | // Step 5: Create user2 and one session | COMMENT |
| LOW⚡ | …rvices/Project/PoliciesSessionAlertIntegrationTest.php | 104 | // Step 6: First session never alerts, so nothing arrives in 10 seconds | COMMENT |
| 84 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | app/controllers/shared/api.php | 113 | // Step 1: Check if project is empty | COMMENT |
| LOW⚡ | app/controllers/shared/api.php | 118 | // Step 2: Get roles configuration | COMMENT |
| LOW⚡ | app/controllers/shared/api.php | 121 | // Step 3: Determine role for user | COMMENT |
| LOW⚡ | app/controllers/shared/api.php | 128 | // Step 4: Get scopes for the role | COMMENT |
| LOW⚡ | app/controllers/shared/api.php | 131 | // Step 5: API Key Authentication | COMMENT |
| LOW⚡ | app/controllers/shared/api.php | 457 | // Step 9: Validate scope permissions | COMMENT |
| LOW⚡ | app/controllers/shared/api.php | 463 | // Step 10: Check if user is blocked | COMMENT |
| LOW⚡ | app/controllers/shared/api.php | 468 | // Step 11: Verify password status | COMMENT |
| LOW⚡ | app/controllers/shared/api.php | 473 | // Step 12: Validate MFA requirements | COMMENT |
| LOW⚡ | app/controllers/shared/api.php | 481 | // Step 13: Handle Multi-Factor Authentication | COMMENT |
| LOW | app/controllers/shared/api.php | 382 | // Step 6: Update project and user last activity | COMMENT |
| LOW⚡ | tests/unit/Messaging/MessagingTest.php | 594 | // Step 1: guest subscribes. convertChannels preserves the literal form. | COMMENT |
| LOW⚡ | tests/unit/Messaging/MessagingTest.php | 599 | // Step 2: fromPayload publishes account.create alongside the user-scoped form. | COMMENT |
| LOW | tests/unit/Messaging/MessagingTest.php | 547 | // Step 2: A → B. | COMMENT |
| LOW | tests/unit/Messaging/MessagingTest.php | 558 | // Step 3: permissions-change for B (userId stays 'B'). | COMMENT |
| LOW | tests/unit/Messaging/MessagingTest.php | 569 | // Step 4: B → C. | COMMENT |
| LOW | tests/unit/Messaging/MessagingTest.php | 618 | // Step 3: in-band auth promotes the guest to user 'B'. | COMMENT |
| LOW | tests/benchmarks/bulk-operations/utils.js | 69 | // Step 1: Create Account | COMMENT |
| LOW | tests/benchmarks/bulk-operations/utils.js | 85 | // Step 2: Create Session | COMMENT |
| LOW | tests/benchmarks/bulk-operations/utils.js | 110 | // Step 3: Create Team | COMMENT |
| LOW | tests/benchmarks/bulk-operations/utils.js | 122 | // Step 4: Create Project | COMMENT |
| LOW | tests/benchmarks/bulk-operations/utils.js | 135 | // Step 5: Create API Key | COMMENT |
| LOW | …e/Services/Databases/Transactions/TransactionsBase.php | 3110 | // Step 1: Create new documents with age > 25 in transaction | COMMENT |
| LOW | …e/Services/Databases/Transactions/TransactionsBase.php | 3143 | // Step 2: Bulk update all documents with age > 25 to have status 'active' | COMMENT |
| LOW | …e/Services/Databases/Transactions/TransactionsBase.php | 3293 | // Step 1: Update some documents to have category 'special' in transaction | COMMENT |
| LOW | …e/Services/Databases/Transactions/TransactionsBase.php | 3320 | // Step 2: Bulk update all documents with category 'special' to have priority 'high' | COMMENT |
| LOW | …e/Services/Databases/Transactions/TransactionsBase.php | 3459 | // Step 1: Create temporary documents in transaction | COMMENT |
| LOW | …e/Services/Databases/Transactions/TransactionsBase.php | 3490 | // Step 2: Bulk delete all documents with type 'temporary' | COMMENT |
| LOW | …e/Services/Databases/Transactions/TransactionsBase.php | 3623 | // Step 1: Mark some documents for deletion by updating their status | COMMENT |
| LOW | …e/Services/Databases/Transactions/TransactionsBase.php | 3650 | // Step 2: Bulk delete all documents with status 'marked_for_deletion' | COMMENT |
| LOW⚡ | …ces/Project/PoliciesSessionDurationIntegrationTest.php | 44 | // Step 1: Set session duration to 5 seconds | COMMENT |
| LOW⚡ | …ces/Project/PoliciesSessionDurationIntegrationTest.php | 47 | // Step 2: Create user and a session | COMMENT |
| LOW⚡ | …ces/Project/PoliciesSessionDurationIntegrationTest.php | 76 | // Step 3: Poll until the 5s TTL elapses - session should expire | COMMENT |
| LOW⚡ | …ces/Project/PoliciesSessionDurationIntegrationTest.php | 82 | // Step 4: Raise duration to 10s - same session should still not be usable | COMMENT |
| LOW⚡ | …ces/Project/PoliciesSessionDurationIntegrationTest.php | 88 | // Step 5: Set duration to 1 year | COMMENT |
| LOW⚡ | …ces/Project/PoliciesSessionDurationIntegrationTest.php | 91 | // Step 6: Same session should still not be usable | COMMENT |
| LOW⚡ | …roject/PoliciesPasswordPersonalDataIntegrationTest.php | 87 | // Step 1: Enable password personal data policy | COMMENT |
| LOW⚡ | …roject/PoliciesPasswordPersonalDataIntegrationTest.php | 90 | // Step 2: Each of the four personal-data fields in the password must block user creation | COMMENT |
| LOW⚡ | …roject/PoliciesPasswordPersonalDataIntegrationTest.php | 97 | // Step 3: Disable password personal data policy | COMMENT |
| LOW⚡ | …roject/PoliciesPasswordPersonalDataIntegrationTest.php | 100 | // Step 4: The same categories of passwords should now be accepted (fresh data to avoid uniqueness conflicts) | COMMENT |
| LOW | …/Services/Project/MockPhonesSessionIntegrationTest.php | 35 | // Step 1: Configure two mock phones with distinct OTPs. | COMMENT |
| LOW⚡ | tests/e2e/Services/Project/SMTPBase.php | 369 | // Step 1: Set a custom replyToEmail. | COMMENT |
| LOW⚡ | tests/e2e/Services/Project/SMTPBase.php | 380 | // Step 2: Clear it with an empty string. | COMMENT |
| LOW⚡ | tests/e2e/Services/Project/SMTPBase.php | 385 | // Step 3: Verify the cleared value persists. | COMMENT |
| LOW⚡ | tests/e2e/Services/Project/SMTPBase.php | 396 | // Step 1: Configure SMTP with a sender email, then disable it. | COMMENT |
| LOW⚡ | tests/e2e/Services/Project/SMTPBase.php | 405 | // Step 2: Clear senderEmail while keeping SMTP disabled. | COMMENT |
| LOW⚡ | tests/e2e/Services/Project/SMTPBase.php | 414 | // Step 3: Verify the cleared value persists. | COMMENT |
| LOW⚡ | tests/e2e/Services/Project/SMTPBase.php | 615 | // Step 1: Set username and password. | COMMENT |
| LOW⚡ | tests/e2e/Services/Project/SMTPBase.php | 627 | // Step 2: Clear both credentials by passing empty strings. | COMMENT |
| LOW⚡ | tests/e2e/Services/Project/SMTPBase.php | 637 | // Step 3: Verify the cleared username persists (a no-params PATCH must not restore it). | COMMENT |
| LOW⚡ | tests/e2e/Services/Project/TemplatesBase.php | 565 | // Step 1: Set a custom en verification template with sender and reply-to fields. | COMMENT |
| LOW⚡ | tests/e2e/Services/Project/TemplatesBase.php | 582 | // Step 2: GET en verification template and ensure it reflects the custom values. | COMMENT |
| LOW⚡ | tests/e2e/Services/Project/TemplatesBase.php | 590 | // Step 3: Update the same template, clearing sender and reply-to fields to empty strings. | COMMENT |
| LOW⚡ | tests/e2e/Services/Project/TemplatesBase.php | 605 | // Step 4: GET again to confirm the cleared values persist. | COMMENT |
| LOW⚡ | …rvices/Project/PoliciesSessionAlertIntegrationTest.php | 84 | // Step 1: Disable session alerts | COMMENT |
| LOW⚡ | …rvices/Project/PoliciesSessionAlertIntegrationTest.php | 87 | // Step 2: Create user1 and two sessions | COMMENT |
| LOW⚡ | …rvices/Project/PoliciesSessionAlertIntegrationTest.php | 93 | // Step 3: No alert should arrive in the next 10 seconds | COMMENT |
| LOW⚡ | …rvices/Project/PoliciesSessionAlertIntegrationTest.php | 96 | // Step 4: Enable session alerts | COMMENT |
| LOW⚡ | …rvices/Project/PoliciesSessionAlertIntegrationTest.php | 99 | // Step 5: Create user2 and one session | COMMENT |
| LOW⚡ | …rvices/Project/PoliciesSessionAlertIntegrationTest.php | 104 | // Step 6: First session never alerts, so nothing arrives in 10 seconds | COMMENT |
| 84 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | app/config/templates/function.php | 213 | 'placeholder' => 'neo4j+s://4tg4mddo.databases.neo4j.io', | CODE |
| LOW⚡ | app/config/templates/function.php | 221 | 'placeholder' => 'neo4j', | CODE |
| LOW⚡ | app/config/templates/function.php | 229 | 'placeholder' => 'mCUc4PbVUQN-_NkTLJLisb6ccnwzQKKhrkF77YMctzx', | CODE |
| LOW⚡ | app/config/templates/function.php | 306 | 'placeholder' => 'ep-still-sea-a792sh84.eu-central-1.aws.neon.tech', | CODE |
| LOW⚡ | app/config/templates/function.php | 314 | 'placeholder' => 'main', | CODE |
| LOW⚡ | app/config/templates/function.php | 322 | 'placeholder' => 'main_owner', | CODE |
| LOW⚡ | app/config/templates/function.php | 330 | 'placeholder' => 'iQCfaUaaWB3B', | CODE |
| LOW⚡ | app/config/templates/function.php | 338 | 'placeholder' => 'ep-still-sea-a792sh84', | CODE |
| LOW⚡ | app/config/templates/function.php | 396 | 'placeholder' => 'sk-wzG...vcy', | CODE |
| LOW⚡ | app/config/templates/function.php | 404 | 'placeholder' => '512', | CODE |
| LOW⚡ | app/config/templates/function.php | 455 | 'placeholder' => 'db9...980', | CODE |
| LOW⚡ | app/config/templates/function.php | 463 | 'placeholder' => '427...169', | CODE |
| LOW⚡ | app/config/templates/function.php | 471 | 'placeholder' => 'NDI...LUfg', | CODE |
| LOW⚡ | app/config/templates/function.php | 665 | 'placeholder' => 'urlShortener', | CODE |
| LOW⚡ | app/config/templates/function.php | 673 | 'placeholder' => 'urls', | CODE |
| LOW⚡ | app/config/templates/function.php | 681 | 'placeholder' => 'https://shortdomain.io', | CODE |
| LOW⚡ | app/config/templates/function.php | 731 | 'placeholder' => '64a55...7b912', | CODE |
| LOW⚡ | app/config/templates/function.php | 738 | 'placeholder' => '7c3e8...2a9f1', | CODE |
| LOW⚡ | app/config/templates/function.php | 745 | 'placeholder' => 'OFCNCOG2CU', | CODE |
| LOW⚡ | app/config/templates/function.php | 752 | 'placeholder' => 'fd0aa...136a8', | CODE |
| LOW⚡ | app/config/templates/function.php | 759 | 'placeholder' => 'my_index', | CODE |
| LOW⚡ | app/config/templates/function.php | 766 | 'placeholder' => 'bf2f5...df733', | CODE |
| LOW⚡ | app/config/templates/function.php | 830 | 'placeholder' => '64a55...7b912', | CODE |
| LOW⚡ | app/config/templates/function.php | 837 | 'placeholder' => '7c3e8...2a9f1', | CODE |
| LOW⚡ | app/config/templates/function.php | 844 | 'placeholder' => 'http://127.0.0.1:7700', | CODE |
| LOW⚡ | app/config/templates/function.php | 851 | 'placeholder' => 'masterKey1234', | CODE |
| LOW⚡ | app/config/templates/function.php | 858 | 'placeholder' => 'searchKey1234', | CODE |
| LOW⚡ | app/config/templates/function.php | 865 | 'placeholder' => 'appwrite_index', | CODE |
| LOW⚡ | app/config/templates/function.php | 937 | 'placeholder' => '62...97', | CODE |
| LOW⚡ | app/config/templates/function.php | 944 | 'placeholder' => 'Zjc...5PH', | CODE |
| LOW⚡ | app/config/templates/function.php | 951 | 'placeholder' => 'NXOi3...IBHDa', | CODE |
| LOW⚡ | app/config/templates/function.php | 958 | 'placeholder' => '+14000000102', | CODE |
| LOW⚡ | app/config/templates/function.php | 995 | 'placeholder' => 'mywebapp-f6e57', | CODE |
| LOW⚡ | app/config/templates/function.php | 1002 | 'placeholder' => 'fcm-adminsdk-2f0de@test-f7q57.iam.gserviceaccount.com', | CODE |
| LOW⚡ | app/config/templates/function.php | 1009 | 'placeholder' => '0b683...75675', | CODE |
| LOW⚡ | app/config/templates/function.php | 1016 | 'placeholder' => 'https://my-app-f298e.firebaseio.com', | CODE |
| LOW⚡ | app/config/templates/function.php | 1067 | 'placeholder' => 'smtp.mailgun.org', | CODE |
| LOW⚡ | app/config/templates/function.php | 1074 | 'placeholder' => '25', | CODE |
| LOW⚡ | app/config/templates/function.php | 1081 | 'placeholder' => 'no-reply@mywebapp.org', | CODE |
| LOW⚡ | app/config/templates/function.php | 1088 | 'placeholder' => '5up3r5tr0ngP4ssw0rd', | CODE |
| LOW⚡ | app/config/templates/function.php | 1095 | 'placeholder' => 'me@mywebapp.org', | CODE |
| LOW⚡ | app/config/templates/function.php | 1103 | 'placeholder' => 'https://mywebapp.org,https://mywebapp.com', | CODE |
| LOW⚡ | app/config/templates/function.php | 1182 | 'placeholder' => 'sk_test_51J...', | CODE |
| LOW⚡ | app/config/templates/function.php | 1189 | 'placeholder' => 'whsec_...', | CODE |
| LOW⚡ | app/config/templates/function.php | 1197 | 'placeholder' => 'orders', | CODE |
| LOW⚡ | app/config/templates/function.php | 1205 | 'placeholder' => 'orders', | CODE |
| LOW⚡ | app/config/templates/function.php | 1314 | 'placeholder' => 'ai', | CODE |
| LOW⚡ | app/config/templates/function.php | 1322 | 'placeholder' => 'image_classification', | CODE |
| LOW⚡ | app/config/templates/function.php | 1330 | 'placeholder' => 'image_classification', | CODE |
| LOW⚡ | app/config/templates/function.php | 1337 | 'placeholder' => 'hf_MUvn...', | CODE |
| LOW⚡ | app/config/templates/function.php | 1374 | 'placeholder' => 'ai', | CODE |
| LOW⚡ | app/config/templates/function.php | 1382 | 'placeholder' => 'object_detection', | CODE |
| LOW⚡ | app/config/templates/function.php | 1390 | 'placeholder' => 'object_detection', | CODE |
| LOW⚡ | app/config/templates/function.php | 1397 | 'placeholder' => 'hf_MUvn...', | CODE |
| LOW⚡ | app/config/templates/function.php | 1434 | 'placeholder' => 'ai', | CODE |
| LOW⚡ | app/config/templates/function.php | 1442 | 'placeholder' => 'speech_recognition', | CODE |
| LOW⚡ | app/config/templates/function.php | 1450 | 'placeholder' => 'speech_recognition', | CODE |
| LOW⚡ | app/config/templates/function.php | 1457 | 'placeholder' => 'hf_MUvn...', | CODE |
| LOW⚡ | app/config/templates/function.php | 1497 | 'placeholder' => 'ai', | CODE |
| LOW⚡ | app/config/templates/function.php | 1505 | 'placeholder' => 'speech_recognition', | CODE |
| 162 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH⚡ | app/config/templates/function.php | 394 | 'description' => 'A unique key used to authenticate with the OpenAI API. This is a paid service and you | CODE |
| HIGH⚡ | app/config/templates/function.php | 1716 | 'description' => 'A unique key used to authenticate with the OpenAI API. This is a paid service and you | CODE |
| HIGH⚡ | app/config/templates/function.php | 1781 | 'description' => 'A unique key used to authenticate with the OpenAI API. This is a paid service and you | CODE |
| HIGH | docs/sdks/dart/EXAMPLES.md | 11 | .setKey('<YOUR_API_KEY>'); | CODE |
| HIGH | docs/sdks/dart/EXAMPLES.md | 11 | .setKey('<YOUR_API_KEY>'); | CODE |
| HIGH | docs/sdks/dart/GETTING_STARTED.md | 9 | .setKey('<YOUR_API_KEY>'); | CODE |
| HIGH | docs/sdks/dart/GETTING_STARTED.md | 9 | .setKey('<YOUR_API_KEY>'); | CODE |
| HIGH | src/Appwrite/SDK/Specification/Format/OpenAPI3.php | 87 | 'Key' => '<YOUR_API_KEY>', | CODE |
| HIGH | src/Appwrite/SDK/Specification/Format/OpenAPI3.php | 87 | 'Key' => '<YOUR_API_KEY>', | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | test-build.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | app/config/oAuthProviders.php | 481 | 'icon' => 'icon-zoom', | COMMENT |
| LOW | app/config/storage/logos.php | 21 | // // Microsoft Word | COMMENT |
| LOW | app/config/storage/logos.php | 41 | // 'application/vnd.ms-powerpoint.addin.macroEnabled.12' => __DIR__.'/logos/ppt.png', | COMMENT |
| LOW | tests/unit/Platform/Workers/NotificationsTest.php | 841 | COMMENT | |
| LOW | tests/e2e/Services/Databases/DatabasesBase.php | 4361 | Query::search('title', $value)->toString(), | COMMENT |
| LOW | …/Services/ProjectWebhooks/WebhooksCustomServerTest.php | 861 | // wait for timeout function to complete | COMMENT |
| LOW | …s/e2e/Services/GraphQL/TablesDB/DatabaseServerTest.php | 1961 | ]; | COMMENT |
| LOW | …s/e2e/Services/GraphQL/TablesDB/DatabaseServerTest.php | 1981 | // 'name' => 'John Doe', | COMMENT |
| LOW | …s/e2e/Services/GraphQL/TablesDB/DatabaseServerTest.php | 2261 | $this->assertIsArray($row['body']['data']['tablesDBGetRow']); | COMMENT |
| LOW | …s/e2e/Services/GraphQL/TablesDB/DatabaseServerTest.php | 2281 | // $this->assertArrayNotHasKey('errors', $customEntities['body']); | COMMENT |
| LOW | …s/e2e/Services/GraphQL/TablesDB/DatabaseServerTest.php | 2401 | // */ | COMMENT |
| LOW | …s/e2e/Services/GraphQL/TablesDB/DatabaseServerTest.php | 2461 | // $gqlPayload = [ | COMMENT |
| LOW | …sts/e2e/Services/GraphQL/Legacy/DatabaseServerTest.php | 1781 | // * @depends testCreateFloatAttribute | COMMENT |
| LOW | …sts/e2e/Services/GraphQL/Legacy/DatabaseServerTest.php | 1801 | // ] | COMMENT |
| LOW | …sts/e2e/Services/GraphQL/Legacy/DatabaseServerTest.php | 2081 | // * @throws Exception | COMMENT |
| LOW | …sts/e2e/Services/GraphQL/Legacy/DatabaseServerTest.php | 2101 | // /** | COMMENT |
| LOW | …sts/e2e/Services/GraphQL/Legacy/DatabaseServerTest.php | 2221 | // $projectId = $this->getProject()['$id']; | COMMENT |
| LOW | …sts/e2e/Services/GraphQL/Legacy/DatabaseServerTest.php | 2261 | $document = $this->client->call(Client::METHOD_POST, '/graphql', array_merge([ | COMMENT |
| LOW | …sts/e2e/Services/GraphQL/Legacy/DatabaseServerTest.php | 2281 | // 'id' => $data['id'], | COMMENT |
| LOW | .github/workflows/issue-triage.lock.yml | 1 | # This file was automatically generated by gh-aw. DO NOT EDIT. | COMMENT |
| LOW | .github/workflows/issue-triage.lock.yml | 21 | # pre_activation --> activation | COMMENT |
| LOW | src/Appwrite/Compute/Job.php | 61 | // internal endpoint when configured, falling back to the public host. | COMMENT |
| LOW | src/Appwrite/Migration/Version/V19.php | 521 | // try { | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | .github/workflows/issue-triage.lock.yml | 4 | # For more information: https://github.com/githubnext/gh-aw/blob/main/.github/instructions/github-agentic-workflows.inst | COMMENT |
| MEDIUM | .github/workflows/issue-triage.lock.yml | 4 | # For more information: https://github.com/githubnext/gh-aw/blob/main/.github/instructions/github-agentic-workflows.inst | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | src/Appwrite/Platform/Tasks/SDKs.php | 531 | $aiChangelog = ''; // Track AI-generated changelog for PR description | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM⚡ | tests/resources/swagger2.json | 1 | {"swagger":"2.0","info":{"version":"0.8.0","title":"Appwrite","description":"Appwrite backend as a service cuts up to 70 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | tests/e2e/Services/Sites/SitesCustomServerTest.php | 969 | // // TODO: Implement testCreateDeploymentFromCLI() later | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | mongo-init-replicaset.sh | 6 | # Check if replica set is already initialized | COMMENT |