chore(sqlc): delete 21 dead sqlc queries + companion dead code (bookshelf-9snmz.1.1) #1254

Merged
zombor merged 1 commit from bd-bookshelf-9snmz.1.1 into main 2026-07-27 12:26:43 +00:00
Owner

Summary

  • Delete 21 dead sqlc queries verified unreachable from production (word-boundary grep + deadcode analysis across all build tags)
  • Delete two dead domain functions that depended on the removed queries (shelves.ListBooks, hardcoversync.SyncUserBooks/pushBooks) — required to keep compilation clean; both superseded by scoped/workflow variants
  • Regenerate via make sqlc; move ListBookFilesByLibraryRow struct into library_scan_extra.go (live StreamBookFilesByLibrary still uses it, but the buffered sqlc query was dead)
  • Delete companion integration and unit tests that only tested the dead code
  • Net change: -1180 LOC (+18 for the moved struct definition)

Deleted queries: AppendTaskLog, ListTaskLogsAfter, Ping, ListBooksOnShelf, CountBooksOnShelf, ShelfBookExists, ListUserBooksForHardcoverSync, RevokeRefreshTokenAtomic, GetAllUserIDs, GetAllLibraryIDs, IsAppMigrationDone, MarkAppMigrationDone, SetGoodreadsIDLocked, StatsTopCategories, ListBookdropFilesByStatus, UpdateBookdropFileWithError, DeleteBookdropFile, ListBookFilesByLibrary, UpdateBookScannedOn, UpdateBookStatus (wrote banned book.read_status), UpsertEmailProviderPreference

Test plan

  • make sqlc regenerates cleanly
  • make test passes (all 50 packages green)
  • make coverage gate passes (100% maintained)
  • go build ./... compiles cleanly
  • Each deleted query verified zero production callers via git grep excluding _test.go and internal/db/sqlc/

Closes bead bookshelf-9snmz.1.1 on merge.

## Summary - Delete 21 dead sqlc queries verified unreachable from production (word-boundary grep + deadcode analysis across all build tags) - Delete two dead domain functions that depended on the removed queries (`shelves.ListBooks`, `hardcoversync.SyncUserBooks`/`pushBooks`) — required to keep compilation clean; both superseded by scoped/workflow variants - Regenerate via `make sqlc`; move `ListBookFilesByLibraryRow` struct into `library_scan_extra.go` (live `StreamBookFilesByLibrary` still uses it, but the buffered sqlc query was dead) - Delete companion integration and unit tests that only tested the dead code - Net change: -1180 LOC (+18 for the moved struct definition) Deleted queries: `AppendTaskLog`, `ListTaskLogsAfter`, `Ping`, `ListBooksOnShelf`, `CountBooksOnShelf`, `ShelfBookExists`, `ListUserBooksForHardcoverSync`, `RevokeRefreshTokenAtomic`, `GetAllUserIDs`, `GetAllLibraryIDs`, `IsAppMigrationDone`, `MarkAppMigrationDone`, `SetGoodreadsIDLocked`, `StatsTopCategories`, `ListBookdropFilesByStatus`, `UpdateBookdropFileWithError`, `DeleteBookdropFile`, `ListBookFilesByLibrary`, `UpdateBookScannedOn`, `UpdateBookStatus` (wrote banned `book.read_status`), `UpsertEmailProviderPreference` ## Test plan - [x] `make sqlc` regenerates cleanly - [x] `make test` passes (all 50 packages green) - [x] `make coverage` gate passes (100% maintained) - [x] `go build ./...` compiles cleanly - [x] Each deleted query verified zero production callers via `git grep` excluding `_test.go` and `internal/db/sqlc/` Closes bead bookshelf-9snmz.1.1 on merge.
chore(sqlc): delete 21 dead sqlc queries + companion dead code (bookshelf-9snmz.1.1)
All checks were successful
/ JS Unit Tests (pull_request) Successful in 54s
/ E2E API (pull_request) Successful in 3m24s
/ Test Race (pull_request) Successful in 3m37s
/ Coverage (pull_request) Successful in 4m2s
/ Lint (pull_request) Successful in 4m13s
/ Integration (pull_request) Successful in 4m40s
/ E2E Browser (pull_request) Successful in 6m5s
b1adf5f4a6
Delete the 21 dead sqlc queries verified unreachable from production:
- task_logs.sql (AppendTaskLog, ListTaskLogsAfter) — decommissioned task-pool
- ping.sql (Ping) — health check uses sql.DB.PingContext directly
- shelves.sql (ListBooksOnShelf, CountBooksOnShelf, ShelfBookExists) — superseded by scoped variants
- hardcover_sync.sql (ListUserBooksForHardcoverSync) — superseded by paged variant
- users.sql (RevokeRefreshTokenAtomic, GetAllUserIDs, GetAllLibraryIDs, IsAppMigrationDone, MarkAppMigrationDone)
- metadata.sql (SetGoodreadsIDLocked)
- stats.sql (StatsTopCategories)
- bookdrop.sql (ListBookdropFilesByStatus, UpdateBookdropFileWithError, DeleteBookdropFile)
- library_scan.sql (ListBookFilesByLibrary, UpdateBookScannedOn)
- books.sql (UpdateBookStatus) — writes banned legacy book.read_status column
- email.sql (UpsertEmailProviderPreference)

