Skip to content

LAB-1812: commit the pointer probe and make it a CI gate - #29

Merged
27Bslash6 merged 4 commits into
masterfrom
lab-1812-pointer-probe-ci
Aug 14, 2026
Merged

27Bslash6 merged 4 commits into
masterfrom
lab-1812-pointer-probe-ci

Conversation

@27Bslash6

@27Bslash6 27Bslash6 commented Aug 10, 2026 •

Copy link
Copy Markdown
Contributor

Closes LAB-1812.

/map has shipped four pointer-interaction bugs green. A synthetic element.click() has no pointer plumbing to break — it never goes through pointerdown → capture → click retargeting, never crosses a drag threshold, never hit-tests through preserveAspectRatio letterboxing, and never produces a detail > 1. The only thing that ever caught them was a browser moving a real mouse, and that probe lived in one agent's worktree. It was not in the repo (git ls-tree -r origin/master had no such file) and is gone from disk, so this is a rewrite from the behaviour LAB-1702 documented, not a copy.

What lands

  • worker/test/pointer-probe.mjs — drives /map with page.mouse.*, 13 assertions, each carrying the bug it exists for.
  • playwright-core pinned to 1.62.1 as a devDependency. Production bundle and runtime dependencies untouched.
  • CI gate in .github/workflows/ci.yml — cached browser, then the probe against the wrangler dev the /health smoke check already boots.
  • worker/README.md — the "This is not wired into CI" paragraph is replaced by how the gate runs and how to run it locally.

The probe found a fifth bug on its first headless run

boxAspect() measured the map box with clientWidth/clientHeight, which round to whole pixels, while clientToUser() converts pointer coordinates with the fractional getBoundingClientRect(). At a landscape-phone height the box is 236.4 px and clientHeight calls it 236, so the viewBox was fitted to an aspect the element does not have and preserveAspectRatio letterboxed it — every click landing 0.17% off. Same family as the two bugs the README already warns about, at a viewport nobody had opened by hand. Both now read the same measurement, which is the only way they cannot disagree.

The gate gates

Reintroducing the exact regression the README forbids — svg.setPointerCapture(event.pointerId) in the pointerdown handler — turns 4 of the 13 assertions red. Seeded on a throwaway branch and dispatched at CI, never merged, branch since deleted: run 31350888613 — failure.

FAIL click on a marker opens that station
FAIL a click with a hand tremor still opens the smallest pin
ok   the + button zooms in
ok   the − button zooms out
ok   an unmodified wheel zooms the map
ok   dragging pans the view
ok   a drag that returns to its marker does not select it
ok   the page still scrolls with the cursor outside the map
ok   the viewBox aspect matches the box aspect
ok   jurisdiction labels stay screen-sized through a zoom
FAIL double-clicking a pin opens it once and does not zoom
FAIL a resize to a short viewport keeps the view and the aspect
ok   no uncaught page errors
4 of 13 FAILED

Clean tip is green: run 31350872098 — success.

That is one mutant. The full matrix, run locally against a map broken one way at a time — seven mutants, seven kills, each by the assertion that should catch it:

Regression seeded in map.js Killed by
pointer capture on the map root click / tremor-click / double-click / short-viewport click
suppressClick never set (a drag also selects) a drag that returns to its marker does not select it
drag threshold back under a pixel a click with a hand tremor still opens the smallest pin
jurisdiction labels not rescaled to screen pixels labels stay screen-sized through a zoom
boxAspect() back on rounded clientWidth/clientHeight resize to a short viewport keeps the view and the aspect
detail > 1 guard removed (one gesture selects twice) double-clicking a pin opens it once and does not zoom
marker radii not rescaled to screen pixels a click with a hand tremor still opens the smallest pin

Three of those assertions could not fail when this PR was first pushed. The expert panel mutation-tested them and found all three green against a map with the bug still in it — a drag released where the marker no longer was, a mouse.click() that emits no pointermove and so passes at any drag threshold including a negative one, and no coverage at all of the label half of rescaleToScreenPixels() (a pointer-events: none element is invisible to every hit test). Fixed in 32fea8b; the table above is the re-verification.

Determinism

