LHoFT Best Case Study Competition 2026 · STOKR challenge

Two-Roof Solar Bond

A EUR 2 million bond, issued as tokens, that finances solar panels on two business roofs in Luxembourg. Investors are repaid only from the power the roofs sell. This page lets you check how that works, what happens when it goes wrong, and how the documents were kept true to the model.

The brief, point by pointVideo (5:17)Proposal (PDF, 3 pages)Investor factsheet (PDF)Excel model

Start here: three things to try

  1. What if the premium is not won? The worst case without the state's top-up, from a real model rerun.
  2. Catch a hidden promise. The planted sentence that only Claude caught.
  3. Open the Excel model. The numbers on this page come from it or from dated sources.

Three prices and one ratio

per MWhWhat the two businesses pay for the 70% of the power they use (contract, +1% a year)
per MWhWhat the grid pays for the rest: the market price (official 2025 value)
per MWhWhat the grid pays if the state premium is won: the market price plus the state's top-up to my bid (A)
coverA safety margin, not a return: of cash for every EUR 1 owed in the weakest year of the plan. Investors are owed a fixed a year, paid only if the roofs earn enough; it is not guaranteed.

The case in 5:17, in my voice, with captions on screen. Download the MP4 (24 MB)

THE BRIEF, POINT BY POINT

How this entry answers the brief

Every requirement in the LHoFT brief and the STOKR challenge: where it is answered, what it shows, and the weakest point I know of. Proposal references open the PDF at that page.

The brief asks forWhereWhat it showsWeakest point
Proposal requirements (LHoFT)
Summary: problem, idea, users, benefits§1, p. 1 · Q1A EUR 2M bond repaid only from two roofs' power sales; lowest plan cover 1.50x; who gains and why, in six lines.The premium condition can read as a contradiction at first; Question 2 explains it.
AI approach: how it works, data, role of AI, where people stay involved§10, Exhibit 14, p. 3 · Q4A claim checker (numbers, word list, Claude) and a market monitor that reruns the Excel model; a person approves every change, and the decision log shows it.Tested on my own documents, my planted test and one blind test planted by another AI agent; no outside human test yet.
Fairness: bias, understandable outputs, accessibility, error correction§8, p. 3 · factsheetOne class and the same terms for everyone; a plain-language factsheet; EUR paid to a bank account; a custodian holds the tokens; errors fixed within 5 business days (A).The factsheet has not been tested on real readers yet; the understanding indicator in Exhibit 13 is how it would be.
Plan: pilot, people, timeline, costs, resources, checks§9, Exhibit 12, p. 3Month by month, each step with who does it, what it costs and the check before the next one; professionals first, then retail.Roles are generic (a bank, counsel, a contractor): the company and its partners are fictional.
Impact: two or three measurable indicators, assumptions labelledExhibit 13, p. 3Clean power, investor understanding (three factsheet questions at purchase) and local reach, each reported yearly.All three are assumptions (A), with no targets set yet.
Risks: privacy, security, ethics, legal, case-specific§6 and §8, p. 2 · Q2A real Liquid incident (6 Sep 2026), GDPR and no investor data on the chain, an arm's-length check on the hosts' price, and where the model breaks.If the checker wrongly finds no promise in a sentence, only the person's review catches it.
Tools: disclose tools, cite sources, label fiction and assumptions§10 and footers, p. 3 · filesTools named in the proposal and the form; every number traced to the model or a dated source; fiction and (A) labelled on every page.No gap found in review.
STOKR challenge
Financing journey, from issuer preparation to investor reporting§2, Exhibit 7, p. 1The owners build with equity and a bridge loan; at completion the bond raises EUR 2M and repays the bridge; reporting after issue.Bridge interest and refinancing if the offer fails sit with the owners and are not modelled.
The instrument: rights, repayment source, costs, risks§3, Exhibits 1-2, p. 1 · Q1One equal yearly payment of EUR 212,706, paid right after running costs and tax; a pledge for all investors; two thirds of the amount owed can vote to enforce it.The proposal uses lender terms (DSCR, DSRA, P90); the factsheet and this page explain them.
Tokenisation vs a conventional route, and when it adds value§4, Exhibits 5-6, p. 2 · Q3For one project a bank loan is cheaper: 5.1-7.0% against 9.9% all-in. Tokens help when the setup is reused across many roofs and many small investors.The saving across a programme is not modelled; the pilot has to show it.
A simple issuance flow§5, Exhibit 7, p. 2Six steps from preparation to reporting, each with who does it and the check that must pass.No gap found in review.
A plain-language investor factsheetfactsheet extract, p. 3 · full pageOne page: what you own, where the money comes from, what happens if both hosts leave, what the bond is not.Claude raised two low points (a source for the tender rule, how the pledge is enforced); the proposal answers both, the one-page factsheet does not.
One downside scenario and its effect on repayment§6, Exhibits 8-10, p. 2 · Q2Both businesses leave in year 5: cover 0.94x; in the model every payment is still made, from cash held back from the owners, with the premium won.Without the premium, cover would fall to 0.25x, so there is no bond without the award; with weak sunshine on top, payments run late from year 14.
Assumptions on revenue, operating costs, interest and maturityExhibit 4, p. 1Each input with its source and date, or labelled (A).Costs, the bid and the reserve are my assumptions.
Likely legal classification, approvals, specialist checks§7, Exhibit 11, p. 3 · Q3Likely a transferable security under MiFID II, so outside MiCAR; the EU prospectus exemption; a CSSF notice; the gates and checks before launch.No legal opinion yet; it is one of the gates before launch.
STOKR success measures
Clarity of rightsQ1 · §3, p. 1What you own, the order of payment, the pledge and the vote, and that you can sell only to approved investors.How the pledge is enforced is in the proposal, not on the factsheet.
FeasibilityExhibit 3, p. 1 · Q2Lowest plan cover 1.50x without the premium; on-site sale allowed by the tender rules the Ministry sent on 16 Oct 2026 (its officers have not yet answered in writing).The project earns less than the coupon: the owners' return falls from 4.6% without debt to 3.1% with the bond; they do it for cheaper power and a programme.
Cost awarenessExhibit 6, p. 2 · Q39.9% all-in against 5.1-7.0% for a bank, said plainly; EUR 200,000 to raise the bond and EUR 20,000 a year to run it (A).The costs are estimates (A).
Risk disclosureExhibits 9-10, p. 2 · Q2Where the model breaks; 2.3% of 20,000 simulated futures miss a payment; not guaranteed by anyone.The simulation leaves out long breakdowns, cost overruns, rule changes and fraud.
No promise of liquidity, repayment or open accessQ4 · factsheet extract, p. 3Not guaranteed; selling only to approved investors, maybe at a loss; buying only after the bank's checks; the checker flags any sentence that implies otherwise.None found in the final checks.

