{"owner":"AsyncHttpClient","repo":"async-http-client","hasSkills":true,"hasMcp":false,"mcpConfig":null,"found":["AGENTS.md"],"skills":{"AGENTS.md":"# AsyncHttpClient - AI Agent Guidelines\n\nGuidelines for AI agents contributing to this repository.\n\n## Project Information\n\n* Java baseline is JDK 11. All code must compile and run on JDK 11. Source and target are defined in the root `pom.xml`.\n* CI runs on Amazon Corretto JDK 11, 17, 21 and 25 across Linux, macOS and Windows.\n* Maven MUST always be invoked through the Maven Wrapper. Use `./mvnw` on Linux and macOS and `mvnw.cmd` on Windows. Do not use a system Maven installation.\n\n## AI Agent Requirements\n\nThese requirements apply to all AI agents working on this repository.\n\n### Attribution\n\n* All AI-generated commits and pull requests MUST clearly identify the AI agent and the human operator.\n* Use the format `<AI Agent> on behalf of <Human Name>`.\n* Example: `Claude Code on behalf of Alice Smith`.\n* Every AI-generated commit MUST include a `Co-Authored-By` trailer for the AI agent.\n\n### Git\n\n* Work in topic branches with descriptive names. Never commit directly to `main`.\n* Never force-push shared branches.\n* Never rewrite repository history unless explicitly instructed.\n* Never start a commit message with `[maven-release-plugin]`. The release workflow treats that prefix as release automation.\n\n### Issues and Pull Requests\n\n* Use GitHub Issues for bugs and feature requests. Use GitHub Discussions for questions.\n* Before implementing a bug fix:\n  * Reproduce the issue.\n  * Inspect `git log` and `git blame` for the affected files.\n  * Search existing issues and pull requests.\n  * Confirm the change does not revert earlier intentional work.\n* Keep pull requests small and focused. One logical change per pull request.\n* Do not combine unrelated fixes, refactorings or formatting changes.\n\n### Testing Gate - Hard Requirement\n\nBefore pushing any commit or opening a pull request, run:\n\n```sh\n./mvnw clean verify\n```\n\nRequirements:\n\n* The command MUST be run on JDK 11.\n* The build MUST complete successfully.\n* Do not disable, skip or weaken tests to obtain a passing build.\n\n## Build\n\nCommon commands:\n\n```sh\n# Full verification\n./mvnw clean verify\n\n# Compile and API compatibility check only\n./mvnw -B -ntp clean verify -DskipTests -Dgpg.skip=true\n\n# Run a single test class\n./mvnw test -Dtest=BasicHttpTest\n\n# Run a single test method\n./mvnw test -Dtest=BasicHttpTest#testMethodName\n```\n\n### Build Notes\n\n* Error Prone and NullAway run during compilation. Nullability violations in production code under `org.asynchttpclient` fail the build.\n* Respect the JetBrains `@Nullable` and `@NotNull` annotations. Test sources are excluded from NullAway checks.\n* Revapi runs during the `verify` phase and compares the public API against the latest release on Maven Central. Treat API compatibility failures as intentional feedback, not build noise.\n\n## Repository Layout\n\n* `pom.xml` - parent and aggregator POM\n* `client`\n\n  * `src/main/java/org/asynchttpclient` - production sources\n  * `src/test/java` - test sources\n  * `src/jmh/java` - JMH benchmarks\n* `.github/workflows` - CI workflows\n\n## Testing\n\n* Use JUnit 5 only.\n* Test classes must end with the `Test` suffix and mirror the production package structure.\n* Extend `AbstractBasicTest` for tests requiring an embedded Jetty server.\n* Extend `AbstractBasicWebSocketTest` for WebSocket tests.\n* Never use `Thread.sleep()` for synchronization. Use futures, latches or timeouts.\n* Mark known flaky tests with `@RepeatedIfExceptionsTest` instead of `@Test`.\n* Do not leak Netty `ByteBuf` instances. The leak detector extension will fail the test.\n* Keep the default test suite hermetic.\n* Tests requiring public hosts must be tagged `external`.\n* Docker-based integration tests must follow the existing Testcontainers gating properties.\n\n## Coding Conventions\n\n* Use four spaces for indentation. Never use tabs.\n* Files are UTF-8 encoded, but repository content MUST use ASCII characters only.\n* Do not use wildcard imports.\n* Preserve the surrounding coding style.\n* Keep diffs as small as practical.\n* Avoid unrelated formatting changes.\n\nEvery new Java file MUST begin with the repository license header:\n\n```java\n/*\n *    Copyright (c) 2026 AsyncHttpClient Project. All rights reserved.\n *\n *    Licensed under the Apache License, Version 2.0 (the \"License\");\n *    you may not use this file except in compliance with the License.\n *    You may obtain a copy of the License at\n *\n *        http://www.apache.org/licenses/LICENSE-2.0\n *\n *    Unless required by applicable law or agreed to in writing, software\n *    distributed under the License is distributed on an \"AS IS\" BASIS,\n *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *    See the License for the specific language governing permissions and\n *    limitations under the License.\n */\n```\n\n## Comments\n\n* Keep comments minimal.\n* Add comments only to explain constraints, invariants or non-obvious reasoning that the code itself cannot express.\n* Match the comment density of the surrounding file.\n* Do not add comments describing a code change or addressing reviewers.\n\n## Commit Messages\n\nCommit messages MUST contain:\n\n* An imperative summary line of at most 50 characters.\n* A blank line.\n* A body wrapped at 72 characters explaining why the change was made, not only what changed.\n* A reference to the GitHub issue when applicable.\n* The required AI attribution trailer.\n\n## API Compatibility\n\n* Public API changes MUST be intentional.\n* Do not introduce, remove or modify public API unless it is the explicit goal of the change.\n* Treat Revapi failures as design feedback rather than something to work around.\n\n## Security\n\nTreat all network input as hostile.\n\nPay particular attention to:\n\n* URI parsing and normalization.\n* Header values and CRLF injection.\n* Request smuggling.\n* Credential and `Realm` handling, especially across redirects and origins.\n* Proxy and CONNECT handling.\n* TLS configuration and hostname verification.\n* Decompression limits and memory usage.\n* Cookie parsing and storage.\n\n## Knowledge Verification\n\n* Do not make factual claims about external projects or dependency versions from memory.\n* Verify dependency information against the repository and Maven Central before making assertions.\n* When uncertain, state that uncertainty instead of guessing.\n\n## Links\n\n* `https://github.com/AsyncHttpClient/async-http-client`\n* `https://github.com/AsyncHttpClient/async-http-client/issues`\n* `https://github.com/AsyncHttpClient/async-http-client/discussions`\n"},"files":{"AGENTS.md":"# AsyncHttpClient - AI Agent Guidelines\n\nGuidelines for AI agents contributing to this repository.\n\n## Project Information\n\n* Java baseline is JDK 11. All code must compile and run on JDK 11. Source and target are defined in the root `pom.xml`.\n* CI runs on Amazon Corretto JDK 11, 17, 21 and 25 across Linux, macOS and Windows.\n* Maven MUST always be invoked through the Maven Wrapper. Use `./mvnw` on Linux and macOS and `mvnw.cmd` on Windows. Do not use a system Maven installation.\n\n## AI Agent Requirements\n\nThese requirements apply to all AI agents working on this repository.\n\n### Attribution\n\n* All AI-generated commits and pull requests MUST clearly identify the AI agent and the human operator.\n* Use the format `<AI Agent> on behalf of <Human Name>`.\n* Example: `Claude Code on behalf of Alice Smith`.\n* Every AI-generated commit MUST include a `Co-Authored-By` trailer for the AI agent.\n\n### Git\n\n* Work in topic branches with descriptive names. Never commit directly to `main`.\n* Never force-push shared branches.\n* Never rewrite repository history unless explicitly instructed.\n* Never start a commit message with `[maven-release-plugin]`. The release workflow treats that prefix as release automation.\n\n### Issues and Pull Requests\n\n* Use GitHub Issues for bugs and feature requests. Use GitHub Discussions for questions.\n* Before implementing a bug fix:\n  * Reproduce the issue.\n  * Inspect `git log` and `git blame` for the affected files.\n  * Search existing issues and pull requests.\n  * Confirm the change does not revert earlier intentional work.\n* Keep pull requests small and focused. One logical change per pull request.\n* Do not combine unrelated fixes, refactorings or formatting changes.\n\n### Testing Gate - Hard Requirement\n\nBefore pushing any commit or opening a pull request, run:\n\n```sh\n./mvnw clean verify\n```\n\nRequirements:\n\n* The command MUST be run on JDK 11.\n* The build MUST complete successfully.\n* Do not disable, skip or weaken tests to obtain a passing build.\n\n## Build\n\nCommon commands:\n\n```sh\n# Full verification\n./mvnw clean verify\n\n# Compile and API compatibility check only\n./mvnw -B -ntp clean verify -DskipTests -Dgpg.skip=true\n\n# Run a single test class\n./mvnw test -Dtest=BasicHttpTest\n\n# Run a single test method\n./mvnw test -Dtest=BasicHttpTest#testMethodName\n```\n\n### Build Notes\n\n* Error Prone and NullAway run during compilation. Nullability violations in production code under `org.asynchttpclient` fail the build.\n* Respect the JetBrains `@Nullable` and `@NotNull` annotations. Test sources are excluded from NullAway checks.\n* Revapi runs during the `verify` phase and compares the public API against the latest release on Maven Central. Treat API compatibility failures as intentional feedback, not build noise.\n\n## Repository Layout\n\n* `pom.xml` - parent and aggregator POM\n* `client`\n\n  * `src/main/java/org/asynchttpclient` - production sources\n  * `src/test/java` - test sources\n  * `src/jmh/java` - JMH benchmarks\n* `.github/workflows` - CI workflows\n\n## Testing\n\n* Use JUnit 5 only.\n* Test classes must end with the `Test` suffix and mirror the production package structure.\n* Extend `AbstractBasicTest` for tests requiring an embedded Jetty server.\n* Extend `AbstractBasicWebSocketTest` for WebSocket tests.\n* Never use `Thread.sleep()` for synchronization. Use futures, latches or timeouts.\n* Mark known flaky tests with `@RepeatedIfExceptionsTest` instead of `@Test`.\n* Do not leak Netty `ByteBuf` instances. The leak detector extension will fail the test.\n* Keep the default test suite hermetic.\n* Tests requiring public hosts must be tagged `external`.\n* Docker-based integration tests must follow the existing Testcontainers gating properties.\n\n## Coding Conventions\n\n* Use four spaces for indentation. Never use tabs.\n* Files are UTF-8 encoded, but repository content MUST use ASCII characters only.\n* Do not use wildcard imports.\n* Preserve the surrounding coding style.\n* Keep diffs as small as practical.\n* Avoid unrelated formatting changes.\n\nEvery new Java file MUST begin with the repository license header:\n\n```java\n/*\n *    Copyright (c) 2026 AsyncHttpClient Project. All rights reserved.\n *\n *    Licensed under the Apache License, Version 2.0 (the \"License\");\n *    you may not use this file except in compliance with the License.\n *    You may obtain a copy of the License at\n *\n *        http://www.apache.org/licenses/LICENSE-2.0\n *\n *    Unless required by applicable law or agreed to in writing, software\n *    distributed under the License is distributed on an \"AS IS\" BASIS,\n *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *    See the License for the specific language governing permissions and\n *    limitations under the License.\n */\n```\n\n## Comments\n\n* Keep comments minimal.\n* Add comments only to explain constraints, invariants or non-obvious reasoning that the code itself cannot express.\n* Match the comment density of the surrounding file.\n* Do not add comments describing a code change or addressing reviewers.\n\n## Commit Messages\n\nCommit messages MUST contain:\n\n* An imperative summary line of at most 50 characters.\n* A blank line.\n* A body wrapped at 72 characters explaining why the change was made, not only what changed.\n* A reference to the GitHub issue when applicable.\n* The required AI attribution trailer.\n\n## API Compatibility\n\n* Public API changes MUST be intentional.\n* Do not introduce, remove or modify public API unless it is the explicit goal of the change.\n* Treat Revapi failures as design feedback rather than something to work around.\n\n## Security\n\nTreat all network input as hostile.\n\nPay particular attention to:\n\n* URI parsing and normalization.\n* Header values and CRLF injection.\n* Request smuggling.\n* Credential and `Realm` handling, especially across redirects and origins.\n* Proxy and CONNECT handling.\n* TLS configuration and hostname verification.\n* Decompression limits and memory usage.\n* Cookie parsing and storage.\n\n## Knowledge Verification\n\n* Do not make factual claims about external projects or dependency versions from memory.\n* Verify dependency information against the repository and Maven Central before making assertions.\n* When uncertain, state that uncertainty instead of guessing.\n\n## Links\n\n* `https://github.com/AsyncHttpClient/async-http-client`\n* `https://github.com/AsyncHttpClient/async-http-client/issues`\n* `https://github.com/AsyncHttpClient/async-http-client/discussions`\n"},"items":[{"name":"AGENTS.md","path":"AGENTS.md","title":"AGENTS.md","content":"# AsyncHttpClient - AI Agent Guidelines\n\nGuidelines for AI agents contributing to this repository.\n\n## Project Information\n\n* Java baseline is JDK 11. All code must compile and run on JDK 11. Source and target are defined in the root `pom.xml`.\n* CI runs on Amazon Corretto JDK 11, 17, 21 and 25 across Linux, macOS and Windows.\n* Maven MUST always be invoked through the Maven Wrapper. Use `./mvnw` on Linux and macOS and `mvnw.cmd` on Windows. Do not use a system Maven installation.\n\n## AI Agent Requirements\n\nThese requirements apply to all AI agents working on this repository.\n\n### Attribution\n\n* All AI-generated commits and pull requests MUST clearly identify the AI agent and the human operator.\n* Use the format `<AI Agent> on behalf of <Human Name>`.\n* Example: `Claude Code on behalf of Alice Smith`.\n* Every AI-generated commit MUST include a `Co-Authored-By` trailer for the AI agent.\n\n### Git\n\n* Work in topic branches with descriptive names. Never commit directly to `main`.\n* Never force-push shared branches.\n* Never rewrite repository history unless explicitly instructed.\n* Never start a commit message with `[maven-release-plugin]`. The release workflow treats that prefix as release automation.\n\n### Issues and Pull Requests\n\n* Use GitHub Issues for bugs and feature requests. Use GitHub Discussions for questions.\n* Before implementing a bug fix:\n  * Reproduce the issue.\n  * Inspect `git log` and `git blame` for the affected files.\n  * Search existing issues and pull requests.\n  * Confirm the change does not revert earlier intentional work.\n* Keep pull requests small and focused. One logical change per pull request.\n* Do not combine unrelated fixes, refactorings or formatting changes.\n\n### Testing Gate - Hard Requirement\n\nBefore pushing any commit or opening a pull request, run:\n\n```sh\n./mvnw clean verify\n```\n\nRequirements:\n\n* The command MUST be run on JDK 11.\n* The build MUST complete successfully.\n* Do not disable, skip or weaken tests to obtain a passing build.\n\n## Build\n\nCommon commands:\n\n```sh\n# Full verification\n./mvnw clean verify\n\n# Compile and API compatibility check only\n./mvnw -B -ntp clean verify -DskipTests -Dgpg.skip=true\n\n# Run a single test class\n./mvnw test -Dtest=BasicHttpTest\n\n# Run a single test method\n./mvnw test -Dtest=BasicHttpTest#testMethodName\n```\n\n### Build Notes\n\n* Error Prone and NullAway run during compilation. Nullability violations in production code under `org.asynchttpclient` fail the build.\n* Respect the JetBrains `@Nullable` and `@NotNull` annotations. Test sources are excluded from NullAway checks.\n* Revapi runs during the `verify` phase and compares the public API against the latest release on Maven Central. Treat API compatibility failures as intentional feedback, not build noise.\n\n## Repository Layout\n\n* `pom.xml` - parent and aggregator POM\n* `client`\n\n  * `src/main/java/org/asynchttpclient` - production sources\n  * `src/test/java` - test sources\n  * `src/jmh/java` - JMH benchmarks\n* `.github/workflows` - CI workflows\n\n## Testing\n\n* Use JUnit 5 only.\n* Test classes must end with the `Test` suffix and mirror the production package structure.\n* Extend `AbstractBasicTest` for tests requiring an embedded Jetty server.\n* Extend `AbstractBasicWebSocketTest` for WebSocket tests.\n* Never use `Thread.sleep()` for synchronization. Use futures, latches or timeouts.\n* Mark known flaky tests with `@RepeatedIfExceptionsTest` instead of `@Test`.\n* Do not leak Netty `ByteBuf` instances. The leak detector extension will fail the test.\n* Keep the default test suite hermetic.\n* Tests requiring public hosts must be tagged `external`.\n* Docker-based integration tests must follow the existing Testcontainers gating properties.\n\n## Coding Conventions\n\n* Use four spaces for indentation. Never use tabs.\n* Files are UTF-8 encoded, but repository content MUST use ASCII characters only.\n* Do not use wildcard imports.\n* Preserve the surrounding coding style.\n* Keep diffs as small as practical.\n* Avoid unrelated formatting changes.\n\nEvery new Java file MUST begin with the repository license header:\n\n```java\n/*\n *    Copyright (c) 2026 AsyncHttpClient Project. All rights reserved.\n *\n *    Licensed under the Apache License, Version 2.0 (the \"License\");\n *    you may not use this file except in compliance with the License.\n *    You may obtain a copy of the License at\n *\n *        http://www.apache.org/licenses/LICENSE-2.0\n *\n *    Unless required by applicable law or agreed to in writing, software\n *    distributed under the License is distributed on an \"AS IS\" BASIS,\n *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *    See the License for the specific language governing permissions and\n *    limitations under the License.\n */\n```\n\n## Comments\n\n* Keep comments minimal.\n* Add comments only to explain constraints, invariants or non-obvious reasoning that the code itself cannot express.\n* Match the comment density of the surrounding file.\n* Do not add comments describing a code change or addressing reviewers.\n\n## Commit Messages\n\nCommit messages MUST contain:\n\n* An imperative summary line of at most 50 characters.\n* A blank line.\n* A body wrapped at 72 characters explaining why the change was made, not only what changed.\n* A reference to the GitHub issue when applicable.\n* The required AI attribution trailer.\n\n## API Compatibility\n\n* Public API changes MUST be intentional.\n* Do not introduce, remove or modify public API unless it is the explicit goal of the change.\n* Treat Revapi failures as design feedback rather than something to work around.\n\n## Security\n\nTreat all network input as hostile.\n\nPay particular attention to:\n\n* URI parsing and normalization.\n* Header values and CRLF injection.\n* Request smuggling.\n* Credential and `Realm` handling, especially across redirects and origins.\n* Proxy and CONNECT handling.\n* TLS configuration and hostname verification.\n* Decompression limits and memory usage.\n* Cookie parsing and storage.\n\n## Knowledge Verification\n\n* Do not make factual claims about external projects or dependency versions from memory.\n* Verify dependency information against the repository and Maven Central before making assertions.\n* When uncertain, state that uncertainty instead of guessing.\n\n## Links\n\n* `https://github.com/AsyncHttpClient/async-http-client`\n* `https://github.com/AsyncHttpClient/async-http-client/issues`\n* `https://github.com/AsyncHttpClient/async-http-client/discussions`\n","category":"root","tokens":1616}]}