Conversation
Self-referential ${VAR:-default} patterns in .env files caused
dotenv-expand infinite recursion, preventing OTEL_EXPORTER_OTLP_ENDPOINT
from resolving to the isolated collector port. Also fix HDX_COLLECTOR_URL
to fall back to OTEL_EXPORTER_OTLP_ENDPOINT for browser-side telemetry,
and set the correct HYPERDX_API_KEY in the app dev env.
Keep ${VAR:-default} for HYPERDX_API_PORT, HYPERDX_APP_PORT, and
HYPERDX_OPAMP_PORT to avoid breaking existing consumers (docker-compose,
Makefile). Only HDX_DEV_* vars needed plain values to fix dotenv-expand
recursion.
|
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
Knip - Unused Code Analysis⚪ No changes detected (1 issues on both main and PR) What is this?Knip finds unused files, dependencies, and exports in your codebase. Run |
PR Review
✅ Core fix (self-referential dotenv-expand recursion) is correct. Shell script |
E2E Test Results✅ All tests passed • 122 passed • 3 skipped • 1091s
Tests ran across 4 shards in parallel. |
Add wt project config and clone-dev-state.sh script so new worktrees automatically inherit MongoDB data (accounts, teams, config) from the primary worktree. This eliminates the need to re-register when spinning up a new worktree. - .config/wt.toml: pre-start hook clones MongoDB volume, post-start copies node_modules/.env.local and installs deps, post-remove tears down all Docker stacks for the slot - scripts/clone-dev-state.sh: copies db_dev_<slot> with proper slot renaming, supports --force, warns if source stack is running - .worktreeinclude: limits wt step copy-ignored to node_modules and .env.local (excludes .volumes which needs slot renaming)
Summary
dotenv-expandinfinite recursion caused by self-referential${VAR:-default}patterns in.envfiles, which preventedOTEL_EXPORTER_OTLP_ENDPOINTfrom resolving to the isolated collector portHYPERDX_API_KEYin app dev env so the collector accepts telemetryHDX_COLLECTOR_URLto fall back toOTEL_EXPORTER_OTLP_ENDPOINTfor browser-side telemetryChanges
Root
.envHDX_DEV_*vars (e.g.,HDX_DEV_OTEL_HTTP_PORT=${HDX_DEV_OTEL_HTTP_PORT:-4318}) with plain default values to preventdotenv-expandrecursionHYPERDX_*vars with${VAR:-default}syntax to preserve existing override behaviorpackages/app/.env.developmentHYPERDX_API_KEYtosuper-secure-ingestion-api-key(matching the API/collector) instead of placeholderdev-env.shexports or root.envdefaults:-defaultsyntax from${HDX_DEV_OTEL_HTTP_PORT}referencepackages/api/.env.developmentHYPERDX_API_PORT=${HYPERDX_API_PORT}, etc.) and redundant re-assignments (HYPERDX_API_KEY=${HYPERDX_API_KEY},HYPERDX_LOG_LEVEL=${HYPERDX_LOG_LEVEL}):-defaultsyntax from${HDX_DEV_*}variable referencespackages/app/src/config.tsprocess.env.OTEL_EXPORTER_OTLP_ENDPOINTas fallback forHDX_COLLECTOR_URLso the browser OTel SDK picks up the correct collector endpoint from.env.development