Overview Weighted score across 7 buckets

Luxscope Score
84/ 100
56 risk files · 25 findings · profile default
Luxscope Score reflects findings across Security, Complexity, Documentation, Dependencies, Dead Code, Test Coverage, Other. The breakdown below shows where pressure concentrates so you know what to fix first.
Critical
0
High
6
Medium
19
Low
0
Risk Files
56
Findings
25

Score breakdown 7 buckets · weighted

Security69
25%
Complexity67
20%
Documentation99
15%
Dependencies100
15%
Dead Code100
10%
Test Coverage82
10%
Other100
5%

History

Total Commits
1
First Commit
2026-05-17
Tags
0

Recent commits

  • dae209a build(deps): bump github/codeql-action from 4.35.1 to 4.35.2 (#7212) dependabot[bot] · 2026-05-17

Ownership

No CODEOWNERS file detected.

Stack

Node.js
>= 18

CI

Platform: GitHub Actions

.github/workflows/ci.yml
GitHub Actions
.github/workflows/codeql.yml
GitHub Actions
.github/workflows/legacy.yml
GitHub Actions
.github/workflows/scorecard.yml
GitHub Actions

Tests

Runners
0
Spec Files
0
Coverage Threshold

Hygiene

TODO markers
2
FIXME markers
0
Skipped tests
0
Feature flags
0

Dependencies

Dependencies
28
Dev Dependencies
16
Majors Behind
0
Deprecated
0
Copyleft Licenses
0
Unknown Licenses
0

Documents

23 handoff document(s) generated from the codebase. Expand each to read inline.

HANDOFF

express — Developer Handoff

Entry point. Read this first. Everything else is referenced from here.

Generated: 2026-05-26 00:29:05 UTC · Repo root: /tmp/express · Remote: https://github.com/expressjs/express.git


1. What is this?

express — project manifest detected from package.json.

Detected stack: (none)

Repository signals:

  • Prisma models: 0 (0 enums, 0 relations)
  • NestJS controllers: 0 (0 endpoints)
  • Next.js routes: 0 app/ + 0 pages/
  • Frontend components: 0

Full stack + topology: see ARCHITECTURE · INFRASTRUCTURE


2. Current state

Recent commits:

  • dae209a build(deps): bump github/codeql-action from 4.35.1 to 4.35.2 (#7212) — dependabot[bot] (2026-05-17)

3. Top 10 risks (bus-factor warning)

Generated by Luxscope static analysis (static + churn + ownership).

Band totals: 0 HIGH · 3 MED · 53 LOW (56 files scanned)

# File Score Owner Churn 90d Band
1 test/res.redirect.js 51 dependabot[bot] 1 MED
2 test/res.location.js 46.2 dependabot[bot] 1 MED
3 lib/response.js 46 dependabot[bot] 1 MED
4 examples/view-locals/index.js 19 dependabot[bot] 1 LOW
5 examples/route-middleware/index.js 15 dependabot[bot] 1 LOW
6 lib/application.js 14 dependabot[bot] 1 LOW
7 lib/view.js 13.4 dependabot[bot] 1 LOW
8 test/Router.js 12.6 dependabot[bot] 1 LOW
9 examples/auth/index.js 11 dependabot[bot] 1 LOW
10 lib/utils.js 11 dependabot[bot] 1 LOW

Full risk dashboard: risks/RISKS.md · risks/SUMMARY.txt. Interactive site: web/index.html. Per-file explain files: explain/.


4. How to get started

  1. Read README — install, dev scripts, ports.
  2. Read ARCHITECTURE — topology, request flows.
  3. Read BEST_PRACTICES — git workflow + commit conventions.
  4. Read DEPLOYMENT before touching staging/prod.
  5. Read RUNBOOK on first incident.

5. Aux artefacts


Code ownership

No CODEOWNERS file detected. Add .github/CODEOWNERS so reviewers are auto-requested and new contributors know who maintains what.

README

express — Local Developer Setup

Generated by Luxscope handoff. Re-run luxscope handoff to refresh.

Prerequisites

  • Node.js >= 18
  • Package manager: npm

Setup

  1. git clone https://github.com/expressjs/express.git
  2. cd express
  3. npm install

Run dev

(none detected)

Detected service ports (from docker-compose.yml):

(none detected via docker-compose; check framework defaults: Next.js 3000, NestJS 3000, Express varies)

Test

Unit:

  • npm run test — mocha --require test/support/env --reporter spec --check-leaks test/ test/acceptance/

Quality gates

  • npm run lint — eslint .
  • npm run lint:fix — eslint . --fix

Environment

  • See .env.example (if present at repo root) for required variables.
  • See DEPLOYMENT.md for staging/production env handling.

What next

HOWTO

express — How To

Stack-specific playbook. Read README.md first for setup; this file is the day-1 / week-1 task playbook.

Day 1

  • Read HANDOFF.md (entry point) and ARCHITECTURE.md (topology).

  • Run dev locally per README.md.

  • Hit a health endpoint (look in API_REFERENCE_DETAIL.md for /health, /healthz, /ping).

  • Run the full test suite once to confirm a clean baseline:

    npm test
    
  • Skim risks/RISKS.md — top 10 files are the bus-factor + complexity hot spots.

Week 1 — Common operations

Ship a change

  1. Branch from main (or develop if the repo uses GitFlow).
  2. Make the change. Keep the PR ≤ 400 LOC where possible.
  3. Run quality gates locally — see README.md.
  4. Open a PR; follow conventions in BEST_PRACTICES.md.
  5. Wait for CI green + 1 reviewer approval before merge.

Where to look when something breaks

Work in progress / known unknowns

Source markers (2)

2 TODO

Open pull requests (30)

Fetched from GitHub via the gh CLI. Mid-flight changes — coordinate before stomping on these branches.

# Title Branch Author Labels
#7035 fix: prevent Content-Type header from being set to 'false' fix/content-type-false-value @veeceey
#7038 test: add unit tests for compileQueryParser, compileTrust, and normalizeTypes test/add-utils-coverage @tommyhgunz14
#7041 feat: add diagnostics_channel support for app initialization diagnostics-channel @DemianParkhomenko
#7045 fix: non standard status code will result in undefined statusMessage @cuiweixie
#7047 Refactor X-Forwarded-Host value extraction patch-1 @ProxyLoader
#7050 Improve test coverage for res.set() edge cases master @RlxChap2
#7051 fix: make view engine extension matching case-insensitive fix/case-insensitive-view-engine-ext @erdinccurebal
#7059 refactor(deps): migrate connect-redis from v8 to v9 deps/upgrade-connect-redis-9.0.0 @digital-wizard48
#7061 refactor(deps): migrate express-session from v1.18.1 to v1.19.0 deps/upgrade-express-session-1.19.0 @digital-wizard48
#7092 fix: replace deprecated module.parent with require.main === module in… fix/replace-module-parent-in-examples @sehrishanam1 examples
#7105 Unit test cases for uncovered lines for response.js file master @ashish3011 tests
#7107 fix: use safe stringification for status code error messages fix/status-code-bigint-error-message @AkaHarshit
#7112 achieve 100% test coverage in expressjs master @bhavya3024
#7113 Fix issue #5995, added cookie encryption fix-issue-#5995 @emilANS
#7117 Fix query parameter truncation with configurable limit (fixes #5878) fix-query-param-limit-5878-new @nmurrell07
#7119 clarify express-generator is still 4.x docs/clarify-generator-version @AzmeerX docs
#7130 fix: handle BigInt status codes in res.status() and res.sendStatus() fix/bigint-status-handling @JivinSardine
#7132 Fix fallback for unknown Content-Type values (#7034) fix/issue-7034-content-type-fallback @raashish1601
#7135 Update path-to-regexp to 0.1.13 to fix CVE-2026-4867 makkuznetsov/update-path-regexp @baryman 4.x · deps · dependencies
#7142 fix: add path containment check in View.prototype.lookup() fix/view-lookup-path-containment @som14062005
#7146 fix(res.set): remove implicit mime lookup and charset injection for Content-Type fix/res-set-no-mime-lookup @Pandey-Krishnaa
#7151 fix: keep repeated extended query params as arrays beyond 20 values fix-7147-query-array-limit @wwenrr 5.x · awaiting reviewer
#7152 build(deps-dev): bump hbs from 4.2.0 to 4.2.1 dependabot/npm_and_yarn/hbs-4.2.1 @app/dependabot dependencies · javascript
#7161 fix: fall back to JSON when JSONP callback sanitizes to empty fix/jsonp-empty-callback @andrewstellman
#7171 feat: add diagnostic channels for request lifecycle feat/diagnostics-channel-request-lifecycle @OussemaNehdi
#7229 Skip default logging for client errors codex/skip-client-error-logging @raashish1601
#7233 Upgrade content-disposition be/upgrade-content-disposition @blakeembrey
#7234 Upgrade content-type be/upgrade-content-type @blakeembrey
#7265 fix: replace deprecated trimRight() with trimEnd() fix/trimright-to-trimend @tejgokani
#7275 feat: handle circular structure serialization feat-circular-structure @leandro-costa-oliveira
ARCHITECTURE

express — Architecture

Detected no containers, 1 persona, 0 external systems. The diagrams below are deterministic — they reflect manifests, framework scanners, and infrastructure files. Run luxscope docs build --level hub --with-ai to add narrative prose without overwriting the C4 blocks.

Context (C4 Level 1)

C4Context
  title System Context for express
  Person(user, "End user", "Application user")
  System(system, "express", "Application under documentation")
  Rel(user, system, "Uses", "HTTPS")
  UpdateLayoutConfig($c4ShapeInRow="3", $c4BoundaryInRow="2")

Containers (C4 Level 2)

C4Container
  title Container View for express
  Person(user, "End user")
  System_Boundary(boundary_express, "express") {
  }
API REFERENCE

express — API Reference

No NestJS controllers detected via AST scan. If this project uses a different HTTP framework or an OpenAPI spec, add openapi.json at the repo root and re-run luxscope handoff.

DB SCHEMA

express — Database Schema

No prisma/schema.prisma detected. If this project uses a different ORM (TypeORM, Drizzle, Sequelize), the ER diagram is not yet supported.

FRONTEND

express — Frontend

No Next.js app/ or pages/ routes detected.

BEST PRACTICES

express — Best Practices

No CLAUDE.md / AGENTS.md / .cursorrules detected. This document is a deterministic skeleton; run luxscope handoff --ai (premium) to fill guidance from CONTRIBUTING + CI config.

Testing

  • (not detected in scan)

Linting

  • Tools: eslint
  • Scripts: lint, lint:fix

CI

  • .github/workflows/ci.yml
  • .github/workflows/codeql.yml
  • .github/workflows/legacy.yml
  • .github/workflows/scorecard.yml

Release

  • (not detected in scan)

Conventions to confirm

  • Branch + commit conventions
  • PR flow and review gates
  • Testing expectations
  • Release / deploy process
DEPLOYMENT

express — Deployment

Branch: master · HEAD: dae209ae6559

CI workflows detected

  • .github/workflows/ci.yml
  • .github/workflows/codeql.yml
  • .github/workflows/legacy.yml
  • .github/workflows/scorecard.yml

Infrastructure detected

  • Dockerfiles: 0
  • docker-compose files: 0
  • Terraform dirs: 0
  • Kubernetes manifests: 0

Narrative deployment procedure deferred to luxscope handoff --ai (premium).

RUNBOOK

express — Runbook

No runbooks detected at docs/runbooks/ or runbooks/. The skeleton below is a deterministic placeholder; run luxscope handoff --ai (premium) to synthesize an incident playbook from git history.

Observability

Recent fix commits (auto-detected)

No fix/hotfix/revert commits detected in recent history.

Common incidents

Each entry: Symptom → Diagnosis → Fix.

  • Deployment failure: check CI workflow logs in .github/workflows/. Last deployable commit: see fix commits above.
  • Database migration failure: check for pending migrations. Roll back to previous release tag.
  • Service unavailability: verify health endpoints and container/process status.
  • Add repo-specific incidents as they occur.

Rollback procedures

  • Identify the last stable git tag: git tag --sort=-creatordate | head -5
  • Create a revert PR or cherry-pick the breaking commit.
  • If DB migration ran: restore from pre-migration backup before reverting code.
  • Document repo-specific rollback procedures here.
INFRASTRUCTURE

express — Infrastructure

CI Workflows

  • .github/workflows/ci.yml
  • .github/workflows/codeql.yml
  • .github/workflows/legacy.yml
  • .github/workflows/scorecard.yml

Stack version pins

Authoritative versions for the moving pieces. When upgrading, treat this table as the contract: bump it with the change, not after.

Component Version Category Source
Node.js >= 18 runtime package.json engines.node
SECURITY

express — Security

No docs/SECURITY.md detected. This document is a deterministic skeleton; run luxscope handoff --ai (premium) to synthesize policy prose.

Detected auth libraries

  • (no auth libraries auto-detected)

Session / token model

  • express-session
  • cookie-session

Roles / authorization

  • (not detected in scan)

Encryption at rest

  • (not detected in scan)

Audit logging

  • (not detected in scan)

Open gaps (verify manually)

  • Rate limiting (express-rate-limit / @nestjs/throttler)
  • Content Security Policy headers
  • CSRF protection
  • Audit log retention policy
  • Secrets rotation procedure

Sections still requiring manual or AI authoring

  • Authentication flow (sequence diagram per identity source)
  • Authorization model (roles, tenant scoping, RLS)
  • Data protection (at rest, in transit, encrypted columns, DLQ encryption)
  • CSP / WAF / rate limiting policies
  • Audit logging retention
  • Known open security issues
  • SOC 2 / compliance posture
ENV VARS

express — Environment Variables

Detected 2 distinct environment variables. No .env.example / .env.sample / .env.template found at repo root — the table below is grep-only and Required is best-effort.

Name Required Default Consumers Description
NO_DEPRECATION yes test/support/env.js
NODE_ENV yes examples/cookies/index.js, examples/error-pages/index.js +4
MIGRATIONS

express — Migration History

No migrations directory detected. Luxscope looked in: prisma/migrations, apps/api/prisma/migrations, packages/db/prisma/migrations, db/migrations, migrations, supabase/migrations.

TEST STRATEGY

express — Test Strategy & Coverage Map

Deterministic snapshot of test infrastructure: which runners are configured, where specs live, what coverage CI enforces, and what's currently shipping.

Latest coverage report

No coverage/coverage-summary.json found. Run the coverage script (often test:cov, test --coverage, or vitest run --coverage) to generate one before relying on these numbers.

Test scripts

Detected test entry points across workspaces.

Workspace Script Command
express test mocha --require test/support/env --reporter spec --check-leaks test/ test/acceptance/

Layer guidance

  • Unit — pure functions, mock external dependencies, no network. Fast.
  • Integration — boots the framework, hits a real database or in-memory equivalent. Catches wiring bugs unit tests miss.
  • E2E — spawns the full stack, drives the public surface (HTTP, browser). Slowest; reserve for journey coverage.

Default to the highest-speed layer that can still fail when the bug returns.

DEBUGGING

express — Local Debugging Recipes

No log directories, health endpoints, dev scripts, or stack-detected recipes found.

Document the local debugging entry points by hand in HOWTO.md if they live outside the standard paths.

FIRST COMMIT

express — First Commit Guide

Everything a new contributor needs to land their first PR without burning a half-day on convention discovery.

1. Preflight checklist

  • No CONTRIBUTING.md detected — ask in the team channel before sending a PR.
  • Pull main (or the project's default branch) and create your branch from it.

2. Branch naming

No branch policy detected. Conventional choice: feat/short-slug for features, fix/short-slug for fixes.

3. Commit format

No commitlint config detected. Default to Conventional Commits (feat: / fix: / chore: / docs:).

4. Hooks that run automatically

No .husky/ hooks detected. CI is the only line of defense — pull recent main before pushing.

5. Low-risk first-PR ideas

Detected directly from the repo. Each one is small enough to ship in a single PR:

6. Final checklist before pushing

  • Tests pass for the area you touched.
  • TypeScript / build is clean for the affected workspace.
  • Commit message matches the format above.
  • Branch name matches the policy above.
  • Push, then open a PR against the default branch.
ONBOARDING

express — Onboarding Checklist

Concrete deliverables for a new engineer joining this repo. Every item points at a real file, command, or signal already detected in this bundle — no aspirational filler.

Day 1 — Boot the system

Goal: clone the repo, get the local stack up, hit one endpoint successfully, and read enough docs to know where things live.

  • Clone the repo and read README.md + HOWTO.md end-to-end.
  • Install Node >= 18 (engine pinned in package.json).
  • Run npm install (or the equivalent for your package manager).
  • Confirm services are listening on their expected ports.
  • Pair with someone for 30 minutes — let them walk you through their last PR.

Week 1 — Build a mental model

Goal: read enough code to know what's load-bearing, what's risky, and how the team works.

Month 1 — Own a slice

Goal: be the go-to person for at least one area of the system.

  • Be primary reviewer on at least 5 PRs in your domain area.
  • Lead a 30-minute walkthrough of one area for the next new hire.

Sign-off

Work down the boxes in order. When the Month-1 list is fully checked, you're no longer onboarding — you're a maintainer.

GLOSSARY

express — Glossary

No domain terms extracted. Add Prisma models, NestJS controllers, or hand-written runbooks to populate this section.

API RECIPES

express — API Recipes

No NestJS endpoints or Next.js routes detected.

If the API uses a different framework (FastAPI, Express, Rails, ...), document the recipes by hand in HOWTO.md.

ADR INDEX

express — ADR Index

No ADRs detected. Luxscope looked under docs/adr/, docs/decisions/, and any *.adr.md files.

Even one ADR is better than none — start with a 5-line decision record the next time the team makes a non-obvious call.

PERF + I18N

express — Performance & Internationalization

No performance instrumentation or i18n machinery detected.

If perf metrics or translations live elsewhere (separate ops repo, vendor UI), document the location here by hand.

ER Diagram

express — ER Diagram

No Prisma schema detected. Diagram unavailable.

Gates

no_high_risk_files0 files exceed HIGH-risk threshold.
Pass
no_secrets_detectedNo secrets detected.
Pass
license_compliantNo license violations.
Pass
no_critical_findings3 high-severity high-confidence finding(s).
Triggered
test_coverage_minimumCoverage not measured.
Pass

Quick Wins

RuleEffortPotential GainEvidence
eval-usage10 min+5.0 ptstest/res.redirect.js:115 — eval()/exec() executes arbitrary code
eval-usage10 min+5.0 ptstest/res.redirect.js:116 — eval()/exec() executes arbitrary code
dangerous-innerhtml10 min+5.0 ptstest/res.redirect.js:115 — innerHTML / dangerouslySetInnerHTML bypasses escaping
dangerous-innerhtml10 min+5.0 ptstest/res.redirect.js:116 — innerHTML / dangerouslySetInnerHTML bypasses escaping
raw-sql-string-concat10 min+5.0 ptsexamples/route-map/index.js:51 — SQL text joined with + or f-string — likely injection surface

Risk Files

Files ranked by aggregated risk score, banded HIGH / MED / LOW. Expand a card to see the drivers that pushed it into its band, the top contributing findings, and concrete mitigation steps.

test/res.redirect.js score 51   findings 4   dependabot[bot]
TOP FINDINGS
HIGH FAILeval-usage~10m
test/res.redirect.js:115 — eval()/exec() executes arbitrary code
HIGH FAILeval-usage~10m
test/res.redirect.js:116 — eval()/exec() executes arbitrary code
HIGH FAILdangerous-innerhtml~10m
test/res.redirect.js:115 — innerHTML / dangerouslySetInnerHTML bypasses escaping
HIGH FAILdangerous-innerhtml~10m
test/res.redirect.js:116 — innerHTML / dangerouslySetInnerHTML bypasses escaping
test/res.location.js score 46.2   findings 11   dependabot[bot]
TOP FINDINGS
MED FAILtest-asserts-nothing~10m
test/res.location.js:183 — Test "should consistently handle relative urls" has no assertion — body has 8 statement line(s) but nothing checked
MED FAILtest-asserts-nothing~10m
test/res.location.js:194 — Test "should not encode urls in such a way that they can bypass redirect allow lists" has no assertion — body has 8 statement line(s) but nothing checked
MED FAILtest-asserts-nothing~10m
test/res.location.js:205 — Test "should not be case sensitive" has no assertion — body has 8 statement line(s) but nothing checked
MED FAILtest-asserts-nothing~10m
test/res.location.js:216 — Test "should work with https" has no assertion — body has 8 statement line(s) but nothing checked
MED FAILtest-asserts-nothing~10m
test/res.location.js:227 — Test "should correctly encode schemaless paths" has no assertion — body has 8 statement line(s) but nothing checked
MED FAILtest-asserts-nothing~10m
test/res.location.js:238 — Test "should keep backslashes in the path" has no assertion — body has 8 statement line(s) but nothing checked
lib/response.js score 46   findings 31   dependabot[bot]
examples/view-locals/index.js score 19   findings 19   dependabot[bot]
examples/route-middleware/index.js score 15   findings 15   dependabot[bot]
lib/application.js score 14   findings 11   dependabot[bot]
lib/view.js score 13.4   findings 12   dependabot[bot]
TOP FINDINGS
MED FAILfs-sync-in-request-path~10m
lib/view.js:197 — tryStat calls sync fs API statSync
test/Router.js score 12.6   findings 3   dependabot[bot]
TOP FINDINGS
MED FAILtest-asserts-nothing~10m
test/Router.js:19 — Test "should support .use of other routers" has no assertion — body has 7 statement line(s) but nothing checked
MED FAILtest-asserts-nothing~10m
test/Router.js:91 — Test "should not stack overflow with many registered routes" has no assertion — body has 10 statement line(s) but nothing checked
MED FAILtest-asserts-nothing~10m
test/Router.js:202 — Test "should not throw if all callbacks are functions" has no assertion — body has 2 statement line(s) but nothing checked
examples/auth/index.js score 11   findings 11   dependabot[bot]
lib/utils.js score 11   findings 11   dependabot[bot]
examples/resource/index.js score 9   findings 4   dependabot[bot]
TOP FINDINGS
HIGH FAILraw-sql-string-concat~10m
examples/resource/index.js:22 — SQL text joined with + or f-string — likely injection surface
examples/route-map/index.js score 9   findings 4   dependabot[bot]
TOP FINDINGS
HIGH FAILraw-sql-string-concat~10m
examples/route-map/index.js:51 — SQL text joined with + or f-string — likely injection surface
test/app.listen.js score 8.4   findings 2   dependabot[bot]
TOP FINDINGS
MED FAILtest-asserts-nothing~10m
test/app.listen.js:7 — Test "should wrap with an HTTP server" has no assertion — body has 4 statement line(s) but nothing checked
MED FAILtest-asserts-nothing~10m
test/app.listen.js:38 — Test "accepts just a callback (no args)" has no assertion — body has 3 statement line(s) but nothing checked
examples/error/index.js score 7   findings 7   dependabot[bot]
examples/search/index.js score 7   findings 7   dependabot[bot]
examples/view-constructor/github-view.js score 7   findings 7   dependabot[bot]
lib/request.js score 6   findings 3   dependabot[bot]
test/app.js score 4.2   findings 1   dependabot[bot]
TOP FINDINGS
MED FAILtest-asserts-nothing~10m
test/app.js:8 — Test "should inherit from event emitter" has no assertion — body has 3 statement line(s) but nothing checked
test/Route.js score 4.2   findings 1   dependabot[bot]
TOP FINDINGS
MED FAILtest-asserts-nothing~10m
test/Route.js:10 — Test "should work without handlers" has no assertion — body has 3 statement line(s) but nothing checked
examples/content-negotiation/db.js score 4   findings 4   dependabot[bot]
examples/content-negotiation/users.js score 4   findings 4   dependabot[bot]
examples/multi-router/controllers/api_v1.js score 4   findings 4   dependabot[bot]
examples/multi-router/controllers/api_v2.js score 4   findings 4   dependabot[bot]
examples/mvc/controllers/main/index.js score 4   findings 4   dependabot[bot]
examples/route-separation/site.js score 4   findings 4   dependabot[bot]
examples/search/public/client.js score 4   findings 4   dependabot[bot]
examples/content-negotiation/index.js score 3   findings 3   dependabot[bot]
examples/cookie-sessions/index.js score 3   findings 3   dependabot[bot]
examples/cookies/index.js score 3   findings 3   dependabot[bot]
examples/downloads/index.js score 3   findings 3   dependabot[bot]
examples/ejs/index.js score 3   findings 3   dependabot[bot]
examples/error-pages/index.js score 3   findings 3   dependabot[bot]
examples/hello-world/index.js score 3   findings 3   dependabot[bot]
examples/markdown/index.js score 3   findings 3   dependabot[bot]
examples/multi-router/index.js score 3   findings 3   dependabot[bot]
examples/mvc/controllers/pet/index.js score 3   findings 3   dependabot[bot]
examples/mvc/controllers/user-pet/index.js score 3   findings 3   dependabot[bot]
examples/mvc/controllers/user/index.js score 3   findings 3   dependabot[bot]
examples/mvc/db.js score 3   findings 3   dependabot[bot]
examples/mvc/index.js score 3   findings 3   dependabot[bot]
examples/mvc/lib/boot.js score 3   findings 3   dependabot[bot]
examples/online/index.js score 3   findings 3   dependabot[bot]
examples/params/index.js score 3   findings 3   dependabot[bot]
examples/route-separation/index.js score 3   findings 3   dependabot[bot]
examples/route-separation/post.js score 3   findings 3   dependabot[bot]
examples/route-separation/user.js score 3   findings 3   dependabot[bot]
examples/session/index.js score 3   findings 3   dependabot[bot]
examples/session/redis.js score 3   findings 3   dependabot[bot]
examples/static-files/index.js score 3   findings 3   dependabot[bot]
examples/static-files/public/js/app.js score 3   findings 3   dependabot[bot]
examples/vhost/index.js score 3   findings 3   dependabot[bot]
examples/view-constructor/index.js score 3   findings 3   dependabot[bot]
examples/view-locals/user.js score 3   findings 3   dependabot[bot]
examples/web-service/index.js score 3   findings 3   dependabot[bot]
index.js score 3   findings 3   dependabot[bot]
lib/express.js score 3   findings 3   dependabot[bot]

Findings

SeverityRuleLocationMessageEffort
HIGHeval-usagetest/res.redirect.js:115eval()/exec() executes arbitrary code
HIGHeval-usagetest/res.redirect.js:116eval()/exec() executes arbitrary code
HIGHdangerous-innerhtmltest/res.redirect.js:115innerHTML / dangerouslySetInnerHTML bypasses escaping
HIGHdangerous-innerhtmltest/res.redirect.js:116innerHTML / dangerouslySetInnerHTML bypasses escaping
HIGHraw-sql-string-concatexamples/route-map/index.js:51SQL text joined with + or f-string — likely injection surface
HIGHraw-sql-string-concatexamples/resource/index.js:22SQL text joined with + or f-string — likely injection surface
MEDIUMtest-asserts-nothingtest/Route.js:10Test "should work without handlers" has no assertion — body has 3 statement line(s) but nothing checked
MEDIUMtest-asserts-nothingtest/Router.js:19Test "should support .use of other routers" has no assertion — body has 7 statement line(s) but nothing checked
MEDIUMtest-asserts-nothingtest/Router.js:91Test "should not stack overflow with many registered routes" has no assertion — body has 10 statement line(s) but nothing checked
MEDIUMtest-asserts-nothingtest/Router.js:202Test "should not throw if all callbacks are functions" has no assertion — body has 2 statement line(s) but nothing checked
MEDIUMtest-asserts-nothingtest/app.js:8Test "should inherit from event emitter" has no assertion — body has 3 statement line(s) but nothing checked
MEDIUMtest-asserts-nothingtest/app.listen.js:7Test "should wrap with an HTTP server" has no assertion — body has 4 statement line(s) but nothing checked
MEDIUMtest-asserts-nothingtest/app.listen.js:38Test "accepts just a callback (no args)" has no assertion — body has 3 statement line(s) but nothing checked
MEDIUMtest-asserts-nothingtest/res.location.js:183Test "should consistently handle relative urls" has no assertion — body has 8 statement line(s) but nothing checked
MEDIUMtest-asserts-nothingtest/res.location.js:194Test "should not encode urls in such a way that they can bypass redirect allow lists" has no assertion — body has 8 statement line(s) but nothing checked
MEDIUMtest-asserts-nothingtest/res.location.js:205Test "should not be case sensitive" has no assertion — body has 8 statement line(s) but nothing checked
MEDIUMtest-asserts-nothingtest/res.location.js:216Test "should work with https" has no assertion — body has 8 statement line(s) but nothing checked
MEDIUMtest-asserts-nothingtest/res.location.js:227Test "should correctly encode schemaless paths" has no assertion — body has 8 statement line(s) but nothing checked
MEDIUMtest-asserts-nothingtest/res.location.js:238Test "should keep backslashes in the path" has no assertion — body has 8 statement line(s) but nothing checked
MEDIUMtest-asserts-nothingtest/res.location.js:249Test "should escape header splitting for old node versions" has no assertion — body has 8 statement line(s) but nothing checked
MEDIUMtest-asserts-nothingtest/res.location.js:260Test "should encode unicode correctly" has no assertion — body has 8 statement line(s) but nothing checked
MEDIUMtest-asserts-nothingtest/res.location.js:271Test "should encode unicode correctly even with a bad host" has no assertion — body has 8 statement line(s) but nothing checked
MEDIUMtest-asserts-nothingtest/res.location.js:282Test "should work correctly despite using deprecated url.parse" has no assertion — body has 8 statement line(s) but nothing checked
MEDIUMtest-asserts-nothingtest/res.location.js:293Test "should encode file uri path" has no assertion — body has 8 statement line(s) but nothing checked
MEDIUMfs-sync-in-request-pathlib/view.js:197tryStat calls sync fs API statSync

Generated Documentation

Markdown docs and interactive diagrams emitted alongside the report. Use these as a self-contained handoff package: architecture overview, module map, dep graph, and a contributor-onboarding README — all derived from the same scan.

Handoff (README)Missing
MD
Entry-point for new contributors. Setup, run, test, deploy.
ArchitectureMissing
MD
High-level system design, modules, boundaries.
ModulesMissing
MD
Per-package overview with public exports.
DependenciesMissing
MD
Internal + external dep graph, version pins.
RisksMissing
MD
Markdown export of risk findings.
GapsMissing
MD
Missing docs, untested paths, undocumented APIs.
Frontend RoutesMissing
MD
Route inventory + page-type classification.
SummaryMissing
MD
Executive summary of repo health.
Module GraphMissing
DIAGRAM
Interactive Cytoscape graph of inter-module imports.
Call GraphMissing
DIAGRAM
Function-level call relationships, top-down.

Metadata

FieldValue
Repoexpress
Generated2026-05-26 00:29:05 UTC
Luxscope version0.1.0
Scoring versiondefault
Profiledefault
Levelstandard
Files scanned56
Total findings25

Generated by Luxscope 0.1.0 · scoring default