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

decentraland / catalyst-storage / 30227514701
95%

Build:
DEFAULT BRANCH: main
Ran 27 Jul 2026 12:29AM UTC
Jobs 1
Files 17
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

27 Jul 2026 12:28AM UTC coverage: 94.59% (-1.4%) from 95.952%
30227514701

push

github

web-flow
feat!: fix silent-corruption bugs, drop unused modes, shrink the public surface (#119)

* feat!: fix silent-corruption bugs, drop unused modes, shrink the public surface

Findings from a full review of the library, plus the removals that a usage audit
across snapshots-fetcher, worlds-content-server, catalyst, deployments-to-sqs and
asset-bundle-registry showed to be safe.

Bugs fixed (each with a regression test):

* A store handed an already-consumed stream committed a 0-BYTE object and
  resolved. In a content-addressed store that is permanent: exist(id) answers
  true, so nothing re-fetches. The in-memory backend already rejected these;
  folder-based and S3 stored nothing and reported success. All three now reject
  with ERR_STREAM_PREMATURE_CLOSE.
* The .gzip id reservation was case-sensitive, so on a case-folding filesystem
  (APFS/NTFS/SMB) storing `<id>.GZIP` overwrote another id's compressed
  representation: that id then failed to inflate, reported a fabricated
  contentSize, and was enumerated while the id that clobbered it was not. The
  reserved staging directory had the same hole.
* allFileIds() could omit an id that held a complete representation for the whole
  enumeration, because the raw/gzip dedup was decided from a directory read and
  applied to a later one. A small directory is now decided from a single read; a
  large one confirms the skip against the filesystem.
* The S3 startup probe inferred "this principal cannot s3:ListBucket" from a 403
  AccessDenied — which is also what a scoped policy returns for a MISSPELLED
  bucket, turning a typo into a node that reported every id absent for its whole
  lifetime. Lenient reads are now the explicit report403AsAbsent option.
* Legacy no-rename range reads returned ZERO bytes to a paused-mode consumer.
* ENAMETOOLONG aborted a whole delete batch; S3 enumeration stopped after one
  page on endpoints that omit IsTruncated; the in-memory backend handed out its
  live stored buffer and val... (continued)

619 of 695 branches covered (89.06%)

Branch coverage included in aggregate %.

209 of 212 new or added lines in 13 files covered. (98.58%)

21 existing lines in 6 files now uncovered.

1147 of 1172 relevant lines covered (97.87%)

1218.99 hits per line

Uncovered Changes

Lines Coverage ∆ File
2
96.59
-0.17% src/folder-based-storage-component.ts
1
88.59
-3.25% src/s3-based-storage-component.ts

Coverage Regressions

Lines Coverage ∆ File
5
96.59
-0.17% src/folder-based-storage-component.ts
5
81.43
-12.32% src/mime-detection.ts
5
88.59
-3.25% src/s3-based-storage-component.ts
3
94.82
-0.29% src/folder-based/intent-journal.ts
2
94.77
-1.93% src/folder-based/decompress-cache.ts
1
96.3
-3.7% src/in-memory-storage-component.ts
Jobs
ID Job ID Ran Files Coverage
1 30227514701.1 27 Jul 2026 12:29AM UTC 17
94.59
GitHub Action Run
Source Files on build 30227514701
  • Tree
  • List 17
  • Changed 15
  • Source Changed 15
  • Coverage Changed 14
Coverage ∆ File Lines Relevant Covered Missed Hits/Line Branch Hits Branch Misses
  • Back to Repo
  • Github Actions Build #30227514701
  • 7617704f on github
  • Prev Build on main (#30203832702)
  • Next Build on main (#30272322309)
  • Delete
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