Fixes the finding from the third independent release review of promotion PR #98 at head a27ef6a. Maestro task: 3759a975-f937-4284-81a2-9e61345a3aa3.
MQ-98-06 (HIGH): the recipe-candidates endpoint could log the full search-result URL (which may carry a token) when a stored-recipe lookup failed, because storedRow formats the source URL into its errors and the endpoint's default handler logged that error unchanged. Candidate failures now log a fixed reason with the dinner id, never the URL, host or database text; the specific not-found/archived/conflict/invalid responses stay distinct. A regression test uses a token-bearing candidate URL with a failing stored-recipe lookup and asserts none of the URL, host, token or database text appears in the log or the response.
Checks: gofmt clean, go vet, go test -race -count=1 ./..., CGO_ENABLED=0 go build ./..., make sqlc-check (no drift), make build, docker build ., web typecheck + 537 tests + build - all pass.
Fixes the finding from the third independent release review of promotion PR #98 at head `a27ef6a`. Maestro task: `3759a975-f937-4284-81a2-9e61345a3aa3`.
- MQ-98-06 (HIGH): the recipe-candidates endpoint could log the full search-result URL (which may carry a token) when a stored-recipe lookup failed, because `storedRow` formats the source URL into its errors and the endpoint's default handler logged that error unchanged. Candidate failures now log a fixed reason with the dinner id, never the URL, host or database text; the specific not-found/archived/conflict/invalid responses stay distinct. A regression test uses a token-bearing candidate URL with a failing stored-recipe lookup and asserts none of the URL, host, token or database text appears in the log or the response.
Checks: gofmt clean, go vet, go test -race -count=1 ./..., CGO_ENABLED=0 go build ./..., make sqlc-check (no drift), make build, docker build ., web typecheck + 537 tests + build - all pass.
A recipe-candidates request whose stored-recipe lookup failed logged the
error unchanged, and that error quotes the search result's URL, which can
carry a personal token, along with the database error text.
dinners.Service.Candidates now wraps every failure other than a missing
dinner in ErrCandidatesFailed, and writeDinnerError logs it as a fixed
reason (candidates_failed) with the dinner id only, answering 500
internal. Not-found, not-configured and search-failed responses are
unchanged.
Fixes MQ-98-06 (Maestro 3759a975-f937-4284-81a2-9e61345a3aa3).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Fixes the finding from the third independent release review of promotion PR #98 at head
a27ef6a. Maestro task:3759a975-f937-4284-81a2-9e61345a3aa3.storedRowformats the source URL into its errors and the endpoint's default handler logged that error unchanged. Candidate failures now log a fixed reason with the dinner id, never the URL, host or database text; the specific not-found/archived/conflict/invalid responses stay distinct. A regression test uses a token-bearing candidate URL with a failing stored-recipe lookup and asserts none of the URL, host, token or database text appears in the log or the response.Checks: gofmt clean, go vet, go test -race -count=1 ./..., CGO_ENABLED=0 go build ./..., make sqlc-check (no drift), make build, docker build ., web typecheck + 537 tests + build - all pass.
Independent Codex gpt-6-sol review: APPROVED for this exact commit.