Also delete the dead domain functions that depended on the above queries
(required to keep compilation clean; both clusters verified unreachable):
- shelves.ListBooks (superseded by ListBooksScoped)
- hardcoversync.SyncUserBooks + pushBooks (superseded by go-workflows path)

Regenerate via make sqlc; move ListBookFilesByLibraryRow struct definition into
library_scan_extra.go since StreamBookFilesByLibrary (live) still uses it.
Delete all companion integration/unit tests that only exercised dead code.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Author
Owner

Code Review — bd-bookshelf-9snmz.1.1 (Deletion PR)

Summary: Verified all 21 deleted sqlc queries and 2 deleted domain functions have zero production callers.

Deletion Safety Verification

Deleted sqlc queries (all confirmed dead):

  • ListBookdropFilesByStatus — no production callers (only in deleted integration test)
  • UpdateBookdropFileWithError — no production callers (only in deleted integration test)
  • DeleteBookdropFile — no production callers (only in deleted integration test)
  • UpdateBookStatus — no production callers (only in deleted integration test)
  • ListBookFilesByLibrary — no production callers (only in deleted integration test); streaming variant StreamBookFilesByLibrary remains and is actively used by library/scan
  • UpdateBookScannedOn — no production callers (only in deleted integration test)
  • SetGoodreadsIDLocked — no production callers
  • ListBooksOnShelf — no production callers (only in deleted test shelves/service_test.go)
  • CountBooksOnShelf — no production callers
  • ShelfBookExists — no production callers
  • StatsTopCategories — no production callers
  • RevokeRefreshTokenAtomic — no production callers
  • GetAllUserIDs — no production callers
  • GetAllLibraryIDs — no production callers
  • IsAppMigrationDone — no production callers
  • MarkAppMigrationDone — no production callers
  • ListUserBooksForHardcoverSync — no production callers (only used by deleted SyncUserBooks); paginated variant ListUserBooksForHardcoverSyncPage remains and is actively used by workflows
  • UpsertEmailProviderPreference — no production callers
  • Related types (ListBookdropFilesByStatusParams, ListBooksOnShelfRow, ListUserBooksForHardcoverSyncRow, etc.) — properly cleaned

Deleted domain functions (all confirmed dead):

  • shelves.ListBooks (47 LOC) — no production callers; scoped-variant ListBooksScoped remains
  • hardcoversync.SyncUserBooks (52 LOC) — no production callers; only called by deleted test
  • hardcoversync.pushBooks (56 LOC) — private helper, only called by deleted SyncUserBooks

