<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Github-Actions on Marian Zeis Blog</title>
    <link>https://blog.zeis.de/tags/github-actions/</link>
    <description>Recent content in Github-Actions on Marian Zeis Blog</description>
    <generator>Hugo</generator>
    <language>en-us</language>
    <lastBuildDate>Tue, 12 May 2026 09:00:00 +0200</lastBuildDate>
    <atom:link href="https://blog.zeis.de/tags/github-actions/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>ABAP Development Automation with ARC-1 and GitHub Workflows</title>
      <link>https://blog.zeis.de/posts/2026-05-12-arc-1-abap-cicd-review/</link>
      <pubDate>Tue, 12 May 2026 09:00:00 +0200</pubDate>
      <guid>https://blog.zeis.de/posts/2026-05-12-arc-1-abap-cicd-review/</guid>
      <description>&lt;p&gt;Series note: This post is part of my &lt;a href=&#34;https://blog.zeis.de/tags/ai-abap-development-series/&#34;&gt;AI ABAP development series&lt;/a&gt;. In the previous posts I introduced &lt;a href=&#34;https://github.com/marianfoo/arc-1&#34;&gt;ARC-1&lt;/a&gt;, then used it from BTP, Copilot Studio, Joule Studio, and a SEGW to RAP migration.&lt;/p&gt;&#xA;&lt;p&gt;This post is about GitHub workflows as an ARC-1 development automation surface.&lt;/p&gt;&#xA;&lt;p&gt;ABAP teams already have strong SAP-side tooling: ATC, Code Inspector, ST22, ADT, and the activated source in the SAP system. GitHub has a different strength: pull requests, review comments, checks, labels, issues, and automation.&lt;/p&gt;&#xA;&lt;p&gt;The problem is that those worlds usually do not meet cleanly. &lt;a href=&#34;https://abapgit.org/&#34;&gt;abapGit&lt;/a&gt; can push ABAP source to GitHub, &lt;a href=&#34;https://abaplint.org/&#34;&gt;abaplint&lt;/a&gt; can run static checks, and Copilot or Claude can review a diff. But without access to the SAP system, the automation only sees text. It cannot run ABAP Unit, call ATC, compare against the activated object, inspect ST22, or verify what the SAP system actually knows.&lt;/p&gt;&#xA;&lt;p&gt;The underlying idea comes from the &lt;a href=&#34;https://docs.heliconialabs.com/patterns-for-using-llms-in-abap-development.pdf&#34;&gt;Patterns for using LLMs in ABAP development&lt;/a&gt; document by Lars Hvam from Heliconia Labs. The relevant pattern is section 2.7, Git / Off-Stack with read-only MCP. ABAP source lives in Git. Pull requests, CI/CD, static analysis, and human review stay in the Git workflow. The MCP server gives the LLM read-only context from the SAP system, but does not let it write directly into the system.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img alt=&#34;Heliconia Labs Git / Off-Stack with read-only MCP pattern showing Git, CI/CD, SAP, and a read-only ADT MCP server.&#34; loading=&#34;lazy&#34; src=&#34;https://blog.zeis.de/posts/2026-05-12-arc-1-abap-cicd-review/patterns-git-offstack-mcp.png&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;So I created a small sample repository for this pattern: &lt;a href=&#34;https://github.com/marianfoo/arc-1-abap-cicd-review&#34;&gt;github.com/marianfoo/arc-1-abap-cicd-review&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;This is my ARC-1 implementation of the idea. GitHub is the workflow surface. abapGit connects the repository and the SAP system. ARC-1 is the SAP automation gateway that lets GitHub workflows execute SAP-side checks and gives AI reviewers read-only SAP context through MCP.&lt;/p&gt;&#xA;&lt;h2 id=&#34;what-the-sample-shows&#34;&gt;What The Sample Shows&lt;/h2&gt;&#xA;&lt;p&gt;The sample repository contains a small ABAP package &lt;code&gt;ZARC1_DEMO&lt;/code&gt; in abapGit format. The package is deliberately small. The interesting part is what can be automated around it when GitHub can reach SAP through ARC-1.&lt;/p&gt;&#xA;&lt;p&gt;It covers three development automation scenarios:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;PR checks for ABAP code: abaplint, ABAP Unit, and ATC.&lt;/li&gt;&#xA;&lt;li&gt;PR review with SAP context: Copilot and Claude can review with live SAP reads instead of only the diff.&lt;/li&gt;&#xA;&lt;li&gt;Operational follow-up: ARC-1 can check ST22 dumps on a schedule, create GitHub issues for new dumps, and trigger a deeper investigation from a label.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;The repo has six small workflow files: &lt;a href=&#34;https://github.com/marianfoo/arc-1-abap-cicd-review/blob/main/.github/workflows/pr.yml&#34;&gt;&lt;code&gt;pr.yml&lt;/code&gt;&lt;/a&gt;, &lt;a href=&#34;https://github.com/marianfoo/arc-1-abap-cicd-review/blob/main/.github/workflows/sap-tests.yml&#34;&gt;&lt;code&gt;sap-tests.yml&lt;/code&gt;&lt;/a&gt;, &lt;a href=&#34;https://github.com/marianfoo/arc-1-abap-cicd-review/blob/main/.github/workflows/copilot-review-trigger.yml&#34;&gt;&lt;code&gt;copilot-review-trigger.yml&lt;/code&gt;&lt;/a&gt;, &lt;a href=&#34;https://github.com/marianfoo/arc-1-abap-cicd-review/blob/main/.github/workflows/claude-review-trigger.yml&#34;&gt;&lt;code&gt;claude-review-trigger.yml&lt;/code&gt;&lt;/a&gt;, &lt;a href=&#34;https://github.com/marianfoo/arc-1-abap-cicd-review/blob/main/.github/workflows/sap-dump-triage.yml&#34;&gt;&lt;code&gt;sap-dump-triage.yml&lt;/code&gt;&lt;/a&gt;, and &lt;a href=&#34;https://github.com/marianfoo/arc-1-abap-cicd-review/blob/main/.github/workflows/sap-dump-deep-dive.yml&#34;&gt;&lt;code&gt;sap-dump-deep-dive.yml&lt;/code&gt;&lt;/a&gt;. ARC-1 is the common backend. GitHub Actions is only the automation surface.&lt;/p&gt;&#xA;&lt;h2 id=&#34;architecture-and-setup&#34;&gt;Architecture And Setup&lt;/h2&gt;&#xA;&lt;p&gt;The architecture follows the Git / Off-Stack with read-only MCP pattern:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Developer / IDE / LLM&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  -&amp;gt; local ABAP files&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  -&amp;gt; GitHub repository&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  -&amp;gt; pull requests, code reviews, CI/CD&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  -&amp;gt; abapGit&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  -&amp;gt; SAP system&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;GitHub Actions / review automation&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  -&amp;gt; ARC-1 MCP endpoint on SAP BTP&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  -&amp;gt; read-only ADT context from the SAP system&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The Git repository is the collaboration surface. It contains source files, pull requests, review comments, labels, and CI/CD checks. That is where the AI can propose changes and where a human keeps the gate.&lt;/p&gt;&#xA;&lt;p&gt;The SAP system remains the source of truth for activated ABAP source, syntax checks, dumps, package content, and system-specific context. GitHub has the PR diff, but GitHub is not the runtime.&lt;/p&gt;&#xA;&lt;p&gt;ARC-1 sits between GitHub and SAP. In my setup it runs on SAP BTP Cloud Foundry. GitHub Actions calls the ARC-1 &lt;code&gt;/mcp&lt;/code&gt; endpoint over HTTPS with an API key. ARC-1 validates the key profile and then connects to the SAP system through the BTP destination. The technical SAP user is configured in that destination, not in GitHub.&lt;/p&gt;&#xA;&lt;p&gt;GitHub runners and AI tools do not get SAP credentials. They only get the ARC-1 URL and a scoped API key. The SAP system itself is not exposed to GitHub runners.&lt;/p&gt;&#xA;&lt;p&gt;The API key used in the demo has a &lt;code&gt;viewer-sql&lt;/code&gt; profile. That means read access, SQL/table preview where needed, diagnostics, navigation, and linting. It does not expose write tools like &lt;code&gt;SAPWrite&lt;/code&gt;, &lt;code&gt;SAPActivate&lt;/code&gt;, &lt;code&gt;SAPManage&lt;/code&gt;, &lt;code&gt;SAPTransport&lt;/code&gt;, or &lt;code&gt;SAPGit&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;That last point matters. I do not want the first version of this pattern to be &amp;ldquo;AI writes ABAP from a PR comment&amp;rdquo;. The safer and more useful first version is:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;AI can read the real SAP system.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;AI can explain what it found.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;AI can propose changes in a PR review.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Humans still decide what gets applied.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The setup has five parts.&lt;/p&gt;&#xA;&lt;p&gt;First, get the ABAP source into GitHub with abapGit. The exact setup depends on the system and repository authentication. The important point is that ABAP objects are available as normal files in GitHub, and approved changes can later be pulled back into SAP through the normal abapGit process.&lt;/p&gt;&#xA;&lt;p&gt;Second, deploy ARC-1. For this sample I use the BTP Cloud Foundry deployment because it gives GitHub Actions a public HTTPS endpoint while the SAP backend remains behind BTP connectivity. ARC-1 needs a destination to the ABAP system. The technical user is configured there and should only have the permissions needed for the checks you want to run. ARC-1 then adds the API key profile on top.&lt;/p&gt;&#xA;&lt;p&gt;Third, configure GitHub Actions secrets and variables:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ARC1_URL&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ARC1_API_KEY&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ANTHROPIC_API_KEY&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;COPILOT_TRIGGER_PAT&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;ARC1_URL&lt;/code&gt; points to the ARC-1 endpoint. &lt;code&gt;ARC1_API_KEY&lt;/code&gt; is used by the SAP test gate and the Claude workflows. &lt;code&gt;ANTHROPIC_API_KEY&lt;/code&gt; is needed for Claude Code Action. &lt;code&gt;COPILOT_TRIGGER_PAT&lt;/code&gt; is needed for the Copilot trigger workflow because comments posted by the default &lt;code&gt;GITHUB_TOKEN&lt;/code&gt; do not trigger &lt;code&gt;@copilot&lt;/code&gt; mentions.&lt;/p&gt;&#xA;&lt;p&gt;Fourth, configure Copilot Coding Agent. In the repository settings, the Copilot Cloud Agent gets an MCP configuration for ARC-1. The important detail is the tool allowlist: Copilot should see the read-side tools it needs for review, not the write-side tools.&lt;/p&gt;&#xA;&lt;p&gt;Fifth, decide which workflows you actually want. For a first rollout I would start with abaplint, the SAP test gate, and one AI review path. The scheduled dump check is useful because it helps you see new runtime problems before someone reports them manually, but it is a separate operational pattern. You do not need to enable everything on day one.&lt;/p&gt;&#xA;&lt;h2 id=&#34;pr-automation-layers&#34;&gt;PR Automation Layers&lt;/h2&gt;&#xA;&lt;p&gt;&lt;strong&gt;Layer 1: abaplint&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;The static layer is intentionally boring.&lt;/p&gt;&#xA;&lt;p&gt;Every pull request runs &lt;a href=&#34;https://abaplint.org/&#34;&gt;abaplint&lt;/a&gt; through &lt;a href=&#34;https://github.com/reviewdog/reviewdog&#34;&gt;reviewdog&lt;/a&gt;. Findings appear as check annotations, inline comments where GitHub allows it, and a sticky summary comment. The workflow gates only on findings introduced by the PR diff. Existing findings stay visible, but they do not block a PR that did not create them.&lt;/p&gt;&#xA;&lt;p&gt;If abaplint can catch it, abaplint should catch it. It is fast, deterministic, and basically free apart from GitHub Actions minutes.&lt;/p&gt;&#xA;&lt;p&gt;In the sample PR, abaplint found existing issues in the class and test class. That is useful, but it did not catch the main semantic issue in the PR: a direct &lt;code&gt;SELECT&lt;/code&gt; from &lt;code&gt;MARA&lt;/code&gt; added inside a task service method. The code is syntactically valid. The problem is architectural and Clean Core related.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Layer 2: ABAP Unit and ATC&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;The next layer is still not AI. Here ARC-1 is simply the gateway connector from GitHub Actions into SAP.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/marianfoo/arc-1-abap-cicd-review/blob/main/.github/workflows/sap-tests.yml&#34;&gt;&lt;code&gt;sap-tests.yml&lt;/code&gt;&lt;/a&gt; runs on every PR that touches &lt;code&gt;src/&lt;/code&gt;. It parses the abapGit filenames, maps them back to ABAP object types, and then calls ARC-1 directly from Bash. There is no model involved in this part.&lt;/p&gt;&#xA;&lt;p&gt;For changed classes it runs ABAP Unit through &lt;a href=&#34;https://marianfoo.github.io/arc-1/tools/#sapdiagnose&#34;&gt;&lt;code&gt;SAPDiagnose&lt;/code&gt;&lt;/a&gt; with &lt;code&gt;action=&amp;quot;unittest&amp;quot;&lt;/code&gt;. For changed classes, interfaces, programs, and function groups it runs ATC through &lt;a href=&#34;https://marianfoo.github.io/arc-1/tools/#sapdiagnose&#34;&gt;&lt;code&gt;SAPDiagnose&lt;/code&gt;&lt;/a&gt; with &lt;code&gt;action=&amp;quot;atc&amp;quot;&lt;/code&gt;. The result is posted as a sticky PR comment, and line-specific ATC findings are posted inline on the Files Changed tab when GitHub can attach them to the diff.&lt;/p&gt;&#xA;&lt;p&gt;The gate is simple: failing or erroring unit tests fail the job, and P1/P2 ATC findings fail the job. P3 findings are visible but do not block.&lt;/p&gt;&#xA;&lt;p&gt;The clean demo is &lt;a href=&#34;https://github.com/marianfoo/arc-1-abap-cicd-review/pull/20&#34;&gt;PR #20&lt;/a&gt;. It adds one more unit test to &lt;a href=&#34;https://github.com/marianfoo/arc-1-abap-cicd-review/blob/main/src/zcl_arc1_test_helpers.clas.abap&#34;&gt;&lt;code&gt;ZCL_ARC1_TEST_HELPERS&lt;/code&gt;&lt;/a&gt;. The workflow &lt;a href=&#34;https://github.com/marianfoo/arc-1-abap-cicd-review/pull/20#issuecomment-4432679538&#34;&gt;reports 7 of 7 ABAP Unit tests passing&lt;/a&gt; and one non-blocking P3 ATC warning.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img alt=&#34;GitHub PR comment showing the SAP test gate with 7 of 7 ABAP Unit tests passing and one non-blocking ATC P3 finding.&#34; loading=&#34;lazy&#34; src=&#34;https://blog.zeis.de/posts/2026-05-12-arc-1-abap-cicd-review/untitest-atc-report.png&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;There is one important assumption here. The test workflow runs against activated objects in SAP. That matches the normal abapGit loop I use: edit, activate, push. If your team pushes before activation, you need a PR sandbox system or a pre-step that pulls and activates before this workflow runs.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Layer 3: AI review without MCP&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;GitHub&amp;rsquo;s built-in Copilot Code Review can be assigned from the PR sidebar. That is already useful. It reads the diff and can catch common problems from the text alone.&lt;/p&gt;&#xA;&lt;p&gt;In the sample &lt;a href=&#34;https://github.com/marianfoo/arc-1-abap-cicd-review/pull/14&#34;&gt;PR #14&lt;/a&gt;, Copilot Code Review did catch the &lt;a href=&#34;https://github.com/marianfoo/arc-1-abap-cicd-review/pull/14#discussion_r3226642123&#34;&gt;direct &lt;code&gt;SELECT&lt;/code&gt; from &lt;code&gt;MARA&lt;/code&gt;&lt;/a&gt; as a Clean Core hotspot. That is a good result.&lt;/p&gt;&#xA;&lt;p&gt;But this review has an important limitation: it is still a diff-only review. It cannot know whether the object is already activated in SAP. It cannot ask the system for callers. It cannot inspect ST22. It cannot prove that a claim is backed by the current SAP system.&lt;/p&gt;&#xA;&lt;p&gt;That does not make it useless. It just means it is one layer.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Layer 4: AI review with ARC-1&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;The MCP-backed review is the more interesting part.&lt;/p&gt;&#xA;&lt;p&gt;In the repo, applying the &lt;code&gt;copilot:review&lt;/code&gt; label posts a canonical &lt;code&gt;@copilot review ...&lt;/code&gt; prompt to the PR. Copilot Coding Agent then uses the ARC-1 MCP server configured in the repository settings.&lt;/p&gt;&#xA;&lt;p&gt;Applying the &lt;code&gt;claude:review&lt;/code&gt; label starts &lt;a href=&#34;https://github.com/anthropics/claude-code-action&#34;&gt;&lt;code&gt;anthropics/claude-code-action&lt;/code&gt;&lt;/a&gt; in GitHub Actions. The workflow writes an MCP config file, allows only selected ARC-1 tools, loads the prompt from &lt;a href=&#34;https://github.com/marianfoo/arc-1-abap-cicd-review/blob/main/.github/claude-review-prompt.md&#34;&gt;&lt;code&gt;claude-review-prompt.md&lt;/code&gt;&lt;/a&gt;, and asks Claude to post one pull request review.&lt;/p&gt;&#xA;&lt;p&gt;The prompt is deliberately concrete:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Use 2 to 5 ARC-1 tool calls.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Read the changed ABAP object from SAP.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Check for GitHub to SAP drift.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Only navigate references when the public contract changed.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Do not repeat abaplint or SAP test gate findings.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Post inline comments on changed lines.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Use GitHub suggestion blocks when the fix is concrete.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This makes the review auditable. The model still reasons, but important claims can point back to tool results.&lt;/p&gt;&#xA;&lt;p&gt;In PR #14, the decisive ARC-1 call was a &lt;a href=&#34;https://marianfoo.github.io/arc-1/tools/#sapread&#34;&gt;&lt;code&gt;SAPRead&lt;/code&gt;&lt;/a&gt; of the activated &lt;code&gt;ZCL_ARC1_TASK_SERVICE~LIST_TASKS&lt;/code&gt; method from SAP. Claude then posted the &lt;a href=&#34;https://github.com/marianfoo/arc-1-abap-cicd-review/pull/14#discussion_r3228270334&#34;&gt;key finding&lt;/a&gt;: the &lt;code&gt;MARA&lt;/code&gt; block is not only a direct SAP table access, it also changes the meaning of &lt;code&gt;list_tasks&lt;/code&gt;. A task service should not silently return no tasks because the material master has no finished product.&lt;/p&gt;&#xA;&lt;p&gt;It also did the useful drift check:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;The activated ZCL_ARC1_TASK_SERVICE~LIST_TASKS in SAP matches the pre-PR source.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;The MARA block is not yet activated, as expected for an open PR.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;No unexpected drift.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;That is the small sentence that justifies the whole architecture. A diff-only reviewer cannot know that. ARC-1 can.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img alt=&#34;Claude review on PR #14 showing SAPRead-backed drift information and the MARA finding on the changed ABAP method.&#34; loading=&#34;lazy&#34; src=&#34;https://blog.zeis.de/posts/2026-05-12-arc-1-abap-cicd-review/claude-review-pr14.png&#34;&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;demo-prs&#34;&gt;Demo PRs&lt;/h2&gt;&#xA;&lt;p&gt;The main demo is &lt;a href=&#34;https://github.com/marianfoo/arc-1-abap-cicd-review/pull/14&#34;&gt;PR #14&lt;/a&gt;. It contains one harmless refactoring and one deliberately bad preflight inside &lt;code&gt;ZCL_ARC1_TASK_SERVICE~LIST_TASKS&lt;/code&gt;:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-abap&#34; data-lang=&#34;abap&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;select&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;single&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;matnr&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;mara&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;into&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;lv_dummy_matnr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;where&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;mtart&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;FERT&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;sy&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;subrc&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;endif&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This is deliberately wrong for the demo. It creates a hard dependency from a task service to the MM material master and reads a SAP-standard table directly. If product validation is needed, it should go through a released API or CDS view, and the service should not hide the reason by returning an empty list.&lt;/p&gt;&#xA;&lt;p&gt;That PR is useful because it shows several review surfaces on the same diff:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;abaplint finds static issues, but not the &lt;code&gt;MARA&lt;/code&gt; problem.&lt;/li&gt;&#xA;&lt;li&gt;the SAP test gate adds live ABAP Unit and ATC results for changed objects.&lt;/li&gt;&#xA;&lt;li&gt;Copilot Code Review sees the diff and flags the &lt;code&gt;MARA&lt;/code&gt; access, but cannot verify SAP state.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/marianfoo/arc-1-abap-cicd-review/pull/14#issuecomment-4430841521&#34;&gt;Copilot Coding Agent with ARC-1&lt;/a&gt; can combine diff review with live SAP reads, syntax, navigation, and release checks.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/marianfoo/arc-1-abap-cicd-review/pull/14#discussion_r3228270334&#34;&gt;Claude with ARC-1&lt;/a&gt; posts a focused review with inline comments, suggestion blocks, and the SAP drift check.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;The separate SAP test gate example is &lt;a href=&#34;https://github.com/marianfoo/arc-1-abap-cicd-review/pull/20&#34;&gt;PR #20&lt;/a&gt;: one extra test method, 7 of 7 ABAP Unit tests green, and a single non-blocking P3 ATC finding.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;One-click suggestions&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Both Copilot and Claude can post GitHub review comments with suggestion blocks. That means the PR shows the same &amp;ldquo;Apply suggestion&amp;rdquo; button a human reviewer would get.&lt;/p&gt;&#xA;&lt;p&gt;This is now verified in PR #14. &lt;a href=&#34;https://github.com/marianfoo/arc-1-abap-cicd-review/pull/14#discussion_r3226642123&#34;&gt;Copilot Code Review&lt;/a&gt; and &lt;a href=&#34;https://github.com/marianfoo/arc-1-abap-cicd-review/pull/14#discussion_r3228270334&#34;&gt;Claude&lt;/a&gt; both suggested deleting the &lt;code&gt;MARA&lt;/code&gt; preflight block. Claude&amp;rsquo;s version adds the SAP-side evidence on top: &lt;a href=&#34;https://marianfoo.github.io/arc-1/tools/#sapread&#34;&gt;&lt;code&gt;SAPRead&lt;/code&gt;&lt;/a&gt; confirmed that this block is not part of the currently activated method, so the review can separate &amp;ldquo;new in this PR&amp;rdquo; from &amp;ldquo;already active in SAP&amp;rdquo;.&lt;/p&gt;&#xA;&lt;p&gt;The two screenshots below are from the same lines in PR #14. Copilot shows the diff-only version of the review. Claude shows the same GitHub suggestion UX, but with the SAP-side drift evidence from ARC-1.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img alt=&#34;Claude review comment on PR #14 showing the MARA preflight deletion suggestion with SAPRead drift evidence and an Apply suggestion button.&#34; loading=&#34;lazy&#34; src=&#34;https://blog.zeis.de/posts/2026-05-12-arc-1-abap-cicd-review/pr14-mara-claude.png&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img alt=&#34;Copilot Code Review comment on PR #14 showing the MARA preflight deletion suggestion with an Apply suggestion button.&#34; loading=&#34;lazy&#34; src=&#34;https://blog.zeis.de/posts/2026-05-12-arc-1-abap-cicd-review/pr14-mara-copilot.png&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;The prompt asks for suggestion blocks only when the fix is concrete. A wrong suggestion block is worse than a normal comment because it invites the reviewer to apply it without thinking.&lt;/p&gt;&#xA;&lt;p&gt;This is not a replacement for a proper feature branch. It is just a good review UX for small, local fixes.&lt;/p&gt;&#xA;&lt;h2 id=&#34;operations-automation&#34;&gt;Operations Automation&lt;/h2&gt;&#xA;&lt;p&gt;&lt;strong&gt;Autonomous dump triage&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;The repo also has an operations pattern for staying ahead of runtime issues.&lt;/p&gt;&#xA;&lt;p&gt;The &lt;a href=&#34;https://github.com/marianfoo/arc-1-abap-cicd-review/blob/main/.github/workflows/sap-dump-triage.yml&#34;&gt;&lt;code&gt;sap-dump-triage.yml&lt;/code&gt;&lt;/a&gt; workflow asks ARC-1 for recent ST22 dumps through &lt;a href=&#34;https://marianfoo.github.io/arc-1/tools/#sapdiagnose&#34;&gt;&lt;code&gt;SAPDiagnose&lt;/code&gt;&lt;/a&gt;. It can run on a schedule, deduplicates dumps against existing GitHub issues by storing the dump ID in an HTML comment marker, and creates one issue for each new dump with metadata, a short Claude triage, and an urgency label.&lt;/p&gt;&#xA;&lt;p&gt;For the sample repo, the cron is disabled so the issue list stays stable. In a real setup, I would turn it on so GitHub becomes a lightweight watch list for new dumps instead of waiting until someone reports the same runtime error again. The current examples are visible through the &lt;a href=&#34;https://github.com/marianfoo/arc-1-abap-cicd-review/issues?q=is%3Aissue+label%3Asap%3Adump&#34;&gt;&lt;code&gt;sap:dump&lt;/code&gt; label&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;This is the part I like most conceptually:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cheap shallow triage for everything&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;expensive deep investigation only when needed&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;That is a much better cost model than asking the LLM to deeply inspect every dump forever.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Deep dive on demand&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;The second stage is the &lt;a href=&#34;https://github.com/marianfoo/arc-1-abap-cicd-review/blob/main/.github/workflows/sap-dump-deep-dive.yml&#34;&gt;&lt;code&gt;sap-dump-deep-dive.yml&lt;/code&gt;&lt;/a&gt; workflow. A human applies the &lt;code&gt;dump:investigate&lt;/code&gt; label to a dump issue. The workflow extracts the dump ID, reads the full dump through ARC-1, reads the failing ABAP source, and posts one investigation comment.&lt;/p&gt;&#xA;&lt;p&gt;The best demo is &lt;a href=&#34;https://github.com/marianfoo/arc-1-abap-cicd-review/issues/15&#34;&gt;issue #15&lt;/a&gt;, an &lt;code&gt;OBJECTS_OBJREF_NOT_ASSIGNED_NO&lt;/code&gt; dump in &lt;code&gt;CL_ENH_ADT_ENHO_OBJ_PERSIST&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Claude found a very concrete root cause. In &lt;code&gt;GET_DATA_FROM_TOOL&lt;/code&gt;, the first &lt;code&gt;CASE l_enhtooltype&lt;/code&gt; block creates &lt;code&gt;r_object_data&lt;/code&gt;, but it handles only BAdI and hook enhancement tool types. The dump variables showed &lt;code&gt;I_ENHO_TOOL&lt;/code&gt; as &lt;code&gt;CL_ENH_TOOL_WDY&lt;/code&gt;, a Web Dynpro enhancement tool. Because that tool type is not handled, &lt;code&gt;r_object_data&lt;/code&gt; stays initial. The next dereference at line 30 raises &lt;code&gt;CX_SY_REF_IS_INITIAL&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;The interesting detail is that there is a second &lt;code&gt;CASE&lt;/code&gt; block later in the same method with a &lt;code&gt;WHEN OTHERS&lt;/code&gt; guard, but execution never reaches it because the null dereference happens earlier.&lt;/p&gt;&#xA;&lt;p&gt;That is the kind of analysis I want from this setup. It used the dump, selected variables, call stack, and source code. It did not just say &amp;ldquo;probably a null reference&amp;rdquo;. It explained why the reference was null and where the missing guard belongs.&lt;/p&gt;&#xA;&lt;p&gt;The &lt;a href=&#34;https://github.com/marianfoo/arc-1-abap-cicd-review/issues/15#issuecomment-4431477985&#34;&gt;deep-dive comment&lt;/a&gt; then updates the labels from &lt;code&gt;needs-triage&lt;/code&gt; to &lt;code&gt;dump:investigated&lt;/code&gt;. So GitHub becomes the lightweight operations board, while SAP remains the source of truth.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img alt=&#34;GitHub issue #15 showing a Claude deep-dive analysis for an SAP short dump with root cause and labels.&#34; loading=&#34;lazy&#34; src=&#34;https://blog.zeis.de/posts/2026-05-12-arc-1-abap-cicd-review/issue-15-claude.png&#34;&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;how-i-would-use-this&#34;&gt;How I Would Use This&lt;/h2&gt;&#xA;&lt;p&gt;For a small ABAP team, I would start with this sequence:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Push ABAP source to GitHub with abapGit.&lt;/li&gt;&#xA;&lt;li&gt;Run abaplint on every PR.&lt;/li&gt;&#xA;&lt;li&gt;Run ABAP Unit and ATC through ARC-1 on every PR.&lt;/li&gt;&#xA;&lt;li&gt;Use Copilot Code Review as a cheap, generic first AI review if you already have Copilot.&lt;/li&gt;&#xA;&lt;li&gt;Add &lt;code&gt;claude:review&lt;/code&gt; or &lt;code&gt;copilot:review&lt;/code&gt; only when the PR needs deeper SAP context.&lt;/li&gt;&#xA;&lt;li&gt;Enable dump triage manually first.&lt;/li&gt;&#xA;&lt;li&gt;Turn on the scheduled dump check once the issue noise level is understood.&lt;/li&gt;&#xA;&lt;li&gt;Use &lt;code&gt;dump:investigate&lt;/code&gt; only for dumps that are recurring, high urgency, or unclear.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;This keeps the workflow understandable. Not every PR needs a deep AI review, and not every dump needs full investigation. Static and deterministic checks should do the boring work first.&lt;/p&gt;&#xA;&lt;p&gt;The label interface is intentionally simple:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;copilot:review&lt;/code&gt; triggers Copilot Coding Agent with ARC-1.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;claude:review&lt;/code&gt; triggers Claude Code Action with ARC-1.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;sap:dump&lt;/code&gt; marks a dump tracker issue.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;needs-triage&lt;/code&gt; means the shallow workflow created the issue.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;dump:investigate&lt;/code&gt; triggers the deep-dive workflow.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;dump:investigated&lt;/code&gt; means the deep dive has already posted its analysis.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;urgency:high&lt;/code&gt;, &lt;code&gt;urgency:medium&lt;/code&gt;, and &lt;code&gt;urgency:low&lt;/code&gt; make the issue list sortable.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;The labels are the UI. That keeps the pattern easy to teach and easy to extend.&lt;/p&gt;&#xA;&lt;h2 id=&#34;boundaries-and-next-steps&#34;&gt;Boundaries And Next Steps&lt;/h2&gt;&#xA;&lt;p&gt;&lt;strong&gt;Limitations&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Copilot Code Review and Copilot Coding Agent are not the same thing. The sidebar review is useful, but it does not use the MCP server. For MCP context, this repo uses label-triggered workflows.&lt;/p&gt;&#xA;&lt;p&gt;GitHub-hosted runners must reach the ARC-1 endpoint. That is why BTP Cloud Foundry is a good demo topology. If ARC-1 is only available inside a private network, use self-hosted runners or another controlled network path.&lt;/p&gt;&#xA;&lt;p&gt;The SAP user behind the BTP destination still matters. Even with a read-only ARC-1 key, the workflow can read what that technical user can read. In a real setup, scope both the SAP user and the ARC-1 API key deliberately.&lt;/p&gt;&#xA;&lt;p&gt;The SAP test gate runs against activated objects in SAP. That fits the edit, activate, push flow. If your team pushes before activation, use a PR sandbox system or add a controlled pull and activate step before the checks run.&lt;/p&gt;&#xA;&lt;p&gt;And AI review is still review. The goal is not to replace an ABAP developer. The goal is to catch useful things earlier, with enough evidence that a developer can decide quickly.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;What else this pattern can do&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Once the plumbing exists, the same pattern can be used for more than PR review.&lt;/p&gt;&#xA;&lt;p&gt;A scheduled Clean Core audit could read a package through ARC-1, check released API usage, and open GitHub issues. A multi-system setup could expose &lt;code&gt;arc-1-dev&lt;/code&gt;, &lt;code&gt;arc-1-qa&lt;/code&gt;, and &lt;code&gt;arc-1-prod&lt;/code&gt; as separate MCP servers and compare what is active in each system.&lt;/p&gt;&#xA;&lt;p&gt;The SAP test gate can also grow beyond this small demo. Full ATC variants, Code Inspector checks, transport checks, and package-level baselines can all surface in the same PR interface developers already use.&lt;/p&gt;&#xA;&lt;p&gt;The next obvious step is the post-merge path. After a PR is merged to &lt;code&gt;main&lt;/code&gt;, a GitHub workflow could call ARC-1 with a separate git-scoped key and run an abapGit pull through &lt;a href=&#34;https://marianfoo.github.io/arc-1/tools/#sapgit&#34;&gt;&lt;code&gt;SAPGit&lt;/code&gt;&lt;/a&gt; for the package in the SAP system.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;SAP -&amp;gt; abapGit -&amp;gt; GitHub -&amp;gt; AI review -&amp;gt; merge -&amp;gt; ARC-1 pull -&amp;gt; SAP&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;I would keep that write path separate from the review key, gated by branch, labels, or environment approvals. If the pull has conflicts or activation problems, the workflow should report that back and stop.&lt;/p&gt;&#xA;&lt;p&gt;That is also where the operations loop becomes interesting: detect a dump, investigate it, propose a fix PR, review it, merge it, and pull it back into SAP. The client can change. The governed SAP access layer stays the same.&lt;/p&gt;&#xA;&lt;h2 id=&#34;takeaway&#34;&gt;Takeaway&lt;/h2&gt;&#xA;&lt;p&gt;This is the direction I find practical for ABAP development automation.&lt;/p&gt;&#xA;&lt;p&gt;Do not start with &amp;ldquo;AI should write all ABAP&amp;rdquo;. Start with a safer and more useful question:&lt;/p&gt;&#xA;&lt;p&gt;Can the development workflow become better if GitHub automation can safely use the actual SAP system?&lt;/p&gt;&#xA;&lt;p&gt;For me, the answer is clearly yes. Not because the model magically understands ABAP, but because ARC-1 brings missing SAP context into the workflow: activated source, ABAP Unit, ATC, references, dumps, syntax checks, and system-specific evidence.&lt;/p&gt;&#xA;&lt;p&gt;abapGit gets the code into GitHub. abaplint covers the static layer. ARC-1 runs ABAP Unit and ATC from GitHub Actions, and gives AI a read-only window into SAP. Copilot and Claude become more useful reviewers because they can stop guessing and start checking.&lt;/p&gt;&#xA;&lt;p&gt;That is the main thread of this sample: GitHub is the automation surface, ARC-1 is the SAP gateway, and humans still decide what gets merged.&lt;/p&gt;&#xA;&lt;h2 id=&#34;references-and-links&#34;&gt;References And Links&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/marianfoo/arc-1-abap-cicd-review&#34;&gt;Sample repository: arc-1-abap-cicd-review&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/marianfoo/arc-1-abap-cicd-review/pull/14&#34;&gt;Demo PR #14: multi-engine review with suggestion blocks&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/marianfoo/arc-1-abap-cicd-review/pull/20&#34;&gt;Demo PR #20: SAP Unit and ATC gate&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/marianfoo/arc-1-abap-cicd-review/issues/15&#34;&gt;Dump issue #15: deep-dive investigation&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/marianfoo/arc-1-abap-cicd-review/issues?q=is%3Aissue+label%3Asap%3Adump&#34;&gt;Dump tracker issues&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/marianfoo/arc-1&#34;&gt;ARC-1 on GitHub&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://marianfoo.github.io/arc-1/&#34;&gt;ARC-1 Documentation&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://docs.heliconialabs.com/patterns-for-using-llms-in-abap-development.pdf&#34;&gt;Patterns for using LLMs in ABAP development&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://abapgit.org/&#34;&gt;abapGit&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://abaplint.org/&#34;&gt;abaplint&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/reviewdog/reviewdog&#34;&gt;reviewdog&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/anthropics/claude-code-action&#34;&gt;Claude Code Action&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://docs.github.com/en/copilot/concepts/agents/coding-agent/about-coding-agent&#34;&gt;GitHub Copilot cloud agent&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://modelcontextprotocol.io/&#34;&gt;Model Context Protocol&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://blog.zeis.de/posts/2026-05-08-arc-1-joule-studio-clean-core/&#34;&gt;Joule Studio and ARC-1 Clean Core post&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;</description>
    </item>
  </channel>
</rss>
