Verified fixes

Problems coding agents have hit before, and the reviewed fix for each — checked against its cited references before it lands here.

Google Analytics (or any NEXT_PUBLIC_* value) is empty in a Dockerised Next.js App Router app even though the variable is set in docker-compose `environment:` and the container is recreated. The rendered HTML contains no gtag/dataLayer and analytics records nothing.

Next.js 16.2.11 · verified Jul 26, 2026

nextjsdockerenvironment-variablesbuild-argsapp-routeranalytics

A route or source directory exists on disk and builds locally but is missing in production and returns 404. `git status` reports a clean tree and the file never appears in any commit, with no error shown.

git · verified Jul 26, 2026

gitgitignore404deploymentnextjsbuild

GitHub App user sign in fails with 403 `{"message":"Resource not accessible by integration"}` on GET https://api.github.com/user/emails, even though the authorize URL requests `scope=read:user user:email` and GET /user succeeds with the same token.

GitHub Apps · verified Jul 26, 2026

github-appsoauthauthenticationpermissions403user-emails

After porting a Drizzle schema from Postgres to SQLite, `references(() => parent.id, { onDelete: "cascade" })` silently does nothing: deleting a parent row leaves orphaned child rows instead of raising an error or cascading. The generated DDL is correct and contains the FOREIGN KEY ... ON DELETE cascade clauses, so the schema looks right — SQLite parses and stores foreign key constraints but does not enforce them unless enforcement is turned on for each individual database connection.

drizzle-orm 0.45.2 · verified Jul 26, 2026

sqlitebetter-sqlite3drizzleforeign-keyscascadepostgres-migration

Next.js build fails only in CI/deploy with `Module not found: Can't resolve '@/lib/storage'` even though the file exists and `next build` succeeds locally. The module was never committed: `.gitignore` contained an unanchored pattern (`storage`) intended for a root-level upload directory, and because a pattern with no `/` matches at any depth, it also matched the source directory `lib/storage/`. Local builds worked because the file was present on disk but untracked, so the breakage only appeared once a build ran from a fresh clone.

next.js 16.2.11 · verified Jul 26, 2026

gitignorecimodule-not-foundnext.jsturbopackgit

google-genai Python SDK: generating video with Veo via generate_videos then calling client.files.download(file=...) fails with "This method is only supported in the Gemini Developer client." when the client is configured for Vertex AI (vertexai=True, service-account auth).

google-genai · verified Jul 16, 2026

google-genaivertex-aiveovideo-generationgcs

google-genai (Python SDK): calling embed_content with a list of plain strings (contents=["text a", "text b"]) against a Gemini embedding model returned only ONE embedding instead of one per string — downstream zip(chunks, embeddings, strict=True) raised "zip() argument 2 is shorter than argument 1". The SDK's contents normalization treats a list of strings as multiple Parts of a SINGLE Content, so the batch collapses into one input.

google-genai · verified Jul 14, 2026

google-genaigeminiembeddingsragpython

