sap-transport-overview — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited sap-transport-overview (Agent Skill) and scored it 96/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 1 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 1 flagged
The text {match} tells the agent to skip the normal "ask the user first" gate. Used adversarially it removes the human-in-the-loop check before destructive or sensitive actions, turning a normally-gated agent into a fire-and-forget executor.
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.
A basis-/lead-oriented register of every open transport in the system: who owns what, how large each request is, and where the risks are — without ever pulling source or diffs. It's deliberately breadth-first and token-cheap, built on one call:
SAPTransport(action="list", summary=true, user="*", status="D") — every modifiable request, allusers, with objects[] omitted and an objectCount kept. (On a busy system the full object-laden list is ~25K tokens; summary cuts it to a few KB — see ARC-1 PR #448.)
This is the breadth companion to sap-transport-review (which is depth — diffs of one transport's objects). Overview answers "what's open and risky across the landscape"; review answers "what exactly changed in this one." Don't diff here.
| Setting | Default | Rationale |
|---|---|---|
| Users | all (user="*") | Basis cares about the whole system, not one developer |
| Status | modifiable (status="D") | Open/unreleased work; pass status="R" for released, "*" for both |
| Payload | summary=true | Inventory needs counts + headers, never source — keeps a 100-request list cheap |
| Diffs | never | That's sap-transport-review's job; this skill stays breadth-only |
| Grouping | by owner | The basis mental model: "whose requests, how many, how big" |
Optional narrowing — apply if given, else default to the whole system:
D (default), R (released), * (all)."without a target". The current transport payload has no age or object-package field, so do not offer age/package filtering without a separate authoritative data source.
Scope guard: the system-wide list can be hundreds of requests. Always start with summary=true. If it's still large, aggregate (counts per owner, top-N by objectCount) and offer to filter — never expand every request's object list unprompted.
SAPTransport(action="list", summary=true, user="*", status="D")Returns one row per request: id, description, owner, status, target/targetDesc, objectCount (+ per-task counts). That alone answers "what's open and how big" for the whole system.
For requests the user flags (or the suspicious ones from Step 3), pull the full object list:
SAPTransport(action="get", id="<id>")This lists CTS entries (pgmid, type, name, wbtype, locked) — the contents, not source or package metadata. Only get the handful in focus; do not get the whole system.
These are what an overview is for. Derive from the data already gathered:
key (pgmid, type, name) occurs in two manifests. This can create import-order risk. Raw-key intersection is conservative: it can miss conceptual overlaps represented once as R3TR and once as LIMU/language subobjects, so label the result "exact CTS-key overlap", not exhaustive conflict detection.
objectCount 0) — cleanup candidates (delete or release).locked: true from get) — may block other developers. On olderreleases tm:lock_status can be absent, so locked: false does not prove that an entry is unlocked.
target empty) — a local request that cannot be transported onward (often a mistake for work meant to ship).SAPTransport(action="history", type=…, name=…) is current assignment status, despite the legacy action name: relatedTransports contains at most the current lock request, while candidateTransports are requests the object could be assigned to. Candidates do not contain the object and are not conflict/history evidence. Full historical membership requires E071/E070 access; the standard ADT endpoints used here do not provide it.
Do not infer $TMP from a transport manifest: CTS entries do not expose package, and local-package objects normally are not transport contents. Resolve package separately before making such a claim.
# Open transports — <SID> (<N> requests, <M> objects, <K> owners)
## By owner
| Owner | Requests | Objects | Notable |
|---|---|---|---|
| MARIAN | 6 | 41 | 1 empty, 1 local request |
| ANNA | 2 | 8 | |
## Register
| Request | Owner | Description | Objects | Target | Flags |
|---|---|---|---|---|---|
| A4HK900123 | MARIAN | Sales order RAP | 12 | LOCAL | ⚠ no target — won't ship |
| A4HK900200 | ANNA | Pricing fix | 3 | C11 | ⚠ ZCL_PRICE also in A4HK900123 |
## Needs attention
- ⚠ Exact CTS key R3TR/CLAS/ZCL_PRICE is in 2 expanded requests (A4HK900123, A4HK900200) → possible import-order conflict; sequence or consolidate.
- ⚠ A4HK900155 (MARIAN) is empty → delete or release.
- ⚠ A4HK900123 has no target → local request; confirm it is not intended for downstream import.Write to disk only if asked; otherwise return inline.
| Error | Cause | Fix |
|---|---|---|
list returns very many requests | Busy system | Keep summary=true; aggregate per owner + top-N by size; offer to filter |
user="*" returns only my requests | Backend ignored the unfiltered query / scope limits | Confirm the SAP user may see others' requests (S_TRANSPRT); some systems restrict cross-user listing |
get slow across many requests | Expanding too much | Only expand the flagged/in-focus requests, never the whole system |
history returns many candidates | Candidates are assignment choices, not containing requests | Do not use them as history/overlap evidence; compare explicitly expanded manifests |
| Need released requests too | Default is D only | Re-run list with status="R" or status="*" |
standard ADT history action; use an authorized E071/E070 data workflow or an external CTS report.
SAPTransport(action="history", type=…, name=…).SAPTransport(action="release") / release_recursive.SAPTransport(action="delete").~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.