Parameter ledger

Every parameter, with its provenance

The engine is private. The parameters are not. This is the complete ledger the simulator runs on — every input it consumes, as a distribution rather than a number, with the reasoning that produced it, the caveats that travel with it, and the archived document and page it was read from. The entries that are still unsourced placeholders are here too, marked as such. Publishing those is the point: a readiness model whose gaps are invisible is worse than one that has none.

How to read a grade. These five definitions are the ones params/LEDGER_SCHEMA.json validates against, quoted: A modern primary gov data. B older primary or modern secondary. C analog/foreign benchmark. D expert inference from thin evidence. ASSUMPTION no source, must be sensitivity-swept. A high grade means the citation is solid. It does not mean the number is a forecast.

What ASSUMPTION means here. It is a placeholder, not a finding. The entry has no source because the quantity is not in the public record, so the value exists only to let the model run and is swept across its range in sensitivity analysis instead of being trusted. Every one of them carries a note naming the coverage document that established the silence. Read them as questions, not answers.

As built, 55 of the 81 entries — about 68% — are still graded ASSUMPTION, 27 carry at least one real source, and 5 are graded A.

Loading the parameter ledger…

The engine refuses to run on a missing parameter

There is no silent default anywhere in the model. The stage graph references parameters by id; the loader checks that every referenced id exists in the ledger before a single replication starts, and if one is missing the run stops, names the id, and writes nothing:

MOBSIM REFUSES TO RUN — N parameter id(s) missing from the Parameter Ledger: <ids>. Add a ledger entry for each id (grade ASSUMPTION is acceptable for v0) — MOBSIM never substitutes a default value.

That is a deliberate trade. The failure mode this exists to prevent is an unsourced number appearing quietly inside a government readiness model, where a plausible default is indistinguishable from a measurement. Refusing to start is loud; substituting 0.5 is not. Deleting one entry from the file below makes the whole simulator stop with exit code 2 — that behaviour is covered by the test suite, not just the documentation.

The same discipline is why the ledger's SHA-256 is stamped into every run manifest, and why the precompute step that builds the simulator grid hard-fails if two cells turn out to have run against different ledger files. The hash printed at the bottom of the table above is the same hash printed on the simulator page.

Contested stays contested

Version 1 of this ledger was produced by reconciling eight independent corpus harvests — 149 proposed entries — against the 81 ids the engine actually consumes. Where two sources disagreed, the merge was not allowed to average them. The rule was: conflicts widen the distribution, and the derivation names each competing value and the source it came from; the merged grade is the worst of the load-bearing sources, meaning any source that determines the central tendency or a stated bound. Every resolution is written up in params/MERGE_REPORT.md, including the ones where a plausible-looking corpus number was declined.

The clearest example is examination capacity, where four published figures span eighteen-fold. The Department of Defense carries an 18,000-examinations-a-day mass-mobilization planning figure — about 277 per station per day. The merge report's finding on it: The 18,000/day figure is listed by DoD itself as an assumption used to prepare a report, never measured or tested, and it contradicts the same agency's stated 660,000/yr physical capacity by a factor of ~7. So the ledger carries the measured envelope instead — triangular(15.5, 39.1, 49.2) exams per station-day, graded B, with the mode set at the department's own stated full physical capacity and the high at the largest annual volume a MEPS-like system has ever actually processed. The rejected assumption is not deleted. It is preserved as a named scenario lever, with the exact recipe for reproducing it, and it is the top position of the examination-capacity control on the simulator. Move that control and you are moving between a measurement and an assumption, which is the single largest unresolved question in US mobilization planning.

Two more resolutions in the same spirit. Registration compliance is not one series but three regimes with a documented causal break, so it is encoded as a menu of separate entries selectable by scenario and never blended. The automatic-registration effective date is given as 18 December 2026 by the statute's arithmetic and 19 December 2026 by the agency's own regulatory abstract, and no authority resolves the difference, so both dates are carried at equal weight as a policy toggle and neither is picked. Three further corpus numbers were declined outright because they measure a different quantity than the id they appeared to fit, and each refusal is recorded with its reasoning — declining a substitution is a decision an auditor should be able to see.

The gaps are recorded the same way. All 55 unsourced entries keep the distribution they had before the merge and gain a note citing the specific coverage document that confirms the quantity is absent from the public record — sixteen of them because no Selective Service publication states per-case handling times or productive-minute assumptions at all, ten because no claim rate, appeal rate or board caseload is published anywhere in the record, and so on. Silence is provenance too, as long as you say whose silence it is.

Where the numbers go next

This page is the input side. The simulator is what the engine does with these distributions; the dataset is the wider body of corpus-verified facts the ledger was drawn from, including many that the current stage graph does not consume; and 193, 285, 660 works one specific chain of them — the timeline arithmetic — end to end with full citations. Numbers that measure quantities this engine version cannot hold are not discarded; they are kept in an extended ledger for the next stage-graph expansion, which is where the appeal loop, the medical waiver loop and the post-induction validation stage will live.