Subtle Clean Core mechanics
What you'll learn
ATC flags the USE of an unreleased API, not just the API; a deprecated API names its successor in 'Replaced By'; and only 'Released for ABAP for Cloud Development' is the green light.
- ATC tracks the release state of a USE: consumer X using a C2 producer Y is itself the finding.
- A C3/deprecated API's long text fills a 'Replaced By' field naming the successor — your migration target.
- Object Release Status is graded; 'Released for ABAP for Cloud Development' is the only green light.
The subtlety that catches experienced developers is that ATC tracks the release state of a *use*, not only of an API in isolation. The relationship 'consumer X uses producer Y' is itself the unit ATC evaluates: if your code consumes a producer that is C2, the *use* is the finding — even though both objects exist and compile. Clean Core is a property of the edge between two objects, and the tooling models it that way.
When an API is marked C3 (deprecated), SAP rarely leaves you stranded. The object's long text typically fills a 'Replaced By' field naming the successor API — the migration target SAP intends you to move to. Reading that field turns a deprecation finding from a dead end into a concrete next step, and it is the first place to look when ATC flags a C3 consumption.
Finally, the Object Release Status on a class is a graded scale, not a yes/no flag. Values include 'Use as a private API', 'For SAP Internal Use', 'Use System-Internally', and 'Released for ABAP for Cloud Development'. Only that last value is the green light for consumption from a cloud-clean package; the others are progressively more internal. Reading the exact status — rather than assuming 'it exists, so I can use it' — is what keeps a consumer compliant.
Key points
- ATC tracks the release state of a USE: consumer X using a C2 producer Y is itself the finding.
- A C3/deprecated API's long text fills a 'Replaced By' field naming the successor — your migration target.
- Object Release Status is graded; 'Released for ABAP for Cloud Development' is the only green light.
- Read the exact status of what you consume rather than assuming existence implies permission.
Examples
Both your class and the producer compile, yet ATC flags the line where you consume a C2 producer — because it evaluates the use (consumer → producer), not the producer alone.
Source notes: clean-core-curriculum §11.5
Ask Claude
Build a prompt from this lesson + your question and open a fresh Claude chat with it pre-filled — handy for adapting a before/after pattern to your own object.