Struct Move Verification

ListBookFilesByLibraryRow correctly moved from generated library_scan.sql.go to library_scan_extra.go with proper documentation
✓ Struct is still actively used by StreamBookFilesByLibrary (hand-written streaming path)
✓ Comment updated to reflect query deletion
✓ No orphaned field references

Integration Tests Deleted

internal/db/bookdrop_integration_test.go — deletes 2 Describe blocks (40 LOC) testing only deleted queries
internal/db/books_integration_test.go — deletes 1 Describe block (18 LOC) testing UpdateBookStatus
internal/db/scan_integration_test.go — deletes 1 Describe block (75 LOC) testing ListBookFilesByLibrary and UpdateBookScannedOn
internal/hardcoversync/service_test.go — deletes SyncUserBooks & pushBooks tests (206 LOC)
internal/shelves/service_test.go — deletes ListBooks test blocks (79 LOC)
✓ All deleted tests are only for the deleted functions; no shared test utilities removed

Code Quality

✓ Build passes (go build ./cmd/pergamum)
✓ Unused import removed: time from hardcoversync/service.go
✓ Duplicate comment removed from library_scan_extra.go
✓ No stray references or incomplete deletions
✓ sqlc regeneration consistent (no dangling const/type definitions)

Coverage Impact

✓ Coverage maintained: only tests for dead code deleted (no regression)
✓ Live paginated query variants (ListBookdropFilesByStatusAfter, ListUserBooksForHardcoverSyncPage, StreamBookFilesByLibrary) remain with their own coverage


REVIEW VERDICT: 0 blockers, 0 majors, 0 minors

All deletions are safe. No production callers identified for any removed code. Integration tests properly paired with their deleted targets. The PR is merge-ready.

## Code Review — bd-bookshelf-9snmz.1.1 (Deletion PR) **Summary:** Verified all 21 deleted sqlc queries and 2 deleted domain functions have zero production callers. ### Deletion Safety Verification **Deleted sqlc queries (all confirmed dead):** - `ListBookdropFilesByStatus` — no production callers (only in deleted integration test) - `UpdateBookdropFileWithError` — no production callers (only in deleted integration test) - `DeleteBookdropFile` — no production callers (only in deleted integration test) - `UpdateBookStatus` — no production callers (only in deleted integration test) - `ListBookFilesByLibrary` — no production callers (only in deleted integration test); streaming variant `StreamBookFilesByLibrary` remains and is actively used by `library/scan` - `UpdateBookScannedOn` — no production callers (only in deleted integration test) - `SetGoodreadsIDLocked` — no production callers - `ListBooksOnShelf` — no production callers (only in deleted test `shelves/service_test.go`) - `CountBooksOnShelf` — no production callers - `ShelfBookExists` — no production callers - `StatsTopCategories` — no production callers - `RevokeRefreshTokenAtomic` — no production callers - `GetAllUserIDs` — no production callers - `GetAllLibraryIDs` — no production callers - `IsAppMigrationDone` — no production callers - `MarkAppMigrationDone` — no production callers - `ListUserBooksForHardcoverSync` — no production callers (only used by deleted `SyncUserBooks`); paginated variant `ListUserBooksForHardcoverSyncPage` remains and is actively used by workflows - `UpsertEmailProviderPreference` — no production callers - Related types (`ListBookdropFilesByStatusParams`, `ListBooksOnShelfRow`, `ListUserBooksForHardcoverSyncRow`, etc.) — properly cleaned **Deleted domain functions (all confirmed dead):** - `shelves.ListBooks` (47 LOC) — no production callers; scoped-variant `ListBooksScoped` remains - `hardcoversync.SyncUserBooks` (52 LOC) — no production callers; only called by deleted test - `hardcoversync.pushBooks` (56 LOC) — private helper, only called by deleted `SyncUserBooks` ### Struct Move Verification ✓ `ListBookFilesByLibraryRow` correctly moved from generated `library_scan.sql.go` to `library_scan_extra.go` with proper documentation ✓ Struct is still actively used by `StreamBookFilesByLibrary` (hand-written streaming path) ✓ Comment updated to reflect query deletion ✓ No orphaned field references ### Integration Tests Deleted ✓ `internal/db/bookdrop_integration_test.go` — deletes 2 Describe blocks (40 LOC) testing only deleted queries ✓ `internal/db/books_integration_test.go` — deletes 1 Describe block (18 LOC) testing `UpdateBookStatus` ✓ `internal/db/scan_integration_test.go` — deletes 1 Describe block (75 LOC) testing `ListBookFilesByLibrary` and `UpdateBookScannedOn` ✓ `internal/hardcoversync/service_test.go` — deletes SyncUserBooks & pushBooks tests (206 LOC) ✓ `internal/shelves/service_test.go` — deletes ListBooks test blocks (79 LOC) ✓ All deleted tests are **only** for the deleted functions; no shared test utilities removed ### Code Quality ✓ Build passes (`go build ./cmd/pergamum`) ✓ Unused import removed: `time` from `hardcoversync/service.go` ✓ Duplicate comment removed from `library_scan_extra.go` ✓ No stray references or incomplete deletions ✓ sqlc regeneration consistent (no dangling const/type definitions) ### Coverage Impact ✓ Coverage maintained: only tests for dead code deleted (no regression) ✓ Live paginated query variants (`ListBookdropFilesByStatusAfter`, `ListUserBooksForHardcoverSyncPage`, `StreamBookFilesByLibrary`) remain with their own coverage --- **REVIEW VERDICT: 0 blockers, 0 majors, 0 minors** All deletions are safe. No production callers identified for any removed code. Integration tests properly paired with their deleted targets. The PR is **merge-ready**.
Author
Owner

