Skip to content

Add Lane Flip Watch for reported fast-lane gaps - #169

Merged
sbc1-code merged 15 commits into
mainfrom
cursor/lane-flip-watch-ea76
Nov 3, 2026
Merged

sbc1-code merged 15 commits into
mainfrom
cursor/lane-flip-watch-ea76

Conversation

@sbc1-code

@sbc1-code sbc1-code commented Nov 2, 2026 •

Copy link
Copy Markdown
Owner

Lane Flip Watch compares retained CBP Ready/SENTRI values with general passenger, and Ready pedestrian with general pedestrian, in the existing BorderPulse shell. Both source clocks remain visible. Fresh retrieval alone does not establish current or simultaneous lane conditions.

The hour strip shows counts and percentages of retained fetches, with actual archive/per-lane dates and stale/missing states. Repeated fetches may contain the same underlying CBP report; they are not independent reports, days, probabilities or forecasts. There is no “usually” or “never slower” conclusion. Eligibility and non-simultaneity cautions travel with copied, native-shared and WhatsApp text in EN/ES.

The refreshed artifact contains 3,024 retained normalized snapshots, from 2026-10-04T04:07:32.650Z through 2026-11-03T03:37:39.520Z, across 27 crossing URLs. Raw historical responses were unavailable; earlier duplicate-row omissions remain explicitly disclosed. Coverage refresh does not reconstruct those lost values.

Button prop and optional SEO-field JSDoc contracts are annotation-only. Their parsed runtime syntax trees match the reviewed code; no runtime behavior, dependency or gate changed.

Integration state

Current head: 9a20e3aa056773e03a797dbdd645d83546669256. Intended order: #168 → #170 → #169. #168 contains task-start main baseline 99fa2255; #170 includes prepared #168; #169 includes prepared #170, so #169 is the full combined candidate. PR bases remain main. Later PR diffs include earlier fixes until integration proceeds in order.

Conflicts are resolved in the pushed branches, preserving both endpoint regression groups and N/A expectations, both sitemap imports, all reviewed documentation and current-main data. Subsequent main updates observed during testing changed feed data only and were not overwritten. Source guards, freshness/missing/zero states, native branding, keyboard/focus, reduced motion and share cautions remain intact.

Original feature work is by Cursor; Codex authored the correction and preparation commits. Review/preparation only: production approval is still pending. No shared-main merge, formal approval review, auto-merge, publisher rerun or production deployment was performed.

Current-head validation

  • Local Node 24 API-mode production build and full npm test passed on this exact commit: 257 unit checks and 474 desktop/mobile browser navigations. Entry JS 61.75/62 KiB; CSS 19.92/20 KiB. Budgets are unchanged.
  • Exact-head remote CI 41576481644 passed on Node 22 with a locked install, production build and full npm test: 257 unit checks and 474 browser navigations. CI entry JS 61.78/62 KiB, CSS 19.92/20 KiB; audit 0 high/critical, 1 moderate. Budgets and gates are unchanged.
  • Checks cover the combined Fix the deploy test, add a Spanish home, and refresh the no-JS snapshot #168/Keep reported CBP waits when duplicate port rows co-occur #170 journeys plus Lane Flip Watch counts, actual retained intervals, stale/missing history, eligibility and source-clock cautions, hour-strip keyboard/focus and all EN/ES share channels. Combined desktop/mobile screenshots were captured and inspected locally. Browser share APIs were mocked; no message was sent.
  • Local audit gate passed with 0 high/critical and 2 moderate advisories. Scoped manual security delta review found no new input sink, executable behavior, dependency or permission change beyond the reviewed fixes. A formal automated security scan is not claimed.
  • Typecheck remains ungreen: configured tsc --noEmit -p jsconfig.json reports 155 diagnostics. All 155 normalized diagnostics are present on untouched main (216 diagnostics). No compiler exclusions or checks were weakened.
  • Lint unavailable: an ESLint config exists, but no lint script or pinned ESLint/plugins are supplied in the manifest/lockfile/installed tree. No packages were added to manufacture a lint pass.
  • All 394 installed package versions match the lockfile. Local Vite preview does not execute Vercel functions: the API-mode no-JS fixture emulates bundled fallback, while actual handler timing/cache/error/host behavior is tested separately.
  • No hosted preview was found for this SHA during the read-only check. No manual preview deployment or access change was attempted. Current production API freshness remains unverified from this cloud environment; Pages/collector success is not treated as Vercel recovery. Issue [ops] Vercel daily publication failing #171 remains open.

