ucp-fulfillment — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited ucp-fulfillment (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.
中文摘要:在 UCP checkout session 上设置/解析履约——填目的地址、对 line items 分组、从商家 返回的选项里选配送/自提方案,用真实的fulfillment.methods / groups / options字段。需要确定 配送方式并把运费体现到 totals 时用。对应能力dev.ucp.shopping.fulfillment。
Fulfillment is part of the checkout session, set via PUT /checkout-sessions/{id}. 履约是 checkout session 的一部分,通过 PUT 设置。
Capability dev.ucp.shopping.fulfillment. The fulfillment object lives on the checkout session. You send a destination + selections; the merchant returns options with prices, which appear in session totals as type: "fulfillment".
Request — `fulfillment.methods[]` (what you send):
"fulfillment": {
"methods": [
{
"type": "shipping", // e.g. "shipping" | "pickup"
"line_item_ids": ["li_1"],
"destinations": [
{ "street_address": "1 Hauptstr", "address_locality": "Berlin",
"address_region": "BE", "postal_code": "10115", "address_country": "DE" }
],
"groups": [ { "id": "grp_1", "selected_option_id": "opt_std" } ]
}
]
}Response — `fulfillment.methods[]` (what the merchant returns):
"fulfillment": {
"methods": [
{
"id": "fm_1",
"type": "shipping",
"line_item_ids": ["li_1"],
"selected_destination_id": "dest_1",
"destinations": [ { "id": "dest_1", "address_country": "DE", "...": "…" } ],
"groups": [
{
"id": "grp_1",
"line_item_ids": ["li_1"],
"selected_option_id": "opt_std",
"options": [
{ "id": "opt_std", "title": "Standard", "description": "5 days",
"totals": [ { "type": "fulfillment", "amount": 0 } ] },
{ "id": "opt_exp", "title": "Express", "description": "1–2 days",
"totals": [ { "type": "fulfillment", "amount": 990 } ] }
]
}
]
}
]
}line_item_ids per method via PUT (remember: full-replace, keepline_items/buyer too).
id, title, description, and atotals entry of type: "fulfillment" (the price).
groups[].selected_option_id and re-PUT.totals (the fulfillment line updated) before checkout completes.recoverable message; fix or warn.methods / groups; some items pickup-only — handle per group.line_item_ids; don't assume one shipment.options; never keep a stale selected_option_id.Ship 2×GTX to Berlin; user wants the cheapest option.
PUT with fulfillment.methods[0].destinations=[{…DE…}], line_item_ids:["li_1"].groups[0].options = [opt_std €0/5d, opt_exp €9.90/1–2d].selected_option_id:"opt_std", re-PUT.totals now shows fulfillment: 0; total recomputed. Proceed to complete.ucp-checkout-session~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.