-
Notifications
You must be signed in to change notification settings - Fork 584
docs: Add AGENTS.md #5579
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: master
Are you sure you want to change the base?
docs: Add AGENTS.md #5579
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,67 @@ | ||
| # Agent Instructions | ||
|
|
||
| ## Tox | ||
|
|
||
| - Always run tox from the main `tox.venv` | ||
| - If there is no `tox.venv`, create one with `python -m venv tox.venv`, active it and run `pip install tox` | ||
|
|
||
| ## Package Manager | ||
|
|
||
| Use **tox** for testing (not pytest directly): | ||
| - Test matrix configuration is in `tox.ini` | ||
| - Integration tests: `tox -e py3.14-{integration}-v{version}` | ||
| - Common tests: `tox -e py3.14-common` | ||
|
|
||
| ## Type Checking | ||
|
|
||
| Use **tox** for type checking (not mypy directly): | ||
| - Run `tox -e mypy` before committing (must pass with zero errors) | ||
| - Strict mode enabled (`check_untyped_defs`, `disallow_untyped_defs`) | ||
|
|
||
| ## Linting & Formatting | ||
|
|
||
| Use **tox** for linting (not ruff directly): | ||
| - `tox -e ruff` | ||
| - Full lint suite: `tox -e linters` | ||
| - Full lint suite must pass before committing | ||
|
|
||
| ## Commit Attribution | ||
|
|
||
| AI commits MUST include: | ||
| ``` | ||
| Co-Authored-By: <agent model name> <noreply@anthropic.com> | ||
| ``` | ||
| Example: `Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>` | ||
|
|
||
| ## Auto-Generated Files | ||
|
|
||
| Do NOT edit these directly — modify source scripts instead: | ||
| - `tox.ini` — generated by `scripts/populate_tox/populate_tox.py` from `scripts/populate_tox/tox.jinja` | ||
| - `.github/workflows/test-integrations-*.yml` — generated by `scripts/split_tox_gh_actions/split_tox_gh_actions.py` | ||
| - Regenerate all: `scripts/generate-test-files.sh` | ||
|
|
||
| ## Adding Integrations to Test Suite | ||
|
|
||
| 1. Add minimum version to `_MIN_VERSIONS` in `sentry_sdk/integrations/__init__.py` | ||
| 2. Add config to `TEST_SUITE_CONFIG` in `scripts/populate_tox/config.py` | ||
| 3. Add to group in `scripts/split_tox_gh_actions/split_tox_gh_actions.py` | ||
| 4. Run `scripts/generate-test-files.sh` | ||
|
|
||
| ## Integration Contract | ||
|
|
||
| - Don't crash applications or swallow exceptions | ||
| - Don't mutate object references or alter function signatures | ||
| - Don't leak file descriptors or make unexpected DB requests | ||
| - Write defensive code | ||
| - Use end-to-end tests (not mocks) | ||
|
|
||
| ## Key Paths | ||
|
|
||
| | Path | Description | | ||
| |------|-------------| | ||
| | `sentry_sdk/integrations/` | integration modules | | ||
| | `sentry_sdk/ai/` | AI monitoring | | ||
| | `sentry_sdk/crons/` | Cron monitoring | | ||
| | `sentry_sdk/profiler/` | Performance profiling | | ||
| | `tests/integrations/{name}/` | Integration test suites | | ||
| | `scripts/populate_tox/config.py` | Test suite configuration | |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1 @@ | ||
| AGENTS.md |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -327,6 +327,9 @@ deps = | |
| linters: -r requirements-linting.txt | ||
| linters: werkzeug<2.3.0 | ||
|
|
||
| ruff: -r requirements-linting.txt | ||
| mypy: -r requirements-linting.txt | ||
|
|
||
| # === Common === | ||
| py3.8-common: hypothesis | ||
| common: pytest-asyncio | ||
|
|
@@ -915,6 +918,8 @@ basepython = | |
| # Tools like ruff and mypy have options that pin the target Python | ||
| # version (configured in pyproject.toml), ensuring consistent behavior. | ||
| linters: python3.14 | ||
| mypy: python3.14 | ||
| ruff: python3.14 | ||
|
|
||
| commands = | ||
| {py3.7,py3.8}-boto3: pip install urllib3<2.0.0 | ||
|
|
@@ -933,3 +938,12 @@ commands = | |
| ruff format --check tests sentry_sdk | ||
| mypy sentry_sdk | ||
| python scripts/find_raise_from_none.py | ||
|
|
||
| [testenv:mypy] | ||
| commands = | ||
| mypy sentry_sdk | ||
|
|
||
| [testenv:ruff] | ||
| commands = | ||
| ruff check tests sentry_sdk | ||
| ruff format --check tests sentry_sdk | ||
|
Comment on lines
+942
to
+949
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Bug: Manual changes to Suggested FixInstead of editing Prompt for AI AgentDid we get this right? 👍 / 👎 to inform future reviews. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Direct edits to auto-generated file will be lostMedium Severity The new Additional Locations (1) |
||


There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
New mypy env missing werkzeug dependency for type checking
Medium Severity
The new
[testenv:mypy]environment only installsrequirements-linting.txtbut is missingwerkzeug<2.3.0, which is explicitly included in[testenv:linters]vialinters: werkzeug<2.3.0. Becausesentry_sdk/integrations/flask.pyimportsfrom werkzeug.datastructures import FileStorage, ImmutableMultiDictunderTYPE_CHECKING, mypy will attempt to resolve those types. Sincewerkzeughas noignore_missing_importsoverride inpyproject.toml, runningtox -e mypy(as instructed inAGENTS.md) will fail with a missing import error that thelintersenv never surfaces.