This document provides a guide for software engineering agents working on the Intervention Gif codebase.
php artisan boost:add-skill intervention/gif
Save this content to: AGENTS.md
# Intervention Gif Agent Guide
This document provides a guide for software engineering agents working on the Intervention Gif codebase.
## 1. Project Overview
**intervention/gif** -- Native PHP GIF encoder/decoder library. Parses and generates
GIF binary data. Part of the [Intervention Image](https://github.com/Intervention/image) ecosystem.
- **Language:** PHP 8.3+ | **Namespace:** `Intervention\Gif`
### 1.1 Architecture
The codebase mirrors the GIF89a binary specification. Each GIF format block has three
corresponding classes:
- `src/Blocks/<Name>.php` -- Data model (value object)
- `src/Decoders/<Name>Decoder.php` -- Binary stream reader
- `src/Encoders/<Name>Encoder.php` -- Binary stream writer
Encoder/decoder resolution is convention-based via `CanDecode`/`CanEncode` traits.
All block models extend `AbstractEntity` (which implements `Stringable`).
## 2. Development Environment
The project uses Composer to manage dependencies. These dependencies are installed automatically when using the Docker test runners.
## 3. Build, Lint, and Test Commands
The following commands are used to ensure code quality and correctness.
### 3.1. Testing (PHPUnit)
The project uses PHPUnit for unit and feature testing.
- **Run all tests:**
```bash
docker compose run --rm tests
```
- **Run a single test file:**
To run a specific test file, provide the path to the file.
```bash
docker compose run --rm tests tests/Unit/BuilderTest.php
```
- **Run a single test method:**
Use the `--filter` option to run a specific test method by its name.
```bash
docker compose run --rm tests tests/Unit/BuilderTest.php --filter testMethodName
```
- **Check test coverage:**
```bash
docker compose run --rm coverage
```
### 3.2. Static Analysis (PHPStan)
PHPStan is used for static analysis to find potential bugs.
- **Run static analysis:**
```bash
docker compose run --rm analysis
```
### 3.3. Coding Standards (PHP CodeSniffer)
The project adheres to the PSR-12 coding standard with additional rules. PHP CodeSniffer is used to enforce these standards.
- **Check for coding standard violations:**
```bash
docker compose run --rm standards
```
## 4. Code Style and Conventions
Consistency is key. Adhere to the following guidelines when writing code.
### 4.1. Formatting
- **PSR-12:** The primary coding standard is PSR-12.
- **Indentation:** Use 4 spaces for indentation, not tabs.
- **Line Endings:** Use Unix-style line endings (LF).
- **Strict Types:** All PHP files must start with `declare(strict_types=1);`.
- **Class Structure:** Follow the ordering defined in `phpcs.xml`:
1. `uses`
2. `enum cases`
3. `constants`
4. `static properties`
5. `properties`
6. `constructor`
7. `static constructors`
8. `methods`
9. `magic methods`
### 4.2. Naming Conventions
- **Classes:** `PascalCase`.
- **Methods:** `camelCase`.
- **Variables:** `camelCase`.
- **Constants:** `UPPER_CASE` with underscore separators.
- **File Names:** File names must match the class name they contain (e.g., `MyClass.php` for `class MyClass`).
### 4.3. Imports
- **One class per `use` statement:** Do not group multiple classes in a single `use` statement.
- **No leading backslash:** `use` statements must not start with a backslash.
- **Order:** `use` statements should be ordered alphabetically. Unused imports must be removed.
### 4.4. Types and Type Hinting
- **Strict Typing:** All code should be strictly typed.
- **Parameter Types:** All method parameters must have a type hint.
- **Return Types:** All methods must have a return type hint.
- **Property Types:** All class properties must have a type hint.
- **Nullable Types:** Use nullable types (`?TypeName`) when a `null` value is explicitly allowed.
### 4.5. Error Handling
- Exceptions should be used for error handling.
- When catching exceptions, be as specific as possible. Avoid catching generic `\Exception` or `\Throwable`.
- Exception messages should be clear and descriptive.
### 4.6. PHPDoc (DocBlocks)
- PHPDoc blocks are required for all classes, properties, and methods.
- Follow the annotation order defined in `phpcs.xml`.
- Use DocBlocks to provide context and explain complex logic. Do not restate the obvious from the code signature.
This document provides a guide for software engineering agents working on the Intervention Gif codebase.
intervention/gif -- Native PHP GIF encoder/decoder library. Parses and generates GIF binary data. Part of the Intervention Image ecosystem.
Intervention\GifThe codebase mirrors the GIF89a binary specification. Each GIF format block has three corresponding classes:
src/Blocks/<Name>.php -- Data model (value object)src/Decoders/<Name>Decoder.php -- Binary stream readersrc/Encoders/<Name>Encoder.php -- Binary stream writerEncoder/decoder resolution is convention-based via CanDecode/CanEncode traits.
All block models extend AbstractEntity (which implements Stringable).
The project uses Composer to manage dependencies. These dependencies are installed automatically when using the Docker test runners.
The following commands are used to ensure code quality and correctness.
The project uses PHPUnit for unit and feature testing.
Run all tests:
docker compose run --rm tests
Run a single test file: To run a specific test file, provide the path to the file.
docker compose run --rm tests tests/Unit/BuilderTest.php
Run a single test method:
Use the --filter option to run a specific test method by its name.
docker compose run --rm tests tests/Unit/BuilderTest.php --filter testMethodName
Check test coverage:
docker compose run --rm coverage
PHPStan is used for static analysis to find potential bugs.
docker compose run --rm analysis
The project adheres to the PSR-12 coding standard with additional rules. PHP CodeSniffer is used to enforce these standards.
docker compose run --rm standards
Consistency is key. Adhere to the following guidelines when writing code.
declare(strict_types=1);.phpcs.xml:
usesenum casesconstantsstatic propertiespropertiesconstructorstatic constructorsmethodsmagic methodsPascalCase.camelCase.camelCase.UPPER_CASE with underscore separators.MyClass.php for class MyClass).use statement: Do not group multiple classes in a single use statement.use statements must not start with a backslash.use statements should be ordered alphabetically. Unused imports must be removed.?TypeName) when a null value is explicitly allowed.\Exception or \Throwable.phpcs.xml.How can I help you explore Laravel packages today?