• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

supabase / storage / 42910811871
88%

Build:
DEFAULT BRANCH: master
Ran 10 Nov 2026 10:04PM UTC
Jobs 2
Files 338
Run time 1min
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

10 Nov 2026 10:02PM UTC coverage: 87.618% (+0.02%) from 87.601%
42910811871

push

github

web-flow
fix: stamp webhooks applyTime at commit time and ensure ordering (#1691)

## What kind of change does this PR introduce?

Bug fix

## What is the current behavior?

- When an object is deleted, the `ObjectRemoved` and `ObjectPromoted`
webhooks get their `applyTime` stamped when the webhook is sent, not
when the database change actually committed.
- If backend content cleanup after a delete is slow, a newer unrelated
write to the same object can end up with an earlier `applyTime` than the
delayed delete or promotion webhook.
- When a delete promotes an older version at the same key, the removed
and promoted webhooks for that key have no guaranteed ordering between
them. Depending on delivery order, the cache can end up showing the
object as deleted instead of showing the promoted version.
- For a same-path move (like restoring an older version onto itself),
the "removed" and "created" events for that key could tie. The cache
could end up showing the object as removed even though the restore
worked.


## What is the new behavior?

- `applyTime` now reflects the moment the database transaction
committed, not when the webhook was actually sent.
- A newer unrelated write can no longer be mistaken for older just
because a prior delete's backend cleanup took a while.
- When a delete promotes an older version at the same key, the promoted
webhook always carries a later `applyTime` than its paired removed
webhook.
- For a same-path move, the "created" event always wins over the
"removed" event for that key.

## Additional context

The CDN cache uses `applyTime` to enforce a last-write-wins cache and
keeps whichever webhook has the higher applyTime. So a slow delete or
promotion can incorrectly overwrite a newer write in the cache

8488 of 10192 branches covered (83.28%)

Branch coverage included in aggregate %.

40 of 42 new or added lines in 3 files covered. (95.24%)

3 existing lines in 1 file now uncovered.

14516 of 16063 relevant lines covered (90.37%)

1354.78 hits per line

Uncovered Changes

Lines Coverage ∆ File
2
93.4
0.02% src/storage/object.ts

Coverage Regressions

Lines Coverage ∆ File
3
93.4
0.02% src/storage/object.ts
Jobs
ID Job ID Ran Files Coverage
1 rest-pg18 - 42910811871.1 10 Nov 2026 10:07PM UTC 316
67.0
GitHub Action Run
2 unit - 42910811871.2 10 Nov 2026 10:04PM UTC 331
70.24
GitHub Action Run
Source Files on build 42910811871
  • Tree
  • List 338
  • Changed 4
  • Source Changed 4
  • Coverage Changed 4
Coverage ∆ File Lines Relevant Covered Missed Hits/Line Branch Hits Branch Misses
  • Back to Repo
  • Github Actions Build #42910811871
  • 77625e76 on github
  • Prev Build on master (#42903078346)
  • Next Build on master (#42918831969)
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE TRIAL · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc