<?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>Forem: Andrew Kew</title>
    <description>The latest articles on Forem by Andrew Kew (@thegatewayguy).</description>
    <link>https://forem.com/thegatewayguy</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%2F3895707%2F446a1c4a-0cef-467b-8849-b16d5ada0e04.png</url>
      <title>Forem: Andrew Kew</title>
      <link>https://forem.com/thegatewayguy</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/thegatewayguy"/>
    <language>en</language>
    <item>
      <title>Who Owns the Code Claude Wrote? The Legal Mess No One's Talking About</title>
      <dc:creator>Andrew Kew</dc:creator>
      <pubDate>Wed, 29 Apr 2026 09:53:40 +0000</pubDate>
      <link>https://forem.com/thegatewayguy/who-owns-the-code-claude-wrote-the-legal-mess-no-ones-talking-about-3map</link>
      <guid>https://forem.com/thegatewayguy/who-owns-the-code-claude-wrote-the-legal-mess-no-ones-talking-about-3map</guid>
      <description>&lt;p&gt;Anthropic accidentally published 512,000 lines of Claude Code's source in a routine update. Before sunrise, GitHub mirrors. Before breakfast, someone had rewritten the whole thing in Python. Then came 8,000 DMCA takedowns — for code that Anthropic's own lead engineer said was predominantly written by Claude itself.&lt;/p&gt;

&lt;p&gt;Can you issue a DMCA takedown for code copyright law may not protect? Nobody had a clean answer. That's the problem.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"If Claude Code was, by Anthropic's own lead engineer's admission, predominantly written by Claude itself, does Anthropic even own it?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The same question applies to your codebase.&lt;/p&gt;

&lt;h2&gt;
  
  
  Three risks in your codebase
&lt;/h2&gt;

&lt;p&gt;Three separate legal risks are colliding right now, and most engineers are only dimly aware of any of them:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Copyrightability&lt;/strong&gt; — the US Copyright Office and DC Circuit (upheld after the Supreme Court declined to hear Thaler in March 2026) are clear: AI-generated work without meaningful human authorship is not copyrightable. Code you accepted verbatim from Claude may sit in the public domain in everything but name.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Work-for-hire&lt;/strong&gt; — your employment contract almost certainly already assigned anything you build at work to your employer. AI-assisted or not, that doctrine applies. Worse: if your employer licenses Claude Code and you use it for a side project, a broad IP clause may reach that too.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GPL contamination&lt;/strong&gt; — AI tools are trained on mountains of copyleft-licensed code. If the model reproduced a substantial verbatim chunk of GPL code in its output and you shipped it commercially, you may have a copyleft violation you can't see. "I didn't know" is not a defense.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why it matters now
&lt;/h2&gt;

&lt;p&gt;The legal edges are actively moving. &lt;em&gt;Allen v. Perlmutter&lt;/em&gt; (600 detailed prompts + Photoshop edits — still unresolved) will be the closest thing yet to a ruling on how much human involvement is "enough." &lt;em&gt;Doe v. GitHub&lt;/em&gt; in the Ninth Circuit is asking whether Copilot reproduces licensed code without attribution — it's already changed industry behavior: Copilot added duplicate detection filters; M&amp;amp;A due diligence now routinely includes an AI codebase license scan.&lt;/p&gt;

&lt;p&gt;The place where unsettled law becomes concrete today isn't court — it's acquisition due diligence and fundraising, where investors are already asking these questions as a condition of closing.&lt;/p&gt;

&lt;h2&gt;
  
  
  What to do
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1. Run a license scan.&lt;/strong&gt; FOSSA, Snyk Open Source, or Black Duck. One afternoon, costs less than the first hour of a copyright dispute. If you're shipping a commercial product and haven't done this, you're operating on assumption.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Document human creative decisions as you go.&lt;/strong&gt; "Restructured Claude's module architecture, rejected initial state management approach, rewrote error handling from scratch" is legal evidence. "Add rate limiting module" is not. Export your prompt logs from agentic sessions where you made architectural calls.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Read your IP clause before you build anything on the side.&lt;/strong&gt; Search your employment contract for "intellectual property," "IP assignment," or "work product." The phrase to watch: &lt;em&gt;"any software created with the assistance of company-licensed tools."&lt;/em&gt; If your employer licenses Claude Code, that clause may reach your weekend project.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Check your Anthropic plan.&lt;/strong&gt; Consumer/Pro plans have narrower IP indemnification than API/Enterprise. If you're shipping commercially on the free tier, the gap is real.&lt;/p&gt;




&lt;p&gt;Source: &lt;a href="https://legallayer.substack.com/p/who-owns-the-claude-code-wrote" rel="noopener noreferrer"&gt;Legal Layer — Who Owns the Code Claude Wrote?&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;✏️ Drafted with KewBot (AI), edited and approved by Drew.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>llm</category>
      <category>programming</category>
      <category>discuss</category>
    </item>
    <item>
      <title>GitHub Copilot drops flat-rate billing. The token era has arrived.</title>
      <dc:creator>Andrew Kew</dc:creator>
      <pubDate>Tue, 28 Apr 2026 14:36:42 +0000</pubDate>
      <link>https://forem.com/thegatewayguy/github-copilot-drops-flat-rate-billing-the-token-era-has-arrived-3pb3</link>
      <guid>https://forem.com/thegatewayguy/github-copilot-drops-flat-rate-billing-the-token-era-has-arrived-3pb3</guid>
      <description>&lt;p&gt;Effective June 1, 2026, GitHub Copilot drops its flat-rate request model and moves to &lt;strong&gt;GitHub AI Credits&lt;/strong&gt; — token-based billing where every chat message, agentic run, and CLI call draws from a shared credit pool. New sign-ups for Pro, Pro+, and Student plans are already paused as of April 20.&lt;/p&gt;

&lt;p&gt;One AI credit = $0.01. The cost of using it depends on which model you're talking to and how many tokens flow through the session.&lt;/p&gt;

&lt;h2&gt;
  
  
  What actually changed
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;The unit of billing shifts from requests to tokens.&lt;/strong&gt; Previously, Copilot plans sold "premium requests" — 300/mo on Pro, 1,000/mo on Enterprise. Now it's credits consumed by token volume × model price.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Code completions stay free.&lt;/strong&gt; Inline completions and next edit suggestions are explicitly excluded from AI Credits and remain unlimited on all paid plans. This change is only about interactive features.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What does get billed:&lt;/strong&gt; Copilot Chat, Copilot CLI, the cloud agent, Copilot Spaces, Spark, and third-party coding agents.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Included credits per plan:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Copilot Business: 1,900 credits/user/month&lt;/li&gt;
&lt;li&gt;Copilot Enterprise: 3,900 credits/user/month&lt;/li&gt;
&lt;li&gt;Promotional for existing customers (June–September 2026): 3,000 / 7,000 respectively&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Credits are pooled&lt;/strong&gt;, not individual buckets. 100 Business users = 190,000 shared credits. Power users draw more; light users offset it. Overages can either be allowed (charged at per-credit rates) or hard-blocked until the next billing cycle.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why this matters
&lt;/h2&gt;

&lt;p&gt;This is what the flat-rate era ending looks like.&lt;/p&gt;

&lt;p&gt;GitHub is exposing the underlying model cost structure directly to teams — the same economics that any raw API user has always dealt with. The implication: the cost of Copilot is now a function of &lt;em&gt;how&lt;/em&gt; your team uses it. A quick chat query is a fraction of a credit. A long agentic session on a frontier model burns significantly more.&lt;/p&gt;

&lt;p&gt;Teams running agents, Copilot Spaces, or heavy multi-turn workflows will hit the ceiling differently than teams using Copilot mostly for completions. That difference was always there at the model layer — it's now visible on your bill.&lt;/p&gt;

&lt;p&gt;Budget controls exist at four levels: enterprise, org, cost-center, and individual user. Setting a user budget of $0 cuts off access entirely. Hard stops are available. This is a fundamental change in how you plan and govern AI tooling spend — and it's coming fast.&lt;/p&gt;