Every wait is on an observable condition the gesture causes — a URL parameter, a viewBox attribute, a scroll position, a rendered height. No sleeps, and no retries: the workflow runs npm run probe:map exactly once, because a probe allowed to pass on its second attempt reports "flaky" as "green". The server readiness poll (30 × 1 s against /health) is the one loop and it gates on the endpoint answering, not on elapsed time. Target markers are chosen by hit-testing with elementFromPoint rather than by name or index, so a facilities.json refresh cannot silently turn an assertion into a no-op — if nothing is hittable the probe fails rather than passing vacuously. Playwright's default 30 s timeout is lowered to 10 s so a red build says so quickly, and every failure reports what it saw rather than that it timed out.

Cost

wall clock
master baseline (3 recent runs) 40 s / 45 s / 49 s
this branch, cold cache 74 s
this branch, warm cache 53 s

Added: ~13 s warm, ~30 s cold — against an expectation of ≤ 2 min. Browser install is 11 s on a cache hit (the apt deps are not cacheable and run either way), 24 s cold; the probe itself is ~2 s of the 5 s smoke step, and 1.8 s locally.

Expert panel

Run at high stakes. Bug-hunter's three CRITs are the mutation findings above, all applied. Also applied: failures now name what they saw instead of Timeout 10000ms exceeded (which could not distinguish "the click did nothing" from "the click opened the wrong station" — the two regressions this gate exists for); results print as they happen so a stall names the gesture; assertion 8 no longer leaves the page scrolled under the ones after it; a probe failure dumps the wrangler log the cleanup trap was deleting unread; restore-keys dropped from the browser cache. Security returned one LOW, accepted with reasoning: playwright-core install fetches the browser binary with no checksum verification, but the job holds zero secrets, runs contents: read on pull_request (not pull_request_target), and npm ci in the same job already executes lifecycle scripts — so the realistic blast radius is a CI gate that lies, not credential theft, and the Cloudflare token in deploy.yml is unreachable from here.

Summary by CodeRabbit

  • Bug Fixes

    • Improved map sizing so rendered maps maintain the correct aspect ratio, including fractional dimensions.
    • Improved reliability of map interactions, including marker selection, zooming, panning, double-clicking and short-viewport layouts.
    • Prevented unintended page scrolling and drag behaviour during map interactions.
  • Tests

    • Added comprehensive real-pointer checks for map interactions and visual behaviour.
    • Improved readiness validation and diagnostic reporting for map checks.

The /map surface has shipped four pointer-interaction bugs green, because a
synthetic `element.click()` has no pointer plumbing to break: it never goes
through pointerdown -> capture -> click retargeting, never hit-tests through
preserveAspectRatio letterboxing, and never produces a `detail > 1`. The only
thing that caught them was a browser moving a real mouse, and that probe lived
in one agent's worktree — one cleanup away from gone.

It now lives in the repo and runs on every PR. `playwright-core` is a
devDependency pinned to an exact version so the browser revision CI downloads
is the one on your laptop; the production bundle and its runtime dependencies
are untouched. The gate shares the `wrangler dev` the /health smoke check
already boots rather than paying for a second one, and the browser is cached.
Readiness is polled, never slept on, and there are no retries: a probe allowed
to pass on its second attempt reports "flaky" as "green".

Rewriting the probe found a fifth bug of the same family, at a viewport nobody
had opened by hand. `boxAspect()` measured the map box with clientWidth /
clientHeight, which round to whole pixels, while `clientToUser()` converts
pointer coordinates with the fractional getBoundingClientRect(). At a
landscape-phone height the box is 236.4 px and clientHeight calls it 236, so
the viewBox was fitted to an aspect the element does not have and every click
landed 0.17% off. Both now read the same measurement, which is the only way
they cannot disagree.
@kodus-27b

This comment has been minimized.

@coderabbitai

coderabbitai Bot commented Aug 10, 2026 •

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

You’ve reached a temporary PR review limit under our Fair Usage Limits Policy.

Your recent review volume is higher than typical usage, so adaptive limits are currently applied.

Next review available in: 4 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 2774af74-72ae-47d7-aa9e-ac3d3200e03b

📥 Commits

Reviewing files that changed from the base of the PR and between d879bee and 8d010fd.

📒 Files selected for processing (2)
  • worker/README.md
  • worker/test/pointer-probe.mjs
📝 Walkthrough

Walkthrough

The change adds a real-pointer Playwright probe for /map, corrects SVG aspect-ratio measurement, documents probe usage, and integrates pinned Chromium with CI health validation.

Changes

Map probe and CI integration

