Govarbitrage

repo: ~/Projects/govarbitrage · 15 commits · 0 in last 24h, 0 in last 7d ·

Search the build

15 commits indexed

  1. 51d02ee 2026-09-16 chore: v0.5.3 (session close — TK-00046 /agents sort+density runtime guard)
  2. e801772 2026-09-16 TK-00046 test: runtime regression guard for /agents sort + density
  3. bfb96b1 2026-09-16 auto-data-snapshot: 2026-09-16T14:34:47 (1 data files) — tsconfig.tsbuildinfo
  4. 9bbed62 2026-09-16 Add GovArbitrage mobile app, browser extension, and import/digest scripts (with code-review hardening)
  5. 8c048d3 2026-09-16 auto-data-snapshot: 2026-09-16T11:14:29 (1 data files) — tsconfig.tsbuildinfo
  6. c32a7a1 2026-09-13 chore: v0.5.2 (session close — TK-11476 test coverage)
  7. f407576 2026-09-13 auto-data-snapshot: 2026-09-13T00:21:19 (1 data files) — tsconfig.tsbuildinfo
  8. 037818c 2026-09-12 TK-11476 test: regression guard for TK-11466 FIX 2 (presentedAdminBasicAuth)
  9. 91c4705 2026-09-12 auto-data-snapshot: 2026-09-12T13:27:22 (1 data files) — tsconfig.tsbuildinfo
  10. 5c6b0bb 2026-09-12 Snapshot: commit staged govarbitrage scaffold (Docker, README, apps/mobile Expo app, extension, docs, 5x report)
  11. c62e153 2026-09-12 TK-11464 fix (re-commit): gate orderBy nulls-ordering to nullable sort columns only
  12. 6531e6f 2026-09-12 TK-11464 test: regression guard for sort orderBy nullability classification
  13. 0442a97 2026-09-11 TK-11466 FIX 2: decouple ADMIN mint from wall-disabled state (presentedAdminBasicAuth)
  14. e3141d0 2026-09-11 Deploy approved TK-11249 pricing copy; local source e69a5ea
  15. d81ee96 2026-09-11 Snapshot live source before approved TK-11249 pricing release

Authors

Agents used

  • none detected

Skills used

  • /claude6
  • /code6
  • /agents3
  • /middleware3
  • /credentials3
  • /mobile2
  • /bundle1
  • /search1
  • /query1
  • /name1
  • /reviews1
  • /rating1
  • /digest1
  • /newsletter1
  • /hot-deal1
  • /no-live-signal1
  • /login1
  • /dev-only1
  • /public-actor-id1
  • /listings1
  • /pricing1

Creative ideas + design notes

Commits with substantial prose (≥120 chars) — the rationale behind each move.

51d02ee · 2026-09-16 · chore: v0.5.3 (session close — TK-00046 /agents sort+density runtime guard)
Lint clean (eslint 0), typecheck clean (tsc 0), unit suite green
(vitest 196/196). No product code changed this session — the only
addition is the TK-00046 regression guard committed in e801772.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
e801772 · 2026-09-16 · TK-00046 test: runtime regression guard for /agents sort + density
The sort + density fix landed 2026-07-26 but nothing verified it kept
working. Source/bundle inspection only proves the code is deployed, not
that the controls render and are wired, so this asserts observable
behaviour in a real browser instead.

Covers: controls render; sort reorders across all four keys; the density
slider changes the grid's minmax() track; both prefs survive a reload.

Intercepts /api/agents/search with a fixture, so it never calls Google
Places and costs $0 (a real search bills ~$0.04/query x 3 lenses x kinds).
The fixture is ordered so best/name/reviews/rating each yield a different
sequence — a no-op sort cannot pass.

Verified negative-capable: with name-sort stubbed to return the list
unsorted, exactly the two name-dependent tests go red while the render
and density tests stay green.

Basic-auth creds come from the same BASIC_AUTH env src/middleware.ts
reads (nothing hardcoded); E2E_CHANNEL drives system Chrome when the
shared ms-playwright cache is lock-contended by another project.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
9bbed62 · 2026-09-16 · Add GovArbitrage mobile app, browser extension, and import/digest scripts (with code-review hardening)
Introduces the Expo mobile app (apps/mobile), the listing-capture browser
extension, the auction-source importers, and the digest/newsletter/hot-deal
senders, plus test/build configs.

Code-review fixes applied to these files before commit:
- importers: exit non-zero on empty feed / all-rows-failed (no more false green);
  govdeals-free isolates each market so one failure can't abort the siblings
- liveness-sweep: scope GONE_MARKERS to <title>/no-live-signal so a sidebar
  "ended" string can't falsely mark a live listing REMOVED; add fetch timeout