QUESTION 1

Who pays investors back?

Only the two roofs. Nobody else stands behind the payments.

Where each year's power goes

bought on site by the two businesses in the buildings, at , set for years

sold to the grid at about

Both sides gain: the businesses pay less than their own grid bill of about (Eurostat, H1 2026; in the model both prices rise 1% a year, A), and the bond gets a steady price for most of its income while they keep buying.

Not guaranteed by

the selling bankSTOKRthe statethe owners

What protects investors instead:

  • A pledge over the company's shares, bank accounts and power contracts, held for all investors by a bondholder representative (A). Two thirds of the amount owed can vote to enforce it, which may not recover everything.
  • A fixed order of payment. All income lands in one pledged account and is paid out in this order:
  1. Running costs and taxoperations, insurance, roof lease, the bond's running costs
  2. Investors: a yeara missed payment stays owed with interest and is paid first from later cash, but may never be paid in full
  3. Reservetopped up to half a yearly payment ()
  4. Owners, lastnothing while cover is below or anything is owed (lock-up)

How well is the payment covered?

Cover is the cash available after costs and tax, divided by the payment due. It is a safety margin, not a return.

lowest year in the plan: of cash for every EUR 1 owed
Where the 1.50x comes from

It is the central case, before any risk: expected sunshine for the site (PVGIS, 1,000 kWh per kWp in year 1, 0.4% loss a year), the contract prices above, and running costs from published studies and my assumptions, each labelled in the model. The downside, the weak-sunshine case and the simulation below are the risk views.

Excel: Summary!C20. The Python engine that drives the simulation reproduces the workbook to the euro on every row.

QUESTION 2

What if it goes wrong?

My worst case is both businesses stopping in year 5. The state premium is what protects investors then. With it, this scenario pays in full in the model; weak sunshine or more negative-price hours on top would make payments late.

