Skip to main content

Sprint 1 Location Eligibility Field-Test Protocol

Purpose and scope

This protocol supports issue #43, S1-W2-01 — Field-test and calibrate Sprint 1 location eligibility.

Its purpose is to determine whether the deployed Sprint 1 location journey is usable on campus. It is not a method for proving a player's presence, measuring movement, or testing unauthorised or unsafe locations.

Use the deployed HTTPS web application, its paired deployed API, an authenticated development player, and an active seeded Sprint 1 event. Do not substitute local mocks for the real-device observations required by the issue.

Current implementation to verify

The test operator should confirm the following implemented behaviour before recording results:

  • the browser requests a single location reading only after the player selects Check reachability;
  • the browser requests a fresh, high-accuracy reading with no cached position and a ten-second browser timeout;
  • the browser sends a location claim to the protected API but does not calculate distance or select the eligibility result;
  • the API evaluates the authoritative PostGIS distance and radius, incorporates the reported accuracy, and returns reachable, unreachable, retry, or unavailable;
  • a retry is a fresh player action and one new location request, not continuous monitoring; and
  • denied permission and map failure do not remove the text event list.

Safety and privacy controls

  • Test only from safe, authorised public locations. Do not test while crossing roads, driving, or in restricted areas.
  • Do not store or publish latitude, longitude, a full access token, raw request headers, or a precise movement path.
  • Screenshots must exclude browser developer tools, address-bar query values, console output, and any screen that displays precise coordinates.
  • Record broad conditions such as inside event area, clearly outside event area, or difficult positioning; do not record a coordinate or an exact route.
  • Use the player-facing term “reported location”. A result is not verified presence.

Test matrix

Complete at least the first four runs on one real mobile device. Repeat a representative reachable or safe-retry run on a materially different browser or device when available.

RunCondition and actionExpected player-facing resultExpected API resultEvidence to retain
F1Open /explore before selecting Check reachability.Active event remains visible; no location prompt yet.No eligibility request.One redacted screen, device/browser record.
F2From a safe position well within the active event area, select Check reachability and grant permission.Reachable result, or a safe retry if the reported accuracy is insufficient.reachable, or retry with location_accuracy.Redacted outcome screen and status/reason.
F3From a safe position clearly outside the event area, select Check reachability and grant permission.Unreachable result.unreachable with reachable: false.Redacted outcome screen and status.
F4Reset the site location permission, select Check reachability, then deny it.Permission explanation; event list and retry action remain usable.No eligibility request after the denied browser request.Redacted outcome screen and permission state.
F5In a realistically difficult but safe positioning condition, select Check reachability once.Clear reading result, timeout guidance, or an accuracy retry; no guessed decision.If a claim reaches the API near the accuracy boundary, retry with location_accuracy; otherwise no API eligibility result after a browser failure.Redacted outcome screen and broad condition.
F6Select Check again after a retry or browser failure.A new one-shot request and a new status announcement.A new eligibility request only if the browser supplies a claim.Outcome screen and action count.

The stale_location and future_acquisition_time outcomes are API contract checks. They cannot be reliably induced through normal browser geolocation and are covered by automated API tests unless a real deployed observation occurs.

Results record

Add one row per attempted run. Leave fields as not observed rather than inferring a result. Do not include coordinates, tokens, or raw API bodies.

RunDateDevice and OSBrowser and versionRoute/eventPermission stateBroad conditionUI outcomeAPI status / reasonUI/API consistent?Evidence linkNotes
F1not recordednot recordednot recorded/explore / active eventnot recordedpre-actionnot observedno request expectednot recordednot recordedawaiting real-device test
F2not recordednot recordednot recorded/explore / active eventnot recordedinside event areanot observednot observednot recordednot recordedawaiting real-device test
F3not recordednot recordednot recorded/explore / active eventnot recordedclearly outside event areanot observednot observednot recordednot recordedawaiting real-device test
F4not recordednot recordednot recorded/explore / active eventdeniedpermission resetnot observedno request expectednot recordednot recordedawaiting real-device test
F5not recordednot recordednot recorded/explore / active eventnot recordeddifficult positioningnot observednot observednot recordednot recordedawaiting real-device test
F6not recordednot recordednot recorded/explore / active eventnot recordedretrynot observednot observednot recordednot recordedawaiting real-device test

Store screenshots locally in .pr-screenshots/issue-43/ and attach only the sanitised files to the issue or resulting pull request. The folder is not committed.

Threshold decision record

DecisionCurrent implementationStatusEvidence required before changingReview required
Event radius75 m for the seeded Sprint 1 Great Hall eventProvisionalF2 and F3 observations across at least one real mobile device, including their reported outcomes; a confirmed issue if the radius causes a misleading resultUzair reviews the geospatial interpretation; Data and Infrastructure Lead coordinates any data change
Claim freshnessMaximum claim age of 120,000 ms (two minutes)ProvisionalReal-device timing observations when a usable case can be observed, plus the existing stale-claim API test; record any user-visible delay or unexpected retryAPI and Security Lead reviews any route or validation change
Accuracy handlingAPI compares the reported-accuracy envelope with the authoritative distance and radius; it has no separate fixed accuracy cutoffProvisionalF2/F5 observations showing whether the retry guidance is understandable and whether ambiguity is frequent under safe field conditionsUzair reviews the threshold implications; API and Security Lead reviews any server-rule change

No threshold is confirmed by this document. A future decision must state the observed evidence, remaining uncertainty, reviewer, and whether the value is confirmed, revised but provisional, or unresolved. Do not change a server rule or event seed from a browser observation alone.

Reporting a defect or decision request

Create a separate issue when observed behaviour differs from the matrix. Include the run identifier, device/browser, permission state, broad condition, expected and observed UI/API outcomes, and sanitised evidence. Exclude precise coordinates and credentials.

Request Uzair's review before interpreting field observations as a radius or accuracy-rule change. Request the API and Security Lead's review before changing claim freshness or API validation. The browser must continue to present the API result without calculating or overriding eligibility.

Completion gate

Issue #43 remains incomplete until real-device evidence covers at least two materially different outcomes, the resulting threshold statuses are updated, any defects are recorded, and Uzair has reviewed the geospatial interpretation.


The preceding document was planned, generated, and edited with the assistance of: Codex-CLI[GPT-5].