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

decentraland / atlas-server / 39821345489
94%

Build:
DEFAULT BRANCH: master
Ran 22 Oct 2026 05:24PM UTC
Jobs 1
Files 42
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

22 Oct 2026 05:17PM UTC coverage: 92.376% (+2.4%) from 89.94%
39821345489

push

github

web-flow
fix: read complete and consistent snapshots from the subgraph (#153)

Stacked on #152 (`fix/map-pipeline-state`). Review and merge that one
first.

## What was wrong
- **Large estates**: nested `estate { parcels }` lists default to
`first: 100`. Estate 2092 has 9,607 parcels, but an estate-level change
(name, owner, order) only reached 100 of them, and estate proximity came
from those same 100.
- **Truncated increments**: the update queries stopped at `first:
API_BATCH_SIZE`, and the cursor moved to the last row's `updatedAt`, so
rows that shared that second and didn't fit were skipped.
- **No snapshot**: the full fetch paged for minutes against a moving
head, and its cursor was the newest row it saw, so changes to
already-read pages could be lost.
- **Rentals boot**: thousands of `nftIds`-batched URLs.

## What changed
- Every fetch, full and incremental, reads `_meta { block { number
timestamp } }` and pins all of its queries to `block: { number }`. The
land cursor is that block's timestamp. I confirmed `_meta`, `block:`
pinning and `searchParcelEstateId_in` on
subgraph.decentraland.org/marketplace.
- Changed parcels and estates are paged by `id_gt` under a fixed
`updatedAt_gt` filter until a short page, so no rows are lost at
boundaries. All parcels of every affected estate (updated estates, plus
the ones updated parcels joined or left) are fetched the same way.
Estate NFTs and their proximity are built from the full parcel list.
- Rentals boot uses a paginated `status=open` sweep (82 listings in prd
today, 1 request). The same sweep runs again every
`RENTALS_SWEEP_INTERVAL` (default 3600 s) and fixes tiles whose listing
disagrees with it. Open listings that have already expired are skipped.

## Verification
`tsc --noEmit`, the full jest suite (126 tests) and prettier 2.8.8 all
pass. I checked that the new tests fail when each fix is reverted. I
also ran the component against the live subgraph with a 30-day cursor: 5
queries, 3.6 s, 1,398 tiles, an... (continued)

1222 of 1357 branches covered (90.05%)

Branch coverage included in aggregate %.

527 of 547 new or added lines in 7 files covered. (96.34%)

76 existing lines in 5 files now uncovered.

4327 of 4650 relevant lines covered (93.05%)

1133.36 hits per line

Uncovered Changes

Lines Coverage ∆ File
12
94.49
5.53% src/modules/api/component.ts
5
88.79
5.89% src/modules/map/component.ts
2
94.89
0.77% src/modules/map/utils.ts
1
88.11
-2.85% src/modules/rentals/component.ts

Coverage Regressions

Lines Coverage ∆ File
42
88.79
5.89% src/modules/map/component.ts
18
94.49
5.53% src/modules/api/component.ts
13
90.36
1.54% src/modules/s3/component.ts
2
94.89
0.77% src/modules/map/utils.ts
1
88.11
-2.85% src/modules/rentals/component.ts
Jobs
ID Job ID Ran Files Coverage
1 39821345489.1 22 Oct 2026 05:23PM UTC 84
92.69
GitHub Action Run
Source Files on build 39821345489
  • Tree
  • List 42
  • Changed 34
  • Source Changed 10
  • Coverage Changed 34
Coverage ∆ File Lines Relevant Covered Missed Hits/Line Branch Hits Branch Misses
  • Back to Repo
  • Github Actions Build #39821345489
  • 08df5872 on github
  • Prev Build on master (#39815816587)
  • Next Build on master (#39825659993)
  • 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