Roadmap

What each release gave, what we work on now, and what comes next. Each item links to its GitHub issue. We do not give dates for work that is not released.

Completed

Each release is on the releases page. The newest release is v0.6.1, from 26 October 2026.

v0.6.1: fewer wrong links, and commands that refuse what the dataset does not hold

Completed

Released 26 October 2026. Release notes

v0.6.1 comes from a review of the links, the citations and the commands. The stored format does not change.

What it gives

  • The address reader keeps the units a line names before a section of an Act, and the renumbering reader reads "Such section" (#387, #431).
  • The matcher does not take a few words as evidence, and it matches an added provision with the provisions below it (#389, #390, #432).
  • Citations read subdivisions such as (ii) and (14A), and the plain text of opinions loses the publisher's watermark (#410, #413).
  • An input that the dataset does not hold stops a command with exit 1, and the readers report the newest review of a link (#425, #415).

v0.6.0: better addresses, and bill commands that tell the truth

Completed

Released 25 October 2026. Release notes

v0.6.0 places more of the amendments in a law, and links more citations. The bill commands name the public law, and their counts are true. The stored format does not change.

What it gives

  • bills and show-bill name the public law, show-bill accepts "Pub. L. 119-21", and the counts give the amendments that a link names (#297).
  • The address reader reads "Such section" and "Such subsection" (#364). For S. 1071, 504 of 977 amendments have an address (was 469).
  • A list of instructions under a whole title is one amendment for each item, with the section it names (#365).
  • A citation of a range of subdivisions, such as "§§994(a)(1)-(3)", links each one (#366).
  • diff does not report a change when the only difference is a format character, such as a soft hyphen (#363).

v0.5.0: case law that an agent can use

Completed

Released 24 October 2026. Release notes

v0.5.0 stores a court opinion as a case with its writings, pages and paragraphs. A citation runs from the paragraph that holds it to the subdivision that the court wrote. The readers also say when a question names a path, a bill, a work or a date that the dataset does not hold. The decisions are in ADR 0014.

What it gives

  • The words_to_data command for Linux, macOS and Windows on each release, so you do not need Rust. The crate is on crates.io.
  • A case is a work, and each writing (majority, concurrence, dissent) is a part of it, with its type and author (#313).
  • Paths inside a writing: pages of the official reporter, paragraphs and footnotes (#314).
  • Rules split a combined or plain-text record into writings and paragraphs, as machine suggestions (#315).
  • A citation runs from its paragraph to the subdivision the court wrote (#316).
  • A citation carries the decision date and the printing of the Code that it was read in (#317).
  • A bare "section N" is read as a citation when the case says which code it refers to (#318).
  • carry-reviews carries the reviews of citation links to a rebuilt dataset (#319).
  • opinions lists the cases a dataset holds (#308). release-points lists the dates the mirror offers (#292). declare sets what a dataset must cover (#293).
  • search counts and lists each occurrence, reads a window at an offset, and matches the forms the text holds, such as "U. S. C." and "§7" (#306, #307, #338).
  • A path, bill, work, date or file that the dataset does not hold gives a notice, not an empty result (#305, #326, #337).
  • Citations: path and annotations show citations from both ends (#301), cases-citing reads subdivisions and has --json (#302), and a citation of a repealed section is flagged (#310).
  • Read-only commands do not lock the dataset (#331).

v0.4.0: a legal database for your agent

Completed

Released 21 October 2026. Release notes

v0.4.0 changes Words to Data into a command, words_to_data, and a Rust library. A dataset holds the U.S. Code, the laws that change it, and court opinions in one SQLite file. Each link between an amendment and a change in the Code keeps its evidence.

What it gives

  • The words_to_data command, with 27 subcommands to build, grow, read and check a dataset.
  • SQLite datasets. A dataset can grow: add-release-points adds Code release points and add-bills adds laws, with no rebuild.
  • Links with evidence. A link says what it connects, which method made it, and why. Evidence is never deleted.
  • Amendment matching with no language model. Each amending instruction resolves to its Code address from the publisher's markup, and links to its change by address, time window and quoted words. The OLRC classification of each public law is stored as links.
  • residue lists the amendments that no link names, with the stage and the reason each stopped.
  • Renumbered provisions are recorded as links, so a provision can be followed through a renumbering.
  • Reviews. settle records a verdict on a link as its own link. The readers show how each link was decided.
  • House roll call votes by the party that each member held on the day of the vote.
  • Court opinions from CourtListener, with their U.S.C. citations as links. cases-citing tells which opinions cite a provision, and if the provision changed after the decision.
  • Removed: the Python bindings and the annotator prototype. The data model changed too much to keep them.

v0.3.0: datasets and the Congress API

Completed

Released 13 May 2026. Release notes

v0.3.0 put release points of the U.S. Code and bills into one dataset, and added a client for the Congress.gov API.

  • Datasets: a set of Code release points and bills, in place of separate diff files.
  • Load the full U.S. Code from a folder.
  • A Congress.gov client that downloads bill text and bill data.
  • Find where a bill mentions the provision that changed (amendment mentions).
  • Better parser output: plain quotes in place of curly quotes, and text from non-structural elements.

v0.2.0: annotations

Completed

Released 5 April 2026. Release notes

v0.2.0 connected a change in the Code to the amendment that caused it.

  • Annotations that connect a diff to a bill amendment.
  • Similarity scores between amendments and changes.
  • Parse source credits.
  • More tests, and a more modular design.

SLEUTH, the official agent

Completed

SLEUTH is a legal research agent for Words to Data datasets. It is a package for the pi coding agent. It has one tool for each words_to_data subcommand that an agent may run; the commands that only a person runs have no tool. When no command answers a question, it records the gap. It writes to a dataset only when a person gives it permission.

In progress

Fixes from the SLEUTH benchmark

In Progress

People and agents wrote benchmark questions for SLEUTH. The work found places where a command gives output that is true but misleads an agent. We fix these first, because each fix shows in the benchmark at once. The fixes below are in v0.5.0 and v0.6.0. We add new fixes here when the benchmark finds more.

  • residue and diff see a section added inside a new parent (#336).
  • cases-citing reports windows and changes, so that a true line cannot give a wrong answer (#340).
  • A bill, work, date or file that the dataset does not hold gives a notice, not an empty result (#337).
  • Search folds soft hyphens, ligatures, "§7" and "§ 7", and "U. S." and "U.S." (#338).
  • The address reader keeps containers such as "in subsection (c)" (#339).
  • Case-law data: read "26 V.S.C." and "U.S.C §", give each dissent its author, and fix page paths that mix two reporters (#341).
  • diff does not report a change when the only difference is a soft hyphen (#363).
  • The address reader reads "Such section" as the section a sibling amendment named (#364).
  • Each clause of an "is amended as follows:" list gets the chapter and section it names (#365).
  • A citation of a range of subdivisions links each one (#366).

The SLEUTH benchmark

In Progress

A set of 157 questions in five groups: bills, case law, the Code, seed questions, and traps. Each question has a known answer from the dataset. We use it to measure SLEUTH and Words to Data after each change.

Next

  • Run the benchmark on each change that touches the readers.
  • Grade the prose part of each answer with a stronger model.
  • Later, compare SLEUTH with an agent that uses web search.

Planned

These items have no date. The order can change when the benchmark or a user question shows a different need.

Links between cases

Planned

Today a dataset links an opinion to the Code. It does not link one case to another case. Thus an agent cannot tell which held cases cite other held cases. The case-law map lists this as an open question: the citations come from CourtListener with no extra request, but the kind of link is not decided yet.

Also open in the map

  • Court data, to tell binding authority from persuasive authority.
  • A read-only command to find opinions on CourtListener.
  • CourtListener bulk data, for more than approximately 1,000 opinions.

Members, sponsors and votes commands

Planned

A dataset already holds members of Congress, sponsors and House votes. votes shows each roll call by party. No command names one member's vote yet. The command interfaces are a design decision that is still open.

  • members: list the members, with filters for state, party and chamber.
  • Show one member, with terms and the votes cast.
  • Show the sponsor and cosponsors of a bill in show-bill.
  • Find out if Senate roll call votes can be held at all (#112). Today only House votes are held.

An agent never leaves the command

Planned

When no command answers a question, SLEUTH reads the database with SQL and records a gap. Each gap is a command to add.

  • Show the public law number of a bill, so that "Pub. L. 119-21" finds bill 119-hr-1 (#297).
  • Keep reviews and agent links when a dataset is built again from the start (#295).
  • Let a dataset declare which document classes it holds (#148), and a gap in time in its scope (#145).
  • Put an amendment that is only partly linked on a work list (#271).
  • Store the citations that the extractor could not read (#140).

More release points and more bills

Planned

The mirror has 163 release points of the U.S. Code from 24 January 2020. A typical dataset holds only a few. Each release point is approximately 1 GB, so a title filter for add-release-points comes first. Then a dataset can hold the history of one title for a low cost. We add more bills and more release points when a user question needs them.

Hard cases in amendment text

Planned

Some amendments are difficult to read by rule. These issues record the cases and the open questions.

  • A bill that renumbers the same paragraphs two times in one section (#230).
  • A renumbering that also changes the depth of a provision ("and indenting appropriately") (#162).
  • Two clauses of one bill that state the same move (#226), and if a marginal note is part of an amendment (#217).

Want to Contribute?

Words to Data and SLEUTH are open source. You can work on an item on this page, or tell us about a new idea. Open an issue on GitHub.

Words to Data issues SLEUTH issues

Get in Touch

Send us your questions and feedback, or tell us if you want to work with us.

📧
contact@wordstodata.com

For technical support, open an issue on GitHub.