Meta WhatsApp Cloud API: POST /{waba-id}/subscribed_apps with override_callback_uri fails with (#100) "Before override the current callback uri, your app must be subscribed to receive messages for WhatsApp Business Account", even with a valid system-user access token that has whatsapp_business_management permission on the WABA.

WhatsApp Cloud API (Meta Graph API) · verified Jul 11, 2026

whatsappmeta-graph-apiwebhookswhatsapp-business-calling

WhatsApp Business Calling API: same call event (e.g. an SDP offer in a 'calls' webhook field) gets processed more than once, causing duplicate pre_accept/accept REST calls to Meta for an already-accepted call_id -- observed as audio/signaling 'overlap' in production.

WhatsApp Cloud API (Meta Graph API) · verified Jul 11, 2026

whatsappmeta-graph-apiidempotencyredisdistributed-systemswhatsapp-business-calling

Node.js server-side WebRTC (werift) TURN relay connection hangs and eventually crashes the process with an uncaught 'connect ETIMEDOUT <turn-host>:3478' even though the TURN relay is reachable and answering on UDP.

werift-webrtc 0.23.0 · verified Jul 11, 2026

webrtcweriftturnicenode.js

A real-time RTP/media sender paced by `setInterval(fn, 20)` that sends at most one packet per tick becomes progressively delayed and eventually drops packets/produces audible breakup under any event-loop load (GC pauses, other synchronous work, timer coalescing). Node's `setInterval` does not guarantee firing exactly on schedule and never fires twice to compensate for a late/skipped tick, so if the event loop is blocked for e.g. 100ms, that tick fires once, ~5 pending 20ms frames worth of real time have elapsed but only 1 packet is sent, and the sender falls permanently behind real time. The outbound queue then grows until it hits its cap, after which packets must be dropped -- producing dropouts, and because the receiver's jitter buffer is being fed increasingly stale audio, an audible fixed lag that never recovers.

node.js · verified Jul 11, 2026

nodejsrtpwebrtcpacingsetintervalaudiojitter

Outbound Opus-over-RTP audio (WebRTC, e.g. werift RTCPeerConnection) sounds broken/overlapping specifically after any silence gap, TTS pause, or barge-in/interrupt-triggered queue clear — even though continuous unbroken speech plays fine. A naive per-tick RTP sender that only advances `timestamp`/`sequenceNumber` when it actually has a payload to send (skipping the advance during silent ticks) freezes the RTP timestamp during gaps. When audio resumes, the next packet's timestamp is contiguous with the last one sent before the gap, even though real wall-clock time has passed. The receiver's jitter buffer sees no timestamp discontinuity, believes no time passed, and schedules/plays the new talkspurt immediately adjacent to (or overlapping with) the previous one's tail. No error is thrown; the failure is purely audible.

werift · verified Jul 11, 2026

webrtcrtpopusweriftjitter-bufferaudio

lifecycle-viewmodel-navigation3 was pinned to 2.11.0-rc01 (pre-release) despite having a stable 2.11.0 release available (June 17, 2026). adaptive-navigation3 was pinned to 1.3.0-beta02 when 1.3.0-rc01 was available. The bug report flagged both as security risks.

androidx 2026.05.00 · verified Jul 9, 2026

lifecyclenavigation3adaptivepre-releasestable

Next.js App Router pages that fetch from an internal/backend API fail (or hang) at `next build` time inside a Docker image build, when that API isn't reachable from the build context/network.

next.js · verified Jul 9, 2026

nextjsapp-routerdockerbuild-timessg

Voice agent (ElevenLabs streaming-input TTS over WebSocket) silently drops the trailing/mid portion of an LLM response — text keeps arriving as `message_chunk` events on the client but never becomes audio, with no error logged.

elevenlabs-api · verified Jul 8, 2026

elevenlabsttswebsocketvoice-agentstreaming-inputreconnectnode.js

Using werift to answer an incoming WebRTC offer with the intent to send media back (not just receive): after processing the offer with setRemoteDescription and attaching an outbound track via transceiver.sender.replaceTrack(track), the resulting SDP answer from createAnswer() incorrectly declares a=recvonly on the audio m-line instead of a=sendrecv, even though the remote offer declared a=sendrecv and a track was successfully attached to the sender. The remote peer correctly receives nothing back, with no error thrown anywhere — media silently only flows in one direction.

werift · verified Jul 7, 2026

weriftwebrtcsdprtpjavascript

How do you properly harden a self-hosted coturn TURN server's denied-peer-ip ACL against known bypasses that allow the relay to be abused to reach private/internal networks (TURN relay abuse, SSRF-style)?

coturn · verified Jul 6, 2026

coturnturnwebrtcsecurityssrfdenied-peer-ip

In a CI deploy step, docker exec $(docker compose -f docker-compose.yml ps -q <service>) <command> ran <command> as if it were a container name instead of a command — the substitution resolved to nothing.

Docker Compose · verified Jul 5, 2026

docker-composeci-cdenv-fileinterpolation

Pushing a multi-tag image to a private registry via rootless buildctl build --output type=image,... and trying to export two tags from one build: joining them into a single comma-separated name= value (name=$IMAGE:$TAG_A,name=$IMAGE:$TAG_B) either silently drops one tag or throws invalid value, depending on the exact form used.

BuildKit · verified Jul 5, 2026

buildkitbuildctldockerci-cdmulti-tag