From recoup-deals
Use when building, refreshing, validating, or QC-ing the customer-facing executive dashboard (DASHBOARD.html) for a music catalog deal. Trigger on "build the dashboard", "render the dashboard", "create the executive dashboard", "refresh DASHBOARD.html", "QC the deal", "run the pre-share gate", "check the deal before sharing", or any phase of /recoup-deal-start that produces the customer's read-the-deal artifact.
How this skill is triggered — by the user, by Claude, or both
Slash command
/recoup-deals:recoup-deal-dashboardThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
The dashboard is the deal's WOW moment. It is the single artifact the
The dashboard is the deal's WOW moment. It is the single artifact the customer opens when they want to know what you found and what to do next. Treat it as the deliverable.
deals/{deal-id}/DASHBOARD.html<script src>. No
<iframe>. No <object>. No <embed>.scripts/validate-dashboard.py before the run can
finish. The validator runs after you write the file. Read its output
and fix issues before claiming completion.You have full creative freedom on layout, chart types, interaction patterns, narrative flow, and depth. Use that freedom to tell the catalog's specific story. Different deals deserve different shapes.
These markers must be present somewhere on the page. The validator checks for them via text search. Beyond these requirements, the structure is yours.
ready, review_needed, or blocked,
matching the open findings tally.data-evidence, data-source, or data-derived attribute. See
"Trust contract" below.workpapers/recommendations.json if it exists; that's a starting
point you can restructure freely or override when the deal's story
calls for different framing.workpapers/valuation-summary.json#scenarios.workpapers/nps-bridge.json.workpapers/nls-bridge.json.normalized/royalty-ledger.csv.workpapers/concentration-analysis.json
or aggregated from the ledger.findings/missing-files.md.If a workpaper does not exist, render a placeholder that says so, or leave the section out and explain in the narrative.
The dashboard goes to a customer. They might forward it to an IC, a lender, or counsel. Every number on the page has to be defensible.
$-figure on the page is considered trustworthyMatches a workpaper value within 5%. The validator builds a
"truth set" from the source files (royalty-ledger sums, valuation-
summary scenarios, bridge amounts and running totals, concentration
top-10, etc.). If a $-claim on the page is within 5% of any
value in the truth set, it's accepted automatically.
Lives inside an element with data-evidence="EV-NNN" that
resolves to a real entry in evidence-ledger.json. Use this for
numbers that came directly from a source file (e.g., a contract,
a single ledger row).
<div class="kpi" data-evidence="EV-007">
<label>Atlas admin overlay</label>
<div class="v">$7,254</div>
</div>
Lives inside an element with data-derived="<reason>". Use
this when the dashboard derives a value from primary numbers (a
sum, a difference, a probability-weighted NPV) that is NOT in any
workpaper. The reason text becomes part of the audit trail.
<p data-derived="weighted by 30/25/25/20 branch probabilities">
Weighted NLS NPV is <strong>$113,930</strong>.
</p>
You may also mark whole sections with data-source="workpapers/path.json"
if every claim inside ties back to that file.
$-figure on the page that does not match the truth set AND has
no data-evidence / data-source / data-derived ancestor.<script src> not in the CDN allowlist.<iframe>, <object>, <embed> tags.eval(, Function(, document.write( in inline JS.If the validator returns errors, read them, fix the dashboard, and rebuild. Do not claim the run is complete until the validator passes.
| Path | What's in it |
|---|---|
deals/{deal-id}/assumptions.yaml | deal.deal_name, workflow type, valuation_date, currency, materiality thresholds. |
deals/{deal-id}/normalized/royalty-ledger.csv | Every normalized statement line. Aggregate freely. |
deals/{deal-id}/findings/findings.json | Every structured finding with severity and status. |
deals/{deal-id}/findings/missing-files.md | Open requests for the seller. |
deals/{deal-id}/evidence-ledger.json | Evidence entries to cite via data-evidence. |
deals/{deal-id}/workpapers/valuation-summary.json | Normalized NPS/NLS, scenario brackets. |
deals/{deal-id}/workpapers/nps-bridge.json | Reported→normalized NPS waterfall. |
deals/{deal-id}/workpapers/nls-bridge.json | Reported→normalized NLS waterfall. |
deals/{deal-id}/workpapers/concentration-analysis.json | Top-N asset, provider, territory shares. |
deals/{deal-id}/workpapers/ingest-coverage.json | "X of Y files contributed financial data" line. |
deals/{deal-id}/workpapers/recommendations.json | Optional structured starting point for the recommendations section. |
Any other JSON under workpapers/ (recoupment NPV, decay scenarios,
sensitivity tables, custom analyses) is fair game. Read them if they
help tell the story; ignore them if they don't.
The dashboard is a customer deliverable, not a debug dump. Apply a designer's eye:
<section>, <header>,
<nav>). aria-label on charts. Color contrast ≥ 4.5:1 for body
text. Don't rely on color alone to convey severity — pair with
shape, label, or icon.deals/{deal-id}/DASHBOARD.html as a single self-contained
page. Use Chart.js, D3, or whatever fits.python3 scripts/validate-dashboard.py deals/{deal-id}.DASHBOARD.html
does not exist or the validator does not pass.Before any "ready to share / ready for IC / ready for the buyer" claim,
this skill is also the deal's quality gate. validate-dashboard.py
proves the dashboard is truthful; the QC gate proves the whole deal
workspace hangs together. Run it whenever the user asks to "QC the
deal", "check before sharing", or finishes an end-to-end run.
Run the full check battery and read each result:
python3 scripts/run-deal-checks.py deals/{deal-id}
run-deal-checks.py orchestrates the individual validators bundled in
this skill's scripts/:
validate-deal-workspace.py — required workspace files exist.validate-findings-evidence.py — every finding cites real evidence.validate-evidence-ledger.py — evidence-ledger entries resolve.validate-normalized-ledger.py — the royalty ledger schema is sound.validate-workspace-consistency.py — workpapers, findings, and the
dashboard agree with each other.Block your own completion claim if any check fails. Either cure the
specific error (usually a finding missing evidence_ids) and re-run, or
disclose the gap explicitly in the recap — never claim "ready" over a
failing check. This is the same battery the Stop hook re-checks, so
running it here prevents a blocked stop later.
The plugin previously rendered the dashboard via a deterministic
Python script with a fixed schema. That script no longer exists. The
agent owns the dashboard. The script that remains
(validate-dashboard.py) only checks the agent's output for
truthfulness and safety — it never renders.
This is the agent's deliverable. Make it worth opening.
npx claudepluginhub recoupable/skillsProvides UI/UX resources: 50+ styles, color palettes, font pairings, guidelines, charts for web/mobile across React, Next.js, Vue, Svelte, Tailwind, React Native, Flutter. Aids planning, building, reviewing interfaces.
Searches MemPalace before answering questions about past work, people, projects, or prior decisions. Returns verbatim stored content instead of guessing from model memory.