{"ref":"artifact:sonnyfrenzel-rgb-clean-core-io","page":"/artifacts/sonnyfrenzel-rgb-clean-core-io","json":"/artifacts/sonnyfrenzel-rgb-clean-core-io.json","generated":"2026-10-26","drafted_with_ai":true,"entity":{"id":"sonnyfrenzel-rgb-clean-core-io","name":"Clean-Core.io","artifact_type":"web-tool","ecosystem":"abap","serves_ecosystems":["cap"],"domain":"operations-and-runtime","secondary_domains":["developer-experience","learning-and-reference"],"origin_ring":"independent","source_available":true,"description":{"one_line":"A free hosted workspace that reads one piece of custom ABAP, redraws its business process as BPMN with a line anchor on every element, grades the SAP objects it uses Level A–D and ends in a keep, rebuild, move-to-standard or retire decision.","short":"Hosted workspace redrawing custom ABAP as BPMN and grading it","what_it_solves":"Someone has to say what happens to a custom ABAP program nobody still understands, and the answer has to be checkable afterwards. Clean-Core.io takes one program, runs a deterministic engine over it before any model sees it, and draws the business process the program implements as BPMN with the line each element came from, or the reason it has none. Analyze puts one Clean Core Score on the code, 5 to 100 in four published bands with the deductions that moved it, and grades every SAP object the code uses as clean core Level A–D from SAP's published Cloudification Repository and object classification. The same run carries on into a target design, a code draft and test scenarios, and every statement is labelled with one of nine provenance values, so what the language model proposed is marked as a model proposal. Each completed analysis is stored as an immutable run signed by the server with HMAC, and the audit pack exported from it carries an Ed25519 signature that can be verified offline against the published public key.","when_not_to_use":"The Level A–D grade merges SAP's two published files in the tool's own engine: it is an orientation rather than an ATC result and is left out of the signed audit pack, and the repository documents state by state where the grade is expected to differ from what the clean core ATC check reports. Nothing here runs ABAP Unit — on the RAP track that result is recorded from your own SAP system, and generated CAP tests run against mocks in an isolated runner rather than in a real SAP S/4HANA system. Tenants, organisation accounts, single sign-on, a self-hosted edition and write access through an API are deliberately not built, and one account has five analysis runs before a Gemini API key of its own is needed.","to_build_on_it":"Apache-2.0: the README states the licence lets you run or fork the code, and that you own the output you generate, while the object catalog derived from SAP's Cloudification Repository keeps its own copyright. Local development needs Node.js 22.8 or later and a `.env.local` holding Firebase keys, `GEMINI_API_KEY`, `AUDIT_SIGNING_KEY` and `RESEND_API_KEY`; the Playwright tests run against the Firebase emulators."},"links":{"homepage":"https://clean-core.io","repo":"https://github.com/sonnyfrenzel-rgb/clean-core.io","docs":"https://clean-core.io/how-it-works"},"compat":{"runtimes":["node"]},"provides":[{"capability":"capability:abap-cloud-readiness","what_it_does":"Grades every SAP object the custom code uses as clean core Level A–D from SAP's published Cloudification Repository and object classification, marks the objects neither file answers for as Unknown, records the rule version behind the grade, and ends in a decision on the program: keep, rebuild, move to SAP standard or retire. Every catalog grade is shown beside the message the clean core ATC check is expected to report for that object, or \"not determined\" where the repository found no source.","sources":[{"url":"https://github.com/sonnyfrenzel-rgb/clean-core.io","title":"sonnyfrenzel-rgb/clean-core.io — README, Clean Core Level A–D","checked":"2026-10-17","quote":"Each SAP object the code uses is graded Level A–D from SAP's published Cloudification Repository and object classification, or marked Unknown where neither holds an answer, with the rule version that produced it."},{"url":"https://github.com/sonnyfrenzel-rgb/clean-core.io","title":"sonnyfrenzel-rgb/clean-core.io — README, the Management view","checked":"2026-10-17","quote":"The Management view opens with the decision — keep, rebuild, move to SAP standard or retire — and what it rests on."},{"url":"https://raw.githubusercontent.com/sonnyfrenzel-rgb/clean-core.io/main/docs/design/abcd-vs-atc.md","title":"sonnyfrenzel-rgb/clean-core.io — docs/design/abcd-vs-atc.md §4","checked":"2026-10-17","quote":"**The expected ATC message stands next to every catalog grade** —"}]},{"capability":"capability:abap-static-analysis","what_it_does":"Reads one piece of uploaded custom ABAP with a deterministic engine before any model is asked anything, reconstructs the business process as BPMN with the source line on each element, and scores the code 5 to 100 in four published bands with the deductions that produced the figure and a map of where each finding sits in the program.","sources":[{"url":"https://github.com/sonnyfrenzel-rgb/clean-core.io","title":"sonnyfrenzel-rgb/clean-core.io — README, What it does","checked":"2026-10-17","quote":"You bring one piece of custom ABAP. A deterministic engine reads it first; a language model only proposes names and wording afterwards, and every proposal is marked as a Model proposal."},{"url":"https://github.com/sonnyfrenzel-rgb/clean-core.io","title":"sonnyfrenzel-rgb/clean-core.io — README, A Clean Core Score that says what it means","checked":"2026-10-17","quote":"Analyze puts one figure on the code, 5–100, higher is better, in four published bands (from *far from clean core* to *close to clean core*), with the deductions that moved it."},{"url":"https://github.com/sonnyfrenzel-rgb/clean-core.io","title":"sonnyfrenzel-rgb/clean-core.io — README, the process read from the code","checked":"2026-10-17","quote":"The engine reconstructs the business process the program implements and draws it as BPMN. Every element carries the line it came from (`L243`), or the reason it has none, including the business rules that are hard-coded in the program."}]},{"capability":"capability:documentation","what_it_does":"Writes a document of the custom program from the program itself — purpose and scope, trigger and inputs, and every statement with the lines it was read from — and labels each statement with one of nine provenance values, among them Reconstructed, Model proposal and Not determined.","sources":[{"url":"https://github.com/sonnyfrenzel-rgb/clean-core.io","title":"sonnyfrenzel-rgb/clean-core.io — README, the Documentation tool","checked":"2026-10-17","quote":"The Documentation tool of the demo project Z_MM_PO_APPROVAL: the process description written from the code — purpose and scope, trigger and inputs, every statement with the lines it was read from"},{"url":"https://github.com/sonnyfrenzel-rgb/clean-core.io","title":"sonnyfrenzel-rgb/clean-core.io — README, where each statement comes from","checked":"2026-10-17","quote":"Every statement carries one of nine provenance values: Proven, Confirmed, Reconstructed, Imported, Model proposal, Simulation, Demonstrated · mock, Stale, Not determined."}]}],"requires":[{"ref":"external:google-gemini","for":"the model calls that propose names and wording after the deterministic engine has read the code; an account has five analysis runs, and each starter example is free the first time it runs, after which the key is the user's own and Google bills it","requirement":"conditional","condition":"the account's five free analysis runs and first starter-example runs are used up","basis":"binding","sources":[{"url":"https://github.com/sonnyfrenzel-rgb/clean-core.io","title":"sonnyfrenzel-rgb/clean-core.io — README, Cost","checked":"2026-10-17","quote":"An account has five analysis runs, and each starter example is free the first time it runs; after that you continue with your own Gemini API key, which Google bills under your own agreement with Google."}]},{"ref":"artifact:sap-abap-atc-cr-cv-s4hc","for":"to grade every SAP object the code uses as clean core Level A–D","requirement":"required","basis":"binding","role":"grading-source","sources":[{"url":"https://github.com/sonnyfrenzel-rgb/clean-core.io","title":"clean-core.io README","checked":"2026-10-18","quote":"graded Level A–D from SAP's published Cloudification Repository and object classification"}]}],"connects":[{"ref":"external:google-gemini","kind":"data","direction":"outbound","style":"sync","for":"the model proposals the workspace asks for once the engine has read the code; the call is sent by the server route rather than the browser, which never sees the model key","sources":[{"url":"https://raw.githubusercontent.com/sonnyfrenzel-rgb/clean-core.io/main/docs/design/gemini-attempt-limit.md","title":"sonnyfrenzel-rgb/clean-core.io — docs/design/gemini-attempt-limit.md §3","checked":"2026-10-17","quote":"`lib/gemini.ts` sends one `fetch` per call and does not retry. The route retries the provider inside the same request (`callWithRetry`), which is not another POST."},{"url":"https://github.com/sonnyfrenzel-rgb/clean-core.io","title":"sonnyfrenzel-rgb/clean-core.io — README, Security and data","checked":"2026-10-17","quote":"Model keys never reach the browser; every mutating route verifies a Firebase ID token;"}]},{"ref":"external:sap-s4hana","kind":"data","for":"running generated tests against a connected SAP S/4HANA tenant","sources":[{"url":"https://github.com/sonnyfrenzel-rgb/clean-core.io","title":"clean-core.io README","checked":"2026-10-18","quote":"Running generated tests against a connected tenant is locked until the isolated live runner has passed its external review."}]}],"interfaces":[{"key":"catalog","kind":"ui","direction":"in","for":"reading SAP's Cloudification Repository and object classification in a browser, without an account","sources":[{"url":"https://github.com/sonnyfrenzel-rgb/clean-core.io","title":"sonnyfrenzel-rgb/clean-core.io — README, The SAP object catalog","checked":"2026-10-17","quote":"A free viewer of SAP's Cloudification Repository and object classification at [clean-core.io/catalog](https://clean-core.io/catalog), no account"}]}],"provenance":{"discovered_via":[{"source":"source:github"}],"first_seen":"2026-10-17"},"drafted_with_ai":true},"effective_normative_relations":[],"readings":{"liveness":[{"label":"Maintenance","tier":"unknown","evidence":"no release data"},{"label":"Continuity","tier":"unknown","evidence":"no contributor data"},{"label":"Repository","tier":"unknown","evidence":"no repository data"}],"compatibility":[{"label":"Declared for","tier":"fair","evidence":"nothing declared"},{"label":"Survived majors","tier":"unknown","evidence":"not read on ABAP: its lines run side by side"},{"label":"Maintainer's CI","tier":"unknown","evidence":"no repository data"}],"practice":[{"label":"Tests","tier":"unknown","evidence":"not crawled"},{"label":"Docs","tier":"unknown","evidence":"docs link declared, tree not read"},{"label":"Changelog","tier":"unknown","evidence":"not crawled"}],"reach":[{"value":null,"unit":"installs/week"},{"value":null,"unit":"watching"}]},"signals":{"crawled_at":"2026-10-26","npm":"not published under this name","repo":"not reachable","unreachable_since":"2026-10-20","unreachable_crawls":3},"edges":{"maintainers":[],"contributors":[],"explained_by":[],"alternative_to_this":[],"needed_by":[],"available_via":[],"parts":[],"add_ons":[],"answered_through_parts":[]}}