mirror of
https://github.com/langchain-ai/deepagents.git
synced 2026-08-27 10:51:26 -04:00
34aaab8682
## Problem `talon` editable-installs `deepagents-code` (`libs/talon/pyproject.toml`, `[tool.uv.sources]`), so the `talon` filter in `ci.yml` includes `libs/code/**` and every libs/code PR runs `lint-talon`/`test-talon`. When a libs/code change breaks talon, `ci_success` fails, and because branch protection requires `✅ CI Success`, the libs/code PR cannot merge until the author also fixes the talon regression — inside the same PR. That combined PR then makes release-please fan out changelog entries across both packages. It is acceptable for PRs that don't touch `libs/talon` to merge with talon broken at HEAD; the breakage gets fixed in a follow-up `fix(talon): ...` PR (ideally in a stack). talon is the only consumer of the libs/code path source, so no other package's CI is affected by this policy. ## Approach Advisory, not skipped: talon CI still *runs* on libs/code PRs (the signal is valuable) — only its blocking effect changes. - The waiver decision lives in a new helper script, `.github/scripts/checks/ci_gate.py`, which `ci_success` calls instead of grepping the `toJSON(needs.*.result)` blob. On `pull_request` runs where the `talon` filter output is not `'true'`, `failure` results from `lint-talon`/`test-talon` are waived with a loud `::warning::` per waived job; every other job still blocks. `cancelled` results are never waived, genuine talon PRs (`talon == 'true'`) stay strict, and `push`/`merge_group` runs stay fully strict — main runs every job unconditionally, so a broken talon is still visible there and cannot silently go red. - A new `talon-failure-advisory` job posts/updates a sticky PR comment (`<!-- talon-ci-advisory -->`) when the waiver fires, naming the failed jobs, linking the workflow run, and calling out the required `fix(talon)` follow-up; it deletes the sticky once talon is green again. It mirrors the sticky-comment pattern in `release_fanout_bypass_warn.yml`, including the `core.warning` + job-summary fallback when commenting fails (fork tokens, rate limits). The job is advisory-only and is deliberately not in `ci_success.needs`, so it can never gate. - Unit tests in `.github/scripts/tests/checks/test_ci_gate.py` cover the waiver matrix (waived lint/test failures, non-talon failures still blocking, talon PRs and push/merge_group staying strict, cancelled never waived). They run in the existing `check-release-options` job, which is unchanged. No branch-protection settings change is needed: the repo already requires only `✅ CI Success` and `validate release dependencies against PyPI`, both compatible with this change. Note on scope: the waiver keys off `talon != 'true'`. SDK-only PRs (`libs/deepagents/**`) also flip the `talon` filter on via fan-out, so an SDK PR that breaks talon still blocks — only PRs where talon CI runs *solely* because of the libs/code path source get the waiver.