<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>CI on Unbound Force</title><link>https://unboundforce.dev/tags/ci/</link><description>Recent content in CI on Unbound Force</description><generator>Hugo</generator><language>en-US</language><copyright>Copyright (c) 2025-2026 Unbound Force</copyright><lastBuildDate>Sun, 23 Aug 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://unboundforce.dev/tags/ci/index.xml" rel="self" type="application/rss+xml"/><item><title>Your CI Failed — But Was It Your Fault? How /uf.review-pr Separates Signal from Noise</title><link>https://unboundforce.dev/blog/review-pr-causality/</link><pubDate>Sun, 03 May 2026 00:00:00 +0000</pubDate><guid>https://unboundforce.dev/blog/review-pr-causality/</guid><description>&lt;h2 id="the-problem"&gt;The Problem&lt;/h2&gt;
&lt;p&gt;You open a pull request. CI runs. Two checks fail. You spend 30 minutes investigating, only to discover that both failures predate your changes — a flaky integration test and a lint rule that was added to the base branch after you created your feature branch.&lt;/p&gt;</description></item><item><title>Your CI Failed — But Was It Your Fault? How /review-pr Separates Signal from Noise</title><link>https://unboundforce.dev/blog/ci-failure-classification/</link><pubDate>Sun, 23 Aug 2026 00:00:00 +0000</pubDate><guid>https://unboundforce.dev/blog/ci-failure-classification/</guid><description>&lt;h2 id="the-red-x-that-wastes-your-morning"&gt;The Red X That Wastes Your Morning&lt;/h2&gt;
&lt;p&gt;You open your pull request. CI is red. Your stomach drops — and then you spend the next hour discovering that the failure has nothing to do with your changes. A flaky integration test that fails one run in ten. A lint violation introduced three PRs ago. A dependency warning that nobody addressed last sprint. You didn&amp;rsquo;t break anything, but you&amp;rsquo;re the one staring at log output trying to prove it.&lt;/p&gt;</description></item><item><title>Gaze Baseline Comparison — Per-Function CRAP Regression Detection</title><link>https://unboundforce.dev/blog/gaze-baseline-comparison/</link><pubDate>Sun, 23 Aug 2026 00:00:00 +0000</pubDate><guid>https://unboundforce.dev/blog/gaze-baseline-comparison/</guid><description>&lt;h2 id="the-850-line-comparison-script-problem"&gt;The 850-Line Comparison Script Problem&lt;/h2&gt;
&lt;p&gt;Organizations adopting Gaze for CRAP score analysis faced a gap: Gaze could compute per-function CRAP scores for a single run, but it had no way to compare those scores against a previous baseline. Detecting regressions — a function whose complexity increased or whose coverage dropped — required external tooling. The only option was org-infra&amp;rsquo;s reusable GitHub Actions workflow, which embedded an 850-line bash/Python comparison script to diff two JSON reports and flag regressions.&lt;/p&gt;</description></item><item><title>AI Code Review in CI — How council-review-action Brings the Divisor Council to GitHub Actions</title><link>https://unboundforce.dev/blog/council-review-action/</link><pubDate>Sun, 23 Aug 2026 00:00:00 +0000</pubDate><guid>https://unboundforce.dev/blog/council-review-action/</guid><description>&lt;h2 id="the-problem-with-ai-code-review-in-ci"&gt;The Problem with AI Code Review in CI&lt;/h2&gt;
&lt;p&gt;Most AI code review integrations follow the same pattern: drop an API key into your workflow, pipe the diff to a model, and post whatever comes back as a PR comment. The result is a wall of unstructured text that developers scroll past. The review lacks perspective — a single model producing a single opinion, with no specialization and no structure.&lt;/p&gt;</description></item></channel></rss>