Projects can span multiple counterparties

↗ view on GitHub · Custos · 2026-05-04 · dd8e28e2

Projects are now treated as free-form buckets - counterparty membership
is derived from the documents in the project (intake_counterparty),
plus an optional projects.counterparty as a "primary" hint. A project
named "Customer Contracts" with Adobe + Stripe + Intercom docs now
appears under each of those three counterparties in /customers.

- GET /projects/counterparties: project rows pull every distinct
  intake_counterparty across the project's docs; project_count is
  incremented per-counterparty. Role filter applies at the document
  level so a multi-cp project surfaces correctly.
- GET /projects/counterparties/:name/timeline: includes any project
  whose docs reference this counterparty (not just primary-counterparty
  matches). Document list is scoped to docs that actually belong to
  this counterparty (or all docs when this IS the project's primary).
Repository Custos/legalos
Author Custos <jfeinblum@gmail.com>
Authored
Parents b375d048
Stats 1 file changed , +117 , -18
Part of Counterparties + customer index (CLM core)

Capture this commit into my fork

Download a Markdown prompt that tells Claude how to port this exact commit into your working tree. Run it via claude -p < capture-commit-dd8e28e2.md from inside the repo you want the change in.

⬇ Download capture-commit-dd8e28e2.md