ecarjat adds folder-grouped tabular rows with per-user page caps

ecarjat introduces a new tabular review mode that collapses subfolder documents into a single review row, plus a per-user page limit with a cleaner error UI when that limit is hit. The schema change is non-trivial: rows become first-class records with their own table and RLS policies.

workflowdiscovery

The document_grouping field on tabular_reviews now controls whether the review creates one row per document (existing behaviour) or one row per subfolder. In folder mode, documents sharing a subfolder are merged into a single row; documents at the project root still get individual rows.

To support this, the diff introduces tabular_review_rows and tabular_review_row_sources as new tables (with RLS policies and a migration backfill for existing cells). The tabular_cells table gains a nullable row_id FK. The backend routes/tabular.ts rewrite is ~+791/-407 lines - it now operates on row IDs rather than document IDs when assembling LLM prompts for folder rows.

Per-user page caps land in the same commit. A tabular_max_pages value (range 10-2000, default 250) is stored on user profiles and surfaced in the account settings. When a row's total page count exceeds the cap, it's skipped and the frontend shows a single full-width banner rather than repeating an error icon across every column. Individual error cells also gain hover tooltips with the actual failure reason. A fast-follow commit (be1665a) adds tabularMaxPages: 250 to the fallback profile in UserProfileContext - without it, the feature crashes for users whose profile fetch has failed.

PDF.js normalisation is bundled in the same commit: standardFontDataUrl and verbosity: 0 are passed to all getDocument call sites, which stops TT: undefined function: 32 warnings from polluting backend logs during document processing.

So what Worth a look if you need folder-level grouping in tabular reviews and can absorb a schema migration that backfills existing cells. The per-user page-cap mechanism and the row-level error banner are smaller wins that could be cherry-picked independently. The PDF.js verbosity fix is a one-line cleanup worth lifting regardless. Skip if the full `tabular_review_rows` schema change is more disruption than the grouping feature is worth - this is a "decide and commit" import, not a standalone patch.

View this fork on GitHub →

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

Commits in this thread

2 commits from ecarjat/mike, oldest first. Source extracted verbatim from the harvested git log.

SHA Subject Author Date
941610b7 feat: folder-grouped tabular reviews, per-user page limit, PDF.js fixes Emmanuel Carjat 2026-05-10 ↗ GitHub
commit body
- Folder-grouped rows: treat subfolder documents as one review row
- tabular_review_rows / tabular_review_row_sources tables with backfill
- Per-user tabular_max_pages setting (Account → Models & API Keys)
- Row-level page-limit error banner replaces per-cell error icons
- Error cells show tooltip with failure reason
- Pass standardFontDataUrl + verbosity:0 to all pdfjs getDocument calls

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
be1665ab fix: add tabularMaxPages to fallback profile in UserProfileContext Emmanuel Carjat 2026-05-10 ↗ GitHub
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

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-297.md from inside the repo you want the changes in.

⬇ Download capture-thread-297.md