fix(security): consolidate 20 PRs and remediate dependency and code scanning findings - #130
Conversation
Bumps [github.com/go-chi/httprate](https://github.com/go-chi/httprate) from 0.9.0 to 0.16.0. - [Release notes](https://github.com/go-chi/httprate/releases) - [Commits](go-chi/httprate@v0.9.0...v0.16.0) --- updated-dependencies: - dependency-name: github.com/go-chi/httprate dependency-version: 0.16.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com>
Bumps [github.com/jackc/pgx/v5](https://github.com/jackc/pgx) from 5.7.4 to 5.10.0. - [Changelog](https://github.com/jackc/pgx/blob/master/CHANGELOG.md) - [Commits](jackc/pgx@v5.7.4...v5.10.0) --- updated-dependencies: - dependency-name: github.com/jackc/pgx/v5 dependency-version: 5.10.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com>
Bumps [github.com/prometheus/client_golang](https://github.com/prometheus/client_golang) from 1.19.0 to 1.24.1. - [Release notes](https://github.com/prometheus/client_golang/releases) - [Changelog](https://github.com/prometheus/client_golang/blob/v1.24.1/CHANGELOG.md) - [Commits](prometheus/client_golang@v1.19.0...v1.24.1) --- updated-dependencies: - dependency-name: github.com/prometheus/client_golang dependency-version: 1.24.1 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com>
Bumps [@tanstack/react-query](https://github.com/TanStack/query/tree/HEAD/packages/react-query) from 5.91.3 to 5.101.4. - [Release notes](https://github.com/TanStack/query/releases) - [Changelog](https://github.com/TanStack/query/blob/main/packages/react-query/CHANGELOG.md) - [Commits](https://github.com/TanStack/query/commits/@tanstack/react-query@5.101.4/packages/react-query) --- updated-dependencies: - dependency-name: "@tanstack/react-query" dependency-version: 5.101.4 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com>
Bumps [jsdom](https://github.com/jsdom/jsdom) from 29.0.1 to 30.0.1. - [Release notes](https://github.com/jsdom/jsdom/releases) - [Commits](jsdom/jsdom@v29.0.1...v30.0.1) --- updated-dependencies: - dependency-name: jsdom dependency-version: 30.0.0 dependency-type: direct:development update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <support@github.com>
Bumps [eslint-plugin-boundaries](https://github.com/javierbrea/eslint-plugin-boundaries) from 6.0.2 to 7.1.0. - [Release notes](https://github.com/javierbrea/eslint-plugin-boundaries/releases) - [Commits](javierbrea/eslint-plugin-boundaries@v6.0.2...v7.1.0) --- updated-dependencies: - dependency-name: eslint-plugin-boundaries dependency-version: 7.1.0 dependency-type: direct:development update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <support@github.com>
Bumps [eslint-plugin-i18next](https://github.com/edvardchen/eslint-plugin-i18next) from 6.1.4 to 6.1.5. - [Changelog](https://github.com/edvardchen/eslint-plugin-i18next/blob/main/CHANGELOG.md) - [Commits](edvardchen/eslint-plugin-i18next@v6.1.4...v6.1.5) --- updated-dependencies: - dependency-name: eslint-plugin-i18next dependency-version: 6.1.5 dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com>
Bumps [@typescript-eslint/eslint-plugin](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin) from 8.59.1 to 8.66.0. - [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases) - [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/eslint-plugin/CHANGELOG.md) - [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.66.0/packages/eslint-plugin) --- updated-dependencies: - dependency-name: "@typescript-eslint/eslint-plugin" dependency-version: 8.65.0 dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com>
Bumps node from 20-alpine to 26-alpine. --- updated-dependencies: - dependency-name: node dependency-version: 26-alpine dependency-type: direct:production ... Signed-off-by: dependabot[bot] <support@github.com>
Bumps nginx from 1.30.4-alpine3.24 to 1.31.4-alpine3.24. --- updated-dependencies: - dependency-name: nginx dependency-version: 1.31-alpine dependency-type: direct:production ... Signed-off-by: dependabot[bot] <support@github.com>
Bumps golang from 1.25-alpine to 1.27-alpine. --- updated-dependencies: - dependency-name: golang dependency-version: 1.27-alpine dependency-type: direct:production ... Signed-off-by: dependabot[bot] <support@github.com>
Bumps [github.com/caarlos0/env/v11](https://github.com/caarlos0/env) from 11.4.0 to 11.4.1. - [Release notes](https://github.com/caarlos0/env/releases) - [Commits](caarlos0/env@v11.4.0...v11.4.1) --- updated-dependencies: - dependency-name: github.com/caarlos0/env/v11 dependency-version: 11.4.1 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com>
Bumps [google.golang.org/api](https://github.com/googleapis/google-api-go-client) from 0.271.0 to 0.294.0. - [Release notes](https://github.com/googleapis/google-api-go-client/releases) - [Changelog](https://github.com/googleapis/google-api-go-client/blob/main/CHANGES.md) - [Commits](googleapis/google-api-go-client@v0.271.0...v0.294.0) --- updated-dependencies: - dependency-name: google.golang.org/api dependency-version: 0.291.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com>
Bumps [mermaid](https://github.com/mermaid-js/mermaid) from 11.13.0 to 11.17.2. - [Release notes](https://github.com/mermaid-js/mermaid/releases) - [Commits](https://github.com/mermaid-js/mermaid/compare/mermaid@11.13.0...mermaid@11.17.2) --- updated-dependencies: - dependency-name: mermaid dependency-version: 11.17.2 dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com>
Add high-value unit tests for previously thin packages: teslasync drain/healthcheck, local backup storage + restore, schema fingerprint Compute, backupverify VerifyLatest, audit recorder helpers, and chaos-runner recovery probes. Preserve the last concrete recovery failure instead of overwriting it with a later deadline. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 5b104204-65b7-4d04-90a4-e2d5897b8e2e
Bumps [aquasecurity/trivy-action](https://github.com/aquasecurity/trivy-action) from 0.33.1 to 0.36.0. - [Release notes](https://github.com/aquasecurity/trivy-action/releases) - [Commits](aquasecurity/trivy-action@b6643a2...ed142fd) --- updated-dependencies: - dependency-name: aquasecurity/trivy-action dependency-version: 0.36.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com>
Bumps [azure/setup-helm](https://github.com/azure/setup-helm) from 4 to 5. - [Release notes](https://github.com/azure/setup-helm/releases) - [Commits](Azure/setup-helm@v4...v5) --- updated-dependencies: - dependency-name: azure/setup-helm dependency-version: '5' dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <support@github.com>
Bumps [actions/download-artifact](https://github.com/actions/download-artifact) from 4 to 8. - [Release notes](https://github.com/actions/download-artifact/releases) - [Commits](actions/download-artifact@v4...v8) --- updated-dependencies: - dependency-name: actions/download-artifact dependency-version: '8' dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <support@github.com>
Bumps [github/codeql-action/init](https://github.com/github/codeql-action) from 4.33.0 to 4.38.0. - [Release notes](https://github.com/github/codeql-action/releases) - [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md) - [Commits](github/codeql-action@b1bff81...b96794f) --- updated-dependencies: - dependency-name: github/codeql-action/init dependency-version: 4.38.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com>
Bumps [sigstore/cosign-installer](https://github.com/sigstore/cosign-installer) from 3.9.1 to 4.1.2. - [Release notes](https://github.com/sigstore/cosign-installer/releases) - [Commits](sigstore/cosign-installer@398d4b0...6f9f177) --- updated-dependencies: - dependency-name: sigstore/cosign-installer dependency-version: 4.1.2 dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <support@github.com>
…olidate-prs-security-20260920 Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…olidate-prs-security-20260920 Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…olidate-prs-security-20260920 Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…olidate-prs-security-20260920 Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Use Go 1.27.1, decode JSON-quoted route paths, isolate jsdom worker storage, and remove resolved config-parity debt. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Migrate the lint configuration to Go 1.27-compatible golangci-lint v2 while preserving the existing analyzer scope and exceptions. Align CodeQL action versions, restore build identity, update Router/jsdom/grid compatibility assertions, and defer optional sidebar, tour and presentation UI without removing content. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Keep prototype guards at dynamic dereferences and represent fixture interpolation without misleading escape sequences. Install CodeQL native prerequisites on ARC. Deduplicate the instrumentation lexer within supported semver ranges; patched-version inventory drops from 35 to 26 duplicate families and 41 to 29 extra copies, with zero bundle duplications. Replace the incorrectly dark-mode forced-colors baseline with the reviewed high-contrast Windows capture, identical across three CI retries; preserve all screenshot thresholds. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
|
One or more custom setup steps configured for this repository failed during this Copilot code review run: Setup steps run before each review. If the review above is missing context, or no review was posted at all, the failing step above may be the cause. See the workflow run for failure details, fix your setup steps configuration, and re-request a review. Note You can configure setup steps for Copilot code review separately from Copilot cloud agent with a |
There was a problem hiding this comment.
Copilot review overview
🟡 Changes recommended
There are correctness/style-gate issues in the changed code (notably goimports grouping in internal/api/aichatbot/handler.go and Go toolchain drift in ops-gate.yml) that should be fixed before approval.
Get a fresh assessment by requesting another Copilot review.
Review effort: Lite
Findings: 1
Open (3)
What changed in this PR
Consolidates a large set of dependency/security PRs into a single branch, remediating code-scanning findings across the Go backend, React frontend, CI workflows, and deployment manifests (Compose/Helm), with a focus on safer subprocess execution, stronger TLS/cookie defaults, and toolchain alignment (Go 1.27 / Node 26).
Changes:
- Hardened security boundaries (command-proxy TLS trust anchors + hostname verification, always-Secure auth/impersonation cookies, prototype-key guards, safer codegen escaping).
- Updated frontend build/test/tooling contracts (Vite 6/Vitest 4 adjustments, route-registry generation switched to JSON-quoted values, refreshed i18n catalog structure).
- Modernized CI/deploy plumbing (Node 26 across workflows, CodeQL/runtime prerequisites, Helm/Compose wiring for command-proxy trust mounts, updated container base images).
| File | Description |
|---|---|
| web/vite.config.ts | Switches to execFileSync for safer script execution; adds Vitest args for Node 26 storage behavior. |
| web/src/main.tsx | Removes React Router future flag usage. |
| web/src/lib/__tests__/routeRegistryFreshness.test.ts | Aligns freshness expectations with JSON-quoted route registry output. |
| web/src/i18n/known-missing-keys.json | Updates known-missing key allowlist. |
| web/src/i18n/en/shell.json | Moves presentation-related strings out of shell catalog. |
| web/src/i18n/en/runtime-manifest.json | Reorders/adjusts runtime namespace manifest entries. |
| web/src/i18n/en/locale-detail-presentation.json | Adds a dedicated presentation locale detail catalog. |
| web/src/features/trips/components/TripReplayMap.test.tsx | Adjusts style assertion to avoid brittle matcher behavior. |
| web/src/features/telemetry/pages/SignalExplorerPage.test.tsx | Makes per-page assertion more direct/robust via re-query. |
| web/src/features/system/pages/ChatbotPage.tsx | Uses crypto.randomUUID-based session ID generation. |
| web/src/features/dashboard/components/__tests__/DashboardGrid.test.tsx | Updates layout test shim from offsetWidth to clientWidth. |
| web/src/features/dashboard/components/__tests__/DashboardGrid.mobile.test.tsx | Same clientWidth test shim adjustment for mobile breakpoint tests. |
| web/src/components/layout/Layout.test.tsx | Makes sidebar/presentation assertions async to match rendering timing. |
| web/src/components/feedback/runtime.ts | Re-exports Skeleton from feedback runtime barrel. |
| web/src/components/feedback/ReleaseNotes.test.tsx | Escapes regexp metacharacters in dynamic version queries. |
| web/src/components/ai/AIVoiceMode.tsx | Uses crypto.randomUUID-based voice session IDs. |
| web/src/App.tsx | Lazily loads TaskOnboardingHost under a Suspense boundary. |
| web/src/__tests__/viteTransformConfig.test.ts | Updates expected Vite devDependency major to 6.x. |
| web/src/__tests__/startupProviders.contract.test.ts | Updates provider-mount contract to include Suspense boundary. |
| web/src/__tests__/qualityGates.contract.test.ts | Adds regression coverage for metacharacter handling and long-comment scanning. |
| web/scripts/generate-route-registry.mjs | Generates JSON-quoted registry entries (safer escaping). |
| web/scripts/check-vite-deprecations.mjs | Passes Node flag for webstorage behavior during vitest probe. |
| web/scripts/check-pwa-contract.mjs | Adjusts shortcut validation to match JSON-quoted registry output. |
| web/scripts/check-e2e-route-registry.mjs | Parses JSON-quoted production registry paths safely. |
| web/scripts/audit-virtualization.mjs | Avoids regex backtracking by stripping comments before JSX-position scan; escapes callback names. |
| web/eslint.config.js | Updates boundaries plugin config shape (rules → policies). |
| web/e2e/mockApi.ts | Accounts for forced-colors mode in theme assertions. |
| web/bundle-duplication-baseline.json | Tightens duplication baseline by removing an allowed identical-implementation entry. |
| scripts/i18n-validate-keys.test.mjs | Adds node:test coverage for prototype-key guard + null-prototype behavior. |
| scripts/i18n-validate-keys.mjs | Exports setNested, blocks prototype segments, uses null-prototype dicts; guards main() execution. |
| ops/config/parity.yaml | Updates config parity baseline list (drops TESLA_COMMAND_PROXY_URL entry). |
| internal/tesla/client.go | Replaces insecure proxy TLS skip-verify with CA-based trust scoping for command proxy. |
| internal/tesla/client_tls_test.go | Adds TLS trust/hostname verification coverage for command proxy client. |
| internal/integrations/nhtsa/communications_bulk_test.go | Adds additional hostile URL allowlist regression cases. |
| internal/database/worker/fakes_test.go | Aligns reflection pointer kind checks with updated style. |
| internal/database/observability/fakes_test.go | Same reflection pointer kind check change. |
| internal/database/database.go | Adds early validation of pool bounds before connecting. |
| internal/database/database_pool_bounds_test.go | Tests invalid pool-bounds rejection behavior. |
| internal/database/audit/fakes_test.go | Same reflection pointer kind check change. |
| internal/config/config.go | Adds TESLA_COMMAND_PROXY_CA_FILE wiring into TeslaConfig. |
| internal/auth/session_tracker.go | Forces Secure cookies unconditionally; removes TLS-detection helper. |
| internal/auth/secure_cookies_test.go | Adds coverage that auth cookies remain Secure regardless of forwarded proto/local HTTP. |
| internal/auth/impersonation.go | Forces impersonation cookies Secure unconditionally. |
| internal/api/webvitals/routetemplates_test.go | Updates web route parsing to handle JSON-quoted registry paths safely. |
| internal/api/router.go | Hardens SPA fallback file existence check using http.Dir Open/Stat. |
| internal/api/aichatbot/handler.go | Switches to UUID-based session IDs; adjusts imports accordingly. |
| internal/ai/tools/validate.go | Uses updated reflection pointer-kind checks for tag validation walking. |
| internal/ai/tools/schema.go | Uses updated reflection pointer-kind checks for schema generation. |
| helm/teslasync/values.yaml | Adds commandProxy CA file/secret values. |
| helm/teslasync/templates/deployment.yaml | Wires command-proxy trust mounts/volumes into API pod. |
| helm/teslasync/templates/deployment-canary.yaml | Same trust mount/volume wiring for canary API deployment. |
| helm/teslasync/templates/deployment-automation-worker.yaml | Same trust mount/volume wiring for automation worker. |
| helm/teslasync/templates/configmap.yaml | Adds TESLA_COMMAND_PROXY_CA_FILE env var rendering. |
| helm/teslasync/templates/_helpers.tpl | Adds helper templates for optional CA secret mount/volume. |
| docs/scripts/generate-feature-catalogue.mjs | Escapes backslashes and normalizes newlines for Markdown table output safety. |
| docs/package.json | Updates mermaid version and forces vite override for docs toolchain alignment. |
| docs/guide/remote-commands.md | Documents command-proxy TLS trust and new env var naming. |
| docs/guide/local-development.md | Updates local dev minimums (Go 1.27.1+, Node 26+). |
| Dockerfile.web | Bumps builder Node base and nginx runtime image digest. |
| Dockerfile.ocpp-server | Bumps Go builder image to 1.27-alpine. |
| Dockerfile.notification | Bumps Go builder image to 1.27-alpine. |
| Dockerfile.fleet-telemetry | Bumps Go builder image to 1.27-bookworm. |
| Dockerfile.export-worker | Bumps Go builder image to 1.27-alpine. |
| Dockerfile.automation | Bumps Go builder image to 1.27-alpine. |
| Dockerfile | Bumps Go and Node builder images to Go 1.27 / Node 26. |
| docker-compose.yml | Adds command-proxy trust mount + env wiring for API and automation worker. |
| cmd/routetemplategen/generate.go | Supports parsing JSON-quoted route registry paths safely; tightens invalid char checks. |
| cmd/routetemplategen/generate_test.go | Updates tests for JSON-quoted paths and escaped edge cases. |
| cmd/chaos-runner/main.go | Preserves last concrete recovery failure over deadline-exceeded noise. |
| .github/workflows/security.yml | Installs CodeQL prereqs; uses go-version-file; bumps Node, CodeQL, govulncheck. |
| .github/workflows/release.yml | Bumps Trivy, download-artifact, cosign-installer, setup-helm. |
| .github/workflows/perf.yml | Bumps Node to 26 for perf workflow. |
| .github/workflows/ops-gate.yml | Updates setup-helm (but still pins Go version). |
| .github/workflows/helm-ci.yml | Updates setup-helm major to v5. |
| .github/workflows/frontend-quality.yml | Bumps Node to 26; updates download-artifact major. |
| .github/workflows/docs.yml | Bumps Node to 26 for docs build. |
| .github/workflows/deploy-rollback.yml | Updates download-artifact to v8. |
| .github/workflows/ci.yml | Bumps Node to 26; bumps golangci-lint to v2; updates download-artifact; adds i18n-validate-keys tests; sets NODE_OPTIONS for vitest shards/merge. |
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
| import ( | ||
| "context" | ||
| "encoding/json" | ||
| "fmt" | ||
| "github.com/google/uuid" | ||
| "net/http" | ||
| "strings" |
| - uses: actions/setup-go@d35c59abb061a4a6fb18e82ac0862c26744d6ab5 # v5.5.0 | ||
| with: | ||
| go-version: '1.25' | ||
|
|
||
| - uses: azure/setup-helm@1a275c3b69536ee54be43f2070a358922e12c8d4 # v4.3.1 | ||
| - uses: azure/setup-helm@9bc31f4ebc9c6b171d7bfbaa5d006ae7abdb4310 # v5.0.1 |
| file, err := os.CreateTemp(".", ".proxy-ca-test-*.pem") | ||
| if err != nil { | ||
| t.Fatal(err) | ||
| } | ||
| defer os.Remove(file.Name()) | ||
| if err := pem.Encode(file, &pem.Block{Type: "CERTIFICATE", Bytes: server.Certificate().Raw}); err != nil { | ||
| t.Fatal(err) | ||
| } |


Consolidation
All 20 source PR heads are preserved as merge parents and verified ancestors. Lock conflicts were regenerated from combined manifests (never discarded). Original PRs remain open; this replacement supersedes their intent and does not merge main.
Security remediation
Validation (complete)
Actual local output/results:
npm audit:found 0 vulnerabilities(both).GitHub advisory ranges still affected in npm lockfiles: 0.No vulnerabilities found./Your code is affected by 0 vulnerabilities.Three advisory-bearing required modules are not called by this code.0 issues.Existing v1 analyzer scope, architecture rules and baseline exceptions are preserved (not weakened); v2 merges gosimple into staticcheck and changes diagnostic identifier quoting.npx tsc --noEmit:TSC_EXIT=0.FRONTEND_LINT_EXIT=0.70 passed; jsdom/TripReplayMap:22 passed; dashboard grid:13 passed; SignalExplorer:7 passed; generated route freshness:6 passed; prior security regression group:134 passed; PWA/build identity:35 passed.9 critical routes exist in 264 application routes.1 chart(s) linted, 0 chart(s) failed; API + automation + canary trust mount rendering:CA_SECRET_REFERENCES=3.0 error(s), 64 advisory(ies)(existing drift); supply-chain:0 error(s), 0 advisory(ies).SOURCE_HEADS=20 PRESERVED=20.All five deployment images built successfully (
FINAL_COMPOSE_BUILD_EXIT=0). Strict private-map startup validation passed at 398.3 KB ≤ 400 KB. The final committed-source rebuild passed again, including the reduced duplication gate and all GitHub workflows. The unchanged 400KB startup budget is addressed through on-demand sidebar variants, tours, and report/kiosk overlays—not a budget increase or removed content. All required checks passed; this replacement is ready for review, not merged.Code-scanning dispositions
Seven alerts were dismissed only as evidenced false positives, with explanations recorded on each alert:
The other 26 findings receive code fixes; they are not dismissed.
Deployment notes and closure boundary
Self-signed command proxies now require provisioned trusted CA/public certificate and correct DNS SAN; see
docs/guide/remote-commands.md. Trust-only mounts are wired across Compose, API, automation and Helm canaries. Authenticated development uses HTTPS because session cookies are always Secure.Default-branch Dependabot and CodeQL findings only auto-close after this branch is merged and default-branch analysis completes. No scans disabled and no true findings dismissed. Original PRs remain open and are superseded by the immutable source table above. This PR does not merge main.
Integration evidence added after the first complete CI cycle
fileandlibatomic.so.1; the security workflow now installs these CodeQL runtime prerequisites rather than skipping analysis.import-in-the-middleis pinned to compatible, audit-clean 3.4.0 (within OTel’s ^3.0.0 range) to share lexer 2.3.2 with Vitest rather than introducing lexer major 3.SHA256 70a7ef392bf239ad73393afd637816146c14aea72578de03a84bc00569ce39ad). Only that image changed; screenshot thresholds remain unchanged. Local browser download timed out, so final screenshot comparison is validated by Windows CI, not claimed as locally passing.121 passed; prototype insertion regressions:2 passed; TypeScript:TSC_EXIT=0; npm audit stillfound 0 vulnerabilities.Final gate — 95730ef
FINAL_CI_EXIT=0; all five Docker CI jobs passed.FINAL_COMPOSE_BUILD_EXIT=0(API, web and three workers).FINAL_BUILD_EXIT=0 FINAL_BUDGET_EXIT=0; startup 398.3 KB; dependency and bundled-duplication gates both pass.330be602c24cf216c2ccd73b4733af12eeee9e93explicitly includes final head95730ef9fe4dea6e45f1fcf1d601a0a67ca6ab12. The earlier manual branch-ref analysis is historical, not the final PR result.SOURCE_HEADS=20 PRESERVED=20;ORIGINAL_PRS_STILL_OPEN=20; working tree clean.