Skip to content

Stamp the sweep tick where the grid rebuild reads live positions - #474

Merged
Frotty merged 1 commit into
masterfrom
spatial-index-rebuild-tick
Sep 3, 2026
Merged

Stamp the sweep tick where the grid rebuild reads live positions#474
Frotty merged 1 commit into
masterfrom
spatial-index-rebuild-tick

Conversation

@Frotty

@Frotty Frotty commented Sep 3, 2026

Copy link
Copy Markdown
Member

What

Follow-up to #473, which merged while this commit was in flight, so it missed the squash.

rebuildSpatialIndexGrid re-buckets every unit from a fresh getPos, but was the one site that cached a live position without recording when it read it. Every other one does: registerUnit, refreshUnit on both branches, and the query write-back added in #473.

Why it matters now

While lastSweepTick fed nothing but the sweep's worst-age counter, a missing stamp only skewed a diagnostic. #473 made the query derive an entry's padding from it, so after a rebuild every entry looks maximally stale even though its cache was just made exact. Queries then pad by a whole sweep cycle and re-read positions they already hold, until the sweep works its way around — five ticks at 500 units and 128 per tick.

Why not inside linkIntoCell

The stamp belongs with the read, not with the link. Putting it in linkIntoCell would tie freshness to bucketing and silently depend on every future caller passing a live position; a caller that re-links a cached position would then stamp it fresh, which is the one direction that returns wrong results rather than slow ones.

Checks

Every other site that caches a position records when it read it: registerUnit,
refreshUnit on both its branches, and the query write-back. The grid rebuild
did not, and it re-buckets every unit from a fresh getPos.

That only skewed a diagnostic while lastSweepTick fed nothing but the sweep's
worst-age counter. Now that the query derives an entry's padding from it, a
rebuild leaves every entry looking maximally stale while its cache is in fact
exact, so queries pad by a whole sweep cycle and read positions they already
have, until the sweep works its way around.

The rule is that the stamp belongs with the read, not with the link: writing
it inside linkIntoCell instead would tie freshness to bucketing and quietly
depend on every future caller passing a live position.
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Sep 3, 2026

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review Completed 2026-09-03T20:36:00.031106Z 6711d42 PR opened
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@Frotty
Frotty merged commit 698817b into master Sep 3, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant