Kumu / Corporate Finance / Stage 7

Stage 7 — Run & Audit the DCF

Deliverable: the DCF model, its raw session log, an audit with your verdicts, and a manual verification table GitHub only — no upload fallback

At Stage 6 you made a professional DCF skill fit your company. Now you find out whether it does. A fresh agent session runs your modified skill with nothing but your workbook and your run brief, and builds the model. Then you audit what it built, twice: once with a second professional skill, and once by hand.

Why audit twice

An automated audit catches formula errors, broken links and inconsistent signs quickly and thoroughly. It does not know what your company reports. A DCF can pass every automated check and still misstate the value of a share, because no automated check knows what your company's filing says. The manual table is where you check the few numbers the valuation hangs on against your own arithmetic. It has the same shape as the Stage 5 verification table, for the same reason.

The moves

  1. Run the skill in a genuinely fresh session. Only the modified skill, your workbook and the run brief.
  2. Commit the model before you touch it. The as-produced commit is the evidence of what your skill did unaided. Save the unedited transcript and mark every place the session stopped to ask, guessed, or worked around something.
  3. Audit with audit-xls, then give your own verdict on every finding.
  4. Verify by hand at least eight checks, and trace every mismatch to its cause.

Step 1 — run the skill in a fresh session

"Fresh" means the session knows nothing you did not hand it: only the modified dcf-model skill, your workbook, and capabilities/valuation/spec.md. No chat history, no web search, no data connectors, no "as we discussed".

Use the dcf-model skill in .claude/skills/dcf-model/ to build a DCF from the
workbook at models/builds/<your-file>.xlsx. The only other input is the run
brief at capabilities/valuation/spec.md. Read the performance-ratios skill in
.claude/skills/performance-ratios/ for what the workbook's names mean. Do not
search the web and do not use any data connector. Do not read any other file
in this repo. Save the model to capabilities/valuation/model.xlsx. Wherever
you have to stop, guess, or work around something, say so plainly.

Let it run. Answer a question only if the session cannot continue without you — and every answer you give goes in the log.

Recalculation

The skill tells the agent to run recalc.py before delivery. That script is not included in the skill folder, so the command fails unless your Stage 6 edits replaced it. A formula-written workbook has no computed values until a spreadsheet program calculates it. Two paths work on any machine:

  • Excel recalculates on open. After you commit the model as produced (Step 2), open it in Excel, check that no cell shows #REF!, #NAME?, #DIV/0! or #VALUE!, and save. Commit the saved file separately: Recalculate model.xlsx in Excel, no edits.
  • Ask the agent to scan the formulas instead of running a script: Read every formula in capabilities/valuation/model.xlsx. List any that refers to a sheet, cell or name that does not exist, and any that would divide by an empty cell. Do not change the file.

If the skill still calls validate_dcf.py, record its output in the log like any other output. A pass from it is not a verification.

Step 2 — commit the model before you touch it

Commit capabilities/valuation/model.xlsx exactly as the session produced it, before you open it, recalculate it or fix anything: Add DCF model as produced by the modified dcf-model skill. Every change after it is yours, and visible.

Save the complete, unedited session transcript (or its export) as analysis/YYYY-MM-DD-{company-slug}-dcf-raw-log.md. Then mark — with a short bold note on its own line, never by editing the transcript — every place where the session stopped to ask, guessed, or worked around something. Those marks are the list of what your Stage 6 edits did not yet cover.

If the run failed

If the session could not finish, or built something plainly wrong because of the skill, fix the skill with another Stage 6-style commit (add the hunk to your annotated diff), then run Step 1 again in a new fresh session. Keep both runs in the raw log (Run 1, Run 2), commit the first model before the second overwrites it, and say in one paragraph what failed and what you changed. A failed run plus a fix and a rerun is evidence, not a penalty.

Step 3 — audit with audit-xls

In a session of your choice (it need not be fresh), prompt:

Run the audit-xls skill in .claude/skills/audit-xls/ at model scope on
capabilities/valuation/model.xlsx. Write the findings table, unedited, to
analysis/<YYYY-MM-DD>-<company-slug>-dcf-audit-analysis.md. Do not change the
workbook.

Naming the scope matters: without it the skill stops to ask. Below the findings table, in the same file, add your verdict on every finding:

FindingVerdictWhy
(from the table)Real / False positive / Real but acceptableOne or two sentences: what you checked and what you found

A "false positive" needs the evidence that it is false. A "real but acceptable" needs the reason it does not move the value per share materially.

Step 4 — verify by hand

Create analysis/YYYY-MM-DD-{company-slug}-dcf-verification-analysis.md. Recompute at least these eight checks from your workbook and the model's own assumptions, show the arithmetic, and compare with the model:

CheckFormula (named ranges)Manual (show arithmetic)ModelMatch?Note
Base-year revenueINC_sales    
Base-year NOPATINC_ebit × (1 − tax_rate)    
Base-year FCFNOPAT + INC_depreciation + CASH_capex + CASH_working_capital_change    
Net debtBAL_debt_short_term_curr + BAL_debt_long_term_curr − BAL_cash_marketable_securities_curr    
After-tax cost of debtpre-tax cost of debt × (1 − tax_rate)    
WACCE/V × cost of equity + D/V × pre-tax cost of debt × (1 − tax_rate), market weights    
PV of terminal valueFCF in the year after the forecast ÷ (WACC − g), discounted to today    
Equity value per share(enterprise value − net debt − non-controlling interest) ÷ shares_outstanding    

Discrepancies are the good rows

For every mismatch, trace the cause and name it: the skill (an instruction your Stage 6 edits missed), the workbook (a Stage 3 entry), or the session (the agent departed from the skill). A mismatch with its cause named earns full credit; an unflagged one does not.

Log every session in prompt-log.md at the repo root.

Submission checklist

Rubric

The headings below are what the work is read for. Weights and due dates are in your course schedule.

CriterionStrong work looks like
Fresh, honest runThe log shows a genuinely fresh session with only the three inputs; the model is committed before any change; asks, guesses and workarounds are marked
Automated audit with verdictsEvery audit-xls finding has a verdict and a reason; false positives come with evidence
Manual verificationAt least the eight checks, arithmetic shown, units stated; every mismatch traced to the skill, the workbook or the session
Commit hygieneAs-produced model, recalculation and fixes in separate, descriptive commits; any rerun documented

Tips

Check yourself