[pull] main from Open-Legal-Products:main

✅ merged · #8 · admariner/mike ← Open-Legal-Products/mike · opened 2mo ago by pull[bot] · merged 2mo ago by pull[bot] · +3,535-1,047 across 23 files · ↗ on GitHub

From the PR description

See Commits and Changes for more details.


Created by pull[bot] (v2.0.0-alpha.4)

Can you help keep this open source service alive? 💖 Please sponsor : )

Our analysis

Merge fork updates — read the full analysis →

Think the analysis missed something the PR description covers?

Commits in this PR (6)

SHA Subject Author Date
b20109ac ci: build and test workflow for backend and frontend QA Runner 2026-07-20 ↗ GitHub
commit body
Ported from amal66/mike#46 onto current main, extended for this tree:
backend job runs npm ci, tests (--if-present, so it is safe to merge in any
order relative to the test-harness PR) and tsc build; frontend job runs
tests, eslint as an advisory step (main currently carries 23 lint errors -
flip to blocking once burned down), and a production next build with
placeholder NEXT_PUBLIC_* env (verified locally that the build succeeds and
contacts nothing); evals job runs node evals/run.mjs when present, else
skips.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
a29e67de test: component and hook unit tests for the web app QA Runner 2026-07-20 ↗ GitHub
commit body
Ported from the amal66 fork (index: Open-Legal-Products/mike#205), adapted
to this repo's frontend/ layout and current component behavior. Adds the
jsdom + testing-library harness on top of the existing vitest setup:
vitest.config.mts (jsdom environment, @/ alias mirroring tsconfig paths,
dummy Supabase env for modules that build a client at import time) and
vitest.setup.ts (jest-dom matchers). New devDependencies: jsdom,
@testing-library/react, @testing-library/jest-dom,
@testing-library/user-event, @vitejs/plugin-react.

Ported suites (30 new tests):
- FileTypeIcon.test.tsx (11) - fileTypeKind mapping + icon rendering
- TRTable.test.tsx (1) - header/row render smoke test; the fork's ARIA
  role assertions (table/columnheader, "Tabular review" label) target
  fork-only markup - this repo's grid is div-based, so the test asserts
  rendered content instead
- button.test.tsx (4), pill-button.test.tsx (8), cite-button.test.tsx (3)
- useSmoothedReveal.test.ts (3) - passes against this repo's early-return
  snap behavior unchanged

Dropped (subjects don't exist here):
- HistoryDropdown.test.tsx - no tr-chat-panel/HistoryDropdown component
- applyAssistantStreamEvent.test.ts - no such module
- useProjectsQuery/useTabularReviewsQuery/useWorkflowsQuery tests -
  react-query is fork-only
- lib/toast.test.ts - no frontend/src/lib/toast.ts
- useAssistantChat.parsers.test.ts - the parser helpers exist inside
  useAssistantChat.ts but are not exported, and the fork's extracted
  module doesn't exist here

Verified: frontend npm test 38/38 passing (30 new + 8 pre-existing cn()
utils tests); npx tsc --noEmit clean.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
0740f656 fix: burn down frontend eslint errors; make CI lint blocking QA Runner 2026-07-20 ↗ GitHub
commit body
Takes frontend/npm run lint from 23 errors / 40 warnings to 0 errors /
40 warnings, then removes continue-on-error from the CI lint step so it
gates merges.

Errors fixed outright:
- @typescript-eslint/no-explicit-any (5, ChatView.tsx): dropped
  redundant (msg as any) casts - Message already declares files,
  workflow, and error with the exact shapes the props expect.
- react/no-unescaped-entities (1, support/page.tsx): "We'll" ->
  "We&apos;ll".

Targeted disables (17, all react-hooks/set-state-in-effect): every site
is an intentional effect-driven state pattern - SSR/hydration mount
gates (Modal, useSelectedModel), reset-on-prop/identity-change
(CaseLawPanel x3, ChatView chat switch, CitationQuotesHeader,
ChatHistoryContext logout, useFetchDocxBytes), sync fast paths of async
fetch/check effects (CaseLawPanel, MfaLoginGate x2), DOM-measured state
(ChatView scroll button, message-visibility restore), and timed UI
latches (PreResponseWrapper, TRChatPanel, AskInputPopup auto-submit).
Rewriting any of them would change runtime behavior, so each carries a
// eslint-disable-next-line with a one-line reason instead of a fix or
a repo-wide rule change.

CI: lint step is now blocking; comments updated to say the backlog is
at zero.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
73b9cd16 Merge pull request #232 from amal66/olp-pr/ci-workflows Will Chen 2026-07-22 ↗ GitHub
[CI 03] ci: build and test workflow for backend and frontend
7d2ba4b8 Merge pull request #235 from amal66/olp-pr/lint-burndown Will Chen 2026-07-22 ↗ GitHub
[Lint 04] fix: burn down frontend eslint errors; make CI lint blocking
2ec89a7c Merge pull request #230 from amal66/olp-pr/frontend-unit-tests Will Chen 2026-07-22 ↗ GitHub
[Testing 07] test: component and hook unit tests for the web app

Capture this PR into my fork

Download a Markdown prompt that tells Claude how to port every commit in this PR into your working tree. Run it via claude -p < capture-pull-8.md from inside the repo you want the changes in.

⬇ Download capture-pull-8.md