<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: CodeRifts</title>
    <description>The latest articles on DEV Community by CodeRifts (@peter_zsobrk_50d5c4ac7de).</description>
    <link>https://dev.to/peter_zsobrk_50d5c4ac7de</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3690520%2Fbffefd14-0a03-45bc-a901-0b59627d7917.png</url>
      <title>DEV Community: CodeRifts</title>
      <link>https://dev.to/peter_zsobrk_50d5c4ac7de</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/peter_zsobrk_50d5c4ac7de"/>
    <language>en</language>
    <item>
      <title>How a Field Rename Broke 19 Restaurants for a Week</title>
      <dc:creator>CodeRifts</dc:creator>
      <pubDate>Thu, 05 Mar 2026 13:38:18 +0000</pubDate>
      <link>https://dev.to/peter_zsobrk_50d5c4ac7de/how-a-field-rename-broke-19-restaurants-for-a-week-4jpi</link>
      <guid>https://dev.to/peter_zsobrk_50d5c4ac7de/how-a-field-rename-broke-19-restaurants-for-a-week-4jpi</guid>
      <description>&lt;p&gt;A single API field rename passed code review, passed all tests, and took down POS systems across 19 restaurants. Here is what went wrong and how to prevent it.&lt;/p&gt;

&lt;p&gt;The Incident&lt;br&gt;
It was a Friday afternoon. A backend developer at a fast-growing restaurant tech company pushed a seemingly harmless change: renaming &lt;code&gt;transaction_id&lt;/code&gt; to &lt;code&gt;payment_reference&lt;/code&gt; in their core Payments API. The pull request was small, the logic was sound, and the code review was quick. All 1,247 unit tests passed. The integration test suite, which spun up the server and hit every endpoint, came back green. The CI pipeline glowed with success. The PR was merged and deployed.&lt;/p&gt;

&lt;p&gt;By Monday morning, the company was in crisis. Point-of-sale (POS) terminals at 19 of their client restaurants were failing to process credit card payments. The consumer-facing mobile app, which showed recent transaction history, was crashing on launch for thousands of users. A third-party delivery partner integration was returning 500 Internal Server Errors, halting all incoming orders. Customer support lines were flooded with calls from frustrated restaurant managers and hungry customers.&lt;/p&gt;

&lt;p&gt;The engineering team scrambled. It took six frantic hours to identify the root cause, roll back the change, and deploy a hotfix. But the damage was done. Full recovery, including coordinating with the third-party developer and getting a new mobile app version approved by Apple, took nearly a week. The estimated cost of the incident: over $45,000 in lost revenue, emergency engineering time, and customer support overhead.&lt;/p&gt;

&lt;p&gt;What Went Wrong: The Gap Between Code and Contract&lt;br&gt;
How could a change that passed every test cause such a catastrophic failure? The problem was that the tests validated the API server, but they did not validate the API contract. The field rename was technically valid code. The server started fine, the new field was present, and the old one was gone. But every downstream consumer—the POS system, the mobile app, the delivery integration—was still hardcoded to expect &lt;code&gt;transaction_id&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Nobody had checked the API schema diff. The code review focused on the implementation logic, not the contract compatibility. The OpenAPI specification file, which defined the API structure, was treated as a documentation artifact, not a binding contract with consumers. The subtle but critical difference between &lt;code&gt;code that works&lt;/code&gt; and a &lt;code&gt;contract that is safe&lt;/code&gt; was missed entirely.&lt;/p&gt;

&lt;p&gt;Why This Keeps Happening&lt;br&gt;
This story is not unique. It happens every day in companies of all sizes. The core issues are systemic:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Schema changes are invisible in traditional code review.&lt;/strong&gt; A pull request diff shows code changes, but the impact on the generated OpenAPI spec is often overlooked. Reviewers focus on the logic, not the subtle but critical changes to the API contract.&lt;br&gt;
&lt;strong&gt;Tests validate server behavior, not consumer compatibility.&lt;/strong&gt; Unit and integration tests confirm that the server can handle requests and return responses. They do not, by default, check if those responses will break existing clients who rely on a specific field structure.&lt;br&gt;
&lt;strong&gt;OpenAPI specs are treated as documentation, not contracts.&lt;/strong&gt; Many teams see their OpenAPI file as a byproduct of the development process, not as the central source of truth that governs interactions between services.&lt;br&gt;
&lt;strong&gt;No automated tooling catches the gap.&lt;/strong&gt; Without a dedicated tool to diff the API schema on every pull request, these breaking changes slip through. Field renames, type changes, and removed endpoints look harmless in a code diff but can be fatal to consumers.&lt;br&gt;
The $45,000 Question: Breaking Down the Cost&lt;br&gt;
It is easy to dismiss a field rename as a minor issue, but the financial impact can be staggering. For the restaurant tech company, the $45,000 cost broke down as follows:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Lost Revenue:&lt;/strong&gt; 19 locations unable to process card payments for several hours during peak lunch and dinner rushes.&lt;br&gt;
&lt;strong&gt;Emergency Engineering:&lt;/strong&gt; Four senior engineers pulled into a weekend war room for six hours to diagnose, fix, and deploy the rollback.&lt;br&gt;
&lt;strong&gt;Mobile App Hotfix:&lt;/strong&gt; Additional time spent building, testing, and submitting an emergency update to the App Store and Google Play, followed by a waiting period for review.&lt;br&gt;
&lt;strong&gt;Partner Escalation:&lt;/strong&gt; Time spent with the third-party delivery integration partner to explain the outage and coordinate their recovery efforts.&lt;br&gt;
&lt;strong&gt;Customer Support Spike:&lt;/strong&gt; An estimated 200+ support tickets and calls from restaurant operators and end-users, overwhelming the support team.&lt;br&gt;
&lt;strong&gt;Reputation Damage:&lt;/strong&gt; The intangible but significant cost of losing trust with restaurant operators who rely on the platform to run their business.&lt;br&gt;
What Should Have Happened&lt;br&gt;
In a world with proper API contract governance, the entire incident could have been prevented. Here is how the same scenario plays out with an automated governance tool in place:&lt;/p&gt;

