Recoup Catalog — Review Deal
Catalog deal review end to end. review runs the full diligence pipeline; ingest /
value / dashboard / report are the stages (each runnable alone). Work lives in a deal
workspace deals/{deal-id}/ whose source/ is immutable evidence (never write
into it). The workspace schema is references/deal-workspace.md; the scaffold is
templates/deal-workspace/. Deterministic math + validators ship in scripts/
(invoke relatively).
Mode: review (the full diligence pipeline — gated)
- Scaffold
deals/{deal-id}/. Treat source/ as immutable (a PreToolUse hook
blocks writes to it on Claude Code).
- Ingest → run ingest mode.
- Value → run value mode.
- Dashboard → run dashboard mode.
- Report → run report mode if the user wants the IC memo / financing pack /
seller report PDF.
- Completion gate (don't claim "ready" until all pass):
python3 scripts/run-deal-checks.py deals/{deal-id} exits clean;
build-deal-readiness.py is not blocked; assumptions.yaml +
evidence-ledger.json exist; findings closed/accepted/listed; every memo claim
traces to evidence; python3 scripts/validate-dashboard.py deals/{deal-id} returns
status: ok. On Claude Code a Stop hook enforces this.
Mode: ingest (clean the data room)
Normalize messy statements/rights/metadata into the canonical schema
(references/canonical-schema.md, references/cleaning-rules.md,
references/normalization.md; checklist references/data-room-checklist.md):
auto-column-map.py, normalize-royalty-statement.py (extract-pdf-statement.py for
PDFs), dataroom-hygiene-scan.py, build-file-manifest.py +
build-manual-review-queue.py, calculate-concentration.py. Validate with
validate-normalized-ledger.py + validate-findings-evidence.py. Never silently
coerce ambiguous rows — queue them for manual review.
Mode: value (full valuation — needs ingested files)
Project value with references/valuation-framework.md:
calculate-nps-nls-bridge.py, calculate-concentration.py; apply decay, recoupment,
reserves; build downside/base/upside scenarios. Layer the deep-dives:
royalty-audit.md, rights-review.md, pro-performance-income.md,
financing-underwrite.md, seller-prep.md, post-close-admin.md, red-flags.md.
For public-data-only, use recoup-catalog-estimate-value.
Mode: dashboard (the customer-facing DASHBOARD.html)
Author with creative freedom, then gate it:
python3 scripts/validate-dashboard.py deals/{deal-id} must return status: ok
(also run run-deal-checks.py). Do not present a dashboard that fails validation.
Mode: report (IC memo / financing pack / seller report → PDF)
Assemble from the dashboard + workpapers using references/output-templates.md,
export one shareable PDF. Every claim must trace to evidence-ledger.json or
assumptions.yaml.
Guardrails
source/ is immutable evidence — never write into it.
- Completion is gated —
run-deal-checks.py clean, readiness not blocked,
validate-dashboard.py ok before "ready".
- Every claim traces to evidence — no unsupported numbers.
- Determinism where it counts — royalty math runs in
scripts/, not by hand.
References & scripts
references/ — deal-workspace, deal-workflow, canonical-schema, cleaning-rules,
normalization, data-room-checklist, valuation-framework, royalty-audit,
rights-review, financing-underwrite, post-close-admin, pro-performance-income,
red-flags, output-templates, methodology, recoup-api, seller-prep.
scripts/ — ingest/normalize, calculate-, validate-, run-deal-checks,
build-deal-readiness. Ship alongside this skill; invoke relatively.
1---2name: recoup-catalog-review-deal3description: Review and underwrite a music catalog deal end to end — ingest a messy royalty data room, value it (NPS/NLS, concentration, scenarios), build the executive dashboard, and write the IC memo. Use for "review/underwrite this catalog", "clean these royalty statements", "catalog valuation", "build the deal dashboard", or "write the IC memo". Modes: review (default), ingest, value, dashboard, report. Needs seller files; source/ is immutable and completion is gated. For a quick value from public data only, use recoup-catalog-estimate-value.4---5
6# Recoup Catalog — Review Deal
7
8Catalog deal review end to end. **review** runs the full diligence pipeline; ingest /
9value / dashboard / report are the stages (each runnable alone). Work lives in a deal
10workspace `deals/{deal-id}/` whose `source/` is **immutable evidence** (never write
11into it). The workspace schema is `references/deal-workspace.md`; the scaffold is
12`templates/deal-workspace/`. Deterministic math + validators ship in `scripts/`
13(invoke relatively).
14
15## Mode: review (the full diligence pipeline — gated)
16
171. **Scaffold** `deals/{deal-id}/`. Treat `source/` as immutable (a PreToolUse hook
18 blocks writes to it on Claude Code).
192. **Ingest** → run **ingest** mode.
203. **Value** → run **value** mode.
214. **Dashboard** → run **dashboard** mode.
225. **Report** → run **report** mode if the user wants the IC memo / financing pack /
23 seller report PDF.
246. **Completion gate (don't claim "ready" until all pass):**
25 `python3 scripts/run-deal-checks.py deals/{deal-id}` exits clean;
26 `build-deal-readiness.py` is not `blocked`; `assumptions.yaml` +
27 `evidence-ledger.json` exist; findings closed/accepted/listed; every memo claim
28 traces to evidence; `python3 scripts/validate-dashboard.py deals/{deal-id}` returns
29 `status: ok`. On Claude Code a Stop hook enforces this.
30
31## Mode: ingest (clean the data room)
32
33Normalize messy statements/rights/metadata into the canonical schema
34(`references/canonical-schema.md`, `references/cleaning-rules.md`,
35`references/normalization.md`; checklist `references/data-room-checklist.md`):
36`auto-column-map.py`, `normalize-royalty-statement.py` (`extract-pdf-statement.py` for
37PDFs), `dataroom-hygiene-scan.py`, `build-file-manifest.py` +
38`build-manual-review-queue.py`, `calculate-concentration.py`. Validate with
39`validate-normalized-ledger.py` + `validate-findings-evidence.py`. Never silently
40coerce ambiguous rows — queue them for manual review.
41
42## Mode: value (full valuation — needs ingested files)
43
44Project value with `references/valuation-framework.md`:
45`calculate-nps-nls-bridge.py`, `calculate-concentration.py`; apply decay, recoupment,
46reserves; build downside/base/upside scenarios. Layer the deep-dives:
47`royalty-audit.md`, `rights-review.md`, `pro-performance-income.md`,
48`financing-underwrite.md`, `seller-prep.md`, `post-close-admin.md`, `red-flags.md`.
49For public-data-only, use recoup-catalog-estimate-value.
50
51## Mode: dashboard (the customer-facing DASHBOARD.html)
52
53Author with creative freedom, then **gate it**:
54`python3 scripts/validate-dashboard.py deals/{deal-id}` must return `status: ok`
55(also run `run-deal-checks.py`). Do not present a dashboard that fails validation.
56
57## Mode: report (IC memo / financing pack / seller report → PDF)
58
59Assemble from the dashboard + workpapers using `references/output-templates.md`,
60export one shareable PDF. **Every claim must trace** to `evidence-ledger.json` or
61`assumptions.yaml`.
62
63## Guardrails
64
65- **`source/` is immutable evidence** — never write into it.
66- **Completion is gated** — `run-deal-checks.py` clean, readiness not `blocked`,
67 `validate-dashboard.py` ok before "ready".
68- **Every claim traces to evidence** — no unsupported numbers.
69- **Determinism where it counts** — royalty math runs in `scripts/`, not by hand.
70
71## References & scripts
72
73- `references/` — deal-workspace, deal-workflow, canonical-schema, cleaning-rules,
74 normalization, data-room-checklist, valuation-framework, royalty-audit,
75 rights-review, financing-underwrite, post-close-admin, pro-performance-income,
76 red-flags, output-templates, methodology, recoup-api, seller-prep.
77- `scripts/` — ingest/normalize, calculate-*, validate-*, run-deal-checks,
78 build-deal-readiness. Ship alongside this skill; invoke relatively.