Security re-review — PR #1247 (bd-bookshelf-t582g.9)

Re-review of the XFF-hop MAJOR fix (leftmost -> rightmost X-Forwarded-For hop). The MAJOR is CLOSED. Verification against the four criteria:

(1) Trusted mode now keys on the rightmost (proxy-appended) hop — CONFIRMED.
internal/audit/recorder.go:167 switched strings.Index(xff, ",") (leftmost) to strings.LastIndex(xff, ",") returning xff[idx+1:] (rightmost). X-Real-IP is still preferred when present. A client-supplied leftmost value no longer influences the key, and a spoof-resistance test proves it: internal/users/ratelimiter_test.go — "a spoofed leftmost XFF value does not change the rate-limit key" asserts "attacker-spoof, 10.0.0.2" and "different-spoof, 10.0.0.2" produce the same key, plus "gives different real client IPs separate rate-limit buckets" proves distinct rightmost hops still separate. Audit-side mirror test updated to 10.0.0.1 (rightmost) in recorder_test.go.

(2) Untrusted mode still ignores XFF entirely — CONFIRMED.
extractIPWithPolicy only consults headers inside if trustProxyHeaders; otherwise it falls straight to net.SplitHostPort(r.RemoteAddr). Covered by "ignores X-Forwarded-For when trust is disabled" and "ignores X-Real-IP when trust is disabled" (ratelimiter_test.go).

(3) Shared-helper change did not break audit trust semantics — CONFIRMED.
The audit Middleware call site (recorder.go:96) is unchanged and still passes its own trustProxyHeaders param, sourced from the same cfg.TrustProxyHeaders (app.go:938) that now feeds the rate limiter (wire.go:99/158/249). Audit and rate-limit trust are unified. Audit tests updated consistently (Describe renamed to "rightmost", assertion flipped to the appended hop). No leftover single-arg clientIP(r) / ExportClientIP(r) callers remain.

