Event evt_9f42c1 matched

Event inbox · shopify · fulfillments/create · order #MIN10482 · one event end to end

Received
14:41:22
29-07-2026 GST
Classified
+412ms
budget 800ms for this topic
HMAC
verified
current secret · skew 0.4s
Rules evaluated
72
1 matched · 71 scored and stored
Ledger rows
1
1 quantity · 1 unit hop
Replays
2
0 new rows both times
This event is the posting topic for line 14892012349. Its sibling topics orders/create, orders/paid and orders/updated for the same order all resolved to noop under R-14.6. In i2 both orders/create and orders/updated would have posted, under two different keys. R-14.6 →
Payload 347
Decision
Near misses 71
Ledger rows 1
Idempotency
Replay history 2
Shadow divergence 1
Fan-out 4

Raw payload

4.2 KB · 347 keys · content-type application/json · highlighted keys are the ones the winning rule read

{
"id": 5841209310482,
"order_id": 5841209310194,
"name": "#MIN10482.1",
"status": "success",
"location_id": 18370396033,  // HQ_319
"created_at": "2026-07-29T10:41:19+00:00",
"tracking_company": "DHL",
"tracking_number": "4548827193",
"line_items": [ // 1 item
{
"id": 14892012349,
"sku": "MSR31-07",
"variant_id": 44021988112,
"title": "Sereen / Rose · Tan strap",
"quantity": 1,
"price": "749.00",
"fulfillable_quantity": 0,
"properties": []
}
],
"order": {
"source_name": "web",
"tags": "",
"financial_status": "paid",
"cancelled_at": null,
"currency": "AED",
"total_price": "749.00",
"refunds": []
},
"receipt": { … }
}
Highlight = read by rule C-018 of 347 keys were read. The other 339 were never touched by any rule that scored above 0.3.

Request

Headers as received

Endpoint
/webhooks/shopify/fulfillments/create
Remote IP
23.227.38.74
User-Agent
Shopify-Captain-Hook
Body bytes
4,318 / 1,048,576
Body sha256
b7f2…a913
Signature
verified current secret
Shop domain
minimalistae.myshopify.com
Webhook id
c1e4-9f42-1d77
Key source
shopify_webhook_id
Ack outcome
202 accepted 84ms

The signature digest is stored, the secret never is. Secret names live in [see ~/.env.master].

Sibling topics on the same order
orders/createnoop
orders/paidnoop
orders/updatednoop
fulfillments/createposting

Which rule matched, and why

C-01 straight_sale_online v4 · live · priority 20 · score 1.000 against threshold 0.800

matched
WHENtopic==fulfillments/create ANDorder.source_name!=pos ANDline_items.count==1 ANDorder.tagsexcludesExchange: Consignment: Preorder ANDstatus==success THENpost ledger−qty @STOCK@fulfillment.location_id WITHsource_type=sale
✓
topic == fulfillments/create
resolved fulfillments/create
1/1
✓
order.source_name != pos
resolved "web", so C-03 pos_sale does not apply and this topic is the posting topic
2/2
✓
line_items.count == 1
resolved 1. C-02 multi_line_sale scored 0.750 and lost here
3/3
✓
order.tags excludes Exchange: / Consignment: / Preorder
resolved ""
4/4
✓
status == success
resolved "success", so C-29 fulfilment_cancelled does not apply
5/5
✓
sku is not composite
MSR31-07 has no active recipe, so C-12 bundled_sku_expand is skipped and this posts directly
6/6
✓
location resolves
Shopify 18370396033 maps to HQ_319. An unresolved location would be a blocked decision, never a default
7/7
Score7 / 7 = 1.000
threshold 0.800

The rules that nearly matched

All 72 candidates were scored and stored, whether or not the event matched. The near miss is what tells you which rule to widen.

71 scored
0.0 to 0.1 · 41 rules
0.0
0.1 to 0.2 · 12 rules
.1
0.2 to 0.3 · 7 rules
.2
0.3 to 0.4 · 4 rules
.3
0.4 to 0.5 · 2 rules
.4
0.5 to 0.6 · 3 rules
.5
0.6 to 0.7 · 1 rule
.6
0.7 to 0.8 · 2 rules · nearest miss
.7
0.8 to 0.9 · 0 rules
.8
0.9 to 1.0 · 1 rule · C-01 winner
.9

Dashed line is the 0.800 threshold. The nearest miss is C-02 at 0.750, one predicate short.

