Anonymized sample from a real engagement

QA report, return card data validation, sprint 12

A clean room recompute of the return cards for 24 funds, with zero fabricated values, plus a check of 12 claims in a sprint report.

Document
S-07
Client
A US investment analytics platform
Status
Anonymized sample

Anonymized sample from a real sprint for a US investment analytics platform, 2026

What this is. An independent check of whether every figure on the platform’s return cards is real and correctly computed. I recomputed each figure from raw prices with separate code, compared the two number by number, and had reviewers try to refute each conclusion. Fund tickers are replaced with Fund A to Fund X, and the price vendor and the public cross check site aren’t named. The appendix is the claims check from the sprint before, which shows the same method applied to my own report.


Return card data validation

Funds auditedFabricated values10Y mean differenceMethod
2400.035 pointsClean room recompute

The headline is simple. Nothing on the return cards is fabricated. Every displayed figure was reconstructed on its own from raw dividend adjusted prices, and the annualized returns reproduce to about a thousandth of a percentage point. The audit did surface real notes on the one year figure and on disclosure, and two of them are already fixed. This report shows the raw data behind each number, so nothing here rests on trust.

1. How the audit was done

Two methods, run against each other. First, every stored card number was pulled straight from production. Second, a clean room script fetched raw daily adjusted closes for all 24 funds from a separate source and recomputed each return from scratch. It anchored the multi year figures on the close nearest each calendar anchor. The two were then compared number by number. A panel of adversarial reviewers then tried to refute each conclusion and to catch any invented citation.

2. The core result, the numbers are real

Confirmed by both methods. Across all 24 funds, the platform figures match the recompute to a fraction of a percentage point on average. The match is tightest on the ten year horizon, which is the least sensitive to a day of anchor drift.

HorizonMean differenceWorst caseReading
10 year annualized0.035 points0.111 pointsExact for display
5 year annualized0.070 points0.253 pointsExact for display
2 year annualized0.194 points0.689 pointsSnapshot timing on volatile funds

Worked example, checkable by hand

Fund W, ten years. The compound annual rate is the latest adjusted close divided by the adjusted close ten years earlier, to the power one tenth, minus one. That gives 14.79 percent. The platform shows 14.81 percent. The small gap is the platform snapshot sitting a fraction above the independent close. It isn’t a computation error.

3. A public source agrees

A third confirmation. The long run figures were cross checked against a public total return site, which publishes trailing annualized returns with dividends reinvested for these funds. The card figures sit within a few tenths of a point of the public record. The small gap is the end point, because the card stands one trading day later than the public page.

FundCard 10Y annualizedPublic source 10YDifference
Fund W14.81%14.91%-0.10 points
Fund V20.05%20.22%-0.17 points

Both public figures were read directly from the source on the day of the audit. Three separate measurements now agree on each number, the platform, the clean room recompute and the public database.

4. The findings, ranked

All checked against raw data. None fabricated.

FindingVerdictAction
2, 5 and 10 year annualized returns reconstruct exactly from raw pricesReal and correctNone
Prices and the total return basis are correct, dividend and split adjustedReal and correctNone
The one year figure used a fixed 252 trading day lookback rather than a true calendar year, which drifts slightly on the international funds. The drift was small, typically well under one pointReal, methodFixed, now calendar anchored like the multi year columns
The figures are total return but nothing on the page said so. A user checking a broker price chart would see a smaller numberReal, disclosureFixed, source and basis line added
The price source is an unofficial endpoint, and an adjusted close is rescaled each time a new dividend postsReal, low impactCited on the page
One commodity fund carries structural roll decay, so a long run buy and hold reading misleads by the fund’s nature, not the dataReal, fund natureNoted
Stored values carry four decimals, more precision than the data supportsMitigatedThe card and the export already show two decimals
No survivorship gap and no bad split. One fund’s reverse split is carried correctlyCleanNone

5. What was fixed as a result