Layer / File(s) Summary
Map geometry and pointer probe
worker/public/map.js, worker/test/pointer-probe.mjs
boxAspect() now uses rendered SVG dimensions. The probe checks pointer interactions, navigation, requests, page errors, aspect ratios, and resizing.
Probe packaging and usage
worker/package.json, worker/README.md
The package adds the probe:map script and pinned playwright-core. The documentation describes local and CI probe execution.
CI readiness and execution
.github/workflows/ci.yml
CI caches and installs Chromium, completes health polling before validation, and runs the map probe against the local Worker.

Estimated code review effort: 3 (Moderate) | ~30 minutes

Sequence Diagram(s)

sequenceDiagram
  participant CI
  participant WranglerWorker
  participant PlaywrightChromium
  CI->>WranglerWorker: Start local Worker
  CI->>WranglerWorker: Poll health endpoint
  WranglerWorker-->>CI: Return health response
  CI->>PlaywrightChromium: Run probe:map
  PlaywrightChromium->>WranglerWorker: Open /map and perform pointer actions
  WranglerWorker-->>PlaywrightChromium: Return map state and navigation responses
  PlaywrightChromium-->>CI: Report assertion and runtime results
Loading

Possibly related PRs

Suggested reviewers: kodus-27b

Poem

A rabbit taps the map with care,
Then zooms through rendered air.
Chromium checks each pointer glide,
While CI keeps the probe beside.
Precise dimensions guide the way.

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 77.78% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly summarises the main changes: adding the pointer probe and enforcing it as a CI gate.
✨ Finishing Touches 💡 1
📝 Generate docstrings 💡
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch lab-1812-pointer-probe-ci

Comment @coderabbitai help to get the list of available commands.

@kodus-27b kodus-27b Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Found critical issues please review the requested changes

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

🧹 Nitpick comments (2)
worker/test/pointer-probe.mjs (1)

182-182: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Derive the "small marker" bound from the picked markers, not a literal.

small.r * 2 <= 24 hard-codes 24 px. The marker radius scale depends on √capacity and on the current zoom. A future scale change makes this guard fail even though the pick logic is correct. Compare small.r with clicked.r instead, since pickMarker already sorted by radius.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@worker/test/pointer-probe.mjs` at line 182, The assertion in the
pointer-probe test should derive the small-marker bound from the picked markers
rather than the hard-coded 24 px value. Update the check around small and
clicked to compare small.r against clicked.r, preserving the existing pickMarker
radius ordering and failure context.
.github/workflows/ci.yml (1)

100-111: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Dump the Worker log if the probe fails.

Both readiness branches print $log_file before they exit. The probe at Line 111 does not. set -euo pipefail aborts the step on a non-zero exit from npm run probe:map, then the EXIT trap deletes the log at Line 84. A probe failure caused by the server, for example a 500 from /api/v2/values or an asset-serving error, then leaves no server-side evidence. The probe output alone reports the symptom, not the cause.

♻️ Proposed change
-          npm run probe:map
+          if ! npm run probe:map; then
+            echo "--- wrangler dev log ---" >&2
+            cat "$log_file" >&2
+            exit 1
+          fi
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.github/workflows/ci.yml around lines 100 - 111, Update the workflow step
around npm run probe:map to capture probe failure before the EXIT trap removes
log_file: run the probe in an explicit conditional or otherwise handle its
non-zero status, print a clear failure message and cat "$log_file" to stderr,
then exit with the probe’s failure status. Preserve normal success behavior and
the existing readiness checks.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@worker/README.md`:
- Around line 137-142: Update the bullet-count statement immediately above the
list in worker/README.md to reflect the three bugs described by the list, while
leaving the listed bug descriptions unchanged.

In `@worker/test/pointer-probe.mjs`:
- Around line 217-219: Assert the result of pickEmptyPoint() before using it in
both affected sites: worker/test/pointer-probe.mjs lines 217-219 and 292-293.
Add the existing assert(empty, 'no bare-basemap point found') immediately after
each assignment and before geometry() or drag() runs, so null results report the
correct cause.
- Around line 53-59: Update the geometry function’s page.evaluate return value
to expose rect.width and rect.height as plain object properties, rather than
returning the DOMRect instance in rect. Preserve the existing viewBox-derived
values and aspect-ratio calculation while ensuring callers can access the
serialized rectangle dimensions.

---

