Kumu / Corporate Finance / Stage 7
Stage 7 — Run & Audit the DCF
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
- Run the skill in a genuinely fresh session. Only the modified skill, your workbook and the run brief.
- 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.
- Audit with
audit-xls, then give your own verdict on every finding. - 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".
- Claude Code: open a new conversation in your repo folder (or type
/clearfirst). - Codex: start a new task on your repo.
- Neither installed? Start a new chat in Claude.ai with file uploads and code execution on; upload
SKILL.md, the workbook andspec.md, paste the prompt below, and say in the log that this is how you ran it.
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:
| Finding | Verdict | Why |
|---|---|---|
| (from the table) | Real / False positive / Real but acceptable | One 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:
| Check | Formula (named ranges) | Manual (show arithmetic) | Model | Match? | Note |
|---|---|---|---|---|---|
| Base-year revenue | INC_sales | ||||
| Base-year NOPAT | INC_ebit × (1 − tax_rate) | ||||
| Base-year FCF | NOPAT + INC_depreciation + CASH_capex + CASH_working_capital_change | ||||
| Net debt | BAL_debt_short_term_curr + BAL_debt_long_term_curr − BAL_cash_marketable_securities_curr | ||||
| After-tax cost of debt | pre-tax cost of debt × (1 − tax_rate) | ||||
| WACC | E/V × cost of equity + D/V × pre-tax cost of debt × (1 − tax_rate), market weights | ||||
| PV of terminal value | FCF in the year after the forecast ÷ (WACC − g), discounted to today | ||||
| Equity value per share | (enterprise value − net debt − non-controlling interest) ÷ shares_outstanding |
- Units. Your statements are in the currency and scale on the Notes tab;
share_priceis in base units per share;shares_outstandingis in millions. State the unit in every row, and make the last row come out in the same unit asshare_price. - Your definitions may differ. If your Stage 6 skill defines net debt to include lease liabilities, or to treat term deposits differently, use your definition and say so in the note. The check is that the model does what your skill says.
- Non-controlling interest comes from the figure you recorded on the Notes tab at Stage 3. If your company reports none, write 0 and say so.
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
capabilities/valuation/model.xlsx— first committed exactly as produced; any recalculation or fix in later commitsanalysis/YYYY-MM-DD-{company-slug}-dcf-raw-log.md— unedited transcript, every ask / guess / workaround markedanalysis/YYYY-MM-DD-{company-slug}-dcf-audit-analysis.md—audit-xlsfindings table plus a verdict on every findinganalysis/YYYY-MM-DD-{company-slug}-dcf-verification-analysis.md— at least the eight checks, arithmetic shown, every mismatch traced- If the run failed: the fix commit to the skill, the new hunk in your Stage 6 annotated diff, and both runs in the log
prompt-log.mdupdated with the Stage 7 sessions
Rubric
The headings below are what the work is read for. Weights and due dates are in your course schedule.
| Criterion | Strong work looks like |
|---|---|
| Fresh, honest run | The 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 verdicts | Every audit-xls finding has a verdict and a reason; false positives come with evidence |
| Manual verification | At least the eight checks, arithmetic shown, units stated; every mismatch traced to the skill, the workbook or the session |
| Commit hygiene | As-produced model, recalculation and fixes in separate, descriptive commits; any rerun documented |
Tips
- Don't fix the model before you commit it. The as-produced commit is the only record of what your skill did unaided.
- A clean audit is not a correct valuation. Read the bridge from enterprise value to value per share line by line yourself.
- Put the model's value per share next to
share_priceearly. If the two are not even in the same unit, nothing else in the table matters yet. - Commit incrementally. Model, log, audit, verification — one commit each.