&lt;h2&gt;
  
  
  What to do
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;On Business or Enterprise?&lt;/strong&gt; Calculate your per-user credit allocation (1,900 or 3,900/mo) against your actual usage patterns. The promotional credits (3,000/7,000) give breathing room through September — use that window to baseline real consumption before the promos expire.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Running agents or Copilot Spaces heavily?&lt;/strong&gt; Those are the high-burn features. They behave nothing like chat; model the cost explicitly.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;On Free/Pro/Pro+?&lt;/strong&gt; Your plan is transitioning too. GitHub is contacting affected customers — watch your inbox for migration comms.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Engineering leaders:&lt;/strong&gt; Get budget controls configured before June 1. Decide now: hard stop on overages, or allow additional spend with a cap?&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;Sources: &lt;a href="https://thenewstack.io/github-copilot-usage-billing/" rel="noopener noreferrer"&gt;The New Stack&lt;/a&gt; · &lt;a href="https://docs.github.com/en/copilot/concepts/billing/usage-based-billing-for-organizations-and-enterprises" rel="noopener noreferrer"&gt;GitHub Docs&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;✏️ Drafted with KewBot (AI), edited and approved by Drew.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>github</category>
      <category>devops</category>
      <category>developer</category>
    </item>
    <item>
      <title>The five loops between AI coding and AI engineering</title>
      <dc:creator>Andrew Kew</dc:creator>
      <pubDate>Mon, 27 Apr 2026 08:51:40 +0000</pubDate>
      <link>https://forem.com/thegatewayguy/the-five-loops-between-ai-coding-and-ai-engineering-doa</link>
      <guid>https://forem.com/thegatewayguy/the-five-loops-between-ai-coding-and-ai-engineering-doa</guid>
      <description>&lt;p&gt;One developer. No team. Just two AI coding agents running in parallel terminal sessions.&lt;/p&gt;

&lt;p&gt;Four months later: 81% PR acceptance, 91% test coverage, bugs going from report to merged fix in roughly thirty minutes.&lt;/p&gt;

&lt;p&gt;It wasn't a better model. It was what the codebase learned to measure.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"The intelligence in an AI-assisted codebase lives less in the model and more in the loops the codebase wraps around it."&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  What actually changed
&lt;/h2&gt;

