Thanks for contributing to this project.
- Review
CODE_OF_CONDUCT.md. - Report security vulnerabilities privately according to
SECURITY.md. - Search existing issues and pull requests to avoid duplicate work.
- An issue is not required for small fixes or improvements discovered during development.
- Discuss substantial API, architectural or compatibility changes before implementation.
Review README.md and composer.json for supported PHP versions, extensions, dependencies and project-specific requirements.
Install dependencies:
composer installInspect the detected PHPForge configuration:
composer ic:doctorDo not modify files inside vendor/.
Before changing or reviewing code, read and follow:
vendor/infocyph/phpforge/resources/engineering-principles.md
These principles apply equally to human contributors and automated coding agents. They define the expected approach to implementation decisions, scope control, architecture, performance, security, compatibility, testing and maintainability.
Project-specific requirements may extend these principles but should not silently weaken them.
- Create a branch from the repository’s default branch.
- Make one focused logical change.
- Add or update tests for changed behavior.
- Run relevant focused checks during development.
- Apply automated processing where appropriate.
- Review every automatically modified file.
- Run the complete CI suite before opening a pull request.
- Add reproducible benchmark evidence for performance-related changes.
- Complete the pull request template accurately.
Run all configured processors:
composer ic:processRun an individual processor when only a targeted change is needed:
composer ic:process:refactor
composer ic:process:lint
composer ic:process:sniffAutomated processing may modify source files and composer.json. Review all resulting changes before committing.
Run the complete project validation suite before opening a pull request:
composer ic:ciWhen composer ic:ci passes, running the same checks individually is unnecessary.
Use focused commands while developing or when the complete suite cannot run:
Focused validation commands
composer ic:test:syntax
composer ic:test:code
composer ic:test:lint
composer ic:test:sniff
composer ic:test:duplicates
composer ic:test:probe
composer ic:test:comments
composer ic:test:architecture
composer ic:test:static
composer ic:test:security
composer ic:test:refactorWhen composer ic:ci cannot complete, document:
- Why it could not complete
- Which focused checks passed
- Relevant PHP, dependency, extension or platform limitations
- Any remaining validation risk
Do not suppress, baseline, exclude or weaken a check merely to make validation pass. Any configuration or baseline change must be intentional and explained in the pull request.
Test observable behavior and public contracts rather than internal implementation details.
Include relevant coverage for:
- New or corrected behavior
- Regression scenarios
- Boundary and edge cases
- Failure and exception paths
- Public API compatibility
- PHP-version, dependency, extension or platform-sensitive behavior
A bug fix should normally include a regression test that fails without the fix.
Run benchmarks when performance is affected or claimed:
composer ic:benchmarkAdditional benchmark commands:
composer ic:bench:quick
composer ic:bench:chartPerformance claims must include reproducible before-and-after results from comparable environments. Avoid conclusions based on a single unstable run.
Add or update benchmark coverage when existing benchmarks do not represent the changed execution path.
Inspect the active PHPForge configuration sources:
composer ic:list-config
composer ic:list-config --jsonPublish a configuration file only when the project requires rules that differ from PHPForge defaults:
composer ic:publish-config <file>When changing quality configuration:
- Explain why the current rule is unsuitable
- Keep exclusions narrow
- Avoid weakening checks globally for one change
- Document compatibility or baseline implications
- Keep each pull request limited to one logical change.
- Explain what changed, why it was needed and the expected behavior.
- Identify public API, backward-compatibility, PHP, extension, platform or dependency impacts.
- Select only validation and benchmark checkboxes that reflect work actually performed.
- Add or update tests for behavior changes.
- Update documentation, examples, types and configuration where required.
- Exclude unrelated formatting, refactoring, dependency or generated-file changes.
- Ensure CI passes before requesting review.
- Address review feedback through focused follow-up changes.
Draft pull requests are welcome for incomplete work or early design feedback, but validation claims and checklist items must remain accurate.
Use the relevant issue template for bugs, regressions, CI failures, documentation problems, questions and feature requests.
Include when relevant:
- A clear description of the problem or proposed behavior
- A minimal reproduction
- Expected and actual behavior
- Package and dependency versions
- PHP and Composer versions
- Operating system and relevant extensions
- Logs or error output with sensitive information removed
Small, self-contained fixes may be submitted directly as pull requests. Larger behavioral, architectural or compatibility changes should be discussed first.
Security vulnerabilities must not be reported through public issues, discussions or pull requests.