Skip to content

Fill an order's blanks from the holder's reservation row - #169

Merged
emroch merged 1 commit into
mainfrom
feat/resv-backfill
Oct 26, 2026
Merged

emroch merged 1 commit into
mainfrom
feat/resv-backfill

Conversation

@emroch

@emroch emroch commented Oct 26, 2026

Copy link
Copy Markdown
Owner

Until now, the reservations sheet was only used to drop holders who had already ordered. Nothing it recorded reached the order. This came up curating KCSF: the curated addition matched their reservation but didn't pick up its location.

Fill blanks from the holder's reservation row

  • What fills: an order (a sheet row or a curated addition) takes its blank reservation date and location from the same username's first row in the reservations sheet.
  • R1 answers: owner and model are filled as a pair, and only when the order has neither. Filling the model alone under a "No" would flip the owner to "Yes" (reconcile_r1_owner).
  • Never overwrites: whatever the orders sheet or overrides.yaml gives stands. Where both sheets give a reservation date, they disagree for 39 of 244 matched orders, and nothing says which is right.
  • Timing: runs after curation and before parsing, so a filled value goes through the same cleaning as the sheet.
  • Where it shows: each fill is listed in a new Filled from reservations card in the data-quality panel ("Added or corrected"), naming the reservation row it came from. Today that's 5 orders, all reservation dates.
  • Schema: the reservations sheet's two R1 columns are now mapped in schema.yaml.

Reservation audits name the other row

  • Reservation duplicates: each repeat says which row was kept: repeat of #2 (kept).
  • Reservations converted: each names the order it matched: already an order (#495), or (added in overrides.yaml) when it matched a curated addition.

Tests

New tests cover:

  • what fills and what stands
  • the R1 pair rule
  • no reservations sheet means no fill
  • the wording of both audit lines

./ci_env lint and the JS checks pass, and so does every Python test except test_overrides_yaml_is_canonical. That one failed only against my local, uncommitted overrides.yaml edits (not yet sorted); the committed file is canonical.

The reservations sheet was only used to drop holders who had ordered;
nothing it knew reached the order. An order (sheet row or curated
addition) now takes its BLANK reservation date and location from the
same username's first reservations-sheet row, and the R1 owner/model
pair when it has neither answer. Never overwrites: the orders sheet and
overrides.yaml stand (the two sheets' reservation dates disagree for
39 of 244 matched orders). Runs after curation, before parsing, so a
filled value is cleaned like the rest.

Each fill is listed under "Filled from reservations" in the
data-quality panel's "Added or corrected" group. The reservations
sheet's R1 columns are now mapped (schema.yaml).

The reservation audits also name the other row: a duplicate says which
row was kept ("repeat of #2 (kept)"), a converted reservation names its
order ("already an order (#495)", or "added in overrides.yaml").

Co-Authored-By: Claude <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown
Contributor

🔎 Preview deploy

Latest build: https://pr-169.r2-dashboard.pages.dev — always the newest build for this PR. Production (emroch.com/r2-dashboard) is untouched.

Commit This exact build Built (UTC)
1525f2c https://bceee30b.r2-dashboard.pages.dev 2026-10-26 01:02

@emroch
emroch merged commit 8eb4ce1 into main Oct 26, 2026
8 checks passed
@emroch
emroch deleted the feat/resv-backfill branch October 26, 2026 01:18
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