(4) Single-trusted-hop assumption documented + multi-proxy limitation noted — CONFIRMED.
extractIPWithPolicy doc block (recorder.go:147-160) states the single-trusted-proxy rationale and calls out the multi-hop (CDN + reverse proxy) limitation as separately tracked. Config flag help (config.go:548) scopes it to "ONLY behind a trusted reverse proxy". Follow-up-acceptable per the task.

IPv6 note: LastIndex(",") is safe — XFF entries are comma-separated addresses with no intra-address comma, so the rightmost hop is extracted correctly.

Findings

[MINOR] internal/audit/recorder.go:64 — stale doc comment on Middleware
The Middleware doc's "IP extraction policy" still reads "trustProxyHeaders=true: X-Real-IP preferred, then first X-Forwarded-For hop." The behavior is now the rightmost (proxy-appended) hop. Update "first" -> "rightmost (proxy-appended)" to match the implementation and the extractIPWithPolicy doc. Doc-only, no correctness impact.

REVIEW VERDICT: 0 blocker, 0 major, 1 minor

## Security re-review — PR #1247 (`bd-bookshelf-t582g.9`) Re-review of the XFF-hop MAJOR fix (leftmost -> rightmost X-Forwarded-For hop). **The MAJOR is CLOSED.** Verification against the four criteria: **(1) Trusted mode now keys on the rightmost (proxy-appended) hop — CONFIRMED.** `internal/audit/recorder.go:167` switched `strings.Index(xff, ",")` (leftmost) to `strings.LastIndex(xff, ",")` returning `xff[idx+1:]` (rightmost). X-Real-IP is still preferred when present. A client-supplied leftmost value no longer influences the key, and a spoof-resistance test proves it: `internal/users/ratelimiter_test.go` — "a spoofed leftmost XFF value does not change the rate-limit key" asserts `"attacker-spoof, 10.0.0.2"` and `"different-spoof, 10.0.0.2"` produce the *same* key, plus "gives different real client IPs separate rate-limit buckets" proves distinct rightmost hops still separate. Audit-side mirror test updated to `10.0.0.1` (rightmost) in `recorder_test.go`. **(2) Untrusted mode still ignores XFF entirely — CONFIRMED.** `extractIPWithPolicy` only consults headers inside `if trustProxyHeaders`; otherwise it falls straight to `net.SplitHostPort(r.RemoteAddr)`. Covered by "ignores X-Forwarded-For when trust is disabled" and "ignores X-Real-IP when trust is disabled" (`ratelimiter_test.go`). **(3) Shared-helper change did not break audit trust semantics — CONFIRMED.** The audit `Middleware` call site (`recorder.go:96`) is unchanged and still passes its own `trustProxyHeaders` param, sourced from the same `cfg.TrustProxyHeaders` (`app.go:938`) that now feeds the rate limiter (`wire.go:99/158/249`). Audit and rate-limit trust are unified. Audit tests updated consistently (Describe renamed to "rightmost", assertion flipped to the appended hop). No leftover single-arg `clientIP(r)` / `ExportClientIP(r)` callers remain. **(4) Single-trusted-hop assumption documented + multi-proxy limitation noted — CONFIRMED.** `extractIPWithPolicy` doc block (`recorder.go:147-160`) states the single-trusted-proxy rationale and calls out the multi-hop (CDN + reverse proxy) limitation as separately tracked. Config flag help (`config.go:548`) scopes it to "ONLY behind a trusted reverse proxy". Follow-up-acceptable per the task. IPv6 note: `LastIndex(",")` is safe — XFF entries are comma-separated addresses with no intra-address comma, so the rightmost hop is extracted correctly. ### Findings [MINOR] internal/audit/recorder.go:64 — stale doc comment on `Middleware` The `Middleware` doc's "IP extraction policy" still reads "trustProxyHeaders=true: X-Real-IP preferred, then **first** X-Forwarded-For hop." The behavior is now the **rightmost** (proxy-appended) hop. Update "first" -> "rightmost (proxy-appended)" to match the implementation and the `extractIPWithPolicy` doc. Doc-only, no correctness impact. REVIEW VERDICT: 0 blocker, 0 major, 1 minor
Author
Owner

