You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: AGENTS.md
+3-3Lines changed: 3 additions & 3 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -12,7 +12,7 @@ uv run pytest tests/test_parsers.py # one file
12
12
uv run pytest -k test_revert # one test by keyword
13
13
uv run ruff check .&& uv run ruff format --check .# lint + format check
14
14
uv run ruff format .# auto-format
15
-
uv run pyright # type-check (strict mode for src/)
15
+
uv run basedpyright# type-check (strict mode for src/)
16
16
RIPTIDE_DB_URL=... uv run alembic upgrade head # apply migrations
17
17
RIPTIDE_DB_URL=... uv run alembic downgrade base # tear down
18
18
podman-compose up # local dev: Postgres + migrations + app on :8000
@@ -44,9 +44,9 @@ If `docker ps` fails, ask the user to start OrbStack.
44
44
- Single Python package, `riptide_collector` (flat top-level, not a namespace package). Future suite components (e.g. `riptide-api`, `riptide-dashboard`) get their own top-level package, e.g. `riptide_dashboard` — leave architectural room for them.
45
45
- Webhook routers are factories that return an `APIRouter`. Bitbucket needs the config for automation detection (`make_router(config, session_factory, auth_dep)`); Pipeline, ArgoCD, and Noergler don't, so they take just `(session_factory, auth_dep)`. They're wired up in `src/riptide_collector/main.py::create_app`. Add the config only when a router actually needs `automation` rules or team metadata.
46
46
- Pydantic schemas: **strict** for `/webhooks/pipeline` and `/webhooks/argocd` (we own the contract — invalid payloads must 422); **permissive raw-dict parsing** for Bitbucket (its payload shapes vary; we best-effort extract).
47
-
- Use `_as_dict()` / `_as_list()` helpers in `routers/bitbucket.py` to coerce arbitrary JSON shapes — pyright strict won't accept chained `.get()` on `Optional[dict]`.
47
+
- Use `_as_dict()` / `_as_list()` helpers in `routers/bitbucket.py` to coerce arbitrary JSON shapes — basedpyright strict won't accept chained `.get()` on `Optional[dict]`.
48
48
- Tests use real Postgres via testcontainers, never SQLite. The `client` fixture in `tests/conftest.py` depends on `session_factory` which truncates tables per test.
49
-
-`.pre-commit-config.yaml` runs ruff + pyright + uv-lock-check; expect CI to enforce the same.
49
+
-`.pre-commit-config.yaml` runs ruff + basedpyright + uv-lock-check; expect CI to enforce the same.
0 commit comments