RuleScoreFirst failing predicateExpectedActual
C-02 multi_line_sale0.750line_items.count>= 21
C-08 split_shipment_line0.714order.fulfillments.count>= 21
C-12 bundled_sku_expand0.667sku.is_compositetruefalse
C-23 exchange_sale_out0.571order.tagsmatches Exchange:*""
C-10 b2b_consignment0.571order.tagsstarts_with Consignment:""
C-11 preorder_backorder0.500order.tagscontains Preorder""
C-03 pos_sale0.429order.source_name== pos"web"
C-09 pickup_in_store0.429note_attributes.pickup_locationpresentabsent
C-29 fulfilment_cancelled0.333status== cancelled"success"
C-34 missing_sku_line0.286line_items[0].skunull or """MSR31-07"
C-16 refund_restock0.125topic== refunds/createfulfillments/create
C-41 ops2_dispatch_scan0.000source== ops2shopify

Ledger rows produced

Every row carries its own idempotency key and the decision id that explains it

1 quantity row · 1 unit hop
#SKULocationStock typeΔBalance afterRow idempotency keyPair
1MSR31-07HQ_319STOCK−1618shopify:sale:5841209310194:14892012349:5841209310482-
u1MSR31-07HQ_319unit ledgerIN_STOCK → PICKED-rfid:PICK:E28068940000401D7A21:5841209310482-
Composites post component rows onlyIf MSR31-07 had been a composite, this table would show recipe_transform rows for each component and zero rows for the parent, per ruling L2. The pinned recipe_id would appear in the key.

Idempotency

R-14.5

Formula
shopify:sale:{order_id}:{line_id}:{fulfillment_id}
Rendered
shopify:sale:5841209310194:14892012349:5841209310482
Scope
(shopify, key)
Already existed
no, first sight
Replay would
write 0 rows, suppress 1
Topic-independent
yes

The key is anchored on the physical event, not on the delivery, the webhook id or the topic that reported it. i2 anchored on the topic prefix (oc: versus ou:) and therefore deducted twice for every online order.

Replay history

A replay creates a new decision row. The old trace is never overwritten.

RunWhenByRulesetRuleNew rowsSuppressedVerdict
129-07 14:41:22classifierlive @ 14:41C-01 v410first pass
229-07 14:52:08ahmadlive @ 14:52C-01 v401same
329-07 15:14:31ahmad · backtestdraft C-01 v5C-01 v500backtest, wrote nothing
Reason on run 2: "checking the location fix"A replay that writes zero rows is a success, not a no-op to hide. Both counts are reported.

Shadow divergence

One shadow rule scored above threshold on this event

1 divergence
Live · C-01 v4
MSR31-07 · HQ_319 · STOCK −1
1 row · posted at 14:41:22
vs
Shadow · C-01 v5
MSR31-07 · HQ_319 · STOCK −1
MSR31-07 · HQ_319 · RESERVED +0
2 rows · wrote nothing
Draft v5 emits a zero-quantity RESERVED row. The ledger rejects quantity_delta = 0 (ruling L14), so this would be an error, not a divergence, once promoted. Counted as a P1 divergence and the streak is reset.
DateDecisionsAgreedDivergedDivergenceClean day
24-0716816800.0000%yes
25-0720420400.0000%yes
26-0719119100.0000%yes
27-07222200.0000%no · 22 < 30 samples
28-0717717700.0000%yes
29-07969511.0417%no · P1

Fan-out caused by this event

Outbound messages and their per-subscriber delivery

Open outbox ↗
TopicSubscriberOutbound idempotency keyAttemptsLatencyStatus
i3.balance.changedops2i3:i3.balance.changed:8a11-…-ff02:ops21118msdelivered
i3.balance.changedcsdi3:i3.balance.changed:8a11-…-ff02:csd196msdelivered
i3.balance.changedskuinteli3:i3.balance.changed:8a11-…-ff02:skuintel310.0sretrying
i3.unit.state_changedrfidi3:i3.unit.state_changed:c4d2-…-0091:rfid1142msdelivered
Attempt 3 carried the identical key to attempt 1i2 generated a fresh uuid4 on every attempt, so a retry looked like a new event to the receiving sibling. R-14.20.

Other states

What this page renders when the event did not go cleanly

Blocked
Rule matched, could not post.

block_reason = unknown_location. The fulfilment carried no location_id. i3 does not default to HQ_319. Fix the location map and this event retries automatically.

Location map
Unmatched
No rule scored 0.800.

Peak score 0.610 on C-27 ghost_exchange. A drift case is opened in the same transaction. The near-miss table is the workspace for widening a rule.

Drift case
Loading, error, permission, gate-blocked

Loading holds the tab strip and skeletons the payload. Error names the failing sub-resource, since a payload that will not parse should not hide the decision. Permission hides the payload body only. Gate-blocked appears when the event's topic has posting_allowed = false: the decision is real, the posting is deferred.

Keyboard Esc back to inbox1-8 tab R replayC copy payload D diff shadowG R open rule ⌘K palette
Connected to Event inbox Rule C-01 Classifier stats Sibling events Fan-out Audit trail Drift SKU MSR31-07 HQ_319 Unit ledger Live inventory Rate limits