Files
Mason Daugherty 1bb7deee17 fix(ci): make the talon failure waiver reachable on libs/code PRs (#5811)
On PRs that don't touch `libs/talon`, failing `lint-talon` /
`test-talon` jobs no longer block merge — the `ci_success` waiver added
in #5808 now actually fires, instead of being unreachable because the
`talon` path filter also matched `libs/code/**`.

---

The waiver from #5808 was unreachable for its target population.
`ci.yml` passed `TALON_CHANGED: ${{ needs.changes.outputs.talon }}`, but
the `talon` filter is deliberately broad — it watches `libs/talon/**`
**plus** `libs/deepagents/**`, `libs/code/**`, and the workflow files,
because talon editable-installs `deepagents-code` and its CI must run
when those change. Reusing that signal as "PR touches talon" meant every
libs/code PR got `talon == 'true'` and the gate stayed strict. Confirmed
on #5773 (run 32866932914): the gate logged `TALON_CHANGED: true`,
`"waived": []`, and failed on `lint-talon`/`test-talon` even though the
PR only touched `libs/code`.

The fix decouples "run talon CI" from "PR touches talon sources": a new
`talon-src` path-filter output tracks only `libs/talon/**`, and both the
`ci_success` gate (`TALON_CHANGED`) and the `talon-failure-advisory`
job's `if:` condition read it. The broad `talon` filter is untouched —
it still controls which jobs run. `ci_gate.py` is unchanged; it takes
the flag as a plain string, and its unit tests (run in
`check-release-options`) pass unmodified.

**Expected gate outcomes** (reasoned through, since the filter wiring
itself isn't unit-testable without simulating the YAML):

- **(a) PR touching only `libs/code`** — talon jobs run (broad filter),
`talon-src` is not `'true'`, so talon failures are waived and the
advisory comment posts. This is the population the waiver was written
for.
- **(b) PR touching `libs/talon`** — `talon-src` is `'true'`, gate stays
strict; talon failures block.
- **(c) PR touching only `libs/deepagents`** — talon jobs run (the broad
filter includes `libs/deepagents/**`), but `talon-src` is not `'true'`,
so talon failures are **waived**. Note: this differs from the
"deepagents-core changes stay strict" behavior described when this fix
was scoped — under `talon-src: ['libs/talon/**']` only genuine
talon-source PRs are strict. If maintainers want deepagents-only PRs to
stay strict (a core change that breaks talon blocks), I can add
`libs/deepagents/**` to `talon-src`; the trade-off is that a deepagents
PR could then be blocked by pre-existing talon breakage unrelated to its
change. Please confirm which is intended.
- **(d) Push to main** — everything strict regardless of filter outputs
(the waiver requires `event == 'pull_request'`).
2026-08-25 12:14:54 -04:00
..
2026-03-02 11:37:42 -05:00