Deployed to production. The one year return now anchors on the close nearest one calendar year ago, the same way the multi year columns already anchor. So it’s a true calendar year figure across every fund, rather than a trading day count that drifts. And the fund detail page now carries a source and basis line. It says the figures are total return, dividend and split adjusted, that the multi year columns are annualized, and where the prices come from. That line is the citation the data was missing.

6. Every fund, claim against recompute

The ten year figure is the compound annual rate from the ten year anchor to the last close. Claim is what the platform shows. Independent is the clean room recompute.

FundAsset class10Y claim10Y independent
Fund ADeveloped market equity7.7852%7.7336%
Fund BDeveloped market equity4.4384%4.4247%
Fund CDeveloped market equity8.5312%8.5045%
Fund DDeveloped market equity9.0853%8.9932%
Fund EBonds1.3787%1.3704%
Fund FBonds1.4261%1.4192%
Fund GBonds2.0318%2.0203%
Fund HBonds-2.3747%-2.3898%
Fund ICommodities9.2563%9.2899%
Fund JCommodities11.0481%11.0330%
Fund KCommodities10.3289%10.2765%
Fund LCommodities5.1286%5.2391%
Fund MEmerging market equity7.7867%7.7112%
Fund NEmerging market equity2.6068%2.6011%
Fund OEmerging market equity8.3464%8.2739%
Fund PEmerging market equity7.4589%7.4240%
Fund QDeveloped market equity7.5781%7.5576%
Fund RDeveloped market equity8.4337%8.4031%
Fund SDeveloped market equity10.0385%10.0068%
Fund TDeveloped market equity9.7687%9.7378%
Fund UUS equity13.1102%13.0898%
Fund XUS equity10.5237%10.4959%
Fund VUS equity20.0531%20.0301%
Fund WUS equity14.8055%14.7891%

In the report as sent, this table also listed the raw adjusted close at each anchor date, two, five and ten years back, for every fund. The prices are left out of this sample because they would name the funds.


Appendix, claims check of my own sprint 11 report

Every claim in the sprint 11 report was checked adversarially against raw live data before I sent it. Each check ran a real production shell, an API request, a cloud query or a code read. Each checker had the instruction to mark a claim unverified if real data couldn’t confirm it.

Claims checkedVerified on live dataOverstatement caughtFabricated
121110

The one caught overstatement, and the fix

The draft said the report rebuild makes the PDF without running scripts again, stated as an absolute. The code shows an option that does run every attached script. So the absolute is false for that path. It’s true only for the path the email sender uses, and I bound the wording to that path.

ClaimVerdictObserved evidence
The new source endpoint returns a failing script’s codeVerifiedHTTP 200, 2,260 bytes of real Python, no error page
149 failing script sources exportedVerified149 files, all .py, the first one opens with real imports
Naming convention code presentVerifiedThe error class, the source parser and the raise all present, with line numbers
Naming convention live on productionVerifiedA production shell printed the raised error for an unloaded ticker and 500 rows for loaded ones
The sender builds a missing PDF before sendingVerifiedThe send path rebuilds, waits, refreshes, checks the latest PDF again, then attaches and sends
The report rebuild skips the script rerunCorrectedTrue only for the default path the sender uses
The sign up page shows the current brandVerifiedNo old logo import and no old brand text, screenshot on file
Deployed on main at the stated commitVerifiedGitHub head matches, app and API both answer 200
Daily pipeline scheduled and enabledVerifiedBoth report rules enabled, with the right task targets
The time statement bills 10 hours honestlyVerifiedHour cells sum to 10.0, every line maps to a file on disk
Analysis sandbox kit builtVerifiedDockerfile, client, README and a working welcome notebook all present
The source endpoint does not run codeVerifiedThe failing script’s code came back cleanly. The endpoint reads the file and runs nothing

Names, fund tickers, vendors and amounts are replaced. Everything else is as sent.

Next step

If an agent or LLM feature breaks in production, send me a written brief.

Start a brief

I reply in writing within one working day.

How it starts

  1. [1]Send a written brief
  2. [2]Sign the agreement
  3. [3]Week 1 starts