Security Review — PR #1254 (dead-code deletion)

Reviewed git diff origin/main...origin/bd-bookshelf-9snmz.1.1: deletion of 21 unused sqlc queries + 2 dead domain functions (shelves.ListBooks, hardcoversync.SyncUserBooks/pushBooks) + companion tests, plus a re-home of one struct.

Verification performed (all clean):

  • shelves.ListBooks (unscoped) removal — no footgun, no lost path. The production shelf-listing path is ListBooksScoped (library-scoped + content-restriction enforced in SQL), which survives with its unit + integration tests. The deleted ListBooks and its underlying ListBooksOnShelf/CountBooksOnShelf/ShelfBookExists sqlc queries had zero live callers. Deleting the unscoped variant removes a cross-user footgun rather than a needed path — aligns with the multi-user hard rule.
  • hardcoversync.SyncUserBooks/pushBooks removal — no dangling route/handler, no orphaned auth gate. POST /account/hardcover/sync is served by syncHandler, which enqueues the go-workflows StartHardcoverSyncWorkflow (paginated ListUserBooksForHardcoverSyncPage path) — NOT the deleted in-process function. Handler still enforces auth (user.ID == 0 -> ErrUnauthorized) and user-scoping (userID from session). SyncUserBooks had zero non-test callers.
  • UpdateBookStatus / legacy book.read_status writer removal — aligns with per-user rule. No remaining UPDATE book ... SET read_status writer exists; per-user status lives in user_book_progress. GetBook retains independent coverage (the deleted block only read via GetBook to verify the deleted writer).
  • RevokeRefreshTokenAtomic removal — no auth control lost. It had zero callers on main. Surviving revocation: RevokeRefreshToken (single) + RevokeAllUserRefreshTokens (user-scoped WHERE user_id = ?).
  • ListBookFilesByLibraryRow re-home is correct. The deleted buffered query owned the row struct the surviving streaming scan (StreamBookFilesByLibrary) depends on; the PR re-homes the struct into hand-maintained library_scan_extra.go and the streaming scan path still compiles/uses it.
  • All other deleted queries (ListBookdropFilesByStatus, UpdateBookdropFileWithError, DeleteBookdropFile, UpsertEmailProviderPreference, SetGoodreadsIDLocked, UpdateBookScannedOn, StatsTopCategories, GetAllUserIDs, GetAllLibraryIDs, IsAppMigrationDone, MarkAppMigrationDone) — confirmed zero non-generated, non-test callers.
  • Deleted tests cover only the deleted functions; no surviving code loses coverage (CI 100% gate is the backstop).

Findings:

[MINOR] internal/db/sqlc/metadata_extra.go:232 — stale doc comment references deleted query
The SetHardcoverBookID comment still cites ListUserBooksForHardcoverSync (deleted in this PR) as the reader of hardcover_book_id. Cosmetic only; update to the surviving ListUserBooksForHardcoverSyncPage / GetUserBookForHardcoverSync to avoid a dangling name.

No injection, SSRF, cross-user leak, auth-gate, or read_status regressions. No CSP surface (no template/CSS changes).

REVIEW VERDICT: 0 blocker, 0 major, 1 minor