&lt;p&gt;KubeStellar Console — a multi-cluster Kubernetes management dashboard in the CNCF Sandbox — was the proving ground. Five rungs of the &lt;strong&gt;AI Codebase Maturity Model&lt;/strong&gt; emerged from that experience, tracing the path from agentic honeymoon to near-autonomous development loop:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Instructed&lt;/strong&gt; — Externalise what you keep correcting: a &lt;code&gt;CLAUDE.md&lt;/code&gt;, PR conventions, a rejection-reasons guide — together they covered ~90% of the reasons AI PRs were being rejected.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Measured&lt;/strong&gt; — Tests aren't a correctness layer; in an autonomous workflow, they're the &lt;em&gt;trust layer&lt;/em&gt; — 32 nightly suites, 91% coverage, acceptance rates logged by category. (A flaky test doesn't annoy you here — it quietly corrupts every merge decision downstream.)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Adaptive&lt;/strong&gt; — Once you're measuring, let the automation adjust itself: categories with low acceptance rates get deprioritised; CI cycles shift to what's actually landing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Self-sustaining&lt;/strong&gt; — The codebase becomes the operating manual; issues get triaged, fixed, tested, and queued before the maintainer looks at them.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Question, don't command&lt;/strong&gt; — "Why didn't you catch this?" beats "fix this bug" — the first gets a patch, the second gets a root-cause, a new test, and a whole class of future failures blocked.&lt;/p&gt;

&lt;h2&gt;
  
  
  The lesson
&lt;/h2&gt;

&lt;p&gt;The model is not the differentiator.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"The model is a commodity component, and swapping one for another is a weekend of work. Rebuilding the surrounding feedback system is a quarter of the work."&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;What matters: instruction files, test suites, acceptance metrics, workflow rules. That's the intelligence infrastructure. Teams optimising for model selection are optimising the wrong variable.&lt;/p&gt;

&lt;p&gt;For open source maintainers specifically, this reframes the burnout problem. If the codebase encodes enough judgment that agents can handle triage and generate PRs, maintainers shift from daily operators to system architects.&lt;/p&gt;

&lt;h2&gt;
  
  
  What to do
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Still in "write prompts, review output" mode?&lt;/strong&gt; That's the first rung. Normal starting point. Ask: what's the most common reason you reject AI output? Write it down. That's rung two.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Have tests but still getting drift?&lt;/strong&gt; Determinism first. Flaky tests are catastrophic in autonomous workflows — fix them before you build anything on top.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Logging acceptance rates by category?&lt;/strong&gt; You're probably ready for adaptive weighting. Don't automate before you can measure.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Leading engineering?&lt;/strong&gt; Stop optimising for which model you're using. Ask which feedback loop is missing.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Source: &lt;a href="https://thenewstack.io/ai-codebase-maturity-model/" rel="noopener noreferrer"&gt;Beyond prompting: How KubeStellar reached 81% PR acceptance with AI agents&lt;/a&gt; — The New Stack&lt;/p&gt;

&lt;p&gt;&lt;em&gt;✏️ Drafted with KewBot (AI), edited and approved by Drew.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>kubernetes</category>
      <category>devops</category>
      <category>cloudnative</category>
    </item>
    <item>
      <title>AI agents are opaque. Jaeger v2 + OTel GenAI conventions are the fix.</title>
      <dc:creator>Andrew Kew</dc:creator>
      <pubDate>Sun, 26 Apr 2026 21:58:36 +0000</pubDate>
      <link>https://forem.com/thegatewayguy/ai-agents-are-opaque-jaeger-v2-otel-genai-conventions-are-the-fix-48b8</link>
      <guid>https://forem.com/thegatewayguy/ai-agents-are-opaque-jaeger-v2-otel-genai-conventions-are-the-fix-48b8</guid>
      <description>&lt;p&gt;AI agents are distributed systems. They fan out across LLM calls, tool invocations, memory lookups, and multi-step reasoning loops — often asynchronously. But until recently, the observability tooling hadn't caught up. You'd get logs, maybe a dashboard, but no trace of what actually happened across a full agent run.&lt;/p&gt;

&lt;p&gt;That's the gap Jaeger v2 is positioned to close — and it's not a stretch.&lt;/p&gt;

&lt;h2&gt;
  
  
  What actually changed in Jaeger v2
&lt;/h2&gt;

&lt;p&gt;Jaeger v2, released in late 2024, didn't just add features. It replaced its entire internal architecture with the OpenTelemetry Collector framework as the core foundation.&lt;/p&gt;

&lt;p&gt;What that means in practice:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Native OTLP ingestion.&lt;/strong&gt; No more translation layer from OTLP → Jaeger internal format. Telemetry flows in as-is, with no data loss from conversion.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Single binary, OTel-native config.&lt;/strong&gt; The old &lt;code&gt;jaeger-agent&lt;/code&gt;, &lt;code&gt;jaeger-collector&lt;/code&gt;, &lt;code&gt;jaeger-ingester&lt;/code&gt;, &lt;code&gt;jaeger-query&lt;/code&gt; split is gone. One binary, configured via the same YAML model as OTel Collector.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Access to the full OTel Collector ecosystem.&lt;/strong&gt; Tail-based sampling, span-to-metric connectors, PII filtering processors, Kafka pipelines — all available without Jaeger maintaining separate implementations.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tail-based sampling&lt;/strong&gt;, previously hard to retrofit, is now first-class via the upstream OTel contrib processor.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The architecture shift means Jaeger v2 inherits everything OTel ships — including the new GenAI semantic conventions.&lt;/p&gt;

&lt;h2&gt;
  
  
  The GenAI conventions: tracing AI agents properly
&lt;/h2&gt;

&lt;p&gt;OpenTelemetry is now actively developing semantic conventions specifically for AI workloads. These define how to represent:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Model spans&lt;/strong&gt; — individual LLM inference calls (token counts, model name, latency)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Agent spans&lt;/strong&gt; — the higher-level reasoning loops and orchestration steps&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Events&lt;/strong&gt; — prompt inputs, completions, tool call results&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Metrics&lt;/strong&gt; — token usage, latency distributions, error rates&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And coverage is already provider-specific: OpenAI, Anthropic, AWS Bedrock, and Azure AI Inference all have dedicated conventions. There's even a draft for &lt;strong&gt;Model Context Protocol (MCP)&lt;/strong&gt; — so tool calls via MCP-compatible servers can be traced as first-class spans.&lt;/p&gt;

&lt;p&gt;These conventions are still in Development status, but the instrumentation is shipping now. Libraries like LangChain, LlamaIndex, and OpenAI's own SDKs are beginning to emit OTel-compatible telemetry. Jaeger v2 — being natively OTLP — can receive all of it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why this matters for teams building agents
&lt;/h2&gt;

&lt;p&gt;The classic distributed tracing use case is: trace a request across microservices, find the slow hop, fix it. The AI agent version is: trace a user prompt → agent planning span → LLM call → tool invocation → second LLM call → final response. Across potentially different services, with retries, branching, and non-determinism.&lt;/p&gt;

&lt;p&gt;Without proper trace context propagation, this is a black box. With OTel GenAI conventions + Jaeger v2, you get the full picture — latency per LLM call, token consumption, which tool calls fired and how long they took, where the reasoning went sideways.&lt;/p&gt;

&lt;p&gt;That's debugging capability that didn't exist in a standardised form until now.&lt;/p&gt;

&lt;h2&gt;
  
  
  What to do
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Already on Jaeger v1?&lt;/strong&gt; Check the &lt;a href="https://www.jaegertracing.io/docs/2.4/external-guides/migration/" rel="noopener noreferrer"&gt;v1→v2 migration guide&lt;/a&gt;. The architecture shift is real but the storage backends are backward-compatible.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Building AI agents?&lt;/strong&gt; Start instrumenting with OTel GenAI semconv now, even in Development status. You'll be ahead of the curve when it stabilises, and Jaeger v2 will ingest it today.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Using LangChain/LlamaIndex/OpenAI SDKs?&lt;/strong&gt; Check their OTel instrumentation status — several already support it or have experimental packages.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Not on Jaeger?&lt;/strong&gt; The GenAI conventions are backend-agnostic. Any OTLP-compatible backend (Grafana Tempo, Honeycomb, etc.) can receive this telemetry.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Sources: &lt;a href="https://thenewstack.io/jaeger-v2-ai-observability/" rel="noopener noreferrer"&gt;The New Stack&lt;/a&gt; · &lt;a href="https://medium.com/jaegertracing/jaeger-v2-released-09a6033d1b10" rel="noopener noreferrer"&gt;Jaeger v2 release post&lt;/a&gt; · &lt;a href="https://opentelemetry.io/docs/specs/semconv/gen-ai/" rel="noopener noreferrer"&gt;OTel GenAI semantic conventions&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;✏️ Drafted with KewBot (AI), edited and approved by Drew.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>observability</category>
      <category>opentelemetry</category>
      <category>devops</category>
    </item>
    <item>
      <title>GPT-5.5 is in the API. Don't just bump the version string.</title>
      <dc:creator>Andrew Kew</dc:creator>
      <pubDate>Sat, 25 Apr 2026 10:41:37 +0000</pubDate>
      <link>https://forem.com/thegatewayguy/gpt-55-is-in-the-api-dont-just-bump-the-version-string-1boj</link>
      <guid>https://forem.com/thegatewayguy/gpt-55-is-in-the-api-dont-just-bump-the-version-string-1boj</guid>
      <description>&lt;p&gt;GPT-5.5 dropped in the OpenAI API this week — more token-efficient, better at agentic workflows, already live on Vercel's AI Gateway.&lt;/p&gt;

&lt;p&gt;But the first line of OpenAI's own &lt;a href="https://developers.openai.com/api/docs/guides/latest-model" rel="noopener noreferrer"&gt;migration guide&lt;/a&gt; is a warning:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"Treat it as a new model family to tune for, not a drop-in replacement."&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That's the part worth paying attention to.&lt;/p&gt;

&lt;h2&gt;
  
  
  What actually changed
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Two variants:&lt;/strong&gt; &lt;code&gt;gpt-5.5&lt;/code&gt; for agentic coding and multi-step tool workflows; &lt;code&gt;gpt-5.5-pro&lt;/code&gt; for demanding multi-pass work where quality beats latency.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;More efficient reasoning.&lt;/strong&gt; Same quality, fewer tokens. Compounds fast in long agent runs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Reasoning effort defaults to medium.&lt;/strong&gt; Previously high. OpenAI's advice: start at medium, only push to &lt;code&gt;high&lt;/code&gt; if evals show a measurable gain. Higher effort can actually make outputs worse on tasks with weak stopping criteria.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Outcome-first prompts work better.&lt;/strong&gt; Describe what you want, not how to get there. Skip step-by-step unless the sequence is non-negotiable.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Better tool use.&lt;/strong&gt; More precise argument selection on large tool surfaces. Fewer hallucinated calls.&lt;/p&gt;

&lt;h2&gt;
  
  
  The key migration advice
&lt;/h2&gt;

&lt;p&gt;Start clean. OpenAI explicitly says to begin from the smallest prompt that preserves your product contract — don't carry over an old prompt stack and expect it to work.&lt;/p&gt;

&lt;p&gt;Every instruction you added to paper over a quirk in the previous model is now debt.&lt;/p&gt;

&lt;h2&gt;
  
  
  What to do
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Not using it yet?&lt;/strong&gt; No urgency. &lt;code&gt;gpt-5.4&lt;/code&gt; isn't going anywhere.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Evaluating?&lt;/strong&gt; Spin up a fresh system prompt, benchmark against your actual use cases, run ablations.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;On Vercel AI Gateway?&lt;/strong&gt; Already available: &lt;code&gt;openai/gpt-5.5&lt;/code&gt; or &lt;code&gt;openai/gpt-5.5-pro&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Running agents?&lt;/strong&gt; This is where the upgrade is most worth it — efficiency gains and tool use improvements compound on longer runs.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;→ Full details in OpenAI's &lt;a href="https://developers.openai.com/api/docs/guides/latest-model" rel="noopener noreferrer"&gt;Using GPT-5.5 guide&lt;/a&gt; and &lt;a href="https://developers.openai.com/api/docs/guides/prompt-guidance?model=gpt-5.5" rel="noopener noreferrer"&gt;Prompting Guide&lt;/a&gt;.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;✏️ Drafted with KewBot (AI), edited and approved by Drew.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>openai</category>
      <category>api</category>
      <category>llm</category>
    </item>
    <item>
      <title>Harness bugs, not model bugs</title>
      <dc:creator>Andrew Kew</dc:creator>
      <pubDate>Fri, 24 Apr 2026 14:51:12 +0000</pubDate>
      <link>https://forem.com/thegatewayguy/harness-bugs-not-model-bugs-1f4e</link>
      <guid>https://forem.com/thegatewayguy/harness-bugs-not-model-bugs-1f4e</guid>
      <description>&lt;p&gt;For six weeks, developers have been complaining that Claude got worse. You've seen the posts — "Claude Code is flaky", the AI-shrinkflation discourse.&lt;/p&gt;

&lt;p&gt;Yesterday, Anthropic shipped a &lt;a href="https://www.anthropic.com/engineering/april-23-postmortem" rel="noopener noreferrer"&gt;postmortem&lt;/a&gt;. Three unrelated bugs, all in the Claude Code &lt;em&gt;harness&lt;/em&gt;. The model weights and the API were never touched.&lt;/p&gt;

&lt;p&gt;That distinction is the whole point.&lt;/p&gt;

&lt;h2&gt;
  
  
  What actually broke
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Default reasoning effort got dialled down.&lt;/strong&gt; A UX fix dropped Claude Code's default from "high" to "medium" in early March. Users noticed it felt dumber. Reverted April 7.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A caching optimisation dropped prior reasoning every turn.&lt;/strong&gt; Supposed to clear stale thinking once per idle session; a bug made it fire on every turn. Claude kept executing without memory of why. Surfaced as forgetfulness and repetition. Fixed April 10.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A verbosity system prompt hurt coding quality.&lt;/strong&gt; "Keep responses under 100 words." Internal evals missed a 3% regression on code. Caught by broader ablations. Reverted April 20.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;None of this was a model change. The weights didn't move. The API was never in scope.&lt;/p&gt;

&lt;h2&gt;
  
  
  The lesson
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;The model is not the product.&lt;/strong&gt; What your users experience is &lt;code&gt;model + harness + system prompt + tool wiring + context management + caching&lt;/code&gt;. Each layer has its own bugs. When someone says "Claude got worse," the weights are usually the last thing that changed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;API-layer products were unaffected.&lt;/strong&gt; If you're building directly against the Messages API, none of these bugs touched you. This is why "am I on Claude Code, or am I on the raw API?" matters.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;"Eval passed" ≠ "no regression."&lt;/strong&gt; The verbosity prompt passed Anthropic's initial evals. Only a broader ablation — removing lines one at a time — caught the 3% drop. Fixed eval suites miss behavioural drift; ablations catch it.&lt;/p&gt;

&lt;h2&gt;
  
  
  What to actually do
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;On Claude Code?&lt;/strong&gt; Update to v2.1.116+. You're already through it. Usage limits got reset as an apology.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;On the API directly?&lt;/strong&gt; Nothing to do. Stay on whatever model you were on.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Shipping your own harness on top of a frontier model?&lt;/strong&gt; Read the postmortem twice, then audit your prompt + caching + context-management pipeline for the same silent-failure modes. The bugs Anthropic described are exactly the ones every harness reinvents.&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;The meta-lesson is boring and important: most of the quality variance lives between "the model" and "the thing your user sees." Ship good harnesses.&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;✏️ Drafted with KewBot (AI), edited and approved by Drew.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>claude</category>
      <category>anthropic</category>
      <category>postmortem</category>
    </item>
  </channel>
</rss>