- mobile auth-headers: UTF-8-safe base64 so a non-Latin1 password no longer
  throws out of every API call
- "Newest" sort now sorts by createdAt end-to-end (backend flattenListing +
  NATIVE_SORT_COLUMNS + sort test + mobile SortField), which also restores the
  admin created-date chip + location on the list grid
- hot-deal-alert: stamp hotAlertedAt before send with rollback-on-failure to
  avoid duplicate alerts
- send-digest: escapeHtml on scraped location; mkdir logs/ before dry-run write

Verified: backend tsc clean, 196 vitest pass, 13 mobile unit tests pass, lint clean.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014TiE2Px2C8yTX7JJFajxoP
c32a7a1 · 2026-09-13 · chore: v0.5.2 (session close — TK-11476 test coverage)
Lint (eslint) clean on src/middleware.test.ts, no autofixes needed.
Refactor pass: file already uses shared req()/basicHeader() helpers,
no dead code or duplication found — no changes made. Patch bump for
the TK-11476 regression-test addition.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
037818c · 2026-09-12 · TK-11476 test: regression guard for TK-11466 FIX 2 (presentedAdminBasicAuth)
Adds src/middleware.test.ts (8 cases) exercising the wall-OFF scenario that
caused the anonymous-ADMIN bypass: with BASIC_AUTH="" an anon caller on a
protected page must redirect to /login (307) / 401 JSON on APIs, and must
never be minted an ADMIN ga_session cookie -- including regression guards
for a bogus Authorization header and for presenting the exact default
BASIC_AUTH credential while the wall is off (the precise TK-11466 shape).
Wall-ON behavior is asserted unchanged (401 with no creds, ADMIN mint on
the correct shared credential, 401 on a wrong one). All 8 pass against the
current working-tree middleware.ts (which already carries FIX 2, committed
0442a97 and verified live on Kamatera prod per TK-11466's action log).
Full suite: 196/196 pass; tsc --noEmit clean.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SF5S5cw5NwnFQwg5iSbj6T
5c6b0bb · 2026-09-12 · Snapshot: commit staged govarbitrage scaffold (Docker, README, apps/mobile Expo app, extension, docs, 5x report)
Session close-out snapshot of the staged index (local only, no remote). Also
tune .gitleaks.toml: allowlist .env.example (pure placeholder template) + the
dummy hex/dev-only/DEMO_KEY/public-actor-id values so the generic-api-key rule
stops false-positiving on the 64-hex shape. No live secrets involved; all other
rules stay active on every other file.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WcVgXtxgFs4DnQDv3fFnLD
c62e153 · 2026-09-12 · TK-11464 fix (re-commit): gate orderBy nulls-ordering to nullable sort columns only
Re-commit — the prior fix commit was lost when this repo's .git was reset by
an external process on the re-populated tree. The working-tree fix was intact.
Sort-by-title (and any required native column) 500'd with PrismaClientValidationError
because the {sort,nulls} orderBy object form was applied to required fields;
Prisma only accepts it on nullable fields. Gate behind NULLABLE_NATIVE_SORT_COLUMNS.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UYTNq3N4J57Gcna8XdPJ18
6531e6f · 2026-09-12 · TK-11464 test: regression guard for sort orderBy nullability classification
DB-free vitest guard (reads Prisma DMMF) asserting a native sort column is
classified nullable iff its schema field is optional — catches the exact
recurrence vector of the title-sort 500 (the {sort,nulls} object form applied
to a required field). Verified: passes on current schema; proven to fail when
a required column (title) is misclassified as nullable. Does not touch
listings.ts (keeps the single-file deploy diff-guard intact).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UYTNq3N4J57Gcna8XdPJ18
0442a97 · 2026-09-11 · TK-11466 FIX 2: decouple ADMIN mint from wall-disabled state (presentedAdminBasicAuth)
Anonymous ADMIN auth-bypass: when BASIC_AUTH="" (wall off) basicAuthOk()
returns true for everyone, so the mint branch handed a real ADMIN ga_session
to any anonymous visitor -> reached /api/credentials + billing. Add
presentedAdminBasicAuth() (false when BASIC_AUTH empty; true only on a real
matching Basic-Auth credential) and use it for the ADMIN mint. Wall-on
behavior unchanged; wall-off no longer mints anonymous ADMIN.

tsc + next build pass. Verified: anon / -> 401, anon /api/credentials -> 401,
authed admin -> /api/credentials 200, anon /api/listings + /pricing -> 200.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019UrUfuy6xZtKf7bmWusKco

File tree

265 files tracked. Click any to browse the source at HEAD.

Other build journals

← Google Places Key Provisioner  ·  all 4 projects  ·  Govauctions Mcp →

Export

commits.csv · feed.atom · project.json · commits.json

rendered in 3ms