Skip to content

Metabolic constants: sources, and what may be encoded

This page ties each quantitative constant used around the digestion and redox route modules to its source, and — separately — to a rule about whether the engine is allowed to compute with it.

Those are two different questions, and conflating them is the failure mode this repository exists to prevent. A number can be well sourced and still be illegal to multiply by a meal field.


The three tiers

Tier Meaning Engine rule
Identity Fixed by chemistry or structure. Does not vary between people. May be encoded as a constant.
Teaching constant An accepted physiological value with real spread around it. May be named as identity. Never multiplied by a meal field.
Population statistic A cohort average that masks large individual variation. Must stay OPEN per packet. Evidence, not law.

The tier, not the quality of the citation, decides what the code may do. Hinkle's P/O ratios are excellent science and still may not be applied to a gram of fibre.


Tier 1 — Identity (encoded)

Structural stoichiometry. These are already constants in the package.

Constant Value Where encoded Source
SOD dismutation 2 O₂•⁻ + 2 H⁺ → H₂O₂ + O₂ SOD_O2_PER_H2O2 = 2 McCord & Fridovich 1969
GPx reduction H₂O₂ + 2 GSH → 2 H₂O + GSSG GPX_GSH_PER_H2O2 = 2 Lubos et al. 2011
Oxidative PPP G6P + 2 NADP⁺ → Ru5P + 2 NADPH + CO₂ PPP_NADPH_PER_G6P = 2 Stanton 2012
Glutathione reductase GSSG + NADPH + H⁺ → 2 GSH + NADP⁺ GR_GSH_PER_GSSG = 2, GR_NADPH_PER_GSSG = 1 Deponte 2013

Documented, not yet encoded — no module needs them:

Constant Value Source
SMCT1 symport 1 SCFA⁻ : 2 Na⁺ Miyauchi et al. / den Besten et al. 2013
H⁺ translocated per 2e⁻ Complex I: 4, Complex III: 4, Complex IV: 2 Chemiosmotic consensus
H⁺ per NADH / FADH₂ oxidised 10 / 6 as above
ATP synthase c-ring c₈ → 8 H⁺ per 3 ATP = 2.67 H⁺/ATP Mammalian structural biology
Transport surcharge +1 H⁺/ATP (ANT + Pᵢ) → 3.67 H⁺/ATP total as above

Tier 2 — Teaching constants (named, never applied)

Constant Value Status in code Source
P/O ratio, NADH-linked ~2.5 (mechanistic ceiling ~2.72) PO_NADH = 2.5, emitted as po_identity only Hinkle 1991, 2005
P/O ratio, FADH₂-linked ~1.5 (mechanistic ceiling ~1.63) PO_FADH2 = 1.5, same Hinkle 1991, 2005

dig/mitochondrial_routes.py returns these in a po_identity field while every entry in amounts stays None. The ratio is reported as a fact about the respiratory chain; it is never used to turn a nutrient mass into ATP moles.

The ceilings (2.72, 1.63) follow from the tier-1 identities above: 10 H⁺ ÷ 3.67 H⁺/ATP ≈ 2.72, and 6 H⁺ ÷ 3.67 ≈ 1.63. The accepted 2.5 / 1.5 sit below the ceilings because basal proton leak dissipates part of the gradient — which is precisely why they are a range in disguise and belong in tier 2.


Tier 3 — Population statistics (must stay OPEN)

None of these are encoded, and none may be. They are recorded here so that a future contributor can see they were considered and rejected as law, rather than overlooked.

Constant Reported value Why it cannot be law Source
SCFA molar ratio ~60:20:20 acetate : propionate : butyrate Population average over individual microbiomes Miller & Wolin 1996
Total colonic SCFA yield 400–600 mmol/day Depends on substrate, transit, and community den Besten et al. 2013
Electron leak, State 4 ~1.0–2.0% of O₂ consumption Isolated-mitochondria assay condition Boveris & Chance 1973; St-Pierre 2002
Electron leak, State 3 ~0.1–0.2% of O₂ consumption as above St-Pierre et al. 2002
Maximal H₂O₂ flux ~20 nmol·min⁻¹·mg protein⁻¹ Isolated pigeon heart, hyperoxic buffer Boveris & Chance 1973
Total cellular glutathione 1–10 mM Tissue-specific; a host seat, not a meal output Lu 2013
GSH:GSSG at rest > 100:1 Host redox state, not a function of a food packet Lu 2013
Glutathione redox poise −240 to −280 mV Derived from the above; same objection Lu 2013

The sources say so themselves

The strongest argument against encoding tier 3 comes from the reviews that report it:

The 60:20:20 SCFA ratio remains a population average that mathematically masks vast individual stoichiometric variations based on local colonic micro-environments, transit times, and the efficiency of resident methanogens. Universal constants for exact RS-to-butyrate molar yields in a given human are technically impossible without mapping the specific metagenomic structure of that individual's colonic ecosystem.