Final verification of remaining limits

Exact comparison: base 99fa225589b1abf33145284076184e0097f9eb60 has 216 configured TypeScript diagnostics; final stack 9a20e3aa056773e03a797dbdd645d83546669256 has 155. Comparing full multiline diagnostic text, file and TS code as a multiset, ignoring only shifted line/column positions, gives 0 added and 61 removed. Compiler settings are unchanged. These remaining diagnostics are evidenced legacy debt, not an introduced stack regression.

Fresh base/final audit vulnerability objects are identical. The reproducible underlying moderate advisory is Vite GHSA-8g5g-mxqh-grgj, affecting Vite 6.4.4 development-server file-denial handling. Local npm reports Vite and its React plugin as two affected package records for that one advisory; CI emitted one moderate aggregate entry. npm audit --omit=dev --json reports zero vulnerabilities. Dependencies, lockfile and Vite server config are unchanged. The verified publisher builds static dist assets and specific API functions rather than running a Vite development server; the snapshot rewrites do not add a development file server. This stack introduces no identified production exposure to that advisory. The existing risk of separately exposing a vulnerable development server remains development-tool maintenance; no unrelated upgrade was performed.

The repository's documented verification path in .github/workflows/verify.yml and the refresh runbook is locked install, production build and npm test, including static MDX/CSS-parser/metadata, audit, bundle and browser gates. Those checks are not represented as a clean ESLint/typecheck result. No documented standalone ESLint substitute or pinned ESLint toolchain was found. Relevant available checks were rerun: CSS-parser and metadata gates passed; audit:recommendations passed 36 overall and 246 daily checks with zero out-of-hours results. All three unchanged exact-head remote CI runs remain successful.

No source/dependency correction was required for this verification follow-up. No new technical release blocker was identified under the existing gates; explicit production approval and actual post-release public verification remain outstanding. No merge or deployment occurred.

Historical artifacts

Original Cursor artifact links are preserved below. They predate the current preparation head and do not establish current-head behavior or QC.

Lane Flip Watch index, English, desktop
Lane Flip Watch index, English, mobile
Lane Flip Watch index, Spanish, desktop
Lane Flip Watch index, Spanish, mobile
Otay Mesa lane comparison, English, desktop
Otay Mesa lane comparison, English, mobile
Otay Mesa lane comparison, Spanish, desktop
Otay Mesa lane comparison, Spanish, mobile

Open in Web Open in Cursor 

cursoragent and others added 3 commits November 2, 2026 06:58
…snapshot.

A late map focus callback could take the search field and fail the Pages test. /es/ is the indexable Spanish home. On Vercel the no-JS snapshot frame uses the cached CBP fetch instead of the last full site build.

Co-authored-by: Sebastian Becerra <sbc1-code@users.noreply.github.com>
Compare Ready Lane, SENTRI, and Ready pedestrian with general from the existing CBP snapshots, and show how often the faster lane was reported slower over the last 30 days.

Co-authored-by: Sebastian Becerra <sbc1-code@users.noreply.github.com>
Ysleta's closed standard lane was dropped, so the empty Update Pending row outranked the row that reported Ready, SENTRI, and pedestrian waits. Keep those minutes, and keep Lanes Closed and N/A on the lane instead of storing a blank.

Co-authored-by: Sebastian Becerra <sbc1-code@users.noreply.github.com>
@sbc1-code
sbc1-code merged commit 2403a59 into main Nov 3, 2026
1 check 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.

2 participants