&lt;p&gt;The developer opens the same pull request with the field rename.&lt;br&gt;
An automated tool, integrated with GitHub, runs a schema diff and detects: "Breaking Change: Required field &lt;code&gt;transaction_id&lt;/code&gt; was removed from response body in &lt;code&gt;GET /payments&lt;/code&gt;."&lt;br&gt;
A risk score is calculated: &lt;strong&gt;78/100&lt;/strong&gt;, flagged as high due to the endpoint’s revenue impact, the three known downstream consumers, and its classification within the critical “Payments” domain.&lt;br&gt;
A policy violation is flagged in the PR comment: "Policy Violation: Required field removal without a deprecation period."&lt;br&gt;
The PR is automatically blocked from merging until it is reviewed and approved by the designated API governance team lead.&lt;br&gt;
The developer, now aware of the issue, updates the PR to follow the correct deprecation process: keep both &lt;code&gt;transaction_id&lt;/code&gt; and &lt;code&gt;payment_reference&lt;/code&gt; in the response for a 30-day period, mark the old field as deprecated, and create a ticket to remove it in a future release.&lt;br&gt;
The total cost of this improved outcome? Fifteen minutes of a developer’s time, instead of $45,000 and a week of firefighting.&lt;/p&gt;

&lt;p&gt;How to Prevent This in Your Organization&lt;br&gt;
Preventing these costly incidents does not require a massive cultural shift. It requires treating your API specification as a first-class citizen of your development process and implementing a few key practices:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Treat OpenAPI specs as contracts, not documentation.&lt;/strong&gt; Your spec is the source of truth for your API’s behavior.&lt;br&gt;
&lt;strong&gt;Automate schema diff on every pull request.&lt;/strong&gt; Make breaking change detection a mandatory CI check, just like running unit tests.&lt;br&gt;
&lt;strong&gt;Use risk scoring to prioritize review effort.&lt;/strong&gt; Not all breaking changes are equal. Focus human attention on the changes that pose the greatest risk to your business and consumers.&lt;br&gt;
&lt;strong&gt;Enforce deprecation policies for field removals and renames.&lt;/strong&gt; Give your consumers time to adapt to changes by supporting both the old and new contract for a transition period.&lt;br&gt;
&lt;strong&gt;Map your API consumers to understand blast radius.&lt;/strong&gt; Know who is using your APIs so you can predict the impact of a change before it ships.&lt;/p&gt;

&lt;p&gt;CodeRifts automates all of this as a GitHub App. It runs on every pull request, detects breaking changes, scores their risk, and enforces your governance policies, all with zero configuration.&lt;/p&gt;

</description>
      <category>api</category>
      <category>openapi</category>
      <category>devops</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Optic Is Dead — Alternatives for OpenAPI Breaking Change Detection</title>
      <dc:creator>CodeRifts</dc:creator>
      <pubDate>Sat, 28 Feb 2026 07:14:07 +0000</pubDate>
      <link>https://dev.to/peter_zsobrk_50d5c4ac7de/optic-is-dead-alternatives-for-openapi-breaking-change-detection-dmp</link>
      <guid>https://dev.to/peter_zsobrk_50d5c4ac7de/optic-is-dead-alternatives-for-openapi-breaking-change-detection-dmp</guid>
      <description>&lt;p&gt;If you've been using Optic to catch breaking changes in your OpenAPI specs, you've probably noticed: the repository was archived on January 12, 2026. The last issue, titled "No Longer Maintained," was opened four days before that. The final release (v10.3.0) shipped, and that was it.&lt;br&gt;
