Sloth-ninja makes review templates safer for firms to share

This fork tightens the link between reusable review templates, usage reporting and the controls that keep one firm's information out of another's view.

workflowsecurity

The central fix restores attribution when a team creates a tabular review from a saved template, so firm reporting can show which templates are actually being used. Just as importantly, it prevents shared templates from outside the organisation from revealing their titles in a firm's dashboard, while retaining the activity in overall usage totals.

  • Legacy templates with invalid columns cannot be made firm-visible until they are reopened and saved under current rules.
  • Built-in templates are handled consistently across selection screens and are not recorded as saved firm workflows.
  • Over-large templates, stale saves and accidental exits from unfinished drafts now have clearer safeguards.

The result is a more dependable template workflow without turning reporting into a cross-firm confidentiality risk.

So what Legal-ops teams and firms standardising repeatable review work should care because shared templates and their reporting now behave more like firm-grade controls.

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 Sloth-ninja/JessicaOSS, oldest first. Source extracted verbatim from the harvested git log.

SHA Subject Author Date
6b8f194e Review-templates train: composed-range fix wave sloth-ninja 2026-08-05 ↗ GitHub
commit body
Fixes the cross-commit issues the composed-range review of the whole
templates train (base...5da6d5c) found:

I1+M7 restore the template->review linkage (workflow_id on create and on
in-grid apply, owner-only, uuid-validated server-side) AND org-scope the
usage dashboard's template-title lookup, so a template email-shared from
outside the firm can never print its name on the firm's dashboard.

I2 re-validates a template's stored columns before permitting a flip to
firm visibility (legacy rows written by the older workflow editor), with
a distinct invalid_columns outcome mapped to a 400 telling the owner to
reopen and re-save. Reverting to private is never blocked.

I3 filters hidden built-ins out of both template pickers, so Hide means
the same thing there as on the Templates page. Fails open.

Minor: dead is_system re-filter removed (M1); firm-templates card names
where members share (M2); column modals say "Templates" in the template
editor (M3); pending-deletion rows label templates as Templates (M4);
"Save as template" is disabled with an explanation above 30 columns (M6);
draft work-loss guard on /review-templates/new (M9); 404 on save says the
template is gone (M10); stable-loadOptions note on the picker effect (M11).

No migration. Backend 757 tests (739 baseline, +18).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
9652f8df BUILD_LOG: record M5/M8/M12 substance for the templates fix wave sloth-ninja 2026-08-05 ↗ GitHub
commit body
The accepted-with-rationale findings are now written out (unchunked .in()
in enrichOwnerNames; the active-flag idiom vs AbortController time-boxes;
ColumnConfig[] typing vs legacy pass-through format strings), replacing
the by-number placeholder. Docs only.

Co-Authored-By: Claude Fable 5 <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-1042.md from inside the repo you want the changes in.

⬇ Download capture-thread-1042.md