## Security Review — PR #1254 (dead-code deletion) Reviewed `git diff origin/main...origin/bd-bookshelf-9snmz.1.1`: deletion of 21 unused sqlc queries + 2 dead domain functions (`shelves.ListBooks`, `hardcoversync.SyncUserBooks`/`pushBooks`) + companion tests, plus a re-home of one struct. **Verification performed (all clean):** - **`shelves.ListBooks` (unscoped) removal — no footgun, no lost path.** The production shelf-listing path is `ListBooksScoped` (library-scoped + content-restriction enforced in SQL), which survives with its unit + integration tests. The deleted `ListBooks` and its underlying `ListBooksOnShelf`/`CountBooksOnShelf`/`ShelfBookExists` sqlc queries had **zero live callers**. Deleting the unscoped variant removes a cross-user footgun rather than a needed path — aligns with the multi-user hard rule. - **`hardcoversync.SyncUserBooks`/`pushBooks` removal — no dangling route/handler, no orphaned auth gate.** `POST /account/hardcover/sync` is served by `syncHandler`, which enqueues the go-workflows `StartHardcoverSyncWorkflow` (paginated `ListUserBooksForHardcoverSyncPage` path) — NOT the deleted in-process function. Handler still enforces auth (`user.ID == 0 -> ErrUnauthorized`) and user-scoping (userID from session). `SyncUserBooks` had zero non-test callers. - **`UpdateBookStatus` / legacy `book.read_status` writer removal — aligns with per-user rule.** No remaining `UPDATE book ... SET read_status` writer exists; per-user status lives in `user_book_progress`. `GetBook` retains independent coverage (the deleted block only read via GetBook to verify the deleted writer). - **`RevokeRefreshTokenAtomic` removal — no auth control lost.** It had zero callers on main. Surviving revocation: `RevokeRefreshToken` (single) + `RevokeAllUserRefreshTokens` (user-scoped `WHERE user_id = ?`). - **`ListBookFilesByLibraryRow` re-home is correct.** The deleted buffered query owned the row struct the surviving streaming scan (`StreamBookFilesByLibrary`) depends on; the PR re-homes the struct into hand-maintained `library_scan_extra.go` and the streaming scan path still compiles/uses it. - **All other deleted queries** (`ListBookdropFilesByStatus`, `UpdateBookdropFileWithError`, `DeleteBookdropFile`, `UpsertEmailProviderPreference`, `SetGoodreadsIDLocked`, `UpdateBookScannedOn`, `StatsTopCategories`, `GetAllUserIDs`, `GetAllLibraryIDs`, `IsAppMigrationDone`, `MarkAppMigrationDone`) — confirmed zero non-generated, non-test callers. - **Deleted tests** cover only the deleted functions; no surviving code loses coverage (CI 100% gate is the backstop). **Findings:** [MINOR] internal/db/sqlc/metadata_extra.go:232 — stale doc comment references deleted query The `SetHardcoverBookID` comment still cites `ListUserBooksForHardcoverSync` (deleted in this PR) as the reader of `hardcover_book_id`. Cosmetic only; update to the surviving `ListUserBooksForHardcoverSyncPage` / `GetUserBookForHardcoverSync` to avoid a dangling name. No injection, SSRF, cross-user leak, auth-gate, or read_status regressions. No CSP surface (no template/CSS changes). REVIEW VERDICT: 0 blocker, 0 major, 1 minor
zombor force-pushed bd-bookshelf-9snmz.1.1 from b1adf5f4a6
All checks were successful
/ JS Unit Tests (pull_request) Successful in 54s
/ E2E API (pull_request) Successful in 3m24s
/ Test Race (pull_request) Successful in 3m37s
/ Coverage (pull_request) Successful in 4m2s
/ Lint (pull_request) Successful in 4m13s
/ Integration (pull_request) Successful in 4m40s
/ E2E Browser (pull_request) Successful in 6m5s
to 64ee971164
All checks were successful
/ E2E API (pull_request) Successful in 5m44s
/ Test Race (pull_request) Successful in 5m58s
/ Coverage (pull_request) Successful in 6m29s
/ Lint (pull_request) Successful in 7m8s
/ JS Unit Tests (pull_request) Successful in 1m14s
/ Integration (pull_request) Successful in 7m24s
/ E2E Browser (pull_request) Successful in 5m24s
2026-07-27 12:14:48 +00:00
Compare
zombor merged commit 792016698d into main 2026-07-27 12:26:43 +00:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
zombor/pergamum!1254
No description provided.