G.9Reproducibility
Anyone can rebuild every number in this library from the repository, and the browser simulator gives the same answers as the Python to the cent. That is the promise this section keeps.
G.9.1Parity
The models are written twice: once in Python, which builds the documents, and once in JavaScript, which runs the simulator and the website. Two tests hold them together, and this volume is built only after both pass. They ran as this volume was built:
- Follow the Plate. Python and
model.jsagree on 608,767 values: the 6 stall types and 3 cases in every policy, shock and suite, and 240 stalls edited at random as a viewer would edit them. The largest relative difference is zero: they agree exactly. The test fails at one part in 1,000,000, which on the largest stall's yearly sales is $0.32, so a pass means they agree to the cent. - Follow the Gift. Python and
funding.jsagree on 35,577 values over 40 random cases and the central run, twenty-one years each. The largest relative difference is zero: they agree exactly, against the same tolerance.
The succession stress test has no browser port, so it has no parity test; E.1, Can the Business Pay for Its Own Succession?'s results are read from its own output file. g9-parity.csv
G.9.2How to run the models
Or run src/build_all.sh, which does all of it and composes the library. The Monte Carlos use fixed seeds (20261026 for the stalls and the funding futures, 20261027 for the hand-overs), so two runs give the same numbers. The code needs Python 3.11 with NumPy and Node 18.
G.9.3The downloads
Every table above, as CSV with a JSON twin, under /data/g/ on the website and site/public/data/g/ in the repository; index.json lists them with their columns, units and a checksum of each file. The data dictionary is G.1.3.
30 files, 2,286 rows in all, generated with this volume. Each CSV has the JSON twin of the same name; the series file is the curated source itself.
| File | Section | What it holds | Rows | Columns | Mark |
|---|---|---|---|---|---|
| g1-parameters.csv | G.1 | Every parameter of the three models | 295 | 7 | mixed |
| g1-stall-inputs.csv | G.1.2 | Every input of the six stall archetypes and the prologue's three cases | 29 | 12 | mixed |
| g2-pnl.csv | G.2.1 | The stall P&L by archetype, a month and a year | 19 | 14 | Derived |
| g2-illness.csv | G.2.2 | What days closed for illness cost the hawker in a year | 30 | 9 | Derived |
| g2-newcomer.csv | G.2.3 | The newcomer's rent path for three bids | 6 | 13 | Derived |
| g3-net.csv | G.3 | Net income: deciles, quartiles and the mean, 5,000 simulated stalls a type | 7 | 16 | Derived |
| g3-hours.csv | G.3 | Hours: deciles, quartiles and the mean, 5,000 simulated stalls a type | 7 | 14 | Derived |
| g3-rent.csv | G.3 | Rent: deciles, quartiles and the mean, 5,000 simulated stalls a type | 7 | 14 | Derived |
| g3-inputs.csv | G.3 | The Monte Carlo's inputs: each draw as the code writes it, and its 10th, 50th and 90th percentiles by stall type | 17 | 20 | Assumption |
| g4-ledgers.csv | G.4.1 | Every pilot centre and the national core: every line, every year, 0–20 (long format) | 729 | 6 | Derived |
| g4-stacks.csv | G.4.2 | The four funding stacks, Years 0–3: two, three, four and five pilot centres | 16 | 16 | Derived |
| g4-plan.csv | G.4.3 | The central plan, Years 0–20: every inflow and every use | 21 | 29 | Derived |
| g4-endowment-paths.csv | G.4.4 | The endowment paths, Years 0–20, with the probability of holding real value | 84 | 12 | Derived |
| g4-chua.csv | G.4.5 | Heritage Plate licensees that fail each year: none, a third, half (Chua, 2024) | 3 | 16 | Derived |
| g4-maintenance.csv | G.4.4 | The maintenance rate from Year 4: 10% to 40% of the planning count | 4 | 6 | Derived |
| g5-schedules.csv | G.5.1 | Succession Mortgage schedules under the adopted terms, by stall type, year by year | 135 | 7 | Derived |
| g5-summary.csv | G.5.1 | Succession Mortgage by stall type: goodwill, payment, payoff and royalty | 7 | 10 | Derived |
| g5-royalty.csv | G.5.2 | The Family Name Royalty's ten years and what is left at each anniversary | 66 | 4 | Derived |
| g5-licences.csv | G.5.3 | Heritage Plate licence income and its three shares, by failure rate | 24 | 6 | Derived |
| g6-regulars.csv | G.6.1 | The Regulars' List in orders: every stall and dish type | 11 | 20 | Assumption |
| g6-tiers.csv | G.6.1 | The Regulars' List thresholds | 4 | 3 | Assumption |
| g6-baseline.csv | G.6.2 | The Year 0 stall baseline: sample sizes, interview hours and cost by centre | 5 | 7 | Assumption |
| g6-publishes.csv | G.6.2 | What the baseline publishes, as distributions | 7 | 3 | Assumption |
| g7-sensitivity.csv | G.7 | One at a time: every parameter tested, its range and what it does to the four-year total and the endowment | 30 | 10 | Derived |
| g8-rents.csv | G.8 | Rents, 2012–2026 | 12 | 9 | mixed |
| g8-fees.csv | G.8 | Fees and wages, 2012–2026 | 15 | 9 | mixed |
| g8-prices.csv | G.8 | Prices, 2012–2026 | 15 | 13 | mixed |
| g8-sales.csv | G.8 | Real sales, 2012–2026 | 14 | 9 | mixed |
| g9-parity.csv | G.9.1 | Parity between the Python models and the browser ports | 1 | 8 | Derived |
| g8-series.csv | G.8 | Every series value, with its unit, mark, source and note (data/curated/series.csv) | 666 | 10 | mixed |
G.9.4Version and independence
This volume belongs to version 1.9.3 of the library. The version, its date and its repository tag are printed on the cover, in the footer and on the Document Control page, and the PDF's metadata carries a fingerprint of the source it was built from, so a reader can tell whether a copy is current. Every change from version 1.0 is recorded in the Version and Change Control Log.