Skip to content

Release Notes

Use this page to check release impact and required actions. For the complete PR list, see CHANGELOG.md.

See Updating for migrations, Configuration for settings, and Tools Reference for the MCP surface.

How to read this

  • Change — the user-visible change, linked to the relevant PR.
  • Impact — what changes for operators or tool users.
  • Action — what to do; none means no action is required.

ARC-1 follows semantic versioning from 1.0. Default-off experimental features, currently multi-target mode, may still change in a minor release.

1.0.0 onward and every 0.9 release are listed individually. 0.1–0.8 are summarized, with the important 0.7.0 authorization migration retained below.

1.9.0 — OAuth registration policy and clearer approval

This release requires @arc-mcp/xsuaa-auth 1.2.0 or later. Upgrade every instance before enabling the optional policy below, then configure the same value on every instance.

Change Impact Action
DCR return-address allowlist (#1091) ARC1_OAUTH_DCR_REDIRECT_URI_PATTERNS / --oauth-dcr-redirect-uri-patterns restricts new registrations and return addresses in existing client IDs. Unset retains the default admission rules; an explicitly empty value denies all DCR callbacks. Follow the configuration reference: allow every callback the intended client registers, use exact client-owned BAS callbacks, and avoid empty deployment-template values.
Clearer approval page and guidance (#1091, #1092) Shorter copy, readable destination details, keyboard focus and responsive styling. Approval remains required for every new authorization flow; token refresh does not repeat it. There are no consent exemptions. Read client approval. Only approve connections you started in a trusted client; application names are self-declared.
Registration errors and audit (#1091) Disallowed callbacks now return 400 invalid_client_metadata instead of a server error. Callback URLs with credentials or fragments are rejected even when the new policy is unset. Rejections emit oauth_client_registration_rejected. Correct incompatible client callbacks. Collect stderr/file audit logs for OAuth lifecycle events; the BTP Audit Log sink does not forward them.
Dependency maintenance (#1089) Updates the locked ip-address dependency to 10.7.4. None.
Consistent include-read denials (#1094) SAPRead.INCL is accepted as a deny rule and also blocks FUGR include expansion, including expansion implied by grep. Plain FUGR metadata reads remain available. Operators using this deny rule should expect expanded FUGR reads to be refused.

Policy limits: The manual XSUAA client uses a separate callback policy. Tightening the DCR allowlist does not revoke access or refresh tokens. Widening it can restore previously filtered callbacks; rolling back to an older ARC-1 version removes this restriction. After upgrading, check normal browser approval and MCP reconnect before applying a narrower policy.

The separate node-forge risk exception remains limited to 28 October 2026, 00:00 Europe/Berlin; this release does not remediate that dependency issue.

XSUAA operators: upgrade every instance before resuming sign-ins and restart sign-ins already in progress. Refresh your MCP client's tool list after upgrading.

Change Impact Action
OAuth client approval (#1088) Every new browser authorization flow requires explicit client approval, including existing SSO sessions and manual clients. Token refreshes do not repeat it. Existing registered client IDs remain usable. Read client approval, configure the canonical public HTTPS ARC1_PUBLIC_URL, including any path prefix, and review proxy and rate-limit requirements.
Scoped multi-target writes (#1080) Pinned strict-PP routes support separately enabled CLAS/INTF writes. Aggregate and shared-Basic routes remain mutation-free. Follow write setup: global write switch, destination restrictions and exact write grants are all required.
IDE navigation (#1025) Adds SAP ADT MCP navigation and optional Eclipse links without changing source/JSON results. Follow IDE integration; Eclipse links require explicit configuration.
Direct package browsing (#1081) Explicit packageScope="direct" lists bounded direct contents and immediate subpackages without recursion. Completeness remains unknown. Use direct mode where indexed package search is unavailable; narrow by advertised objectType when needed.
Table settings and previews (#1087, #1074) TABL/DTT can update native loggingEnabled; TABLE_CONTENTS enforces the requested row cap even when SAP returns a lookahead row. Activate logging changes and check SAP's rec/client setting; see technical settings.
Diagnostics (#1084, #1076) Gateway HTML whitespace parsing is more efficient; package preflight failures retain uncertainty about missing metadata APIs. Treat an unverified package as unverified, not as proof it does not exist.
Cloud Foundry and PP sessions (#1082, #1086) CF uploads retain required compiled public modules; single-target Cloud Connector PP reuses bounded, per-user sessions to reduce repeated logins. Review session and incident limits; multi-target routes retain request-local transport.

OAuth upgrade notes: ARC1_OAUTH_DCR_ENABLED=false disables new registrations only. This upgrade does not invalidate existing access or refresh tokens; independently verify any incident-response invalidation. The separate node-forge risk exception remains limited to 28 October 2026, 00:00 Europe/Berlin.

1.7.0 — application data, diagnostics and safer authoring (2026-10-22)

Refresh your MCP client's tool list. Existing data-preview permissions also enable the new data actions below; review the opt-outs before upgrading.

Change Impact Action
Saved texts and logs (#1012, #1024) SAPQuery.long_text reads saved classic SAPscript texts; application_log reads SLG1 messages by log number. Both require data-preview permission and data scope; BTP ABAP is unsupported. To exclude either, add SAPQuery.long_text or SAPQuery.application_log to SAP_DENY_ACTIONS. See data actions.
Diagnostics (#1020, #1029, #1019) Filter dumps using advertised conditions; syntax-check up to 20 stored objects. Missing reports remain unchecked. Inspect incomplete results; see syntax batches.
References and transport reviews (#1026, #1022, #1008) Package-filter references and request positions/snippets; append lookup avoids an invalid preflight. Transport diffs retain missing-history and non-source gaps. Follow bounded reviews; empty results do not prove absence.
Source and metadata reads (#1037, #1017) Program/include reads support bounded nested expansion; cached SRVB metadata remains valid JSON. Request expand_includes; inspect omitted sources.
ABAP documentation (#1049, #1051, #1055, #1015) Class/method edits replace supplied documentation and move it with visibility changes. FUNC parameters accept short descriptions; KTD parent descriptions become optional. Write function texts in the original language; activate before checking native synchronization.
Activation and connectivity (#1050, #1046, #1043) Activation allows five minutes. Stateful CSRF discovery gains a compatibility retry; cold-client startup reduces unused SAP sessions. After timeout/cancellation, inspect inactive objects and refresh source before retrying: completion is uncertain.
Standalone downloads (#1027) Optional executables bundle Node.js for Windows, Linux and macOS. Verify checksums; review unsigned-binary, SQLite and extension limits.
Dependencies and installation (#1054, #1059, #1060, #1052) Updates follow-redirects, Hono and its Node adapter; documents the Windows native-build workaround. The node-forge advisory remains unresolved. Review the exception expiring 28 October and Windows instructions.
Test evidence (#1013, #1016, #1058) Improves release prerequisites, denial regressions and sanitized where-used diagnostics. none

1.6.0 — optional target access and safer authoring (2026-10-17)

No new mandatory settings; refresh your MCP client's tool list after upgrading.

Change Impact Action
Per-user target access (#677) In BTP multi-system mode, opt-in ARC1_MULTI_TARGET_AUTHORIZATION=xsuaa-attribute restricts reader discovery and calls to IAM-assigned targets, not automatically discovered SAP accounts. Default standard keeps access unchanged. Start with static XSUAA roles; IAS is optional.
BAdI implementations (#939) Create, update and delete ENHO/XHB, including filters. ABAP Cloud requires a released BAdI. Follow BAdI write limits.
Table types (#963, #966) Author table types on ABAP Cloud and set built-in row length/decimals. Read back after activation; key restrictions remain.
Table administration (#979, #980) Update technical settings and manage classic secondary indexes where SAP exposes them. Review settings and index activation limits.
API visibility (#967) apiVisibility explicitly selects cloud-development/key-user visibility; omission keeps SAP's defaults. none
Text pools (#965, #976, #977, #978) Class symbols work on ABAP Cloud. Writes report removed texts, avoid unsafe retries/empty-save drafts and verify pool activation. Read text-pool recovery guidance before retrying an unverified save.
Source and metadata reads (#585, #971, #973, #994) Read inclusive source windows, SMBC configuration and v1-only service-binding metadata; exact lookup recognizes decorated names. Supply both lineStart and lineEnd for a window.
Quick fixes (#995) Preserves proposal URLs/replacement whitespace and rejects missing classes/interfaces before evaluation. Review and syntax-check deltas; use SAPWrite to save.
Revision sources (#998) Revision feeds return usable source URLs on older SAP systems. none
Missing-program errors (#1002) Missing programs on NetWeaver 7.50 retain search guidance instead of unrelated class-include write advice. none
Source-search capabilities (#1006) Retains confirmed support per target despite unrelated user authorization failures; disabled search returns object-search guidance. After Basis enables source search, restart ARC-1; single-target instances can also use SAPManage action="probe".
Legacy ADT responses (#1007) Rejects empty HTML as data/write success; preserves legacy media-type fallback after CSRF refresh and returns URI-confirmed search names. Read back attempted changes before retrying an invalid response. Native 7.40 SP04 confirmation remains pending.
Package listings (#999) Refuse systems without advertised package-filtered search, avoiding unrelated objects in package results. On affected systems, use name/type search or SAP's native package browser.
Query results (#983, #984) Data-preview cells retain native whitespace; SQL uses CRLF framing. The reporter verified the CRLF fix on 7.40 SP22. Trim cells explicitly if your consumer needs trimmed values.
Local source files (#981) Codex can send local source through its existing ARC-1 connection without model transcription. Use the file workflow.
Larger HTTP writes (#972) ARC1_MAX_HTTP_REQUEST_BYTES permits an optional increase from 100 KiB, up to 16 MiB. Check admission and memory limits before increasing it.
Documentation and tests (#997) Clarifies configuration and security guidance; strengthens live workflow checks and cleanup. none
Transport ownership (#1003) Reassignment supplies the owner to both legacy and newer CTS handlers, fixing the empty-user error on NetWeaver 7.50. none
BTP test fixtures (#1001) Keeps parent-owned table indexes out of standalone create fixtures; documents the BTP preview row-limit caveat. none

Known dependency risk: the SAP SDK chain still includes node-forge affected by GHSA-86w9-cpqp-85rv. Recheck the advisory before deployment.

1.5.2 — safer text pools and SAP compatibility fixes (2026-10-10)

Fixes for text pools, source edits, navigation and system detection. No new mandatory settings; refresh your MCP client's tool list after upgrading.

Change Impact Action
Text-pool deletion safeguards (#952, #959, #969) PROG/FUGR deletion refuses inactive text pools where the service is available. This supersedes automatic draft activation during deletion. Review with the author and explicitly activate before retrying; see text-pool guidance.
Text writes and activation (#946, #949) Writes request whole-pool activation after unlocking, including pending edits to other text parts. SAPActivate accepts REPT/PROG/PX and reports requested. Newly created programs need their first owner activation.
Completion and references (#929, #930) Completion returns {proposals: [{text}], complete, hint?}. Positioned references report SAP's actual search scope. Adapt completion consumers; inspect complete, searchedFor and warnings.
HANA detection (#937, #964) NHI discovery alone no longer implies HANA; verified ABAP Environment components do. none — unconfirmed does not mean non-HANA.
ADT discovery (#953) Collections without advertised media types remain discoverable. none
Pre-write validation (#945, #947, #958) Lint rejection precedes object creation. Literal-spacing findings are advisory; valid DDLX header/search annotations pass preflight. none
Domain fixed values (#944) Oversized values are refused before SAP can truncate them. Limit low/high to 10 characters and descriptions to 60.
Method edits (#961) Body edits preserve method headers/comments; removal includes attached ABAP Doc and cleans boundary spacing. none
Syntax checks (#951, #960) Structures resolve correctly; proposed-source checks against absent objects report checked:false. Verify object identity before interpreting findings.
API release state (#931) Function modules resolve their parent group; namespaced object URIs are encoded correctly. none
Business-configuration documentation (#934) KTD creation resolves SMBC/TYP parents. Supply a nonempty refObjectDescription.
Grouped SQL diagnostics (#962) Explains native count-only GROUP BY generation failures. Include grouping columns alongside COUNT(*).
Guarded table-entity reads (#968) Active DDLS proof permits recognized table-entity lineage; unknown shapes remain refused. none — existing blocklist limits apply.

1.5.1 — authentication safeguards and SAP compatibility (2026-10-04)

Stricter authentication and cache isolation, safer deployment archives, and compatibility fixes. No new mandatory settings; check the actions below if you use XSUAA or definition navigation.

Change Impact Action
Function-module dependencies and group lookup (#911) SAPContext(deps) extracts dependencies from function bodies. Automatic group lookup also recognizes SAP_BASIS 750's decorated function names in existing callers, including SAPRead FUNC, update/delete, activation and typed where-used. none — existing explicit-group requirements and authorization checks remain in place.
XSUAA startup guard (#916) HTTP startup fails closed when configured XSUAA credentials cannot be loaded, even with another authentication method configured. Ensure a valid XSUAA binding before starting with XSUAA enabled.
Principal-propagation cache isolation (#917) Activation invalidates shared cached source in PP-enabled setups instead of promoting it across identities. Subsequent reads return to SAP for authorization. none — single-identity cache behavior is unchanged.
Deployment archive exclusions (#913) MTAR packaging excludes additional root credential/cache artifacts and AppRouter test/local-environment files. Rebuild and inspect deployment archives; see BTP deployment.
Namespaced function-group includes (#905) Include creation accepts namespace-correct names and normalizes lowercase parent-group names. Check the group's main-program INCLUDE statement after creation; insertion behavior varies by system.
Legacy ADT media types (#909) Class metadata reads and class/program creation retry narrowly matched legacy content-handler errors with concrete media types. none — source/include media types remain unchanged.
Definition navigation (#910) Navigation sends the current source and position to SAP's definition resolver. Supply the source URI, non-empty source, a 1-based line and 0-based column.
CDS lineage (#914) Blocked-source checks traverse ordinary view entities and projections. Transient analytical queries still fail closed. none — existing lineage policy limits still apply.

1.5.0 — guarded source edits and verified reads (2026-10-02)

Safer SAP edits, more object types and clearer failure reporting. No new mandatory settings. Refresh your MCP client's tool list after upgrading.

Before upgrading

Check the rows that apply to you. Coming from before 1.4? Also follow earlier migrations.

Your setup Action
Gateway/WAF User-Agent rules Review rules for the new default, arc-1/<version>. See request identification.
stderr is your only audit destination Keep ARC1_LOG_LEVEL=info or configure another sink: warn/error now hide INFO audit events. See logging.
Custom extensions or XML text consumers Use supported extension APIs; ctx.client exposes reviewed reads only. Check the XML decoding migration.
Shared SAP identity over HTTP Login sessions are now reused. Follow the credential rotation procedure; renewal does not revoke sessions or tickets.
Optional browser UI/AppRouter Rebuild and redeploy the MTAR to include its dependency fixes.
Automated ENHO reads Omit version or use auto; explicit active/inactive requests are now refused. See enhancement reads.

Known dependency risk

node-forge 1.4.0 remains affected by GHSA-86w9-cpqp-85rv. No patched version was available at release preparation. Review the advisory before deploying; keep alerts open and apply the planned server/AppRouter dependency patch when available.

Highlights for developers

Stricter safeguards to expect

Class, metadata and RAP edits better preserve existing drafts. Blank source updates and invalid method-visibility changes are refused. Some calls now need a lock even when no write results. See editing behavior and RAP limits.

  • Table types: do not supply rowType just to bypass a refusal—it resets the definition to a standard table/key. Use ADT/SE11 to preserve unsupported settings. See TTYP updates.
  • Unverified results: requested versions, table subtypes and deletions must be confirmed. Inspect a refusal or incomplete result before retrying. See read versions and server-driven writes.
  • Extension POST failures: check the business outcome before retrying; a failure does not prove nothing happened. See retry behavior.

Other fixes improve XML/error handling, blocked-source checks, function-group transports, Windows paths, dependencies and test tooling. The changelog lists individual changes; authorization and diagnostics explain their operating requirements.

Full change list

Grouped by outcome; PR links provide the implementation and review history.

Editing and write safety

  • Class surgery reads the current draft under the SAP lock. (#845)
  • Optional source hashes detect stale edits; empty updates and unsafe FUNC fallbacks are refused. (#853)
  • Metadata updates and RAP scaffolding preserve changes made before locking. (#879, #857)
  • TTYP updates preserve omitted descriptions and row types when safe. (#891)
  • Inherited interface methods are supported; invalid redefinition visibility changes are refused. (#900, #902, #903)
  • FORM/MODULE insertion avoids replacing a whole program or include. (#880)
  • Table/structure writes recheck the subtype and refuse unverified routes. (#873, #874)
  • Server-driven deletes honor advertised prechecks and verify absence afterwards. (#847)
  • Extensions expose reviewed reads and report uncertain POST/execution outcomes without transient replay. (#886, #887)

Tools, reads and results

  • Read-only syntax checks accept existing objects or proposed source. (#855)
  • Application logs, job catalogs and job templates gain repository read/write support. (#876)
  • Lock objects gain reads, writes, batch creation and activation. (#877)
  • Function-group grep searches bounded include expansion. (#889, #888)
  • Enhancement reads use the correct hook and legacy BAdI endpoints. (#901)
  • Explicit server-driven read versions are verified; hyperfocused calls accept versions. (#846, #856)
  • Generic server-driven calls use registered object routes. (#849)
  • Blocked-source lineage checks use the active catalog and cover pooled/cluster tables. (#848, #863)
  • Transport checks/history resolve function modules and group-owned includes. (#576)
  • SAP XML text is decoded once, avoiding double-escaped metadata updates. (#890)
  • Malformed SAP errors no longer stall parsing; diagnostics improve while abapGit protects sensitive details. (#893, #894)

Operations, dependencies and tests

  • Outbound SAP requests have a configurable User-Agent. (#859, #796)
  • Configured log levels take effect; SAP authorization guidance is corrected. (#816)
  • Shared HTTP logins are reused; CSRF diagnostics improve session troubleshooting. (#871, #860)
  • Optional AppRouter URI, HTTP and logging dependencies are updated. (#882, #897)
  • Server IP-address and URI dependencies receive corrections. (#883, #899, #898)
  • Windows policy paths and test exclusions accept platform path formats. (#598, #599)
  • Evaluation conversations preserve tool-call IDs and group results correctly. (#854)
  • Integration cleanup deletes mutually referencing DDLS fixtures together. (#872)

1.4.0 — CDS types, safer writes, and diagnostics (2026-09-23)

Adds CDS type authoring, extension report execution, and paged ST22 diagnostics. BTP/XSUAA operators should read the 1.4.0 upgrade guidance before deploying.

Change Impact Action
CDS type authoring (#832) Adds discovery-gated DRTY reads, creates, source updates, deletion and activation through the existing server-driven engine; verified on SAP_BASIS 758 and 816. Use plain define type source and activate after saving. Read the SDO limitations and deletion guidance.
Extension report execution (#829) Extensions can call ctx.run.programRun(name) to run an active classic ABAP report and return its list output. Selection parameters and variants are not supported. Optional: requires SAP_ALLOW_PLUGIN_EXECUTE=true, SAP_ALLOW_WRITES=true, and a write-scoped tool; see Extensions.
XSUAA redirect URIs (#813) xs-security.json no longer lists the cursor:// and vscode:// redirect URIs that XSUAA now rejects on cf create-service and cf update-service (Malformed redirect URIs detected). IDE callback validation remains in ARC-1. MTA: rebuild and redeploy. Manual XSUAA: remove those entries from the complete landscape descriptor before creating or updating the service; preserve the other settings.
OAuth callback hardening (#678) XSUAA callbacks are restricted to your deployment. Clients using the shared manual client ID can no longer redirect to arbitrary CF/BAS tenants. Follow the upgrade table before a full deployment: register custom public callbacks, preserve existing UI routes, and use DCR for custom CF/BAS clients.
Connectivity session reuse (#807) One Connectivity proxy client is kept for the whole stateful SAP operation, including the closing request, preventing premature client disposal from causing Service cannot be reached during these writes. Upgrade the deployed server; no configuration change.
Server-driven where-used (#809) SAPNavigate(action="references") now queries the correct object URI for server-driven types such as DSFD, avoiding misleading empty results from a program lookup. none
Older ADT backends (#828) Authentication/CSRF bootstrap can fall back to legacy discovery. Empty or unexpected CTS responses now produce an explanatory error instead of claiming no transports or a missing request. No configuration change. Consumers must handle the CTS error; successful bootstrap does not establish support for every tool on an older backend.
Procedural edit lint (#597) With no probed or configured release, edit_unit uses the parser’s supported ceiling for both lookup and pre-write lint, avoiding false rejection of unchanged modern syntax. Explicit release and custom lint settings still apply. none; see lint configuration.
Publication failure diagnostics (#795) Failed service-binding publication is not automatically replayed for transient errors. A bounded, read-only state check helps explain whether publication succeeded; it does not repair or republish. Inspect the returned state before taking further action. The existing one-time 403 token-refresh replay remains.
Unconfirmed creates (#830) Repository, package, transport and FLP creates no longer replay automatically after ambiguous transient failures. Errors explain that the object may already exist. Read or search for the object before repeating a create; a reported error does not prove nothing was saved.
Concurrent procedural edits (#831) edit_unit reads editable source under the SAP lock, preserving drafts and changes completed before the lock. Class-method and class-definition surgery are outside this fix. none
Bounded ST22 history (#835) Dump reads can window and page the feed beyond SAP’s 100-entry response ceiling and report coverage limits. Check the returned completeness and continuation information; see diagnostics.
Concurrent HTTP tests (#836) Local tests keep each request on its own server, preventing cross-test port interference. No production behavior changes. none

1.3.0 — CI, safer writes, and runtime fixes (2026-09-17)

Adds quality gates, bounded relations, safer authoring, and clearer partial-result evidence. Defaults need no configuration change.

Change Impact Action
BTP Audit Log (#802) Restores mTLS delivery and flushes pending records during graceful shutdown. If enabled, verify the X.509 binding and delivery.
Runtime cleanup (#803, #806) Stateful writes close SAP sessions. Cached BTP HTTP 304 responses no longer terminate the server. After upgrading, remove any ARC1_CACHE=none workaround.
SAP 7.50 data policy (#800) With SAP_BLOCKED_DATA_SOURCES, targets lacking required lineage metadata deny the read as DATA_POLICY_UNAVAILABLE; the query is not executed. Update rules that enumerate denial codes; never clear the blocklist as a workaround.
ATC and package CI (#772, #779) ATC accepts up to 20 objects with explicit coverage. atc_ci and harmless unittest_ci gate package sets; missing or incomplete evidence cannot pass. Require complete:true for object batches; see the CLI guide for CI.
Safer writes (#788, #789, #790) Batches validate all input before creation. Batch activation and UIAD writes distinguish confirmed saves from unknown outcomes and attach errors to affected objects. Inspect outcomes before retrying; for UIAD, read the retained descriptor first.
Repository discovery (#769, #786, #787) Search honors objectType; package reads report limits and unknown completeness. Experimental SAPNavigate.relations adds bounded live relationships. Do not treat results as a complete inventory; check relations limits.
KTD, text pools, and DTEL (#749, #750, #766, #768, #774) KTD updates merge addressed nodes and short texts, with dryRun preview. Program/function-group text pools are writable, and partial DTEL updates preserve stored metadata. Copy KTD node names from SAPRead; read a text-pool part before replacing it.
SQL and error privacy (#785, #804) Long freestyle SQL is safely line-wrapped. ARC1_MINIMAL_ERRORS also redacts classified SQL failures and internal blocklist denials. none

Verification limits: BTP UIAD writes, BTP package CI, and successful on-premises ATC CI remain unverified end to end. Incomplete results remain failures.

1.2.0 — bounded data access and deployment hardening (2026-09-03)

This release bounds data-preview memory, adds an optional data-source blocklist, identifies direct-connect systems, fixes local-class method reads, and patches the optional BTP AppRouter.

Change Impact Action
Add the ARC-1 Updates newsletter Major release, upgrade, and security updates are available by email. Join ARC-1 Updates.
Bound data-preview memory (#739) Data-preview bodies are capped at 2 MiB per tool call and two concurrent data results per process by default; SAPQuery.maxRows is capped at 10,000. Oversized results return DATA_RESPONSE_TOO_LARGE without partial rows, and CF Node old-space now scales with instance memory. Review batch and file consumers. Prefer fewer rows and columns. To raise limits, size memory and both data-result settings together using the RAM sizing table; Docker/direct-push deployments must also align their numeric NODE_OPTIONS limit.
Add an experimental data-source blocklist (#740) SAP_BLOCKED_DATA_SOURCES can deny exact tables or CDS entities, including resolved lineage. It only narrows existing access and adds metadata requests when enabled. Malformed TABLE_QUERY identifiers are now rejected. none by default. Before enabling it, read Authorization & Roles and test metadata access and latency.
Identify direct-connect systems (#735) ARC1_SYSTEM_LABEL / --system-label adds a single-target system label to MCP instructions. It is ignored in multi-target mode. Optional: set a stable label such as ERP production (read-only) when the client hides ARC1_SERVER_NAME.
Fix local-class method reads (#744) SAPRead(type="CLAS", method=...) now selects implementation or test-class includes for local methods. Explicit include still wins. none
Patch the optional BTP AppRouter (#738) Removes a pre-authentication denial-of-service path in arc1-ui-router. The AppRouter now requires Node.js 22.12 or newer; the MCP server was not affected. If you use mta-ui-approuter.mtaext, rebuild and redeploy the MTAR. Otherwise, none.

1.1.2 — ATC completeness follows SAP's run lifecycle (2026-08-31)

Change Impact Action
Correct ATC completion evidence (#729) ARC-1 follows SAP's asynchronous ATC run to Completed instead of comparing informational counters with visible findings. Structured results expose run status and completion evidence. none — runs previously reported as incomplete may now complete successfully.

1.1.1 — you get the scope you asked for (2026-08-20)

Change Impact Action
Bind the configured ATC variant (#708) Omitting variant now uses the system default; an unknown variant errors instead of falling back to DEFAULT. Results include variant and variantSource. Re-baseline stored ATC finding counts because the corrected variant can change results.
Stop polling settled ATC worklists (#710) Settled runs return promptly. Incomplete runs still report complete:false, and arc1-cli atc still exits 3. none
Honor user=* for transport lists (#706) SAPTransport(action="list", user="*") now returns all visible owners and preserves SAP ordering. Expect larger lists; use user=<name> to narrow them.

1.1.0 — a truthful CLI for SAP CI workflows (2026-08-18)

The CLI now shares the MCP server's configuration, authentication, authorization, safety, and audit path.

Change Impact Action
Harden CLI automation (#703) Adds stable unittest, atc, diff, and offline lint commands. Exit codes are 0 pass, 1 evaluated/tool failure, 2 CLI/config error, and 3 incomplete evidence. Unavailable or uncertain Git operations no longer report success. Pin the version in CI, preserve exit codes, and treat 3 as incomplete. Remove SAPGit.commit callers. See Updating → v1.1.0.
Add transport source diffs (#671) arc1 diff and SAPTransport(diff) compare request revisions, including class includes, while retaining non-source objects as inventory. none
Add opt-in gzip for WAF-blocked data preview (#694) Gzips only the affected data-preview request bodies; it does not relax access controls. Prefer a scoped WAF fix. If that is unavailable and logs confirm the issue, set SAP_GZIP_DATAPREVIEW_BODY=true.
Correct ADT source search (#683) Source search now uses the live ADT contract and distinguishes disabled service from missing authorization. none
Correct TABLE_QUERY IN/NOT IN guidance (#691) ARC-1 quotes and escapes comma-separated values. Pass values: "T000,T001", not pre-quoted values.
Patch transitive dependencies (#672) Updates patched versions of fast-uri, ip-address, hono, and postcss. none
Fail closed when SAP skips syntax checks (#681) A notProcessed response now returns checked:false instead of an empty clean result. Consumers must check checked as well as hasErrors.
Fix CSRF/session pairing and 7.50 table functions (#680, #693) Bearer-authenticated requests keep tokens with their session cookie; CDS table functions remain writable on SAP_BASIS 750. none

1.0.2 — completes the 1.0.1 release (2026-08-03)

The package is identical to 1.0.1. This release completed its SBOM and MCP Registry publication and fixed the release-workflow gate (#669). No action is required.

1.0.1 — three total-outage fixes (2026-08-03)

Upgrade if you use strict-schema clients, Windows plugins, or FLP tile listing.

Change Impact Action
Accept inapplicable FUNC metadata (#665) Fixes a 1.0.0 regression that rejected all SAPWrite calls from clients that populate every schema field. none; on 1.0.0, set ARC1_SCHEMA_NULLABLE_OPTIONALS=on as a workaround.
Load plugins on Windows (#662) Stops POSIX permission checks from rejecting every Windows plugin path at startup. none
Fix FLP tile listing (#663) Uses the Pages association and avoids an SAP short dump on every flp_list_tiles call. none
Correct CTS transport checks (#659) Parses candidate requests, locks, and fatal diagnostics correctly; adds operation=create|modify. Transport creation remains Workbench-only. none

1.0.0 — semver commitment, experimental multi-target, bounded tool results (2026-07-31)

ARC-1 adopts semantic versioning, adds experimental read-only multi-target routing, bounds large tool results, and expands ABAP authoring. Cache-warmup settings must be removed before upgrading.

Change Impact Action
Add experimental multi-target endpoints (#579, #628) BTP CF can expose pinned system routes and an aggregate /multi/mcp route. The mode is mutation-free and default-off. Set ARC1_MULTI_TARGET_ENDPOINTS=true only after reading Multi-System Setup and Multi-Target Administration.
Bound tool results and reject unknown parameters (#583) Adds caps and truncation metadata to large results, makes transport lists headers-only by default, compacts JSON, and rejects unknown top-level tool arguments. Fix callers that send unknown arguments. Pass summary=false when transport object lists are required.
Remove cache warmup (#573) Removes repository-wide warmup indexes; usages now query SAP's live index. ARC-1 refuses to start when retired settings remain. Remove ARC1_CACHE_WARMUP, ARC1_CACHE_WARMUP_PACKAGES, --cache-warmup, --cache-warmup-packages, and SAP_BTP_DESTINATIONS. Existing SQLite source caches migrate automatically.
Expand ABAP authoring (#571, #637, #634, #612, #604) Adds edit_unit, FUGR structural include CRUD, function-module processing metadata, and DTDC/DSFD support. none
Add UIAD reads and ATC variant discovery (#642, #611) Adds SAPRead type="UIAD" and SAPDiagnose action="atc_variants"; server-driven types are discovery-gated. none
Improve OAuth discovery and deployment identity (#632, #606) Publishes RFC 9728 metadata in OIDC mode and adds ARC1_SERVER_NAME. Set a unique server name for multiple instances. Entra ID users may need SAP_OIDC_DISCOVERY=false if discovery returns AADSTS9010010.
Enable app-to-app principal propagation (#605) Allows OAuth2JWTBearer token exchange while preserving user identity and existing authorization limits. Redeploy the MTA; manual services should apply their route-specific xs-security.landscape.json.
Improve runtime and protocol reliability (#638, #639, #646, #648, #613, #631, #601) Fixes PP object creation, startup tool listing, class-include transport writes, AUnit alert parsing, recursive release reconciliation, cookie reload, and browser MCP preflight. none
Add tracing and release SBOMs (#641, #633, #625) Forwards inbound W3C trace context, records agent identity, publishes npm dependency SBOMs, and monitors AppRouter dependencies. none

New configuration: ARC1_SERVER_NAME, ARC1_MULTI_TARGET_ENDPOINTS, ARC1_MULTI_TARGET_ALLOW_BASIC_AUTH, SAP_OIDC_DISCOVERY, SAP_OIDC_SCOPES, and ARC1_MCP_HTTP_RATE_LIMIT. Defaults remain restrictive; see Configuration.

Key tool-surface changes: SAPWrite.edit_unit; DTDC, DSFD, and UIAD types; SAPDiagnose.atc_variants; SAPActivate.group; result caps; SAPTargets on /multi/mcp; compact JSON results; and MCP server instructions.

Full upgrade checklist: Updating → v1.0.

0.9 line — from ADT tool surface to deployable managed service (2026-05-08 → 2026-07-13)

The 0.9 line expanded authoring, diagnostics, deployment options, and the security boundary. The table keeps only the user-visible highlights and actions; use CHANGELOG.md for every merged change.

Version Date Highlights Action
0.9.27 2026-07-13 Release-plumbing fix only (#568). none
0.9.26 2026-07-13 Adds authorization_trace; HTTP defaults to minimal errors; ARC1_CACHE=auto now uses memory, not SQLite (#560, #552, #557). Set ARC1_CACHE=sqlite if persistence is required. Authorization trace needs data access.
0.9.25 2026-07-02 Adds class text-symbol editing; DCR client IDs no longer expire by default (#541, #540). Set a stable ARC1_DCR_SIGNING_SECRET on BTP.
0.9.24 2026-06-30 Fixes unterminated add_method declarations and removes the incompatible MCPB signature block (#539, #537). Re-download the MCPB if a host rejected it.
0.9.23 2026-06-29 Enables BTP ABAP object/package creation, diff labels, and fresh post-activation reads (#522, #534). Use a regular cloud sub-package, not $TMP or the ZLOCAL structure package.
0.9.22 2026-06-26 Adds S/4HANA Public Cloud, SAPContext.structure, odata_perf.clientWaitMs, and portable schemas by default (#524, #526). Set ARC1_SCHEMA_NULLABLE_OPTIONALS=on only for a tested strict-schema client.
0.9.21 2026-06-25 Makes HTTP auth and strict PP mandatory; hardens safety; adds TTYP, API release, RAP extensions, FUGR includes, coverage, performance/trace diagnostics, and transport pre-checks (#487). Configure HTTP auth. Quickfixes need write; odata_perf needs data access; activate objects before transport release.
0.9.20 2026-06-22 Adds the default-off UI console and gated non-ADT plugin writes, plus SKTD support (#485, #474). Enable UI or raw plugin writes only when required; audit plugins first.
0.9.19 2026-06-18 Extracts XSUAA/PP auth, adds Custom_* plugins, and validates three-digit SAP clients (#456, #454). Pad clients to three digits; enable only audited plugins.
0.9.18 2026-06-16 Adds source diffs and headers-only transport lists; reduces probe log noise (#445, #448). none
0.9.17 2026-06-15 Adds SAPTransport.remove_object; fixes conditional requests through Cloud Connector (#432, #440). none
0.9.16 2026-06-12 Initializes class test includes before method surgery (#429). none
0.9.15 2026-06-12 Adds one-step Claude installation and makes empty environment values fall back to safe defaults (#425, #427). Review deployments that intentionally passed empty values.
0.9.14 2026-06-11 Enforces SRVB package gates, isolates PP caches, hardens grep regexes, and fixes MSAG language metadata (#394). none
0.9.13 2026-06-09 Clamps result limits and hardens abapGit, OAuth redirects, and transport deletion (#388). none
0.9.12 2026-06-09 Adds server-driven objects and CDS test cases; closes scope/package/auth gaps and fixes boolean parsing (#356, #352, #363). Reapply xs-security.json for the 30-day refresh-token setting. Data reads still require the data scope.
0.9.11 2026-06-05 Adds SAP_BASIS 816 compatibility and stops newer ABAP syntax from blocking writes (#350). none
0.9.10 2026-06-05 Preserves the TABL write-URL cache in safety-scoped clients (#335). none
0.9.9 2026-06-04 Adds expanded FUGR reads, transport targets, correct ATC variant binding, and configured master language (#341, #339, #336). Check SAP_LANGUAGE if created objects must use a different master language.
0.9.8 2026-06-01 Fixes XSUAA OAuth state handling in VS Code (#325). none
0.9.7 2026-05-30 Adds class-section surgery, object grep, TABLE_QUERY, package-subtree rules, and headless BTP user-token exchange (#307, #316, #309). TABLE_QUERY needs data access. Use ZFOO/** for hierarchy-based package scope.
0.9.6 2026-05-27 Adds layered rate limiting and fixes DDIC routing (#276). Optionally set ARC1_RATE_LIMIT for multi-user deployments.
0.9.5 2026-05-11 Adds TADIR lookup source modes, deferred batch activation, a stable DCR secret, and correct RAP include placement (#270, #267). db/both lookup needs sql; set ARC1_DCR_SIGNING_SECRET on BTP.
0.9.4 2026-05-10 Adds local-class method editing, RAP implementation generation, structured FUNC parameters, TADIR lookup, object-state diagnostics, and release override (#261, #260). Set SAP_ABAP_RELEASE only when probing is wrong.
0.9.3 2026-05-09 Adds FUGR/FUNC writes and the Viewer+SQL XSUAA role collection (#251, #246). Reapply xs-security.json for the new role collection.
0.9.2 2026-05-08 Release-plumbing only (#244). none
0.9.1 2026-05-08 Fixes descriptions and XML entities; removes npm from the Docker runtime (#242, #240). Do not expect npm inside the runtime image.
0.9.0 2026-05-08 Removes invented ADT aliases, merges STRU into TABL, and renames FTG2 to FEATURE_TOGGLE (#223, #219, #224). Use canonical types: FUGR/FF, VIEW/DV, TRAN/T, TABL, FEATURE_TOGGLE, and MSAG.

0.1 – 0.8 — early history (2026-03-31 → 2026-05-06)

These versions established ARC-1's TypeScript server, BTP connectivity, 12-tool surface, authorization model, and deployment support. They are retained for upgrade history.

Version Date Summary
0.8.0 2026-05-06 Breaking: stateless HMAC-signed OAuth DCR store; security headers, opt-in CORS, and ARC1_PUBLIC_URL
0.7.2 2026-04-28 ETag source cache; active/inactive version on SAPRead; HANA detection
0.7.1 2026-04-27 Restores npx arc-1 execution
0.7.0 2026-04-26 Breaking authorization refactor; RAP preflight and scaffolding
0.6.10 2026-04-20 Adds SAPGit, the 12th tool; ADT type probe; NW 7.50 coverage
0.6.9 2026-04-17 CDS impact, PrettyPrint, revision/transport history, AUTH/FTG2/ENHO reads, PP fix
0.6.8 2026-04-16 Object package moves, SKTD documents, 503 and CSRF retry
0.6.7 2026-04-15 DCLS, MIME discovery, SAP error hints, concurrency limiter
0.6.6 2026-04-14 CI only: wait for Docker before MCP Registry publication
0.6.5 2026-04-14 ATC quickfixes, type normalization, CDS lint, CF/BTP write fixes
0.6.4 2026-04-14 CI only: MCP Registry OCI annotation
0.6.3 2026-04-14 CI only: MCP Registry mcpName
0.6.2 2026-04-14 BTP CF deployment, safe defaults, more writes, package/FLP management, transport enhancements
0.6.1 2026-04-10 API release state, BSP/UI5 types, class hierarchy, CTS negotiation
0.6.0 2026-04-08 Breaking: package allowlist defaults to $TMP and is enforced; removes allowTransportableEdits
0.5.0 2026-04-08 Breaking scope changes, two-dimensional authorization, Zod validation
0.4.4 2026-04-07 CI only: native arm64 runners
0.4.3 2026-04-07 CI only: separate dependency stage for arm64
0.4.2 2026-04-07 CI only: avoid QEMU arm64 crash
0.4.1 2026-04-07 CI only: npm self-upgrade fix
0.4.0 2026-04-07 DDIC, DDLX/SRVB, source surgery, caching, diagnostics, where-used, abaplint presets
0.3.0 2026-04-01 Direct BTP ABAP Environment OAuth connectivity
0.2.0 2026-03-31 E2E infrastructure, XML error cleanup, CI hardening, tool improvements
0.1.4 2026-03-31 npm provenance metadata
0.1.3 2026-03-31 npm 11.5+ for trusted publishing
0.1.2 2026-03-31 npm OIDC publishing and docs navigation
0.1.1 2026-03-31 Initial 11-tool TypeScript release

Breaking change: 0.7.0 authorization refactor

Version 0.7.0 replaced legacy authorization settings with a single action-policy matrix. ARC-1 stops at startup if removed settings are still present.

  • Remove SAP_READ_ONLY, SAP_BLOCK_DATA, SAP_BLOCK_FREE_SQL, SAP_ENABLE_TRANSPORTS, SAP_ENABLE_GIT, SAP_ALLOWED_OPS, SAP_DISALLOWED_OPS, ARC1_PROFILE, and ARC1_API_KEY, plus their matching CLI flags.
  • Replace them with positive opt-ins: SAP_ALLOW_WRITES, SAP_ALLOW_DATA_PREVIEW, SAP_ALLOW_FREE_SQL, SAP_ALLOW_TRANSPORT_WRITES, SAP_ALLOW_GIT_WRITES, and SAP_DENY_ACTIONS. The first three mappings invert the old boolean meaning.
  • Replace ARC1_API_KEY with ARC1_API_KEYS="key:profile". BTP deployments must update xs-security.json and redeploy the MTA.

See Updating → v0.7 Authorization Refactor for the full migration and role-collection checks.

How these notes are maintained

CHANGELOG.md remains the exhaustive, machine-generated list. This page records only user-visible impact and actions.

Add new entries newest-first with the repository's /release-notes guidance before merging the release PR. Keep the summary to one or two sentences, group related PRs, and move implementation detail to linked documentation. tests/unit/server/release-notes.test.ts checks that every released version is present; the release workflow links this page from each GitHub Release.