feat: folder-grouped tabular reviews with per-user page limit
From the PR description
Summary
- Folder-grouped rows: a new toggle in the tabular review creation flow lets users treat all documents inside the same project subfolder as a single review row (label = folder path, subtitle = N documents). Documents without a subfolder still get their own row.
- Per-user page limit: a configurable
tabular_max_pagessetting (10-2000, default 250) in Account → Models & API Keys controls how large a grouped row can be before it is skipped. Rows that exceed the limit now surface a single, full-width error banner instead of repeating the error icon in every column. - PDF.js noise fixes: all
getDocumentcalls now passstandardFontDataUrlandverbosity: 0, eliminating thestandardFontDataUrlandTT: undefined function: 32console warnings.
Database changes
Two new migrations ship alongside an updated schema.sql:
| Migration | Purpose |
|---|---|
20260510000000_tabular_review_rows.sql |
Adds document_grouping to tabular_reviews; introduces tabular_review_rows and tabular_review_row_sources tables; backfills existing cells; adds RLS policies |
20260510000001_user_tabular_max_pages.sql |
Adds tabular_max_pages integer default 250 to user_profiles |
The initial schema (20240101000000_initial_schema.sql) is also updated to keep it in sync with the new tables for fresh installs.
Test plan
- Create a project with at least two subfolders, each containing multiple documents
- Start a tabular review → enable "Treat documents in the same subfolder as one row" → confirm rows are grouped by folder with correct labels and document counts
- Run all columns → confirm each folder row is processed as a unit
- In Account → Models & API Keys, set Max pages to a low value (e.g. 10) and re-run → confirm the row shows the full-width error banner with the page-count message
- Confirm no
standardFontDataUrlorTT: undefined functionwarnings in backend logs after PDF upload/processing
🤖 Generated with Claude Code
Our analysis
Folder-grouped rows and per-user page caps for tabular reviews — read the full analysis →
Think the analysis missed something the PR description covers?
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-54.md from
inside the repo you want the changes in.