If the businesses move out or fail, they stop buying the power (investors keep their tokens) and all of it goes to the grid, which on its own pays only about per MWh. Luxembourg runs a solar tender every year. A winner gets the market price topped up to a fixed level, its bid, for 15 years, on power sold to the grid.

The state premium: protection for investors

EUR per MWh of power sold to the grid. If the premium is won, the state pays the blue gap to the company for 15 years, except in hours when the market price is negative.

The planNeeds no premium: lowest cover is with or without it. While the businesses buy 70% of the power, the other 30% goes to the grid at the market price, per MWh (official 2025 value). The tender rules would pay the premium on that 30% too, but the model leaves it out: counting it would lift plan cover to .
What it protectsIf both businesses leave, all power goes to the grid. On the market price alone, the roofs would make only for every EUR 1 owed in year 5 (cover ), falling to by year 15, and of payments would not be paid when due. With the premium, the state tops the price up to my bid, per MWh (A), for 15 years (cap ; the last round's rooftop award was ). Take off the hours when the market price is negative and no premium is paid ( of grid power, A) and a per MWh fee to the company that sells the power, and cover is : in years 13-15 the roofs make slightly less than they owe, and cash held back from the owners since year 9 fills the gap, so in the model every payment is made.
So it comes firstThe bond is offered only once both roofs have won the premium and been built: the owners and a bridge loan pay for the build, and investors pay in at completion, so they carry neither the tender result nor the build. This round's bids close on 30 October 2026.
No awardNo bond. Nobody has invested yet, so investors keep their money, and the build waits: the project bids again when the next yearly round opens (the last three opened in July).
Past roundsRecent rounds had more capacity on offer than bids to fill it: the 6th round (2024) awarded of the MW offered (), the 7th round (2025) of MW (about ). That points to too few bids rather than tough competition, though a bid above the cap or one that fails the tender's competitiveness test is still rejected. The 8th round offers MW for rooftop plants like ours.
Round summaries on guichet.public.lu: 6th, 7th (published 13 Feb 2026); 8th round notice (27 Jul 2026).

Where it breaks

Lowest cover in the 15 years, in the model. Weak sunshine is the 10-year P90 output, of the central estimate every year, about a 1 in 10 chance.

Try other prices

Pick a bid and see what happens to the worst case, both businesses leaving in year 5. Every setting shows its own rerun of the Excel model, run on 18 October 2026 and labelled simulated: none of them is market data. Nothing is calculated in your browser.

Worst case, lowest cover, by bid in the tender (EUR per MWh)

Click a bar. Red: some payments are not paid when due. My bid is EUR 92.50 (A), the cap EUR 95; the last round's rooftop award was EUR 89.75, just under 90.

Moves the plan, and the worst case only when the premium is not won. EUR 45: the official 2025 value, used in the model. EUR 61.17: the monitor's 12-month value on 17 October 2026, which I rejected (decision log in Question 4).

With the premium won, the grid price moves only the plan, and only while the premium is not counted: once it applies it tops the price up to the bid, so the worst case depends on the bid alone. Without the premium, the worst case moves with the grid price.

20,000 random futures

A Monte Carlo simulation draws sunshine, prices and businesses leaving at random for each of 20,000 fifteen-year paths, with the premium won, and counts how often investors miss a payment. The rows show how much one assumption matters: the chance that a business leaves.

Bars share one scale. Every other path pays every payment on time from the roofs' own cash. It tests my assumptions and is not a forecast: long breakdowns, cost overruns, rule changes and fraud are left out.

What the simulation varies, and what it leaves out

Left out: long breakdowns, cost overruns, rule changes, fraud. It tests my assumptions; it is not a forecast.

Code: mc_engine.py (reconciled to the Excel model), mc_run.py, results mc_results.json.

QUESTION 3

Are tokens worth it?

For one project, no: a bank loan is cheaper. Tokens can pay off when the same setup is reused across many roofs, which the pilot has to show.

Legally, most likely an ordinary bond

A plain bondThis bond
Legal formA bondA bond, likely a transferable security under MiFID II, so outside MiCAR. A legal opinion is needed.
RegisterThe bank's booksTokens on Liquid, the blockchain STOKR uses, kept by a licensed bank as control agent. STOKR runs the investor portal and the payouts.
Who can investUsually the bank aloneProfessional and retail investors from EUR 500, after the bank's identity and appropriateness checks
SellingRarely possibleOnly to other approved investors. There may be no buyer, or only below what you paid.

All-in cost a year for one project

The bond's 6.5% interest plus raising costs of and running costs of a year (A). Bank: KfW 270 rates, +1% fee (A); there is no public Luxembourg rate.

When tokens add value

  • The documents and token setup are reused for each new roof.
  • Many small investors need cheap servicing: about per investor a year at 300 investors (A). The pilot has to show this falls as roofs are added.
  • Local investors, not a bank, earn the interest, as long as the roofs earn enough to pay it.

Before the bond can be issued

  • The tender award for both roofs (bids close 30 October 2026), and a completion security to the state, lost if the roofs are not built within 24 months.
  • A legal opinion and the prospectus exemption memo; the placement and control-agent agreement with a licensed bank.
  • A registered 25-year roof right that survives a sale of the building.
What the tender rules from the Ministry of the Economy say

I asked the Ministry whether a plant that wins the tender may sell part of its power on site, and whether the premium is then paid on the rest. On 16 October 2026 it sent the tender rules (cahier des charges, 8th round, art. 2.2): every use of the power that Luxembourg's 2007 electricity law allows is accepted, and the premium is paid only on power sent to the grid. The model does not count the premium on the 30% surplus while the businesses buy power, so on this one point the plan is cautious. Still open: the rule for negative-price hours (asked, no answer yet) and the legal form of the on-site sale.

QUESTION 4

How do the documents stay honest?

Two tools: a claim checker that tests every sentence against the model, and a monitor that reruns the model on new prices. A person decides every change.

The claim checker reads a document in three layers. Every number must match a cell in the Excel model or a dated source. A word list flags risky words such as "guaranteed" unless negated. Claude (Opus 5.5) reads each sentence for promises the other two cannot see. To test it, I wrote a factsheet with seven planted mistakes. Pick a sentence:

numbers word list Claude

    7 of 7 caught. Only Claude caught sentence 4: it has no number and no flagged word, yet it promises easy selling.

    A blind test: someone else plants the mistakes

    The planted test above is my own. For a fairer one, a separate AI agent that never saw the checker's code was given the real factsheet and a description of what the checker looks for, and planted 10 mistakes in a copy, leaving every other sentence word for word. Then the checker ran blind.

    8 of 10 caught, and no false alarms on the unchanged sentences, including two traps: "Liquid network" (a name, not a liquidity claim) and "guaranteed" in sentences that say the bond is not guaranteed.

    Missed: a wrong year on the market price (2023 instead of 2025), and "the state steps in through the premium where the hosts left off", which implies state backing. The numbers layer also let two wrong figures through, EUR 110,000 and 8%, because each happens to equal an unrelated cell in the model; Claude caught both. A person still reads every document before it goes out.

    Files: planted factsheet, answer key, checker report, score (18 Oct 2026).

    The real documents

    The two points on the factsheet, both low severity: Claude wanted a source for the line that the tender rules allow on-site sale (it is art. 2.2 of the tender rules the Ministry sent, cited in the proposal), and wanted the factsheet to say how investors can enforce the pledge (two thirds of the amount owed can vote to, as the proposal says). I left both off the one-page factsheet for space.

    Reports: factsheet, proposal, planted test. Code: claim_checker.py. No investor data goes to the AI.

    The monitor: a price moved, a person decided

    The monitor fetches public prices, reruns a copy of the Excel model, checks it against the engine, and lists every sentence the new numbers would change. Nothing changes until an analyst approves.

    Used in the model, kept

    official full-year 2025 value, the one the state premium uses

    A first run on 14 Oct found EUR 60.67. Both times I kept EUR 45. The bond runs 15 years and the past year includes the 2026 gas price shock; only the 30% sold to the grid depends on this price. Try other prices in Question 2.

    Decision log

    Every analyst who uses the tool logs decisions the same way, so a reviewer can see who changed what, and why. Run reports: 14 Oct, 17 Oct. Code: monitor.

    INVESTOR FACTSHEET

    What a retail investor would read

    One page in plain language: what you own, where the money comes from, what happens if both businesses stop buying, and what the bond is not. It is a fictional mock-up.

    The one-page investor factsheet for the Two-Roof Solar Bond

    Open the factsheet (PDF, 1 page)

    HOW THIS WAS CHECKED

    What was tested, and what was not

    FILES

    Everything on this page