Nitpick comments:
In @.github/workflows/ci.yml:
- Around line 100-111: Update the workflow step around npm run probe:map to
capture probe failure before the EXIT trap removes log_file: run the probe in an
explicit conditional or otherwise handle its non-zero status, print a clear
failure message and cat "$log_file" to stderr, then exit with the probe’s
failure status. Preserve normal success behavior and the existing readiness
checks.

In `@worker/test/pointer-probe.mjs`:
- Line 182: The assertion in the pointer-probe test should derive the
small-marker bound from the picked markers rather than the hard-coded 24 px
value. Update the check around small and clicked to compare small.r against
clicked.r, preserving the existing pickMarker radius ordering and failure
context.
🪄 Autofix

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 4a389090-84f5-47f6-ada7-d6493d7a7c28

📥 Commits

Reviewing files that changed from the base of the PR and between b7fa52c and 19bad06.

⛔ Files ignored due to path filters (1)
  • worker/package-lock.json is excluded by !**/package-lock.json
📒 Files selected for processing (5)
  • .github/workflows/ci.yml
  • worker/README.md
  • worker/package.json
  • worker/public/map.js
  • worker/test/pointer-probe.mjs

Comment thread worker/README.md
Comment thread worker/test/pointer-probe.mjs
Comment thread worker/test/pointer-probe.mjs
…1812)

Expert panel, mutation-tested against a deliberately broken map: three of the
assertions were green on code with the bug still in it.

- "a drag ending on a marker does not select it" passed with suppressClick
  deleted outright. The drag panned the map, so the marker was no longer under
  the pointer at release and no marker click was ever in flight — it released on
  bare <svg>. It now drags out and back to the same pin, which is the only
  gesture that puts a real marker click in front of the suppression.
- the drag-threshold assertion passed with DRAG_SLOP_PX = -1, because
  mouse.click() emits no pointermove at all, so dragging.moved is false at any
  threshold. It now moves the mouse 2 px between down and up, the way a hand
  does, and the out-and-back drag above brackets the threshold from the other
  side.
- nothing covered the label-scaling half of rescaleToScreenPixels: a CSS pixel
  is a USER unit at a 45-unit viewBox, so an unconverted 13 px label renders
  about 150 px tall, and .region-label is pointer-events:none so no hit test can
  see it. One assertion on rendered height now does.

Seven mutants, seven kills, each by the assertion that should catch it.

Also from the panel: failures now say what they saw rather than "Timeout
10000ms exceeded", which could not distinguish "the click did nothing" from
"the click opened the wrong station" — the two regressions this gate exists
for; results print as they happen so a stall names the gesture it stalled on;
assertion 8 no longer leaves the page scrolled under the ones after it; a probe
failure dumps the wrangler log the cleanup trap was deleting unread; and the
browser cache drops restore-keys, which could only ever restore the wrong
revision and then save both.
@kodus-27b

This comment has been minimized.

@kodus-27b kodus-27b Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Found critical issues please review the requested changes

Two findings, both applied:

- geometry() returned the raw DOMRect across the evaluate() boundary. The
  pinned playwright-core 1.62.1 does carry its prototype-getter properties
  across (verified empirically: all rect fields arrive, and CI's 13 green
  assertions consume rect.width/rect.height), but Playwright only documents
  plain-serializable returns, so the probe now sends { width, height } as a
  plain object rather than leaning on an undocumented serializer behaviour.

- the README said "Two bugs" over a list that had grown to three bullets,
  while the probe header counts four shipped regressions. The fourth — the
  double-click that zoomed the map out from under its own panel and fired
  the drill-down fetch twice — was already referenced in prose (detail > 1)
  but missing from the list. Added it; both counts now agree at four.

Probe re-run against a seeded local wrangler dev: 13 assertions passed.
tsc --noEmit clean on both configs.
@kodus-27b

This comment has been minimized.

Comment thread worker/test/pointer-probe.mjs
Comment thread worker/test/pointer-probe.mjs
@27Bslash6

Copy link
Copy Markdown
Contributor Author

@coderabbitai review

@27Bslash6

Copy link
Copy Markdown
Contributor Author

@kody start-review

@coderabbitai

coderabbitai Bot commented Aug 10, 2026 •

Copy link
Copy Markdown
⚠️ Action not completed

Already reviewed.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
worker/test/pointer-probe.mjs (1)

