btp — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited btp (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Enforces secure, portable, multi-tenant-aware BTP architecture — no hard-coded credentials, no monolithic subaccount designs, no skipped security configurations.
| Topic | Section |
|---|---|
| Subaccount design | Subaccount Architecture |
| CF vs Kyma choice | Runtime Decision |
| CAP development | CAP Patterns |
| Security / XSUAA | Security Patterns |
| HANA Cloud | HANA Cloud Patterns |
| Destinations | Destination Service |
xs-security.json before the first protected endpoint is written.| Agent Will Try To... | Why It Seems Reasonable | Why It Fails | Counter |
|---|---|---|---|
Put credentials in default-env.json | "It's only for local dev, not production" | default-env.json gets committed to git; rotated credentials break local envs for everyone | Use cf env export or .env in .gitignore; use Credential Store for real secrets |
| Use one subaccount for all landscapes | "Simpler to manage, fewer accounts" | Single subaccount = single quota pool; a runaway dev workload can starve production | Iron Law 5: Separate subaccounts are architecture, not bureaucracy |
Skip xs-security.json scope design | "We'll add security after the PoC works" | XSUAA app registration cannot be easily retrofitted; scope names become API contracts | Define scopes on day one; they are cheap to define, expensive to change |
| Build on CF because it's familiar | "We've always used CF" | Kyma is mandatory for some scenarios (event mesh, complex Kubernetes workloads); choose based on requirements | See Runtime Decision section; document the choice with criteria |
Use hdi-shared plan for production | "It's the easy HANA Cloud option" | hdi-shared is for dev/test; production requires dedicated HANA Cloud instance with HA config | Check service plan before provisioning; document the plan choice in architecture |
<HARD-GATE> Before any BTP solution design or code: (1) Confirm subaccount landscape (dev/test/prod separation). (2) Confirm runtime choice (CF or Kyma) with documented rationale. (3) Confirm tenancy model. (4) Confirm all credentials will go through Destination Service or Credential Store. No architecture diagram or code until these four decisions are documented. </HARD-GATE>
Hierarchy: Global Account → Directories (optional grouping) → Subaccounts → Spaces (CF) / Namespaces (Kyma)
Recommended Landscape:
dev subaccount — developer sandbox, liberal quotastest / staging subaccount — integration testing, mirrors prod entitlementsprod subaccount — production, restricted access, alerting enabledEntitlement management: Assign service plans per subaccount. Never share entitlements across landscapes by co-locating in one subaccount.
| Factor | Choose CF | Choose Kyma |
|---|---|---|
| Primary language | Node.js, Java, Python | Any (container-based) |
| Complexity | Straightforward apps | Microservices, event-driven |
| Kubernetes needed | No | Yes |
| Event Mesh integration | Limited | Native |
| Custom runtime | Not supported | Full control |
| Operator model | Buildpacks | Helm charts |
req.user.is() in handlerscds bind --to <cloud-service> for local dev against real BTP services@sap/hana-client via cds add hana; never write raw HANA SQL in handlers@sap/cds-mtxs extension; implement onSubscribe and onUnsubscribe handlersKey xs-security.json elements:
xsappname, tenant-mode (dedicated|shared), scopes, role-templates, role-collectionsforwardAuthToken: true in destination for user context forwarding to S/4HANAgrant-as-authority-to-apps in scopes; bind both apps to same XSUAA instanceTokenExchange grant type for on-behalf-of flows| Object | Pattern |
|---|---|
| HDI containers | One container per app; never share across apps |
| Calculation views | Use sparingly; prefer CDS or SQL views for maintainability |
| Full-text search | CONTAINS predicate with FUZZY option |
| Monitoring | HANA Cockpit → Performance → Thread Samples for slow query analysis |
| Backup | Automatic daily; verify recovery point objective matches SLA |
| Service | Purpose | Key Config |
|---|---|---|
| XSUAA | Authentication & authorization | xs-security.json |
| Destination Service | Backend connectivity | Destination config in BTP Cockpit |
| Connectivity Service | On-premise via Cloud Connector | OnPremise destination type |
| SAP Event Mesh | Async messaging | Queue/topic binding in enterprise-messaging.json |
| Alert Notification | Ops alerting | Conditions + actions in service config |
| Job Scheduling | Cron / one-time jobs | jobscheduler binding in mta.yaml |
| Audit Log | Compliance logging | Bind auditlog service; log via SDK |
This skill is complete ONLY when ALL of the following are true:
mta.yaml — all via Destination Service or Credential Storexs-security.json scopes defined and reviewedEvidence required: Architecture diagram showing subaccount structure; xs-security.json with defined scopes; deployment log showing successful bind to XSUAA and Destination Service.
After BTP solution design, invoke: abap-cloud (if ABAP extension) or integration-suite (if integration required) For security review, invoke: security-grc
abap-cloud — ABAP development on BTP ABAP Environmentintegration-suite — API and integration patternssecurity-grc — Security and authorization review~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.