and, on respiratory state:

In real, intact human myocytes experiencing highly variable, often hypoxic metabolic demands, mitochondria do not exist in pure State 3 or State 4, but rather fluctuate dynamically between them. Mapping the precise temporal percentage of electron leak over a 24-hour physiological cycle in vivo remains beyond current methodological capabilities.

A per-meal engine that emits a butyrate mass or a leak percentage is asserting exactly the measurement its own sources say does not exist. That is why dig/respiratory_control.py returns a direction (state_3 / state_4, leak_direction low/high) and no percentage, and why dig/colon_fermentation.py returns SCFA identity with amounts all None.


What a tier-3 number would need to become tier 2

Not a better citation — a declared seat. Tier 3 constants are properties of a host and its microbiota, not of a food. They can enter a computation only when the packet or host state actually declares the relevant field (measured GSH pool, sequenced community, measured transit time), and then they are evidence attached to that declaration, not a default. Silence stays UNEVALUABLE.


The tiers are enforced, not described

This page used to be the only place the tier of a constant was recorded. That made it unenforceable: SOD_O2_PER_H2O2 = 2 and PO_NADH = 2.5 sat in dig/ as bare literals, emitted in to_dict() payloads, with nothing in the tree saying which paper backed them or whether the engine could multiply by them.

Each now carries its own warrant:

SOD_O2_PER_H2O2 = grounded(
    2,
    tier="identity",
    pmid="5389100",
    supports="SOD dismutates two superoxide anions per hydrogen peroxide",
)

grounded() returns an int or float subclass, so arithmetic, equality and JSON serialisation are unchanged and the emitted payload keeps its shape. What changed is that the number cannot exist without a tier and a resolved PMID.

Two gates hold it. tools/check_constants.py refuses a bare literal at module level in dig/ and refuses a PMID that is not in the resolved cache; tools/check_pmids.py proves that cache still names the right papers. Tier 3 is refused at construction — a population statistic does not become encodable by acquiring a citation, and annotating one would make it look as though it had.


Verification status

Every PMID on this page and in src/biology_as_code/dig/ was resolved against PubMed on 2026-09-07 and diffed against the claim it is attached to. The page previously recorded them as unverified; that pass has now been run.

It found what the ontology pass found. Twelve of seventeen identifiers named a different paper. They were not near-misses — the id attached to Regulation of short-chain fatty acid production resolved to a paper on transducing cells on solid surfaces, and the id attached to Murphy's ROS review resolved to a case report on non-Hodgkin lymphoma. Every one passed a regex. tools/check_pmids.py now runs this diff as a gate, for the same reason tools/check_curies.py exists: an identifier that has not been resolved is decoration.

Corrected — code (src/biology_as_code/dig/)

Source Was Resolved to Now
Macfarlane & Macfarlane 2003 12740047 In situ transduction of target cells… 12740060
den Besten et al. 2013 24347302 Modulatory effects of L-carnitine on tamoxifen… 23821742
Stilling et al. 2016 26859755 Tree Age Effects on Fine Root Biomass… 27346602
Lubos et al. 2011 21924744 Novel laparoscopic hernia of Morgagni repair… 21087145
Rich 2003 14668792 no PubMed record 14641005
Brand 2010 20463404 Mitochondrial amyloid-beta levels… 20064600
Deponte 2013 23380711 Anaerobic co-digestion of grease sludge… 23036594
Murphy 2009 19052988 Synchronous presentation of systemic and brain NHL 19061483

Corrected — this page

Source Was Resolved to Now
Miller & Wolin 1996 8962261 Differential effects of interleukin-10… 8633856
Hinkle 1991 1939103 Covalent linkage between nucleotides and PD-ECGF 2012815
Hinkle 2005 15639704 Cost-utility analysis of imatinib mesylate… 15620362
St-Pierre et al. 2002 12417066 [Changes of inflammatory factors…] 12237311

Confirmed as supplied

Source PMID
McCord & Fridovich 1969 5389100
Stanton 2012 22431005
Mitchell 1961 13771349
Boveris & Chance 1973 4749271
Lu 2013 22995213

Closed conflict: den Besten et al. 2013

Three ids had been offered for this review — 24023713, 24347302 and 23985657. The page said at most one could be right. None of them is. All three resolve to unrelated papers; the J Lipid Res review is 23821742.

That outcome is the argument for the tier table above. Three independent sources agreed on the shape of a citation and every one of them was wrong, which is exactly the failure mode a number cannot survive if it is allowed to drive a computation.


See also

  • Non-laws — three statements that look like laws and are not: the rate-limiting step, the sign-stability shortcut, and MCA/BST "equivalence"
  • Constitution — gate ≠ bound, the four seats, L1→L5
  • VALUE.md — what the repository is and is not worth