# Verifying PHP changes

Files: `.php`. Derived from 3 scanned source repositories and 34 review prompts on https://awesomereviewers.com. Page: https://awesomereviewers.com/verify/php/

How to use this: run every check under *Run on every change*. Then, for each section under *Add when the change touches* that describes your diff, run its checks too. Checks catch what a tool can find; then apply the listed review prompts for what tools miss (fetch each prompt's raw URL).

Usage is the share of scanned repositories in this language that run the tool. A missing tool means no scanned repository runs one the scanner recognises: fall back to the prompts.

## Run on every change

- **Formatting** — no tool detected in the sample. Catches: Layout drift that buries the real change in the diff.
- **Linting** — no tool detected in the sample. Catches: Bug-prone patterns, unused code and conventions the formatter does not cover.
- **Type checking** — no tool detected in the sample. Catches: Wrong types, unhandled null or None, call signatures broken across modules.
- **Unit and integration tests** — no tool detected in the sample. Catches: Behaviour regressions on the paths the tests exercise.

Review prompts (6 in total, most discussed first):

- [Consistent terminology propagation](https://awesomereviewers.com/raw/appwrite-consistent-terminology-propagation.md) — appwrite/appwrite, Naming Conventions
- [Split for better readability](https://awesomereviewers.com/raw/sentry-php-split-for-better-readability.md) — getsentry/sentry-php, Code Style
- [Optimize for code readability](https://awesomereviewers.com/raw/framework-optimize-for-code-readability.md) — laravel/framework, Code Style
- [Descriptive identifier naming](https://awesomereviewers.com/raw/sentry-php-descriptive-identifier-naming.md) — getsentry/sentry-php, Naming Conventions
- [Name indicates clear purpose](https://awesomereviewers.com/raw/framework-name-indicates-clear-purpose.md) — laravel/framework, Naming Conventions
- [Use object methods consistently](https://awesomereviewers.com/raw/appwrite-use-object-methods-consistently.md) — appwrite/appwrite, Code Style

## Add when the change touches

### Authentication, input handling, secrets, permissions

- **Security scanning**: `codeql` (33% of repos). Runs via GitHub Action github/codeql-action/analyze. Alternatives: semgrep (33%). Docs: https://github.com/github/codeql
- **Secret scanning** — no tool detected in the sample. Catches: Credentials and tokens committed to the repository.
- **Dependency audit** — no tool detected in the sample. Catches: Known-vulnerable or disallowed dependencies and licenses.

Review prompts (2 in total, most discussed first):

- [Secure authorization skip handling](https://awesomereviewers.com/raw/appwrite-secure-authorization-skip-handling.md) — appwrite/appwrite, Security
- [Mark sensitive parameters](https://awesomereviewers.com/raw/framework-mark-sensitive-parameters.md) — laravel/framework, Security

### Public APIs, signatures, error paths, nullability

- **Type checking** — no tool detected in the sample. Catches: Wrong types, unhandled null or None, call signatures broken across modules.
- **Unit and integration tests** — no tool detected in the sample. Catches: Behaviour regressions on the paths the tests exercise.
- **Property-based tests** — no tool detected in the sample. Catches: Edge-case inputs nobody wrote a test for; invariants over generated data.

Review prompts (9 in total, most discussed first):

- [Enforce API endpoint consistency](https://awesomereviewers.com/raw/appwrite-enforce-api-endpoint-consistency.md) — appwrite/appwrite, API
- [Handle errors gracefully always](https://awesomereviewers.com/raw/appwrite-handle-errors-gracefully-always.md) — appwrite/appwrite, Error Handling
- [Explicit null handling](https://awesomereviewers.com/raw/framework-explicit-null-handling.md) — laravel/framework, Null Handling
- [Use semantic exceptions](https://awesomereviewers.com/raw/framework-use-semantic-exceptions.md) — laravel/framework, Error Handling
- [Evolve API safely](https://awesomereviewers.com/raw/sentry-php-evolve-api-safely.md) — getsentry/sentry-php, API
- [Explicit null handling](https://awesomereviewers.com/raw/sentry-php-explicit-null-handling.md) — getsentry/sentry-php, Null Handling
- [Design flexible APIs](https://awesomereviewers.com/raw/framework-design-flexible-apis.md) — laravel/framework, API
- [Propagate errors with context](https://awesomereviewers.com/raw/sentry-php-propagate-errors-with-context.md) — getsentry/sentry-php, Error Handling
- [Guard database query results](https://awesomereviewers.com/raw/appwrite-guard-database-query-results.md) — appwrite/appwrite, Null Handling

### Service and framework code

- **Unit and integration tests** — no tool detected in the sample. Catches: Behaviour regressions on the paths the tests exercise.
- **Version and platform matrix**: `ci-matrix` (33% of repos). Command seen: `analyze (language: 1)`. Docs: https://docs.github.com/en/actions/how-tos/write-workflows/choose-what-workflows-do/run-job-variations

### Algorithms, parsers, data transforms

- **Property-based tests** — no tool detected in the sample. Catches: Edge-case inputs nobody wrote a test for; invariants over generated data.
- **Fuzzing** — no tool detected in the sample. Catches: Crashes, panics and hangs on malformed input, especially in parsers and decoders.
- **Mutation testing** — no tool detected in the sample. Catches: Tests that keep passing whatever the code does.
- **Proofs and specifications** — no tool detected in the sample. Catches: Design-level bugs in protocols and algorithms, checked against a specification.

Review prompts (2 in total, most discussed first):

- [Optimize regex patterns](https://awesomereviewers.com/raw/sentry-php-optimize-regex-patterns.md) — getsentry/sentry-php, Algorithms
- [Optimize loop operations](https://awesomereviewers.com/raw/framework-optimize-loop-operations.md) — laravel/framework, Algorithms

### Threads, async code, locks, shared state

- **Concurrency model checking** — no tool detected in the sample. Catches: Races and orderings that fail only under specific interleavings.
- **Undefined-behaviour detection** — no tool detected in the sample. Catches: Memory-safety and aliasing violations in unsafe code.
- **Property-based tests** — no tool detected in the sample. Catches: Edge-case inputs nobody wrote a test for; invariants over generated data.

### Network calls, retries, timeouts, protocols

- **Unit and integration tests** — no tool detected in the sample. Catches: Behaviour regressions on the paths the tests exercise.
- **Fuzzing** — no tool detected in the sample. Catches: Crashes, panics and hangs on malformed input, especially in parsers and decoders.

### UI components and pages

- **End-to-end browser tests** — no tool detected in the sample. Catches: User flows broken across components, routing and the network.
- **Linting** — no tool detected in the sample. Catches: Bug-prone patterns, unused code and conventions the formatter does not cover.

### Databases, migrations, caching

- **Unit and integration tests** — no tool detected in the sample. Catches: Behaviour regressions on the paths the tests exercise.
- **Version and platform matrix**: `ci-matrix` (33% of repos). Command seen: `analyze (language: 1)`. Docs: https://docs.github.com/en/actions/how-tos/write-workflows/choose-what-workflows-do/run-job-variations

Review prompts (4 in total, most discussed first):

- [Ensure database transactional integrity](https://awesomereviewers.com/raw/appwrite-ensure-database-transactional-integrity.md) — appwrite/appwrite, Database
- [Comprehensive migration planning](https://awesomereviewers.com/raw/appwrite-comprehensive-migration-planning.md) — appwrite/appwrite, Migrations
- [Escape column names properly](https://awesomereviewers.com/raw/framework-escape-column-names-properly.md) — laravel/framework, Database
- [Optimize migration code](https://awesomereviewers.com/raw/framework-optimize-migration-code.md) — laravel/framework, Migrations

### Hot paths and performance

- No tool-based check applies; rely on the prompts.

Review prompts (2 in total, most discussed first):

- [Cache expensive operations](https://awesomereviewers.com/raw/framework-cache-expensive-operations.md) — laravel/framework, Performance Optimization
- [Minimize file memory footprint](https://awesomereviewers.com/raw/sentry-php-minimize-file-memory-footprint.md) — getsentry/sentry-php, Performance Optimization

### Model, prompt and LLM code

- **Unit and integration tests** — no tool detected in the sample. Catches: Behaviour regressions on the paths the tests exercise.

### CI workflows and configuration files

- **CI workflow linting** — no tool detected in the sample. Catches: Broken GitHub Actions syntax, script injection, over-broad token permissions.
- **File hygiene** — no tool detected in the sample. Catches: Invalid JSON, YAML or TOML, merge markers, trailing whitespace, oversized files.

Review prompts (3 in total, most discussed first):

- [Validate environment variables](https://awesomereviewers.com/raw/appwrite-validate-environment-variables.md) — appwrite/appwrite, Configurations
- [Descriptive configuration keys](https://awesomereviewers.com/raw/framework-descriptive-configuration-keys.md) — laravel/framework, Configurations
- [Flexible configuration formats](https://awesomereviewers.com/raw/sentry-php-flexible-configuration-formats.md) — getsentry/sentry-php, Configurations

### Dependencies and lockfiles

- **Dependency audit** — no tool detected in the sample. Catches: Known-vulnerable or disallowed dependencies and licenses.
- **Lockfile consistency** — no tool detected in the sample. Catches: A lockfile that no longer matches its manifest.
- **Version and platform matrix**: `ci-matrix` (33% of repos). Command seen: `analyze (language: 1)`. Docs: https://docs.github.com/en/actions/how-tos/write-workflows/choose-what-workflows-do/run-job-variations

### The tests themselves

- **Mutation testing** — no tool detected in the sample. Catches: Tests that keep passing whatever the code does.
- **Version and platform matrix**: `ci-matrix` (33% of repos). Command seen: `analyze (language: 1)`. Docs: https://docs.github.com/en/actions/how-tos/write-workflows/choose-what-workflows-do/run-job-variations

Review prompts (3 in total, most discussed first):

- [Use modern PHPUnit attributes](https://awesomereviewers.com/raw/framework-use-modern-phpunit-attributes.md) — laravel/framework, Testing
- [Use data providers effectively](https://awesomereviewers.com/raw/sentry-php-use-data-providers-effectively.md) — getsentry/sentry-php, Testing
- [Assert response fully always](https://awesomereviewers.com/raw/appwrite-assert-response-fully-always.md) — appwrite/appwrite, Testing

### Documentation and comments

- **Docs build** — no tool detected in the sample. Catches: Broken cross-references, links and markup in documentation.
- **Spelling** — no tool detected in the sample. Catches: Typos in identifiers, comments and docs.

Review prompts (3 in total, most discussed first):

- [Purposeful documentation standards](https://awesomereviewers.com/raw/sentry-php-purposeful-documentation-standards.md) — getsentry/sentry-php, Documentation
- [Precise type annotations](https://awesomereviewers.com/raw/framework-precise-type-annotations.md) — laravel/framework, Documentation
- [Keep documentation paths current](https://awesomereviewers.com/raw/appwrite-keep-documentation-paths-current.md) — appwrite/appwrite, Documentation

## Source repositories

[appwrite/appwrite](https://awesomereviewers.com/sources/appwrite-appwrite/), [laravel/framework](https://awesomereviewers.com/sources/laravel-framework/), [getsentry/sentry-php](https://awesomereviewers.com/sources/getsentry-sentry-php/)