371-383: 🩺 Stability & Availability | 🟠 Major | ⚡ Quick win

Wait for the drill-down request instead of a timer task.

setTimeout(resolve, 0) does not synchronise with the Playwright request event. The probe can read valuesFetches before all requests from the double-click are reported. This can produce a false result for the duplicate-fetch regression check.

Create page.waitForRequest() before dblclick() and await it before the count assertion.

Proposed fix
       assert(target, 'no marker to double-click');
       const fetchesBefore = valuesFetches;
+      const valuesRequest = page.waitForRequest((req) => req.url().includes('/api/v2/values'));
       await page.mouse.dblclick(target.x, target.y);
       await waitForStation(page, target, 'a double-click');
-      await page.evaluate(() => new Promise((resolve) => setTimeout(resolve, 0)));
+      await valuesRequest;
       const after = await geometry(page);
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@worker/test/pointer-probe.mjs` around lines 371 - 383, Replace the
setTimeout-based task boundary in the double-click check with a request wait:
create and retain a page.waitForRequest() promise before page.mouse.dblclick(),
then await that promise after waitForStation and before asserting valuesFetches.
Keep the existing fetch-count and map-size assertions unchanged.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@worker/README.md`:
- Around line 175-177: Update the mouse.click() guidance in the README and
matching probe comments to clarify that it may emit a pointermove before
pressing but cannot test movement while held or drag thresholds. Replace those
probe examples with an explicit mouse.down() → mouse.move() → mouse.up()
sequence.

In `@worker/test/pointer-probe.mjs`:
- Around line 167-172: Update the map readiness waitForFunction call in the
pointer probe to use the configured 10-second timeout by removing the 30-second
override or setting it to 10_000, while preserving the existing readiness
conditions.

---

Outside diff comments:
In `@worker/test/pointer-probe.mjs`:
- Around line 371-383: Replace the setTimeout-based task boundary in the
double-click check with a request wait: create and retain a
page.waitForRequest() promise before page.mouse.dblclick(), then await that
promise after waitForStation and before asserting valuesFetches. Keep the
existing fetch-count and map-size assertions unchanged.
🪄 Autofix

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 2d699f3a-5f93-48a5-b03b-d0a68a10a42e

📥 Commits

Reviewing files that changed from the base of the PR and between 19bad06 and d879bee.

📒 Files selected for processing (3)
  • .github/workflows/ci.yml
  • worker/README.md
  • worker/test/pointer-probe.mjs
🚧 Files skipped from review as they are similar to previous changes (1)
  • .github/workflows/ci.yml

Comment thread worker/README.md Outdated
Comment thread worker/test/pointer-probe.mjs Outdated
- openMap: drop the 30 s waitForFunction override so the context's
  configured 10 s default bounds map readiness like every other wait.
- Correct the mouse.click() guidance in the README and probe comments:
  click does emit a pointermove (before pointerdown) — what it cannot
  do is move while the button is down, which is why it cannot test a
  drag threshold.
@kodus-27b

kodus-27b Bot commented Aug 10, 2026 •

Copy link
Copy Markdown

Code Review Completed! 🔥

The code review was successfully completed based on your current configurations.

Kody Guide: Usage and Configuration
Interacting with Kody
  • Request a Review: Ask Kody to review your PR manually by adding a comment with the @kody start-review command at the root of your PR.

  • Validate Business Logic: Ask Kody to validate your code against business rules by adding a comment with the @kody -v business-logic command.

  • Provide Feedback: Help Kody learn and improve by reacting to its comments with a 👍 for helpful suggestions or a 👎 if improvements are needed.

Current Kody Configuration
Review Options

The following review options are enabled or disabled:

Options Enabled
Bug ✅
Performance ✅
Security ✅
Business Logic ✅

Access your configuration settings here.

​

@27Bslash6

Copy link
Copy Markdown
Contributor Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Aug 10, 2026 •

Copy link
Copy Markdown
⚠️ Action not completed

Review rate limited.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

Comment thread worker/test/pointer-probe.mjs
@27Bslash6

Copy link
Copy Markdown
Contributor Author

@kody start-review

@27Bslash6
27Bslash6 merged commit b933e0d into master Aug 14, 2026
3 checks passed
@27b-io 27b-io deleted a comment from kodus-27b Bot Sep 23, 2026
@27b-io 27b-io deleted a comment from kodus-27b Bot Sep 23, 2026
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