wardethan2000-eng makes legal research usable inside the matter

The fork closes the gap between finding legal material and actually using it in a live file.

workflowknowledge-management

Research results now treat statutes alongside cases as readable, numbered sources, and either can be saved directly into the relevant matter without leaving misleading empty folders when something fails.

  • Matter filing: saves the law itself, not the surrounding web page, and keeps the filed status visible after a refresh.
  • Chat attachments: a file dropped into a conversation stays with that conversation; drop it on the matter file list to file it more broadly.
  • Reliable uploads: common browser and file-manager labels no longer cause a dropped file to be ignored.
  • Research continuity: conversations that reach their research limit explain what happened and offer a way to continue.
  • Document editing: users can add or remove whole paragraphs, not just alter words already on the page.
So what Litigators and legal-ops teams should care because this makes research, evidence and drafting behave more like one matter workspace than a collection of disconnected tools.

View this fork on GitHub →

Spotted something wrong? Or know the PR text has fresher detail than the writeup above?

Commits in this thread

7 commits from wardethan2000-eng/mike, oldest first. Source extracted verbatim from the harvested git log.

SHA Subject Author Date
33e4441c feat: list and undo buttons in the document editor Ethan Ward 2026-08-19 ↗ GitHub
commit body
Adds the toolbar controls for the list and undo support already in the
engine: bulleted list, numbered list, and an undo button that steps the
document back to how it was before the last save.

The list buttons toggle - pressing the same one again turns the
paragraphs back into ordinary text. A paragraph the document already
renders as a list item (inside a ul/ol) is recognised as one, so an
existing list is not flattened to body text by the next save. Undo
re-fetches and re-renders the restored document.

Verified end to end in the browser: a bulleted list persisted into the
saved .docx as a real Word list (w:numPr + numbering definitions
registered in the package), and undo restored the previous version
without destroying the later one.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018RCY6K4dNwdbo9gU3HQ9un
ada4e2eb feat: save a case or statute from a chat into the matter's Law folder Ethan Ward 2026-08-19 ↗ GitHub
commit body
A case or statute the assistant pulls can now be filed into a matter with one
click, from the reading panel or from the sources list under an answer. The
saved file is the court's own PDF where one exists and a Word document of the
text where it does not, so it opens in the viewer, downloads, is found by a
search of the matter, and can be quoted back with a page number. Saving the
same source twice reuses the copy already there. Case citations now open the
reading panel in project chats too, which is where saving them matters most.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018RCY6K4dNwdbo9gU3HQ9un
464b7aa0 feat: attach files to a matter chat without filing them in the matter Ethan Ward 2026-08-19 ↗ GitHub
commit body
Matter chats had no attach button, so the only way to give the assistant
a file was to add it to the matter Documents list first. Now the button
is there, and a file dropped on the chat side stays with that chat -
drop it on the file list or the Documents tab to file it in the matter.

The drop panel is limited to the chat side so it no longer covers the
file list, and the backend merges chat-only attachments into a matter
chat context, which previously saw matter documents only.

Note: backend/src/lib/chat/contextBuilders.ts and routes/projectChat.ts
also carry earlier uncommitted edits from another session on this shared
tree; they are included here because they cannot be separated by path.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PoCRDAPyEq4wwBVFFbDzck
598d1c6a fix: accept dragged files the browser labels a different way Ethan Ward 2026-08-19 ↗ GitHub
commit body
A drag was only recognised when the browser labelled it exactly "Files".
Some Linux file managers, and some apps, hand a dragged file over as
"text/uri-list" or "application/x-moz-file" instead, and those drags were
ignored outright - no drop panel, no upload, nothing, which reads as
drag-and-drop simply not working. Ignoring the drag also let the browser
take it instead and leave the app to open the file, losing the page.

All five places that accept dropped files now share one test, and a drag
that carries only a link says so instead of appearing to do nothing.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PoCRDAPyEq4wwBVFFbDzck
b3fcb9b2 fix: let a saved case or statute actually be written Ethan Ward 2026-08-19 ↗ GitHub
commit body
Saving a source into a matter failed every time. The saved file is
recorded with a note saying where it came from, and the value used for a
case or statute was never added to the list the database accepts, so the
write was rejected and the save always failed. Adding the value is all
that was missing.

Applied to the live database as well.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PoCRDAPyEq4wwBVFFbDzck
512ba17b polish: make saving a case or statute usable Ethan Ward 2026-08-19 ↗ GitHub
commit body
Four things stood between this feature and everyday use.

The Save button only turned up when the assistant happened to list the
statute as a numbered source, which it often did not, so asking for a
statute usually left nothing to save. It is now told to list one every
time it reports the wording of a statute it looked up.

A source already in the matter looked unsaved after a page reload,
inviting a pointless click. The button now asks what the matter already
holds and says "In Law" for anything that is there.

A save that failed left an empty Law folder behind in the matter. The
folder is now taken back out if nothing ends up filed.

The saved file itself carried the whole web page - the site menus, and a
title broken into single letters - ahead of the law. That came from the
statute lookup, which has been narrowed to the statute block, so the
assistant reads less clutter as well.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PoCRDAPyEq4wwBVFFbDzck
0d4423f5 feat: research that finishes, statutes as sources, and freer document editing Ethan Ward 2026-08-19 ↗ GitHub
commit body
Three pieces of work that were running live but had never been committed.
They share several files, so they could not be separated into commits that
each still build.

Research that finishes. A chat that searched, found law and then stopped
with no answer was hitting a hidden limit of ten rounds of tool use; short
lookups fit inside it and real research did not. There is now one shared
budget across every model, and running out of it never ends a turn in
silence - the assistant is made to answer from what it has and say what it
could not check. Where it stops, a Keep going button carries on from that
point instead of starting again.

Statutes as sources. A statute the assistant looks up now appears as a
numbered source that opens in the reading panel, the same way cases do,
rather than as loose text in the reply.

Freer document editing. Edits to a document can now add and remove whole
paragraphs instead of only changing words already there, which is what
writing a letter on the firm letterhead needs.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PoCRDAPyEq4wwBVFFbDzck

Capture this thread into my fork

Download a single Markdown prompt that tells Claude how to port every commit above into your working tree — adapting paths and structure to match your repo. Run it via claude -p < capture-thread-1280.md from inside the repo you want the changes in.

⬇ Download capture-thread-1280.md