{
  "filesInspected": 313,
  "findings": [
    {
      "path": "README.md",
      "line": 38,
      "finding": "\u251c\u2500\u2500 docker-compose.yml        Postgres, Redis, migrate+seed, API, 4 workers, web, admin"
    },
    {
      "path": "README.md",
      "line": 39,
      "finding": "\u2514\u2500\u2500 .github/workflows/        CI (build, unit tests, migrate, seed, smoke) and image deploys"
    },
    {
      "path": "README.md",
      "line": 62,
      "finding": "**Demo accounts** (password `[removed default credential]`, change via `SEED_ADMIN_PASSWORD`):"
    },
    {
      "path": "docker-compose.yml",
      "line": 28,
      "finding": "command: sh -c \"node packages/database/dist/migrate.js && node packages/database/dist/seed/index.js\""
    },
    {
      "path": "package.json",
      "line": 30,
      "finding": "\"db:setup\": \"npm run migrate -w @justice-choice/database && npm run seed -w @justice-choice/database\""
    },
    {
      "path": "apps/admin/app/login/page.tsx",
      "line": 55,
      "finding": "<LoginForm demoPassword={demo ? '[removed default credential]' : undefined} />"
    },
    {
      "path": "apps/admin/components/AccountForms.tsx",
      "line": 103,
      "finding": "<span className=\"field-label\"><ActionIcons.KeyIcon />Current password{currentPasswordOptional ? ' (optional)' : ''}</span>"
    },
    {
      "path": "apps/api/src/modules/auth/auth.controller.ts",
      "line": 28,
      "finding": "const changeInput = z.object({ currentPassword: z.string().max(200).optional(), newPassword: password, code: z.string().regex(/^\\d{6}$/).optional() });"
    },
    {
      "path": "apps/api/src/modules/auth/auth.controller.ts",
      "line": 318,
      "finding": "try { await this.db.update(t.users).set({ email, emailVerifiedAt: null, updatedAt: new Date() }).where(eq(t.users.id, user.id)); }"
    },
    {
      "path": "docs/UPGRADE_STATUS.md",
      "line": 117,
      "finding": "`.github/workflows/ci.yml`: install \u2192 build packages \u2192 typecheck \u2192 unit tests (ranking 12, SEO 8, API 25) \u2192 build apps \u2192 migrate + seed \u2192 smoke test \u2192 all five end-to-end suites (`node scripts/e2e/run.mjs`, which restarts the API between su"
    },
    {
      "path": "packages/database/package.json",
      "line": 14,
      "finding": "\"reset\": \"node dist/reset.js && node dist/migrate.js && node dist/seed/index.js\""
    },
    {
      "path": "packages/database/src/reset.ts",
      "line": 6,
      "finding": "if (process.env.NODE_ENV === 'production' && !process.env.ALLOW_DB_RESET) throw new Error('Refusing to reset a production database');"
    },
    {
      "path": "packages/database/src/seed/index.ts",
      "line": 429,
      "finding": "const demoPassword = process.env.SEED_ADMIN_PASSWORD ?? '[removed default credential]';"
    },
    {
      "path": "scripts/smoke.mjs",
      "line": 5,
      "finding": "* Exits non-zero on the first failure. Used by CI after migrate + seed."
    },
    {
      "path": "scripts/smoke.mjs",
      "line": 42,
      "finding": "const login = await json(`${API}/auth/login`, { method: 'POST', headers: { 'content-type': 'application/json' }, body: JSON.stringify({ email: 'verifier@justicechoice.com', password: process.env.SEED_ADMIN_PASSWORD ?? '[removed default credential]' }"
    },
    {
      "path": "scripts/e2e/lib.mjs",
      "line": 20,
      "finding": "export const OWNER = { email: process.env.E2E_OWNER_EMAIL ?? 'admin@justicechoice.com', password: process.env.E2E_OWNER_PASSWORD ?? '[removed default credential]' };"
    },
    {
      "path": "scripts/e2e/lib.mjs",
      "line": 21,
      "finding": "export const DEMO_PASSWORD = '[removed default credential]';"
    }
  ]
}