Optic was a good tool. It was YC-backed, had 1,500+ stars, and companies like Snyk used it in production. But it required a CLI setup, a config file, CI pipeline integration, and custom rulesets written in TypeScript. For many teams, that setup cost meant the tool never made it past the "we should try this" stage.&lt;br&gt;
So what now?&lt;br&gt;
The problem hasn't gone away&lt;br&gt;
Breaking API changes still ship to production every day. A field gets renamed, an endpoint gets removed, a required parameter becomes optional — and downstream services break silently. If you've ever debugged a 500 error that turned out to be someone else's schema change slipping through code review, you know the pain.&lt;br&gt;
The need for automated breaking change detection in pull requests is arguably stronger than ever, with more teams adopting API-first development and microservice architectures.&lt;br&gt;
What Optic did well&lt;br&gt;
Optic brought several important ideas to the API governance space: diffing OpenAPI specs to find breaking changes, integrating results into code review via a GitHub bot, and applying custom linting rules to API design. It also supported generating OpenAPI specs from traffic, which was a unique feature for teams without existing specs.&lt;br&gt;
What made it hard to adopt&lt;br&gt;
For teams that just wanted "tell me if my PR breaks the API," Optic required significant setup:&lt;/p&gt;

&lt;p&gt;Install the CLI globally (npm install -g @useoptic/optic)&lt;br&gt;
Create an optic.yml config file&lt;br&gt;
Set up a GitHub Action or CI step&lt;br&gt;
Write custom rulesets in TypeScript for anything beyond defaults&lt;br&gt;
Manage API tokens and cloud connections (in earlier versions)&lt;/p&gt;

&lt;p&gt;This was powerful for platform teams with dedicated API governance roles. But for most engineering teams — the ones with 5-20 services, a few OpenAPI specs, and no dedicated API platform engineer — it was too much friction.&lt;br&gt;
What I built instead&lt;br&gt;
I ran into this exact problem at work. We had 4 microservices with OpenAPI specs, and breaking changes kept slipping through PRs. I tried Optic, spent an afternoon configuring it, and thought: why does this need a CI pipeline and a config file?&lt;br&gt;
So I built CodeRifts — a GitHub App that does one thing: it posts a full API governance report as a PR comment every time someone modifies an OpenAPI spec.&lt;br&gt;
The setup is literally:&lt;/p&gt;

&lt;p&gt;Install the GitHub App (one click)&lt;br&gt;
Open a pull request&lt;/p&gt;

&lt;p&gt;That's it. No config file. No CI changes. No CLI. It auto-discovers your OpenAPI specs (YAML or JSON, versions 2.0, 3.0, and 3.1) and analyzes them on every PR.&lt;br&gt;
What the report includes&lt;br&gt;
Every PR that touches a spec gets a comment with:&lt;/p&gt;

&lt;p&gt;Risk Score (0-100) across 4 dimensions: revenue impact, blast radius, app compatibility, and security&lt;br&gt;
Breaking change detection for 10 types: removed endpoints, deleted fields, type changes, enum value removal, and more&lt;br&gt;
Policy violations — configurable rules like "never delete a /payments/* endpoint" or "maximum 3 breaking changes per PR"&lt;br&gt;
Security analysis — auth removal detection, OAuth scope changes, sensitive field exposure (OWASP-aligned)&lt;br&gt;
Semver suggestion — concrete MAJOR/MINOR/PATCH recommendation based on what actually changed&lt;br&gt;
Auto-generated changelog — grouped by Breaking, Added, Changed, Deprecated&lt;/p&gt;

&lt;p&gt;You can see a real example here: Demo PR with full report&lt;br&gt;
Comparison: Optic vs CodeRifts&lt;br&gt;
Optic (archived)CodeRiftsSetup time30-60 minutes30 secondsConfig requiredoptic.yml + CI pipelineNone (optional .coderifts.yml)DeliveryCLI + GitHub ActionGitHub App (also: Web UI, REST API, CLI)Breaking change detectionYesYes (10 types)Risk scoringNoYes (0-100, 4 dimensions)Policy engineCustom TypeScript rulesetsConfig-as-code (YAML)Security analysisNoYes (OWASP-aligned)MaintenanceArchived Jan 2026Actively developedPricingFree (open source)Free tier + Pro at $49/repo/month (free during beta)&lt;br&gt;
If you want something more like Optic&lt;br&gt;
If you liked Optic's approach and want a CLI tool you control, there are other options:&lt;/p&gt;

&lt;p&gt;oasdiff — open source OpenAPI diff tool, good for CI pipelines, but no GitHub integration or governance features beyond diffing&lt;br&gt;
Swagger diff — basic diffing, limited to Swagger 2.0&lt;br&gt;
Fork Optic itself — it's MIT licensed, though maintaining a fork solo is a significant commitment&lt;/p&gt;

&lt;p&gt;Try it&lt;br&gt;
CodeRifts is free during beta with all Pro features unlocked. No credit card required.&lt;/p&gt;

&lt;p&gt;Install the GitHub App (30 seconds)&lt;br&gt;
Try in your browser (no signup needed)&lt;br&gt;
See a live demo PR&lt;/p&gt;

&lt;p&gt;If you have questions or feature requests, I'd genuinely love to hear them — I'm a solo developer building this based on real pain points, and every piece of feedback shapes what gets built next.&lt;/p&gt;

&lt;p&gt;I'm the developer behind CodeRifts. If you've used Optic and are looking for an alternative, I'd be happy to answer questions in the comments.&lt;/p&gt;

</description>
      <category>api</category>
      <category>openapi</category>
      <category>devops</category>
      <category>github</category>
    </item>
  </channel>
</rss>
