Parameter Provenance¶
Every parameter used by the EOH → TEH model, with its default value, units, and derivation rationale.
Allocation doctrine (decided 2026-08-05). The framework is built to work going forward, not to be a complete record of the past. An exhaustive backward accounting is impossible and self-defeating: records are biased toward whoever kept documentation, so the more history an allocation demands, the more it privileges the well-documented. A line has to be drawn or there is no end to how far back one goes. Looking back sets a starting point, not a verdict — pick a defensible line, allocate what is known, and move forward, because that begins solving and preventing, which a perfect ledger of blame never does.
Two consequences, both implemented: emissions belonging to no territory (international shipping and aviation, 46 GtCO₂) are redistributed pro-rata rather than left unowned — we all inherited the world as it is — superseded by consumption-based allocation once trade data supports it, which for OWID means 1990 forward. And land converted inside a collective counts as that collective's, whatever demand motivated it. Both are real arguments; they are recorded for live implementations to settle, not resolved by the model.
The tag scheme¶
The goal is that every constant carries a provenance tag, that the tag says what
KIND of thing the value is, and that the set awaiting measurement shrinks over
time. Eight tags, plus two sub-labels — ten values in all, and the vocabulary
is closed and enforced (utils/provenance.py: VALID_TAGS). The eight tags:
- physics — a structural claim about how entropy works. Changing it changes the model's claim about the world; needs a theoretical justification, not a knob.
- measured — read from an external empirical source (e.g. O*NET, BLS). The strongest tag: it can be wrong, and a data refresh would show it.
- derived — computed from measured inputs by a stated formula (normalizations, composites). Inherits its authority from the measurements beneath it.
- bounded — picked inside a measured band. The band is evidence; the point
inside it is not. Must state its
bandand which way iterrs. - placeholder — no measurement stands behind it at all. Must name the evidence that would settle it. This is the real debt.
- normative — a decision, not measurable even in principle. Must state
decided_by, may carry aprecedentthat informs without settling, and may not claim aresolves_by. - instance — describes the jurisdiction being modelled, so the deploying
institution supplies it and this framework never measures it. Must state
supplied_by(what they measure, and the intake path here) anddefault(what the shipped number is), and may not claim aresolves_by. - baseline — a REFUTED value kept runnable as a comparison. The measurement
happened, it replaced this value, and this value is retained so the contrast
stays checkable rather than remembered. It is not debt: no measurement is
owed on it, which is why filing it under
placeholderoverstated the backlog and — worse — made a constant with a live job read as one nobody had reached yet. Must statesuperseded_by(what replaced it),compares(the live counterpart it is measured against) andexpected— the relation the comparison should show, ending in the test that evaluates it. That last requirement is the point of the tag:DEFAULT_SEGMENTScarried an exemplary expectation in prose ("the synthetic mean sits ON the band ceiling because it was built to; the measured one sits inside on its own evidence") and nothing ran it. An expectation no gate reads goes stale, or gets quietly fitted to whatever the comparison currently prints.
And two sub-labels. These are not rival tags — they qualify how a value was
arrived at, and provenance check reports them in the same table, which is why
the count there reads nine rather than seven:
- derived-then-FROZEN — a
derivedvalue pinned at a reference epoch so it stays comparable across data vintages. It moves only when the epoch is deliberately re-cut, not when a source refreshes underneath it. - convention — a stated denominator or reference frame, not a claim about the
world. The eight
CANONICAL_*constants carry it: the canonical arc is an ideal-arc reference, and calling itmeasuredorplaceholderwould both be category errors.
band_from: — claiming an anchored derivation, and the transitive gate¶
Three operations can settle a constant, not two: measure it (measured),
decide it (normative), or derive a constraint from the model's own
structure plus other constants. The scheme named the results of the third but
never the operation — even though the two best-grounded constants here got their
bands that way. PERSONAL_EOH_BASE's band is (L−R)/w and (M+H−R)/w, neither
a direct measurement of B; AGE_WEIGHT_INFANT's is a one-sided ≥ 2.55.
band_from: names the constants such a derivation rests on, and it is
gated. No named ancestor may be a placeholder — transitively. A band
resting on an unmeasured input launders a guess into evidence.
The one-level check is not enough, and that is not hypothetical. derived
inherits its authority from what lies beneath it, so a derived input can bottom
out on a placeholder two or three steps down. Both anchored-inversion candidates
examined on 2026-08-15 had exactly that shape:
CONTESTABILITY_CAPITAL_YIELD_RATE
← FORMATION_DEPRECIATION_RATE (derived)
← CAPITAL_MACHINE_PROFILES (PLACEHOLDER)
ECOLOGICAL_BASE_RATE ← the thermal drawdown chain
← CDR_GROSS_REMOVAL_FACTOR (PLACEHOLDER)
A one-level check passes both. Hand-tracing caught them, and the gate is that trace in code.
The walk also follows each assignment's own expression (2026-10-16): a
constant computed from other constants depends on them whether or not
band_from: says so (utils/provenance.expression_parents). A derived
constant that bottoms out on a placeholder that way is NOT itself a
placeholder: its debt is counted on the parent, and tagging both would count it
twice. It must SAY it inherits, naming the parent or its FAMILY_*, and
provenance check refuses one that does not (declares_inheritance).
band_from: is opt-in, and its absence is not a gap. It means "I claim this
derivation is anchored." A constant genuinely derived from a placeholder should
say so in form:/resolves_by: and omit the field — which is what
FORMATION_DEPRECIATION_RATE already does ("it inherits CAPITAL_MACHINE_PROFILES'
standing, which is CHOSEN"). No constant in data.py currently claims an
anchored band, and that is the honest position rather than an omission.
Why
instancewas split out ofplaceholder(2026-08-09). Same category error asnormative, in a different direction.TRUST_BASE_TEHandCAPITAL_STOCK_DEFAULTWERE the two most-consumed constants in the repo — 77 and 65 call sites when this was written, both since reduced by the 2026-09-16 and 2026-09-17 frame repairs, which moved consumers onto resolvers — and both were taggedplaceholderwith aresolves_byreading "a capital inventory for the jurisdiction being modelled". No dataset this framework could ever gather retires them, because they are not facts about the world; they are the inputs an institution brings. Filing them as unpaid measurement debt overstated the framework's ignorance and hid the intake path from the analyst whose job it is to supply them.The risk of this tag is laundering, and
default:is the field that prevents it: aninstanceconstant still ships with a number, every canonical result in this repo was produced at that number, and none of those results is evidence about anyone else's jurisdiction.TRUST_BASE_TEH'sdefault:says so in as many words — it was sized backwards, chosen so the dividend covers the obligations it must fund.
superseded_by marks a constant retired, naming the live replacement — either
another constant or a whole measured pathway (DEFAULT_SEGMENTS →
hours_eoh.scenarios.measured). A retired constant is kept rather than deleted,
per the additive-not-destructive rule: it is the value every earlier result was
produced at. It owes no resolves_by, band or decided_by, because those
obligations exist so a live value can be improved.
Retirement is verified, not asserted. test_retired_constants_have_no_operative_consumers
checks that nothing in core/, land/ or scenarios/ still reads it —
research/ may keep a superseded arm, which is what that layer is for. The check
earned its place immediately: it falsified two of the four retirement claims
made when it was written. DEFAULT_SEGMENTS was still the live default in
core/multipliers.py:82 and core/dashboard.py:493, and SKILL_DECAY_RATE was
still read by core/eoh_generation.py. Both went back into the debt count rather
than the check being loosened.
baseline_in: / baseline_labels: — the refuted value, kept visible¶
The no-readers rule asks "is it mentioned?", and that conflates two things:
decay: float = SKILL_DECAY_RATE # a second parameter, running in parallel
"shipped": SKILL_DECAY_RATE # the refuted value, printed beside its
# replacement so the gap stays visible
Only the first is what retirement exists to prevent. The second is a documented
negative result, and this framework depends on keeping several: scenario run
knowledge_base prints credible_shipped: False because the refuted 0.10 is
still there to compare against, and in_band: True became falsifiable only when
the synthetic DEFAULT_SEGMENTS survived alongside the measured registry. A rule
whose remedy is move the code to research/ would strip that out — and would
make the gate satisfiable by relocation, which measures where code lives rather
than what governs output.
So the exemption is declared and then checked, in three conditions:
baseline_in:names every operative reader. An undeclared reader is how a value creeps back onto a computing path under cover of a claim made about other modules.- It may never be a parameter default, anywhere, verified by
astinparameter_default_consumers(). A default is exactly how a superseded value keeps governing output after everyone stops thinking about it — thedecay=SKILL_DECAY_RATEandskill_decay_rate=0.10defects were both this. This condition cannot be waived. - Every read must be in a reporting position, under a declared label. Shape:
a dict value under a literal key, an f-string, or a tuple carrying a label.
Arithmetic on the way is fine — a ratio against the refuted value is still a
comparison — but a function call is not, because that is a handoff the
analysis cannot follow. Label: the literal must appear in
baseline_labels:.
Condition 3's second half exists because the first half failed its own bite
test. Shape alone accepts any dict value, and nearly every function here
returns a dict — so a retired constant multiplied into a live figure under the
key "total" passed cleanly. Requiring the label to be declared makes adding one
a visible act in a diff rather than an emergent property of Python syntax. A
declared label nothing uses is also refused: a permission nobody exercises is a
permission nobody reviews.
A nested structure reports under all its enclosing keys, so
{"shipped": {"renewal_rate": OLD}} carries both and only one needs declaring.
Stopping at the innermost key would push the vocabulary toward field names like
renewal_rate, which say nothing about a value being superseded.
The fourth condition: a runtime flow trace¶
Conditions 1–3 are static, and static analysis has one gap here that is real
rather than theoretical. The labelled tuple proves attribution at the read,
not containment downstream: a loop target bound from ("shipped", OLD) can
carry the value into a live figure, and did so undetected in a deliberate
escape written to test exactly that.
Closing it statically means intra-procedural taint plus a model of the
comparison-table idiom — and would still leave function calls opaque, which is
where the interesting arithmetic happens (_unit_response(eps, rate)). So the
flow is checked by running it instead. trace_baseline_flow() substitutes a
Refuted float — a subclass whose arithmetic propagates the marker — into every
module baseline_in: names, calls each reading function that can be driven
without arguments, and walks the returned structure for survivors. A survivor is
a leak unless some key on its path is a declared label.
The two halves divide cleanly, and neither subsumes the other:
| coverage | depth | |
|---|---|---|
static (baseline_reads) |
all code | position only |
runtime (trace_baseline_flow) |
only paths a caller drives | exact flow, through loops and calls |
Three deliberate limits, each stated because a checker whose gaps are undocumented reads as stronger than it is:
- Only reachable functions are exercised. Readers needing arguments are
reported as skipped, never silently passed — "the trace was clean" must not
be able to mean "the trace ran nothing", so
exercisedis asserted alongsideleaks. - Bools and strings do not carry taint. A bool derived from the refuted
value is a verdict about it —
credible_shipped: Falseis the whole reason it is still here — and a string cannot corrupt a figure. - The traced module must be the scanned file. A dotted name resolves against whatever package is already loaded, so a scan rooted elsewhere would otherwise patch the real module and report on code it never read.
Inspect all of it with eoh provenance baseline [CONSTANT], which prints each
read's position, label and verdict, then the runtime trace beneath it.
Checking the guides¶
docs/parameter_provenance.md is safe by construction — its tables are generated
from data.py. docs/guides/ is not. It is hand-written prose, it is the
first thing an outside analyst reads, and nothing checked it until 2026-08-09,
when docs/guides/implementation_guide.md was found to be advertising
PERSONAL_EOH_BASE = 1500 after the reprice to 1000, listing six constants as
"physics" to be left at their defaults when none of them is physics, pointing
institutions at a deprecated parameter, and calling contestability_margin() —
the bare χ that §8.9 superseded — in its worked example.
Four checks now run over every file in docs/guides/:
| Check | Catches |
|---|---|
test_guides_do_not_quote_stale_constant_values |
any NAME = number claim that contradicts data.py |
test_guides_do_not_use_the_retired_tag_vocabulary |
teaching the retired binary Physics/Calibration scheme |
test_guides_do_not_name_constants_that_no_longer_exist |
a backticked constant that is not in data.py |
test_there_are_guides_to_check |
the glob silently matching nothing |
What this does not close. The value check is value-equality, so it sees a
constant repriced while the sentence naming it stays put — the drift that
actually happened. It cannot see a derived product restated in prose (as
docs/parameter_provenance.md handles with a curated stale-figure test), nor a
narrative paragraph that goes stale in a way no field captures. That residual is
a human problem, and saying so is better than implying otherwise.
Why
CHOSENwas split (author decision 2026-08-09). One tag was covering three different epistemic states, and lumping them distorted the picture in both directions. It made the calibration set read as 83% guesswork while hiding which constants are the actual debts —INFRA_MAINT_RATEsitting inside a measured OECD band was filed identically toABATEMENT_HALF_CAPITAL_TEH, which nothing constrains at all.And it committed a category error:
M_MAX,DIV_RATE,ESTATE_INHERITANCE_FRACTIONandTHERMAL_PROGRAMME_YEARSwere all listed as "awaiting measurement". No dataset will ever settle what fraction of an estate should pass to heirs, or over how many years a generation should discharge a debt it incurred —THERMAL_PROGRAMME_YEARSsays so in its own comment: "this is an ETHICAL choice about who bears the work, not a technical one". Filing a commitment as an unpaid measurement both overstates the model's ignorance and lets the commitment escape the argument it actually owes.normativeis forbidden aresolves_byfor exactly that reason: the forbidding is the point.
band and errs are required on bounded, and gated. Without them, "bounded"
would be a free upgrade — a placeholder claiming to be better founded than it is. The
repo already leans on the direction of error for its most leveraged picks ("erring
high is the mortality-minimising error" for PERSONAL_EOH_BASE; "1.2 is the
conservative side" for THERMAL_LAMBDA_FEEDBACK) but those lived in prose where
nothing checked them. errs opens with HIGH, LOW, NEITHER or
WITHHELD — the last a real epistemic state here, not an escape hatch: the thermal
layer already refuses to publish a budget whose sign is undetermined. A band on any
other tag is an error, since a band means the value was picked inside measured bounds.
Two working sub-labels sit alongside the six:
- derived-then-FROZEN — a derived value pinned at a reference epoch so it stays comparable across data vintages (re-deriving it per vintage would reintroduce the circularity the freeze exists to break).
- convention — a stated denominator, an adopted external standard, or a declared
reference frame; not a claim about the world.
H_REF= 2,000 h/yr is the clearest case: read as a measurement of hours worked it would be wrong nearly everywhere, but it is not one. TheCANONICAL_*arc constants are here too — an ideal-arc reference axis that real trajectories are measured against.
tier (A–D) is a sub-qualifier, not a rival scheme. The thermal layer already
wrote "measured (Tier A)"; the tag scheme now formalises that reading. Tier grades
how good a source is, so it applies only where there is a source to grade —
measured, bounded and placeholder. A physics claim has no source (it is
structural or it is wrong) and a normative decision has none either.
Where the model stands¶
Run python3 utils/eoh_cli.py provenance check for the live figures. As of
2026-08-28, over all 288 constants:
| count | share | what it means | |
|---|---|---|---|
| grounded | 72 | 25.0% | structural, measured, derived, or a stated convention |
| bounded | 18 | 6.2% | picked inside a measured band — the band is the evidence |
| placeholder | 114 | 39.6% | no measurement behind it at all — the debt |
| normative | 67 | 23.3% | a decision; no dataset retires it |
| instance | 12 | 4.2% | the deploying institution supplies it, not this framework |
| retired | 5 | 1.7% | superseded; governs no current output |
Debt is 45.8%, and the actionable figure is the 39.6% of constants that are
placeholders. That is the number to drive down. The 67 normative constants are not
debt; they are what the framework has decided, and they need argument rather than
data. The 7 instance constants are not debt either — but their shipped defaults
are not evidence, which is why they are reported on their own line rather than
folded into grounded.
Where the reduction from 106 came from, and where it did not. Ten constants
left the placeholder count on 2026-08-09 without a single new measurement: seven
were instance all along, two were genuinely retired, and SUFF_LEVY_RATE became
normative after its own stated derivation was run and returned zero at every
ε — the dividend alone runs a surplus, so no levy rate is required for solvency
and deriving it would set a different policy rather than a better calibration.
Three further constants were examined and left as debt, because the derivations
their pointers named do not work:
CONTESTABILITY_MIN_VIABLE_POPULATION—COMPETENCY_THRESHOLD × ESSENTIAL_DOMAINSis 0.155 × 8 = 1.24 (1.085 with the original seven), a fraction greater than one, which yields no headcount.RECAL_EPSILON_RATE_PER_YEAR— the simulation that would derive it consumes it as an input, so the derivation is circular; the null anchor implies 0.0254/yr against the shipped 0.02, a 27% disagreement that the circularity makes uninterpretable. It needs a fixed-point solve, asepsilon_ref_fixed_point()did for the ε_ref anchor.SKILL_DECAY_RATEandDEFAULT_SEGMENTS— claimed retired, falsified by the operative-consumer check (see above).
Of the 18 bounded picks, 9 err LOW, 4 HIGH, 4 NEITHER and 1 is WITHHELD. The lean
toward LOW is worth noting rather than celebrating: for DEP_RATE, THERMAL_F_GHG
and the GOVERNANCE_IRR_* pair, erring low is the unsafe direction — it flatters
solvency, overstates the thermal allowance, and sets the assessment-quality gate below
the conventional bar. Each says so on its own line.
Migration note (completed 2026-08-09 — now machine-checked). All 288
data.pyconstants carry an inline tag block, andtests/test_provenance.pyfails if that stops being true. The migration off the older binary Kind = Physics | Calibration is finished: nine tables were still on it, and the whole 51-constant GUF block was undocumented.The migration was not cosmetic. Several constants carrying
Physicsturned out to be desk estimates or constitutional commitments. Only 2 of 288 constants arephysics— applying this scheme's own demanding definition honestly leavesA_EARTH_M2andSIGMA_SBand nothing else. The 190 that becameCHOSENwere then split intobounded/placeholder/normative(see above), because one tag covering three epistemic states was itself obscuring the picture. Where a functional FORM is structural but its constant is not, theform:field says so rather than letting the stronger tag cover both.Tags live inline in
data.py, immediately above each value — proximity is what stops coverage regressing, since you cannot add a constant without touching the lines the tag lives on. Every table in this document below a<!-- provenance:table -->marker is generated from those blocks; the prose around them is hand-written and is where the argument lives. Regenerate with:python3 utils/eoh_cli.py provenance doc --write python3 utils/eoh_cli.py provenance csv --writeRetags are in Retag log and Retag log (2026-08-09) below.
Machine-readable sources of truth. For a public audit that never opens Python:
constant_provenance.csv —
one row per data.py constant with value, units, tag, tier, form, block,
resolves_by and any note. For the measured multiplier registry:
multiplier_provenance_v5.csv.
Both are generated; neither is hand-edited.
Source: hours_eoh/data.py and hours_eoh/params.py; measured multiplier data
in hours_eoh/reference/data/ (O*NET 30.3 / BLS, frozen epoch 2026-07-29).
Scope of the coverage gate. It covers module-level constants in data.py. Three
provenance surfaces sit outside it and are marked as such where they appear:
EohParams defaults (params.py), the per-occupation multiplier registry, and any
constant that never made it into data.py — of which
_ECOLOGICAL_SPIKE_INTENSITY in core/eoh_generation.py:47 is the one known case,
a standing violation of the no-anonymous-constants invariant.
EOH Generation — Personal Domain¶
This is the highest-leverage block in the model. Personal EOH is 98.9% of total EOH at ε = 0, 84.8% at ε = 0.40 and 46.1% at ε = 0.99 (re-measured 2026-08-10; see Domain balance), so
PERSONAL_EOH_BASEsets the denominator of ε outright across the low arc and still sets half of it at the top. It carried thePhysicstag while being a four-line desk estimate.Repriced 1,500 → 1,000 on 2026-08-06 (author decision) to the high end of the evidence band, on the asymmetric-loss argument below. Still
CHOSEN.
| Parameter | Default | Units | Tag | What would settle it |
|---|---|---|---|---|
AGE_GROUP_RANGES |
inclusive age bounds in years | convention form: a partition of a continuum, chosen not found. The 2026-08-10 care measurement looked for natural breakpoints and there are none: care received per person declines SMOOTHLY through childhood (113.6 → 70.7 → 36.1 → 9.6 min/day over 0-4/5-9/10-14/15-19) with nothing happening at 5/6 or at 17/18. These bounds are administrative, and the model reads four steps off a smooth curve. |
— the bands are a REPORTING VIEW. Anything sensitive to where the cuts fall should integrate a demand curve over age instead — see reference/care_demand.py, which carries the curve these bands approximate. |
|
AGE_GROUP_FRACTIONS |
{'infant': 0.07, 'child': 0.16, 'working_age': 0.6, 'elderly': 0.17} | fraction of population | instance | you supply your census age pyramid, grouped to AGE_GROUP_RANGES. Intake path: reference/data/census_age_2020_2025.csv ships the US reading by single year of age, and reference/care_demand.population_shares() groups any band structure against it. Nothing about YOUR population is derivable from this framework. shipped default an OECD-shaped split that happens to fit the US around 2020 (measured 6.98/15.24/60.91/16.87 that year). By 2025 the US had moved to 6.5/14.5/60.0/18.9 — the elderly band is already 2pp off and rising, so the shipped default is a snapshot, not a standard. Swapping the 2025 reading in moves w by only +0.8%, because the weights dominate. |
AGE_WEIGHT_WORKING_AGE |
1.0 | relative personal EOH (dimensionless) | convention form: the NUMERAIRE. Every other weight is expressed against a working-age adult, so this is 1.0 by definition and carries no evidential content — measuring it is not a coherent request. |
— |
AGE_WEIGHT_INFANT |
3.0 | relative personal EOH (dimensionless) | bounded (Tier B) form: personal obligation generated per person of that age, relative to a working-age adult: (self-maintenance + care received) integrated over the band and divided by the numeraire band's total. |
band ≥ 2.55, one-sided — and it STAYS one-sided, unlike the child weight. Measured 2026-08-10 from ATUS 2021–25 pooled (scenario run care_curve), but ATUS surveys nobody under 15, so the self-maintenance term is missing for the ENTIRE infant band. The measurement is a FLOOR that can only rise. errs HIGH, and high is the safe direction, by the same asymmetric-loss argument that set PERSONAL_EOH_BASE. A weight set too low understates the obligation a dependent generates, and the deficit is paid in unserved care — the model reports feasible while a child goes unattended. Too high only over-provisions. The shipped 3.0 sits 18% above its measured floor, which is the direction to be wrong in. self-maintenance below age 15, which ATUS cannot observe because it does not survey children. A time-use survey covering children (some HETUS members do) would close the band from below and turn these into point estimates. MTUS WAS CHECKED AND DELIBERATELY NOT APPLIED HERE (2026-09-01), which is the one case this session found where more data did not license a better pick. Two reasons, and the second is decisive. (1) 92% of the MTUS "infant" measurement is ages 3–5 — ages 0–2 are 260 diaries from a single sample. (2) An infant's maintenance IS the caregiver's work, and care_curve already counts it on the care-received side at 409.1 min/day, so extrapolating a self-maintenance term down the (monotone) age curve into 0–2 would DOUBLE COUNT. Applying the ages-3–5 figure to the whole band gives 3.21; assuming 0–2 self-maintain at ~0 gives 2.85. The shipped 3.0 sits between them, so the measurement does not move it in either direction. |
AGE_WEIGHT_CHILD |
1.82 | relative personal EOH (dimensionless) | bounded (Tier B) form: as AGE_WEIGHT_INFANT — (self-maintenance + care received) over ages 6–17, relative to a working-age adult. |
band [1.68, 1.82], TWO-SIDED since 2026-09-01. It was ≥1.35 one-sided while the self-maintenance term for ages 6–14 was ABSENT and the arithmetic had to enter it as 0.0 — which reference/care_demand itself calls "plainly wrong for a twelve-year-old". reference/mtus_time_use now measures those ages: 977,809 diaries, 21 countries, children surveyed from age 3. The child band reads 171.1 min/day against the 24.5 ATUS reported from its 15–17 sliver. The two ends are one measurement under two corrections — 1.82 with MTUS's meals left in, 1.68 with ~75 min/day of meals stripped from both sides of the ratio.errs HIGH, and high is the safe direction — a weight set too low understates the obligation a dependent generates and the deficit is paid in unserved care. 1.82 is the top of the band, and the meals bias runs the same way: meals are roughly age-invariant, so they enter numerator and denominator alike and pull a below-1 ratio TOWARD 1, overstating it. Chosen on the asymmetric-loss argument that set PERSONAL_EOH_BASE to its high end. the meals split — MTUS sub-codes made comparable across samples, or an ATUS-definition time-use survey that covers ages 6–14 directly. Either turns the band into a point estimate; neither is in hand. STILL A BETTER-PICKED PLACEHOLDER, NOT A CLOSURE, and the distinction is the whole guard. MTUS puts meals inside personal care and this repo's definition excludes them; removing meals needs the sub-codes of {4,5,6}, which are NOT comparable across samples (code 6 runs 137 min/day in AM2008 and 59 in KR2004). So a measured ratio is transferred across two definitions, which is an assumption. What it is NOT is the previous state: ages 6–14 entered as zero, and any positive value beats that. |
AGE_WEIGHT_ELDERLY |
1.48 | relative personal EOH (dimensionless) | measured (Tier B) form: as above — (self-maintenance + care received) over the 65+ band, relative to working age. The ONE band where both terms are measured: 207.1 min/day self-maintenance + 30.5 care = 237.5 against working age's 160.2, giving 1.4824, adopted at 1.48. |
the INSTITUTIONAL population. ATUS covers households only, so the institutionalised elderly — who need the most care — are outside the frame entirely, and 1.48 is a lower bound for the elderly population as a whole. CMS Payroll-Based Journal reports nurse staffing hours per resident-day for every certified US nursing home and would close it. Recipient-side ACTIVITY monitoring would NOT: datasets of that class (TIHM was checked) record the monitored person's own movement and physiology rather than anyone's care hours, and are home-based cohorts, so they re-measure the population ATUS already covers. THE MEASUREMENT IT WAS ADOPTED FROM WAS DEFECTIVE (found 2026-10-02). ATUS codes eldercare recipients aged 80–84 as 80 (TEAGE_EC, 2024 data dictionary): the 80 cell was divided by the age-80 population alone, and ages 81–84 found no cell in the band average and dropped out (6.09M people). Corrected, the band reads 1.4680 (→ 1.47) and AGE_CARE_SHARE_ELDERLY 0.120525. NOT re-adopted here: 27 pins move and the knowledge-base fixed point with them (total EOH −0.15 to −0.25%), so it is the author's call. Both sides are pinned until then. measured 2026-08-10 from ATUS 2021–25 pooled with Census 2025 denominators (scenario run care_curve), replacing a shipped 2.5 that was asserted. Bound to the measurement by test rather than by expression — data.py sits below reference/ and cannot import it — so test_the_elderly_weight_was_adopted_from_this_measurement fails if either side moves alone. Tier B, not A: a large national survey, but with a named systematic exclusion, below. |
AGE_CARE_SHARE_INFANT |
1.0 | dimensionless care share of a band's obligation | measured form: care_minutes / (self_minutes + care_minutes) per band, ATUS 2021-2025, computed live by scenarios.care_curve.implied_weights() and pinned here by tests/test_care_keys.py — bound by TEST because data.py is the base layer and cannot import a scenario (failure mode 4's stated remedy). |
errs LOW for the elderly share — 30.5 min/day is a mean over 35 years of age and EXCLUDES the institutional population by construction, which is where the terminal-window load concentrates. The two ATUS routes for this figure disagree ~5.5x (care_demand.elderly_route_disagreement returns it; 7.1x before the 80–84 bin was corrected, 2026-10-02), unreconciled.THE RATIO TRANSFERS, THE LEVEL DOES NOT. Applied to the SHIPPED eoh_weight, not to the implied one: the measured levels (2.553 infant, 1.354 child) are lower bounds and differ from the shipped weights, so this splits the shipped weight into self and care WITHOUT restating it. Same move as mtus_time_use.band_ratio, for the same reason. WHY THE SPLIT EXISTS. eoh_weight was ONE scalar per band carrying two obligations that move on entirely different drivers — dependant care tracks FERTILITY and household composition, frailty care tracks LONGEVITY and morbidity. Bundled, neither could be measured against its own source, and ELDERLY_EOH_EPSILON_FACTOR asserted a single answer for both at once. |
AGE_CARE_SHARE_CHILD |
0.887261 | dimensionless care share of a band's obligation | measured form: care_minutes / (self_minutes + care_minutes) per band, ATUS 2021-2025, computed live by scenarios.care_curve.implied_weights() and pinned here by tests/test_care_keys.py — bound by TEST because data.py is the base layer and cannot import a scenario (failure mode 4's stated remedy). |
errs LOW for the elderly share — 30.5 min/day is a mean over 35 years of age and EXCLUDES the institutional population by construction, which is where the terminal-window load concentrates. The two ATUS routes for this figure disagree ~5.5x (care_demand.elderly_route_disagreement returns it; 7.1x before the 80–84 bin was corrected, 2026-10-02), unreconciled.THE RATIO TRANSFERS, THE LEVEL DOES NOT. Applied to the SHIPPED eoh_weight, not to the implied one: the measured levels (2.553 infant, 1.354 child) are lower bounds and differ from the shipped weights, so this splits the shipped weight into self and care WITHOUT restating it. Same move as mtus_time_use.band_ratio, for the same reason. WHY THE SPLIT EXISTS. eoh_weight was ONE scalar per band carrying two obligations that move on entirely different drivers — dependant care tracks FERTILITY and household composition, frailty care tracks LONGEVITY and morbidity. Bundled, neither could be measured against its own source, and ELDERLY_EOH_EPSILON_FACTOR asserted a single answer for both at once. |
AGE_CARE_SHARE_WORKING_AGE |
0.043861 | dimensionless care share of a band's obligation | measured form: care_minutes / (self_minutes + care_minutes) per band, ATUS 2021-2025, computed live by scenarios.care_curve.implied_weights() and pinned here by tests/test_care_keys.py — bound by TEST because data.py is the base layer and cannot import a scenario (failure mode 4's stated remedy). |
errs LOW for the elderly share — 30.5 min/day is a mean over 35 years of age and EXCLUDES the institutional population by construction, which is where the terminal-window load concentrates. The two ATUS routes for this figure disagree ~5.5x (care_demand.elderly_route_disagreement returns it; 7.1x before the 80–84 bin was corrected, 2026-10-02), unreconciled.THE RATIO TRANSFERS, THE LEVEL DOES NOT. Applied to the SHIPPED eoh_weight, not to the implied one: the measured levels (2.553 infant, 1.354 child) are lower bounds and differ from the shipped weights, so this splits the shipped weight into self and care WITHOUT restating it. Same move as mtus_time_use.band_ratio, for the same reason. WHY THE SPLIT EXISTS. eoh_weight was ONE scalar per band carrying two obligations that move on entirely different drivers — dependant care tracks FERTILITY and household composition, frailty care tracks LONGEVITY and morbidity. Bundled, neither could be measured against its own source, and ELDERLY_EOH_EPSILON_FACTOR asserted a single answer for both at once. |
AGE_CARE_SHARE_ELDERLY |
0.128292 | dimensionless care share of a band's obligation | measured form: care_minutes / (self_minutes + care_minutes) per band, ATUS 2021-2025, computed live by scenarios.care_curve.implied_weights() and pinned here by tests/test_care_keys.py — bound by TEST because data.py is the base layer and cannot import a scenario (failure mode 4's stated remedy). |
errs LOW for the elderly share — 30.5 min/day is a mean over 35 years of age and EXCLUDES the institutional population by construction, which is where the terminal-window load concentrates. The two ATUS routes for this figure disagree ~5.5x (care_demand.elderly_route_disagreement returns it; 7.1x before the 80–84 bin was corrected, 2026-10-02), unreconciled.THE RATIO TRANSFERS, THE LEVEL DOES NOT. Applied to the SHIPPED eoh_weight, not to the implied one: the measured levels (2.553 infant, 1.354 child) are lower bounds and differ from the shipped weights, so this splits the shipped weight into self and care WITHOUT restating it. Same move as mtus_time_use.band_ratio, for the same reason. WHY THE SPLIT EXISTS. eoh_weight was ONE scalar per band carrying two obligations that move on entirely different drivers — dependant care tracks FERTILITY and household composition, frailty care tracks LONGEVITY and morbidity. Bundled, neither could be measured against its own source, and ELDERLY_EOH_EPSILON_FACTOR asserted a single answer for both at once. |
AGE_CARE_KEY_INFANT |
'dependant' | none, a classification label | convention form: which driver a band's care obligation moves on. dependant for care received by a minor: they are not impaired, they are young, and the load tracks fertility and household composition. frailty for care received by an adult: an adult receiving care is doing so because of impairment, and the load tracks morbidity — which is where an actuarial table plugs in and where the compression/expansion question lives. |
— THE SPLIT IS 89/11 BY VOLUME, NOT 50/50. Weighted by population share, dependant care is ~89% of measured care and frailty care ~11%: elderly ~5% and working-age ~6%, both frailty-keyed (re-read 2026-10-17). It read 83/12 when written on 2026-09-04, a figure the tree at that commit does not reproduce (both routes read ~88/12 there). An LTC actuarial table therefore settles about a ninth of care; it does not settle care. |
AGE_CARE_KEY_CHILD |
'dependant' | none, a classification label | convention form: which driver a band's care obligation moves on. dependant for care received by a minor: they are not impaired, they are young, and the load tracks fertility and household composition. frailty for care received by an adult: an adult receiving care is doing so because of impairment, and the load tracks morbidity — which is where an actuarial table plugs in and where the compression/expansion question lives. |
— THE SPLIT IS 89/11 BY VOLUME, NOT 50/50. Weighted by population share, dependant care is ~89% of measured care and frailty care ~11%: elderly ~5% and working-age ~6%, both frailty-keyed (re-read 2026-10-17). It read 83/12 when written on 2026-09-04, a figure the tree at that commit does not reproduce (both routes read ~88/12 there). An LTC actuarial table therefore settles about a ninth of care; it does not settle care. |
AGE_CARE_KEY_WORKING_AGE |
'frailty' | none, a classification label | convention form: which driver a band's care obligation moves on. dependant for care received by a minor: they are not impaired, they are young, and the load tracks fertility and household composition. frailty for care received by an adult: an adult receiving care is doing so because of impairment, and the load tracks morbidity — which is where an actuarial table plugs in and where the compression/expansion question lives. |
— THE SPLIT IS 89/11 BY VOLUME, NOT 50/50. Weighted by population share, dependant care is ~89% of measured care and frailty care ~11%: elderly ~5% and working-age ~6%, both frailty-keyed (re-read 2026-10-17). It read 83/12 when written on 2026-09-04, a figure the tree at that commit does not reproduce (both routes read ~88/12 there). An LTC actuarial table therefore settles about a ninth of care; it does not settle care. |
AGE_CARE_KEY_ELDERLY |
'frailty' | none, a classification label | convention form: which driver a band's care obligation moves on. dependant for care received by a minor: they are not impaired, they are young, and the load tracks fertility and household composition. frailty for care received by an adult: an adult receiving care is doing so because of impairment, and the load tracks morbidity — which is where an actuarial table plugs in and where the compression/expansion question lives. |
— THE SPLIT IS 89/11 BY VOLUME, NOT 50/50. Weighted by population share, dependant care is ~89% of measured care and frailty care ~11%: elderly ~5% and working-age ~6%, both frailty-keyed (re-read 2026-10-17). It read 83/12 when written on 2026-09-04, a figure the tree at that commit does not reproduce (both routes read ~88/12 there). An LTC actuarial table therefore settles about a ninth of care; it does not settle care. |
CAPITAL_PERSONAL_SERVING_SHARE |
0.1128706625 | dimensionless share of capital stock | derived form: Σ(tiers[t].teh_per_capita · personal_fulfillment_rate) / Σ teh_per_capita over CAPITAL_MACHINE_PROFILES at the standard tier. Computed from the profiles rather than restated — tests/scenarios/test_abatement_split.py pins it against the live calculation. |
— TIER-STABLE TO 0.15 PERCENTAGE POINTS — 0.1136 minimal, 0.1121 basic, 0.1129 standard, 0.1129 advanced — which is what makes the abatement K a clean rescaling rather than a tier-dependent correction. The reference tier is standard, matching CAPITAL_STOCK_DEFAULT's frame. WHY IT EXISTS. a(K) reduces the PERSONAL obligation and was taking TOTAL capital, so a data centre abated water-hauling. The typing was never missing — personal_fulfillment_rate has been on every profile — only unused. Callers holding a total capital stock multiply by this to get the K that abatement_fraction actually wants. |
DEFLATION_SWEEP_SCALES |
(0.25, 0.5, 1.0, 1.5, 2.0, 3.0, 4.0, 6.0, 10.0) | multiples of the standard capital tier | convention form: the capital sweep scenarios.deflation_loop runs. Chosen to reach BOTH ends of the arc — ε below 0.10 at the bottom and above 0.90 at the top — because the interesting behaviour is at both and a sweep narrow around the reference capital reports "no effect" and is wrong: abatement's dampening crosses over at about 1.9x reference and only appears above it. |
— A SWEEP RANGE IS A CHOICE AND THIS ONE DECIDES THE ANSWER, which is why it is named rather than inlined. test_the_sweep_reaches_both_ends_of_the_arc fails if it stops spanning the arc. |
CAPACITY_MEASUREMENT_BAND |
(18, 69) | inclusive age bounds in years | convention form: the band MEASURED_CAPACITY_H_YR is measured over, restated here because the constant it qualifies lives here and the qualifier must travel with it. reference.mtus_time_use.measured_capacity states it in prose — "hours per adult per year, ages 18-69" — and there is no constant there to bind to, so this is a RESTATEMENT and tests/test_measured_capacity.py pins the pair. |
— IT DOES NOT MATCH AGE_GROUP_RANGES["working_age"] = (18, 64), and that mismatch is the point of naming it. The adult share multiplied by MEASURED_CAPACITY_H_YR selects 18-64 while the capacity itself is measured over 18-69, so 65-69 sit in the denominator of c and outside the numerator of a. Measured and reported by scenarios.feasibility.capacity_band_alignment(), deliberately not adopted. |
AGE_CAPACITY_WEIGHT_INFANT |
0.0 | dimensionless share of adult capacity, per age group | placeholder form: the SUPPLY-side mirror of the AGE_WEIGHT_* constants. Those weight how much personal obligation an age group GENERATES; these weight how much capacity it SUPPLIES. Until 2026-09-04 only the demand side was weighted, and supply was the bare working_age fraction — which asserted, without saying so, that the elderly supply exactly zero while generating 1.48x the obligation. The shipped values reproduce that assertion EXACTLY (0.60), so nothing moves; what changes is that the assertion is now visible, and that a demographic shock moves supply and demand together instead of only one. |
errs LOW — a zero here understates supply, which makes every feasibility test HARDER to pass. That is the safe direction: the failure to avoid is a model that reports a population as self-sustaining when it is not. A 12-year-old and a 70-year-old both do most of their own self-maintenance, so the true values are above zero and the shipped supply is a LOWER bound. A DEMAND-SIDE MEASUREMENT OF THE OVER-69 OBLIGATION, or the author adopting the measured supply side alone. The supply-side cut this field asked for — the three measured_capacity fields by age band — ships since 2026-10-08 (note below); what holds the weights is the objection that AGE_WEIGHT_ELDERLY is a lower bound. Under-15s stay unmeasured: no US MTUS sample surveys them.NOT normative. Zero is an ADMISSION that nothing measured it, not a commitment that these groups supply nothing. Per the standing policy (author, 2026-09-03) a value that could change when the data arrives carries a confidence and a resolves_by rather than a decider. THE FIRST resolves_by HERE WAS THE WRONG FIELD (corrected 2026-09-04). It named mtus_self_maintenance_by_age.csv — the right dataset, the wrong column. That extract measures NON-SLEEP SELF-MAINTENANCE; the capacity these weights scale is measured_capacity, which counts PAID WORK, UNPAID DOMESTIC WORK AND CHILDCARE over ages 18-69. Dividing one by the other would be corpus F-001 — a pointer that names a source without naming the field. The shipped by-age extract cannot settle these weights. child and infant are 0.0 BY THE DEFINITION OF c, not by absence of measurement: MEASURED_CAPACITY_H_YR is measured over 18-69, so nobody under 18 is inside the quantity being scaled. Real children do domestic work, so the supply is still understated — errs: LOW holds — but the zero is a frame consequence rather than an admission. elderly = 0.0 CONTRADICTS c's OWN BAND, which is the live defect here: 65-69 ARE inside the 18-69 window c is measured over, so the arithmetic drops them from the numerator while keeping them in the denominator. On US 2025 single-year ages that is 5.83 percentage points of adult share. Measured and reported by scenarios.feasibility.capacity_band_alignment() and DELIBERATELY NOT ADOPTED: correcting supply alone makes ε=0 feasible and closes the standing over-determination, while AGE_WEIGHT_ELDERLY = 1.48 is documented as a LOWER bound, so demand is understated too by an unmeasured amount. A one-sided fix that dissolves the finding is the outcome tests/test_measured_capacity.py warns against by name. THE CUT NOW SHIPS, 2026-10-08 — mtus_capacity_by_age.csv, the same file, weight and three fields by single year of age (it reproduces measured_capacity over 18-69 for all 50 samples). On US2024 against the US census: over-69s supply 0.489 of c and 15-17s 0.264, which would make the child weight 0.070 and the elderly 0.647, and the adult share 0.733 against 0.659. NOT ADOPTED: 85% of the over-69 hours are unpaid domestic work (159.1 of 186.5 min/day), the household activity the demand side counts with AGE_WEIGHT_ELDERLY still a lower bound — the one-sided fix the alignment declined. Call feasibility.measured_capacity_weights(); see record/personal.md#capacity-weights-measured. |
AGE_CAPACITY_WEIGHT_CHILD |
0.0 | dimensionless share of adult capacity, per age group | placeholder form: the SUPPLY-side mirror of the AGE_WEIGHT_* constants. Those weight how much personal obligation an age group GENERATES; these weight how much capacity it SUPPLIES. Until 2026-09-04 only the demand side was weighted, and supply was the bare working_age fraction — which asserted, without saying so, that the elderly supply exactly zero while generating 1.48x the obligation. The shipped values reproduce that assertion EXACTLY (0.60), so nothing moves; what changes is that the assertion is now visible, and that a demographic shock moves supply and demand together instead of only one. |
errs LOW — a zero here understates supply, which makes every feasibility test HARDER to pass. That is the safe direction: the failure to avoid is a model that reports a population as self-sustaining when it is not. A 12-year-old and a 70-year-old both do most of their own self-maintenance, so the true values are above zero and the shipped supply is a LOWER bound. A DEMAND-SIDE MEASUREMENT OF THE OVER-69 OBLIGATION, or the author adopting the measured supply side alone. The supply-side cut this field asked for — the three measured_capacity fields by age band — ships since 2026-10-08 (note below); what holds the weights is the objection that AGE_WEIGHT_ELDERLY is a lower bound. Under-15s stay unmeasured: no US MTUS sample surveys them.NOT normative. Zero is an ADMISSION that nothing measured it, not a commitment that these groups supply nothing. Per the standing policy (author, 2026-09-03) a value that could change when the data arrives carries a confidence and a resolves_by rather than a decider. THE FIRST resolves_by HERE WAS THE WRONG FIELD (corrected 2026-09-04). It named mtus_self_maintenance_by_age.csv — the right dataset, the wrong column. That extract measures NON-SLEEP SELF-MAINTENANCE; the capacity these weights scale is measured_capacity, which counts PAID WORK, UNPAID DOMESTIC WORK AND CHILDCARE over ages 18-69. Dividing one by the other would be corpus F-001 — a pointer that names a source without naming the field. The shipped by-age extract cannot settle these weights. child and infant are 0.0 BY THE DEFINITION OF c, not by absence of measurement: MEASURED_CAPACITY_H_YR is measured over 18-69, so nobody under 18 is inside the quantity being scaled. Real children do domestic work, so the supply is still understated — errs: LOW holds — but the zero is a frame consequence rather than an admission. elderly = 0.0 CONTRADICTS c's OWN BAND, which is the live defect here: 65-69 ARE inside the 18-69 window c is measured over, so the arithmetic drops them from the numerator while keeping them in the denominator. On US 2025 single-year ages that is 5.83 percentage points of adult share. Measured and reported by scenarios.feasibility.capacity_band_alignment() and DELIBERATELY NOT ADOPTED: correcting supply alone makes ε=0 feasible and closes the standing over-determination, while AGE_WEIGHT_ELDERLY = 1.48 is documented as a LOWER bound, so demand is understated too by an unmeasured amount. A one-sided fix that dissolves the finding is the outcome tests/test_measured_capacity.py warns against by name. THE CUT NOW SHIPS, 2026-10-08 — mtus_capacity_by_age.csv, the same file, weight and three fields by single year of age (it reproduces measured_capacity over 18-69 for all 50 samples). On US2024 against the US census: over-69s supply 0.489 of c and 15-17s 0.264, which would make the child weight 0.070 and the elderly 0.647, and the adult share 0.733 against 0.659. NOT ADOPTED: 85% of the over-69 hours are unpaid domestic work (159.1 of 186.5 min/day), the household activity the demand side counts with AGE_WEIGHT_ELDERLY still a lower bound — the one-sided fix the alignment declined. Call feasibility.measured_capacity_weights(); see record/personal.md#capacity-weights-measured. |
AGE_CAPACITY_WEIGHT_WORKING_AGE |
1.0 | dimensionless share of adult capacity, per age group | placeholder form: the SUPPLY-side mirror of the AGE_WEIGHT_* constants. Those weight how much personal obligation an age group GENERATES; these weight how much capacity it SUPPLIES. Until 2026-09-04 only the demand side was weighted, and supply was the bare working_age fraction — which asserted, without saying so, that the elderly supply exactly zero while generating 1.48x the obligation. The shipped values reproduce that assertion EXACTLY (0.60), so nothing moves; what changes is that the assertion is now visible, and that a demographic shock moves supply and demand together instead of only one. |
errs LOW — a zero here understates supply, which makes every feasibility test HARDER to pass. That is the safe direction: the failure to avoid is a model that reports a population as self-sustaining when it is not. A 12-year-old and a 70-year-old both do most of their own self-maintenance, so the true values are above zero and the shipped supply is a LOWER bound. A DEMAND-SIDE MEASUREMENT OF THE OVER-69 OBLIGATION, or the author adopting the measured supply side alone. The supply-side cut this field asked for — the three measured_capacity fields by age band — ships since 2026-10-08 (note below); what holds the weights is the objection that AGE_WEIGHT_ELDERLY is a lower bound. Under-15s stay unmeasured: no US MTUS sample surveys them.NOT normative. Zero is an ADMISSION that nothing measured it, not a commitment that these groups supply nothing. Per the standing policy (author, 2026-09-03) a value that could change when the data arrives carries a confidence and a resolves_by rather than a decider. THE FIRST resolves_by HERE WAS THE WRONG FIELD (corrected 2026-09-04). It named mtus_self_maintenance_by_age.csv — the right dataset, the wrong column. That extract measures NON-SLEEP SELF-MAINTENANCE; the capacity these weights scale is measured_capacity, which counts PAID WORK, UNPAID DOMESTIC WORK AND CHILDCARE over ages 18-69. Dividing one by the other would be corpus F-001 — a pointer that names a source without naming the field. The shipped by-age extract cannot settle these weights. child and infant are 0.0 BY THE DEFINITION OF c, not by absence of measurement: MEASURED_CAPACITY_H_YR is measured over 18-69, so nobody under 18 is inside the quantity being scaled. Real children do domestic work, so the supply is still understated — errs: LOW holds — but the zero is a frame consequence rather than an admission. elderly = 0.0 CONTRADICTS c's OWN BAND, which is the live defect here: 65-69 ARE inside the 18-69 window c is measured over, so the arithmetic drops them from the numerator while keeping them in the denominator. On US 2025 single-year ages that is 5.83 percentage points of adult share. Measured and reported by scenarios.feasibility.capacity_band_alignment() and DELIBERATELY NOT ADOPTED: correcting supply alone makes ε=0 feasible and closes the standing over-determination, while AGE_WEIGHT_ELDERLY = 1.48 is documented as a LOWER bound, so demand is understated too by an unmeasured amount. A one-sided fix that dissolves the finding is the outcome tests/test_measured_capacity.py warns against by name. THE CUT NOW SHIPS, 2026-10-08 — mtus_capacity_by_age.csv, the same file, weight and three fields by single year of age (it reproduces measured_capacity over 18-69 for all 50 samples). On US2024 against the US census: over-69s supply 0.489 of c and 15-17s 0.264, which would make the child weight 0.070 and the elderly 0.647, and the adult share 0.733 against 0.659. NOT ADOPTED: 85% of the over-69 hours are unpaid domestic work (159.1 of 186.5 min/day), the household activity the demand side counts with AGE_WEIGHT_ELDERLY still a lower bound — the one-sided fix the alignment declined. Call feasibility.measured_capacity_weights(); see record/personal.md#capacity-weights-measured. |
AGE_CAPACITY_WEIGHT_ELDERLY |
0.3083 | dimensionless share of the elderly band inside the capacity measurement window | instance form: n(65..69) / n(65..100) on US 2025 single-year ages — reference/data/census_age_2020_2025.csv, the same extract reference.care_demand.population_shares reads. NOT zero, and not 1.0: MEASURED_CAPACITY_H_YR is measured over CAPACITY_MEASUREMENT_BAND (18-69), so the part of the elderly band inside that window supplies at the pooled adult rate by construction, and the part above 69 is outside the quantity. |
you supply the deploying collective's own age structure — the share of its 65+ population that falls inside CAPACITY_MEASUREMENT_BAND. Supply it with AGE_GROUP_FRACTIONS, from the same source; the two describe one demography. shipped default 0.3083, US 2025 single-year ages (n(65..69)/n(65..100) = 19,921,459 / 64,617,088). ADOPTED 2026-09-04 (author decision). It was shipped at 0.0 the same day and reported by capacity_band_alignment() rather than taken, on the ground that correcting supply alone would dissolve the ε=0 over-determination while AGE_WEIGHT_ELDERLY remains a LOWER bound — a one-sided fix. THE AUTHOR OVERRODE THAT ON THE GROUND THAT THE ALIGNED FIGURE IS CLOSER TO WHAT IS OBSERVED, and the objection is not withdrawn: it is recorded here and in record/personal.md. The demand side is still understated by an unmeasured amount, so the ε=0 surplus this produces is an UPPER bound on the true one. THIS IS AN INSTANCE VALUE AND MUST TRAVEL WITH AGE_GROUP_FRACTIONS. Both describe one age structure. A collective supplying its own fractions and keeping this default has mixed two demographies — the frame seam this repo has found in seven places. |
AGE_GROUPS |
composite of AGE_GROUP_RANGES, AGE_GROUP_FRACTIONS and the AGE_WEIGHT_* constants | derived form: assembled from the four constants above, which is the point — this dict was ONE constant carrying FOUR different epistemic states (a chosen partition, jurisdiction data, a numeraire, and two grades of measurement) under a single placeholder tag, so the tag necessarily read the weakest element and told a reader nothing about any of the others. |
n/a — it inherits the standing of each AGE_* constant it assembles — AGE_CAPACITY_WEIGHT_* placeholders among them — and the debt is counted there. retained as the public shape because ~70 call sites read it, and the split is additive: the assembled value is byte-identical to what the hand-written dict held. New code should prefer the specific constant it actually needs — a caller wanting the population split should read AGE_GROUP_FRACTIONS and see the instance tag telling them to supply their own. |
|
PERSONAL_EOH_SURVIVAL |
600.0 | hours/year per working-age-equivalent | bounded form: S_a — the autarky-referenced SURVIVAL standard. Hard-bounded above by (L−R)/w = 627: a survival standard exceeding labour supply is extinction. Set independently and CHECKED rather than pinned to the bound, so scenarios/feasibility.py can still fail it — a constant that cannot fail its own test says nothing. |
band hard upper bound (L−R)/w = 733 h/yr per working-age-equivalent, from this file's own H_REF × workforce fraction. 600 sits inside it. Was 627 until 2026-09-09: the capital-path decision zeroes the infrastructure requirement at ε=0, so R falls and the bound rises — the margin widened without the standard moving. errs LOW. Set below the supply bound rather than at it, so it understates the survival obligation if anything, which keeps ε_suff optimistic. Deliberate: the bound is CHECKED by scenarios/feasibility.py rather than pinned, because a constant that cannot fail its own test says nothing. minimum-subsistence time-allocation studies covering only the components that kill you if unmet — food, water, shelter, warmth. |
PERSONAL_EOH_SUFFICIENCY |
1500.0 | hours/year per working-age-equivalent | bounded form: F_a — the autarky-referenced SUFFICIENCY standard. MAY exceed labour supply, and that gap is precisely why collectives form. |
band 390–926 h/yr from the capital-inventory + time-use identity at MODERN capital — which measures F_c, not F_a, the two reconciled by 38–74% abatement. Independently, 'all needs met' requires ~30% abatement at ε=0.99, putting F_a mid-band. errs HIGH. It is the autarky-referenced standard, so it MAY exceed labour supply — that gap is why collectives form, not an error. Erring high overstates what a decent life costs alone, which overstates the case for collective delivery rather than understating a survival risk. cross-cultural time allocation at a stated adequacy standard, plus the capital-inventory + time-use identity route. Cross-checks already in hand: the identity route gives F_c(modern) = 390–926, implying 38–74% abatement, and "all needs met" requires ~30% at ε=0.99 — 1500 sits mid-band against both. |
PERSONAL_ABATABILITY_NUTRITION |
0.85 | dimensionless ceiling, fraction of a component removable | instance form: the most of each personal component that infrastructure can EVER remove. Split out of PERSONAL_EOH_COMPONENTS on 2026-09-08 because that table's own confidence note said one figure could not express its two halves — "The SHARES have a measurement against them… The ABATABILITIES have nothing" — and the two now carry their own tags. The assembled dict is byte-identical; tests/scenarios/test_abatement_split.py pins that. |
you supply the collective's own development state — for each component, the hours currently spent on it and the hours that would remain with the infrastructure in question in place. That difference IS the abatability, and only the collective standing at the pre-infrastructure baseline can observe it. shipped default the Block II desk ceilings — nutrition 0.85, shelter 0.90, health 0.60, care 0.25 — whose ORDERING is tested and whose LEVELS are not. INSTANCE, NOT PLACEHOLDER, AND THE POINTERS SAID SO BEFORE THE TAG DID. Every abatability's resolves_by names a DELTA FROM A LOCAL BASELINE — "food-system time-use across development levels", "hauling-time reduction", "disease burden attributable to WASH converted to care hours avoided", "childcare/eldercare time-use across development levels". A tap removes hauling only where hauling happens, so there is no universal number to measure: the value is a property of where the collective STANDS, which is what instance means in this scheme. It was a placeholder awaiting a measurement that does not exist to be made. THE ORDERING IS NOT AN INSTANCE AND IS NOT SUPPLIED. shelter > nutrition > health > care encodes Block II's structural prediction — abatability and sufficiency are ANTI-CORRELATED, because what infrastructure removes is survival-shaped work and what it cannot is care, the Baumol case. That is TESTED by TestAntiCorrelationPrediction, so the shipped default carries a falsifiable claim even though its levels do not. Same shape as GUF_SERVICE_RETENTION_BY_USE, which "ships an ordering, not magnitudes". FIVE CONSTANTS ARE BLOCKED ON THE SAME VANISHED BASELINE — these, the two automation floors, ABATEMENT_HALF_CAPITAL_TEH and PERSONAL_SIGMOID_DEFAULTS. All need a low-capital counterfactual, and none can be unblocked by collecting more: rich-country panels sit at one saturated level and no surveyed frame is truly unassisted. The baseline is not withheld data, it is a state the surveyed world has largely stopped containing — which is exactly why the intake route is the only one that does not require it to come back. PRACTICE_EQUIPMENT_WIDTHS_FT already took this route for the same reason. |
PERSONAL_ABATABILITY_SHELTER |
0.9 | dimensionless ceiling, fraction of a component removable | instance form: the most of each personal component that infrastructure can EVER remove. Split out of PERSONAL_EOH_COMPONENTS on 2026-09-08 because that table's own confidence note said one figure could not express its two halves — "The SHARES have a measurement against them… The ABATABILITIES have nothing" — and the two now carry their own tags. The assembled dict is byte-identical; tests/scenarios/test_abatement_split.py pins that. |
you supply the collective's own development state — for each component, the hours currently spent on it and the hours that would remain with the infrastructure in question in place. That difference IS the abatability, and only the collective standing at the pre-infrastructure baseline can observe it. shipped default the Block II desk ceilings — nutrition 0.85, shelter 0.90, health 0.60, care 0.25 — whose ORDERING is tested and whose LEVELS are not. INSTANCE, NOT PLACEHOLDER, AND THE POINTERS SAID SO BEFORE THE TAG DID. Every abatability's resolves_by names a DELTA FROM A LOCAL BASELINE — "food-system time-use across development levels", "hauling-time reduction", "disease burden attributable to WASH converted to care hours avoided", "childcare/eldercare time-use across development levels". A tap removes hauling only where hauling happens, so there is no universal number to measure: the value is a property of where the collective STANDS, which is what instance means in this scheme. It was a placeholder awaiting a measurement that does not exist to be made. THE ORDERING IS NOT AN INSTANCE AND IS NOT SUPPLIED. shelter > nutrition > health > care encodes Block II's structural prediction — abatability and sufficiency are ANTI-CORRELATED, because what infrastructure removes is survival-shaped work and what it cannot is care, the Baumol case. That is TESTED by TestAntiCorrelationPrediction, so the shipped default carries a falsifiable claim even though its levels do not. Same shape as GUF_SERVICE_RETENTION_BY_USE, which "ships an ordering, not magnitudes". FIVE CONSTANTS ARE BLOCKED ON THE SAME VANISHED BASELINE — these, the two automation floors, ABATEMENT_HALF_CAPITAL_TEH and PERSONAL_SIGMOID_DEFAULTS. All need a low-capital counterfactual, and none can be unblocked by collecting more: rich-country panels sit at one saturated level and no surveyed frame is truly unassisted. The baseline is not withheld data, it is a state the surveyed world has largely stopped containing — which is exactly why the intake route is the only one that does not require it to come back. PRACTICE_EQUIPMENT_WIDTHS_FT already took this route for the same reason. |
PERSONAL_ABATABILITY_HEALTH |
0.6 | dimensionless ceiling, fraction of a component removable | instance form: the most of each personal component that infrastructure can EVER remove. Split out of PERSONAL_EOH_COMPONENTS on 2026-09-08 because that table's own confidence note said one figure could not express its two halves — "The SHARES have a measurement against them… The ABATABILITIES have nothing" — and the two now carry their own tags. The assembled dict is byte-identical; tests/scenarios/test_abatement_split.py pins that. |
you supply the collective's own development state — for each component, the hours currently spent on it and the hours that would remain with the infrastructure in question in place. That difference IS the abatability, and only the collective standing at the pre-infrastructure baseline can observe it. shipped default the Block II desk ceilings — nutrition 0.85, shelter 0.90, health 0.60, care 0.25 — whose ORDERING is tested and whose LEVELS are not. INSTANCE, NOT PLACEHOLDER, AND THE POINTERS SAID SO BEFORE THE TAG DID. Every abatability's resolves_by names a DELTA FROM A LOCAL BASELINE — "food-system time-use across development levels", "hauling-time reduction", "disease burden attributable to WASH converted to care hours avoided", "childcare/eldercare time-use across development levels". A tap removes hauling only where hauling happens, so there is no universal number to measure: the value is a property of where the collective STANDS, which is what instance means in this scheme. It was a placeholder awaiting a measurement that does not exist to be made. THE ORDERING IS NOT AN INSTANCE AND IS NOT SUPPLIED. shelter > nutrition > health > care encodes Block II's structural prediction — abatability and sufficiency are ANTI-CORRELATED, because what infrastructure removes is survival-shaped work and what it cannot is care, the Baumol case. That is TESTED by TestAntiCorrelationPrediction, so the shipped default carries a falsifiable claim even though its levels do not. Same shape as GUF_SERVICE_RETENTION_BY_USE, which "ships an ordering, not magnitudes". FIVE CONSTANTS ARE BLOCKED ON THE SAME VANISHED BASELINE — these, the two automation floors, ABATEMENT_HALF_CAPITAL_TEH and PERSONAL_SIGMOID_DEFAULTS. All need a low-capital counterfactual, and none can be unblocked by collecting more: rich-country panels sit at one saturated level and no surveyed frame is truly unassisted. The baseline is not withheld data, it is a state the surveyed world has largely stopped containing — which is exactly why the intake route is the only one that does not require it to come back. PRACTICE_EQUIPMENT_WIDTHS_FT already took this route for the same reason. |
PERSONAL_ABATABILITY_CARE |
0.25 | dimensionless ceiling, fraction of a component removable | instance form: the most of each personal component that infrastructure can EVER remove. Split out of PERSONAL_EOH_COMPONENTS on 2026-09-08 because that table's own confidence note said one figure could not express its two halves — "The SHARES have a measurement against them… The ABATABILITIES have nothing" — and the two now carry their own tags. The assembled dict is byte-identical; tests/scenarios/test_abatement_split.py pins that. |
you supply the collective's own development state — for each component, the hours currently spent on it and the hours that would remain with the infrastructure in question in place. That difference IS the abatability, and only the collective standing at the pre-infrastructure baseline can observe it. shipped default the Block II desk ceilings — nutrition 0.85, shelter 0.90, health 0.60, care 0.25 — whose ORDERING is tested and whose LEVELS are not. INSTANCE, NOT PLACEHOLDER, AND THE POINTERS SAID SO BEFORE THE TAG DID. Every abatability's resolves_by names a DELTA FROM A LOCAL BASELINE — "food-system time-use across development levels", "hauling-time reduction", "disease burden attributable to WASH converted to care hours avoided", "childcare/eldercare time-use across development levels". A tap removes hauling only where hauling happens, so there is no universal number to measure: the value is a property of where the collective STANDS, which is what instance means in this scheme. It was a placeholder awaiting a measurement that does not exist to be made. THE ORDERING IS NOT AN INSTANCE AND IS NOT SUPPLIED. shelter > nutrition > health > care encodes Block II's structural prediction — abatability and sufficiency are ANTI-CORRELATED, because what infrastructure removes is survival-shaped work and what it cannot is care, the Baumol case. That is TESTED by TestAntiCorrelationPrediction, so the shipped default carries a falsifiable claim even though its levels do not. Same shape as GUF_SERVICE_RETENTION_BY_USE, which "ships an ordering, not magnitudes". FIVE CONSTANTS ARE BLOCKED ON THE SAME VANISHED BASELINE — these, the two automation floors, ABATEMENT_HALF_CAPITAL_TEH and PERSONAL_SIGMOID_DEFAULTS. All need a low-capital counterfactual, and none can be unblocked by collecting more: rich-country panels sit at one saturated level and no surveyed frame is truly unassisted. The baseline is not withheld data, it is a state the surveyed world has largely stopped containing — which is exactly why the intake route is the only one that does not require it to come back. PRACTICE_EQUIPMENT_WIDTHS_FT already took this route for the same reason. |
PERSONAL_EOH_COMPONENTS |
share = fraction of the personal obligation | placeholder form: the shares are the original desk estimate's own four terms (208/156/208/936 over 1508), so they are internally consistent with PERSONAL_EOH_SUFFICIENCY rather than independent of it. The abatability ceilings are the per-component most that infrastructure can ever remove, and their ORDERING encodes the block's structural prediction: abatability and sufficiency are ANTI-CORRELATED, because what infrastructure removes is survival-shaped work and what it cannot remove is care (the Baumol case). That prediction is TESTED in TestAntiCorrelationPrediction, not asserted here — changing these weights falsifies it. |
per-component pointers are on each line below — INSIDE the dict literal, where the provenance scanner does not read them, so this field is the only pointer any gate sees and it delegates to text nothing checks. Recorded rather than repaired by copying the pointers up here, which would be two accounts of one quantity. a_max = Σ share × abatability = 0.4483 is DERIVED from this table, so it is not a free parameter; the table is where the judgement lives. THE ABATABILITIES LEFT THIS TABLE ON 2026-09-08, split into the PERSONAL_ABATABILITY_* family above and retagged instance — every one of their pointers named a delta from a local baseline, which is not a measurement awaiting collection. The confidence below was always mostly the shares; now it is only the shares, and the sentence about two halves that one figure could not express is resolved rather than restated. |
|
ESSENTIAL_BRIDGE_PERSONAL |
dimensionless share of the personal obligation, per essential domain | derived form: w(d, personal) = Σ_c share_c × split_c(d) over PERSONAL_EOH_COMPONENTS — health and care → healthcare; nutrition → agriculture : manufacturing by the floor's unassisted production : processing terms (LSMS; the FR1966 anchor NUTRITION_AUTOMATION_FLOOR adopts); shelter → construction : energy : unattributed by the measured ATUS shelter destinations (structure, thermal, upkeep). Computed by scenarios.essential_bridge.personal_column and FROZEN here because core/ cannot import scenarios/; tests/scenarios/test_essential_bridge.py pins it against the live call. Written as component share × the measured split, not as bare totals, so the dependency on PERSONAL_EOH_COMPONENTS stays visible to the verdict ladder — frozen totals read as dependency-free and ranked CERTAIN. |
— REPLACES the personal column of the essential-domain bridge (2026-10-01, author: "fix the domain mapping, as that seems to be an oversight"). It was healthcare 0.80 / logistics 0.20, written before the obligation was decomposed. Healthcare barely moves (0.759) — care is 62% of the obligation and has no essential domain of its own — and logistics goes to 0: food SERVICE is excluded from the obligation (author, 2026-09-03), and the floor's terms carry no distribution stage. unattributed is the share no essential domain is certified for — shelter upkeep, where the measured frame also hides WATER (piped water puts hauling inside upkeep). Water is HELD at 0, not weighted (author: no new placeholders). The old column summed to 1 over the seven by construction. inherits its inputs' standing — the component shares are the desk estimate (PERSONAL_EOH_COMPONENTS, confidence 25) and the shelter destinations are a high-capital frame. Derived is not measured. |
|
ABATEMENT_HALF_CAPITAL_TEH |
112.870662 | TEH of PERSONAL-SERVING capital per capita | placeholder form: K_half in a(K) = a_max · K/(K + K_half). It sets the PACE of abatement along the arc, not its ceiling. |
the identity route run at two or more capital levels — B(K) measured at matched (inventory, time-use) pairs pins a_max and K_half together. REDENOMINATED 2026-09-08, 1,000.0 → 112.870662, and it is a UNIT CONVERSION rather than a re-choice. a(K) is invariant under scaling K and K_half by the same factor, so multiplying by CAPITAL_PERSONAL_SERVING_SHARE leaves every a(K) BIT-IDENTICAL while fixing an incoherence: K is now personal-serving capital and K_half was denominated in total. Nothing about the pace is asserted by this, and the resolves_by below is untouched. THE PACE IS STILL A BARE PICK AND RE-CHOOSING IT NOW WOULD BE WASTE — the identity route settles it and a_max TOGETHER, so any interim value is overwritten by the same run. The discipline this tag asks for instead is a sensitivity report, which scenarios.abatement_split.pace_sensitivity provides: no abatement figure should be quoted without how far it moves across this constant's plausible range. THE LEAST-GROUNDED CONSTANT IN BLOCK II, and the only new free parameter the block introduced. Report the sensitivity alongside any abatement figure until it is measured. |
PERSONAL_EOH_BASE_CLIMATE_FRAME |
'SSA rainfed tropical/sub-tropical (LSMS-ISA stratum)' | none — a named agro-ecological / climate stratum | instance form: the zone PERSONAL_EOH_BASE describes. Not a modifier ON the base: the base has always been a figure for SOME climate and never said which, and naming it is what makes the base and its falsifier commensurable. |
you supply the deploying collective's own agro-ecological zone, stated the way LSMS_AGRO_ECOLOGY states this one — growing-season structure, irrigation and frost, plus heating and cooling degree-days for the shelter term. shipped default "SSA rainfed tropical/sub-tropical (LSMS-ISA stratum)", matching the only priced component. THE DEFAULT IS THE ZONE THE ONLY PRICED COMPONENT WAS MEASURED IN, so base and falsifier now refer to the same place. reference.personal_basket. LSMS_AGRO_ECOLOGY states it: rainfed tropical and sub-tropical Sub-Saharan Africa — Sahelian, tropical highland, tropical savanna; single or bimodal rainfed growing seasons, no irrigation, no frost-limited season. A COLLECTIVE OUTSIDE THAT ZONE MUST SUPPLY BOTH THIS AND A BASE. They travel together, like AGE_GROUP_FRACTIONS and AGE_CAPACITY_WEIGHT_ELDERLY: keeping the shipped base while declaring another zone asserts that personal maintenance costs the same at every latitude, which is the claim the shelter row's degree-day intensity exists to deny. |
PERSONAL_EOH_BASE |
1000.0 | hours/year per working-age-equivalent | bounded form: the ABATEMENT-COLLAPSED operating value — one number standing in for F_a × (1 − a(K)) at an unstated point on the arc. 1000 ≈ 1500 × (1 − 1/3), and a ≈ 33% sits mid-range between the 10% "all needs met" requires at ε = 0.40 and the 38–74% the identity route implies at modern capital. Retired when abatement becomes the default generation path. |
band 482–1147 h/yr per working-age-equivalent, from two instruments sharing no assumption: the supply ceiling (L−R)/w across subsistence parameters, and the accounting identity B = (M+H−R)/w, whose M comes from a capital inventory and is B-FREE. RE-DERIVED 2026-09-04 from 390–1006, and with no new data: w fell 1.475 → 1.3528 across two age-weight measurements and a lower w raises the ceiling arm, which the block below said was owed. The band is computed live by feasibility.over_determination_report() and pinned by tests/scenarios/test_feasibility.py::TestTheBandIsLive — it was restated here and went stale once already. RE-DERIVED AGAIN 2026-09-09, from 427–1092, by the capital-path decision: an unspecified capital stock resolves along the canonical arc, so the non-personal requirement R falls to zero at ε=0 and the ceiling arm (L−R)/w rises. Fourth move in the LOOSENING direction and the over-determination still does not clear.errs HIGH. Set at the TOP of the band on an asymmetric loss function: too low hides a real shortfall (the model reports feasible, capital is under-built, and the deficit is paid in unserved biological obligation), while too high only over-builds capital. Erring high is the mortality-minimising error. the capital-inventory + time-use identity, NOT time-use data alone — see the circularity section in docs/parameter_provenance.md. Partial progress: core/eoh_generation.personal_statutory_floor() now builds a currency-free floor from physical quantities, but only one of seven basket components is priced (nutrition production, 330.9 h/person·yr), so coverage is 6.9% and the floor cannot yet falsify this value. THE SINGLE MOST LEVERAGED CONSTANT IN THE MODEL. Personal EOH is 98.9% of total EOH at ε=0, 84.8% at ε=0.40 and 46.1% at ε=0.99 (re-measured 2026-08-10), so this effectively sets the denominator of ε across the low arc, and still sets half of it at the top. Repriced 1500 → 1000 on 2026-08-06 (author decision) to the HIGH end of the evidence band, on an asymmetric-loss argument: too low hides a real shortfall (model reports feasible, capital under-built, deficit paid in unserved biological obligation), too high only over-builds capital. Erring high is the mortality-minimising error. Per working-age-EQUIVALENT: × w = 1.3528 gives the per-capita claim of 1,352.8 h/person·yr. (w has been 1.475, then 1.3016, now 1.3528 — THREE values restated in prose across this block and scenarios/feasibility.py, all of which went stale from changes elsewhere. The band re-derivation this note used to say was owed is done, above; both are now pinned to the live computation rather than restated.) WHAT THE 40 IS MADE OF. Two independent instruments give a BAND — the labour-supply ceiling (L−R)/w and the capital-inventory identity (M+H−R)/w — and they share no assumption, which is why the band is evidence rather than a restatement. That is most of the 40. What is NOT measured is the point inside it: 1000 was chosen at the HIGH end on an asymmetric loss argument, not derived. And the direct instrument that would settle it, personal_statutory_floor, prices ONE basket component of seven — coverage 0.069 — so it cannot yet falsify the value at all. the band itself is now stale in a way that errs SAFE. It was derived at w = 1.475; w is 1.3528 after two age-weight measurements, and a lower w RAISES the supply-ceiling arm, so the band is wider than stated rather than wrong. Re-deriving it is owed and would raise this figure without any new data. IT DECLARES A CLIMATE FRAME AS OF 2026-09-04, and it had to. PERSONAL_EOH_BASE_CLIMATE_FRAME names the zone this figure describes. The falsifier was already climate-indexed and this was not: the ONE priced basket component, nutrition production, is measured in rainfed tropical and sub-tropical Sub-Saharan Africa and its own note says it "does not transfer without restratification by agro-ecological zone". So the check was stratified and the checked was a global scalar — a frame mismatch that existed at 6.9% coverage rather than arriving at some future one, and was masked only because a 6.9% floor cannot falsify anything. Every further component priced makes it bite, whichever one is priced next. THE MISMATCH WAS NOT THERMAL'S DOING. The earlier reading was that costing thermal would break the single global scalar; in fact nutrition already had, being the first and only component priced. Of eight basket components, six were climate-conditioned through DELIVERY, one through the QUANTITY (thermal, since merged into shelter) and one not at all — care, which is 62.1% of the obligation. There is no climate-free component to price first. |
BASKET_DIET_KCAL_PER_DAY |
2100.0 | kilocalories per person per day | convention form: a declared dietary energy reference, not a derived optimum. 2,100 kcal/day is the humanitarian planning standard (Sphere / WHO-FAO-UNU emergency reference), adopted here because the basket needs a stated figure and this one is the most widely used. |
— THE ONLY BASKET QUANTITY THAT CURRENTLY MOVES A NUMBER. Nutrition production is the one priced component of seven, so this scales the floor 1:1 — 1,800 kcal/day gives 283.6 h/person·yr, 2,500 gives 394.0, against the shipped 330.9. The other three quantities multiply into nothing today because their components carry hours_per_unit=None, and are excluded rather than costed at zero. |
BASKET_WATER_LITRES_PER_DAY |
50.0 | litres per person per day | convention form: the WHO "basic access" service level. A declared adequacy threshold — the quantity is well-established; the labour to deliver it is not measured anywhere in this repo. |
— DORMANT BUT ARMED. The water component carries hours_per_unit=None, so this multiplies into nothing today and becomes load-bearing the moment anyone prices water collection. Nothing would announce that transition, which is the reason it is tagged here rather than left in the basket module. |
BASKET_WATER_DISTANCE_M |
1000.0 | metres, one-way, to the household's water source | instance form: the SITE property in the water component's physical form — litres x distance x hours per (litre.metre) at a stated carry. Distance is a property of the PLACE, exactly as degree-days is: a village of 100 and a city of a million beside one spring both walk the same way. It is carried here for that use and is NOT multiplied into the floor — water's hours_per_unit is still None. |
you supply YOU MEASURE IT — the one-way distance from dwellings to the source your collective actually draws from, in the season that binds. Dry-season distance is the constraint, not the annual mean, because the obligation is set by the worst case a household must still meet. Nothing about YOUR siting is derivable from this framework. shipped default 1,000 m — a round-number stand-in carried so the row has a unit, standing in for nothing measured. It is never multiplied into the floor. THE SECOND COMPONENT WHOSE QUANTITY SIDE IS AN INSTANCE, and the consequence is larger than thermal's. Degree-days makes the floor CLIMATE-indexed; distance makes it SITE-indexed, which is a finer grain than a climate zone — two collectives in one climate, one beside a spring and one 3 km from it, do not share a floor. WHY DISTANCE AND NOT COLLECTION TIME. The WHO/JMP service ladder states its threshold in round-trip TIME (30 minutes divides basic from limited), and time conflates three things the basket needs apart — distance, walking speed, and how much is carried per trip. A productivity measured as hours per litre therefore has a distance distribution and a carry distribution folded invisibly into it, and describes no actual collective. Splitting distance out is what makes the remainder — hours per litre.metre at a stated carry — transferable at all. the shipped value is a ROUND-NUMBER STAND-IN and no default could be right, because the quantity is a property of a site the framework has not been told about. It is never costed; like thermal's degree-days it exists so the component carries its unit. BASKET_THERMAL_DEGREE_DAYS_PER_YEAR is the same KIND of quantity — a place property on the quantity side — and is tagged placeholder rather than instance. REPORTED, not changed here: retagging it moves the placeholder ratchet and is the author's call. |
BASKET_WATER_CARRY_LITRES |
20.0 | litres carried per trip | instance | you supply YOUR containers. Jerrycan, headpan, yoked pair, handcart or a donkey — this is CAPITAL, not a human constant, and it is the variable a collective can most cheaply change. Doubling it halves collection time exactly, which is why it belongs beside distance rather than inside an hours-per-litre average that hides it. shipped default 20 L — one full jerrycan, the commonest single-container unit and about the upper limit of what an adult carries 1 km repeatedly. Carried so the row has a unit; it is NOT multiplied into the floor, because hours_per_unit on the water row is still None. |
BASKET_WATER_CARRIED_FRACTION |
1.0 | dimensionless fraction of BASKET_WATER_LITRES_PER_DAY | instance | you supply YOUR practice and siting. The share of the daily quantity that must be CARRIED HOME rather than used at the source. Washing and laundry at a river cost transport nothing; drinking, cooking and sanitation water must come back. It is a joint property of where the source is and how the collective lives, so no survey of another population transfers. shipped default 1.0 — ALL of it carried, which is the conservative corner and is deliberately the worst case rather than a central estimate. A collective that washes at the source declares less and its obligation falls; one that pipes water declares a distance near zero and the term vanishes. Errs HIGH by construction. |
WATER_WALKING_SPEED_M_S |
1.2 | metres per second | measured form: preferred walking speed carrying a load, the one term in the water form that is NOT an instance. It is human locomotion, not a property of a place or a practice, and it is the reason the component is computable at all once the three instances are declared. |
— 1.2 m/s is the standard preferred walking speed for adults and sits at the low end of the unloaded range (1.2-1.4), which is the right end for a loaded walk over uneven ground. Head-loading studies find near-free carriage up to ~20% of body mass, so the loaded and unloaded speeds are close at the carries this form contemplates. A collective on steep or broken terrain declares a lower figure. |
CARE_CHILDCARE_HOURS_PER_PERSON_YEAR |
168.07344 | hours per person per year of childcare delivered | bounded form: the median of reference.mtus_time_use.childcare_hours_per_person_year over MTUS codes 28–31, 977,809 diaries, 21 countries, PROPWT-weighted. Bound by TEST rather than expression, since data.py sits below reference/ — the same treatment MEASURED_CAPACITY_H_YR receives. |
band 99.5–331.2 h/person·yr — the full MTUS range, 16.36 min/day (BG1965) to 54.44 (US1998) across the 46 of 50 samples that carry the childcare codes. The shipped value is the MEDIAN, 27.61 min/day, on the same reasoning as MEASURED_CAPACITY_H_YR: the samples are not a probability sample of anything, so a mean would weight whichever countries ran more surveys. errs LOW, and the repo had already MEASURED how low before this was priced. COMPONENT_CODES_MTUS records that this code set runs 0.827 of ATUS care (spread 0.113) and 1.099 of the household-member codes alone — both outside the 5% bar that nutrition (1.015) and shelter (0.976) clear — and concludes "it is NOT admitted to COMPONENT_CODES_MTUS". That determination stands and this constant is priced past it DELIBERATELY, as a declared bound rather than as the component: COMPONENT_STATUS["care"]["status"] is bound, and reading it as the value is the error that status exists to prevent. Two further reasons it errs LOW, either alone sufficient. (1) CHILDcare only — elder and adult care are outside these codes, and elder care is the leg whose two ATUS routes disagree ~5.5x (7.13x before the 2026-10-02 bin fix). (2) It measures care DELIVERED, not care OWED, and no sample here delivers all of what is owed. The model's care is broader again than ATUS's, covering household AND non-household members, so 0.827 is itself an upper estimate of the fraction captured.A CODE SET THAT CLEARS THE 5% BAR — that is the bar this repo already set for a code set BEING a component, and childcare does not clear it. Concretely: elder and adult care on the same footing, which needs the ~5.5x ATUS route disagreement reconciled first ( care_demand.elderly_route_disagreement), and a dependency structure stated per sample so the figure is commensurable across age distributions — care hours per person-year are meaningless without one. THE POINT OF PRICING IT NOW is that the comparison names the missing data: a floor built from what exists shows what has to be collected, and the whole thing is rerun when it is.THE BENCHMARK RUNS BACKWARDS FOR CARE, which is why this could not reuse the nutrition template. For nutrition the low-capital frame gives the HIGHER figure and is the unassisted floor. For childcare the low-capital frames give the LOWER — ZA2010 17.6 and BG1965 16.4 against US1998's 54.4 — because a poorer society serves less of the same obligation rather than owing less of it. So the unassisted end is the wrong end to read a care floor off, and the high-capital median is the better lower bound. Recorded because it inverts the reasoning every other component here uses. |
BASKET_SHELTER_M2_PER_PERSON |
12.0 | square metres of dwelling floor area per person | convention form: the UN-Habitat adequacy framing for sufficient living space. A declared threshold, like the water service level above. |
— FOUND BY FIXING THE SCAN, not by reading the module (2026-08-16). It sat in reference/personal_basket.py alongside the other basket quantities and appeared in NO shadow-constant count, because 12.0 is in the utils.provenance._INNOCUOUS value set and a constant whose literals are all innocuous vanished from the scan entirely. Being masked is now a DECLARED status: see _INNOCUOUS_NAMES. dormant like water and thermal — the shelter component carries hours_per_unit=None, so this multiplies into nothing today and is excluded rather than costed at zero. |
BASKET_THERMAL_DEGREE_DAYS_PER_YEAR |
2500.0 | degree-days per person per year | instance | you supply the collective — heating and cooling degree-days for its own jurisdiction against a set-point it states. Both depend on the institution: the climate it sits in and the indoor standard it adopts. Retagged from placeholder 2026-10-16 (author: "degree as instanced as it does depend on institutions"), record/provenance.md#placeholders-audited. shipped default 2500, a temperate baseline carried so the thermal component appears in the basket with its unit. It is never costed. LATITUDE-DEPENDENT BY CONSTRUCTION, and that is the finding rather than a caveat: thermal is the one basket component where climate is the QUANTITY and not merely the delivery cost, so costing it makes the floor climate-indexed and PERSONAL_EOH_BASE cannot remain a single global scalar. |
BASKET_HEALTH_MIN_EPSILON |
0.1 | automation level ε ∈ [0, 1] | normative form: NOT a quantity like the three above — a CLASSIFICATION GATE. Below it, the health component is owed and undeliverable, so the floor reports it as below_min_epsilon rather than unmeasured, and excludes it either way. Unreachable is excluded, not zero: that is the personal floor's central behaviour and this constant is what exercises it. |
decided by a charter judgement about where a delivery path begins to exist for interventions no quantity of unassisted human labour delivers — a caesarean, an antibiotic. No dataset returns this number, because the question is which interventions the collective commits to counting as owed. precedent: the registration boundary is a different mechanism with the same shape — what the ledger recognises, versus what the basket physically contains. no measurement settles this |
The age-weighted mean w = Σ(fraction × weight) = 1.3016 is the bridge from
per-working-age-equivalent to per capita, so PERSONAL_EOH_BASE = 1,000 is a
per-capita claim of 1,301.6 h/person·yr. Forgetting that weight is the age-weight
trap scenarios/feasibility.py exists to catch.
w was 1.475 until 2026-08-10, when the AGE_GROUPS elderly weight was
revalued 2.5 → 1.48 on measurement (scenario run care_curve). Figures computed
at the old w are marked as such where they survive below; anything quoting 1.475
or 2,213 h/person·yr without that marking is stale.
Derivation of the shipped 1,500 (retained so the retag is auditable): food preparation and nutrition ~4 h/wk = 208 h/yr; shelter maintenance and sanitation ~3 h/wk = 156 h/yr; basic healthcare and hygiene ~4 h/wk = 208 h/yr; social reproduction and care ~18 h/wk = 936 h/yr; total ≈ 1,508 → rounded to 1,500. Every one of those four is an estimate, and the largest (care, 62% of the total) is the least constrained. ATUS measures all four directly.
Block III — the ε=0 endpoint, two floors, and the accounting basis¶
Added 2026-08-06.
Subsistence has no apparatus¶
canonical_physical_state asserted 2,000 TEH/capita of built capital at ε = 0
— a collective with an apparatus and no automation to justify it. That
contradicted ε's own definition (zero machine capital ⇒ ε = 0, which
civilization_epsilon already honoured) and made the autarky comparison report
the arc as overbuilt at the origin for a reason that was an artifact of one line.
The path is now 2.0B × (1 + slope) × ε. Only the intercept moved: capital at
ε = 1 is still 3× the base, and at ε = 0.99 reads 5,940 TEH/capita against the
previous 5,960. That is why this cost 4 tests rather than the suite.
A deliberate divergence to know about. effective_capital_from_epsilon was
not changed, and the two now differ:
| question it answers | at ε = 0 | |
|---|---|---|
canonical_physical_state(ε) |
the ARC's capital at ε | 0 |
effective_capital_from_epsilon(base, ε) |
scale a caller-supplied ε=0 baseline | base |
The caller of the second is asserting that stock exists; zeroing it would destroy
their input rather than model anything. Same reasoning applies to
total_eoh(epsilon=…), whose legacy path also treats capital_stock as a
supplied baseline — so total_eoh(epsilon=0) still shows infrastructure while the
CLI arc, which uses the canonical state, now shows 0.0. Pinned in
test_trajectory.py so the divergence stays deliberate rather than looking like
drift.
Two lower bounds, not one¶
A collective can be infeasible for two independent reasons, so the band's floor is now the max over every supplied floor:
| floor | meaning of a breach |
|---|---|
survival |
the population cannot meet its obligation at all |
overbuild |
the apparatus costs members more hours than autarky — they should disperse, not because they would die but because the collective is not worth being in |
corridor() accepts either a bare float (backward compatible) or a list of
Floor, and names the binding one. overbuild_floor() is non-binding whenever
the obligation test already passes. Visible in corridor band, which grew a
Floors table and a --capital-stock argument.
The accounting basis¶
total_eoh(..., basis="gross"|"final"):
total_base = personal + ecological + civilisational knowledge
total_overhead = infrastructure + apparatus knowledge
gross = base + overhead (default, unchanged)
final = base
Infrastructure and apparatus knowledge are intermediate — the cost of the service apparatus, not obligations a civilisation owes. Counting them in the total is the same error as adding intermediate consumption to GDP. Both totals are always reported, whichever basis is selected.
The conservation result, which is what motivated the whole line of work:
| ε = 0 | ε = 0.99 | drift | |
|---|---|---|---|
| gross | 1,550.7 | 1,705.3 | +10.0% |
| final | 1,475.7 | 1,480.9 | +0.35% |
The final basis is near-constant — population × per-person obligation — with the residual drift coming from the elderly-fraction shift and the growing civilisational corpus, not from the apparatus.
One bug worth recording: an early version put the basis label (a str) into a
dict[str, float]. mypy caught the type violation and four tests caught the
consequence — isfinite checks downstream broke on it.
Abatement — infrastructure reduces the obligation, not only who serves it¶
Added 2026-08-06 (Block II). PERSONAL_EOH_COMPONENTS, ABATEMENT_HALF_CAPITAL_TEH,
core.eoh_generation.abatement_fraction(), core/autarky.py.
Before this the model had substitution only: personal EOH was flat across the entire arc (1,475 → 1,480) and ε merely split who served it. That is physically wrong — a serviced dwelling needs less upkeep than a mud hut, a tap replaces hauling, and sanitation cuts the disease burden driving care hours.
B(K) = F_a × (1 − a(K)) a(K) = a_max · K / (K + K_half)
a_max is DERIVED, not chosen — it falls out of the component weights, which
are the original desk estimate's own four terms:
| component | share | abatability | resolves_by |
|---|---|---|---|
| nutrition | 208/1508 | 0.85 | Food-system time-use across development levels |
| shelter | 156/1508 | 0.90 | WHO/UNICEF JMP water-and-sanitation access — measures hauling-time reduction directly |
| health | 208/1508 | 0.60 | GBD disease burden attributable to WASH → care hours avoided |
| care | 936/1508 | 0.25 | Childcare/eldercare time-use across development levels |
a_max = Σ share·abatability = **0.4483**.
Only one genuinely new free constant: ABATEMENT_HALF_CAPITAL_TEH = 1,000
TEH/capita, the pace of abatement, not its ceiling. It is the least-grounded
value in the block. resolves_by: the identity route run at two or more capital
levels — matched (inventory, time-use) pairs pin a_max and K_half together.
Report the sensitivity with any abatement figure until it does.
The anti-correlation prediction — tested, not assumed¶
Abatability and sufficiency run opposite: infrastructure removes the
survival-shaped work (hauling, gathering, preparing) and cannot remove care,
because a child needs human attention — the Baumol case. The residual at full
abatement is therefore 84.4% care, which falls out of the weights rather than
being asserted. Pinned in tests/test_autarky.py::TestAntiCorrelationPrediction
so that changing the weights falsifies the prediction rather than silently
absorbing it.
Aggregate overbuild is now representable¶
Pre-Block-II, machine capacity and maintenance were both linear in K with a
fixed 4.08:1 ratio, so capital always paid and there was no interior optimum —
overbuild could only appear through the capital mix (generic_infra at 0.97).
Abatement saturates while overhead does not, so:
| K/capita | a(K) | B(K) | overhead | total | net vs autarky | verdict |
|---|---|---|---|---|---|---|
| 0 | 0.000 | 1,953 | 0 | 1,953 | 0 | neutral |
| 250 | 0.090 | 1,778 | 9 | 1,787 | +166 | pays |
| 1,000 | 0.224 | 1,516 | 38 | 1,553 | +400 | pays |
| 4,145 | 0.361 | 1,248 | 155 | 1,403 | +550 (optimum) | pays |
| 20,000 | 0.427 | 1,120 | 750 | 1,870 | +84 | pays |
| 100,000 | 0.444 | 1,087 | 3,750 | 4,837 | −2,884 | overbuilt |
Regenerate with eoh scenario run overbuild. These moved with the 2026-08-10
elderly revalue — the autarky reference is PERSONAL_EOH_SUFFICIENCY × w, so a
lower w lowers the bar the apparatus has to clear, and the net gain at the
optimum fell from +644 to +550 h/person·yr. The shape did not change: there
is still an interior optimum near 4,145 TEH/capita and still a size past which
apparatus is pure overhead.
There is an optimum apparatus size (~4,145 TEH/capita) and a size beyond which more apparatus is pure overhead (~6.1× the optimum). The boundary at K=0 is neutral — equivalent to autarky, not worse; strict inequality matters there.
Two tests, because they answer different questions¶
obligation test B(K) + I(K) < B₀ "all needs met effectively"
labour test (1−ε)·total < B₀ "worth being in"
A collective can pass the labour test and fail the obligation test — worth being
in, but only because automation is masking an apparatus that does not carry its
own weight. Both are reported for exactly that case. break_even_epsilon() is
the labour test's crossing and is a genuine corridor lower bound: below it a
collective should dissolve rather than operate.
Implementation note worth keeping: the crossing derives against B₀, not B(K). Abatement makes those diverge, and deriving against B(K) reports a break-even that is too high. A test caught it.
Temporary overbuild, made decidable¶
payback() integrates over an asset's design life instead of judging a single
period, so "overbuilt now, worth it over the life" is a claim that can be
checked. Both sides are in TEH-hours — the capital stock is denominated in
verified labour-hours — so payback_years reads as "years of saved labour to
repay the labour embodied in the apparatus". An apparatus that never pays back is
overbuilt in the sense that matters, whatever a single period says.
Run it: python3 utils/eoh_cli.py scenario run overbuild, or see the autarky
block on dashboard.
The standards split — one constant was doing three jobs¶
Added 2026-08-06 (Block I). PERSONAL_EOH_SURVIVAL, PERSONAL_EOH_SUFFICIENCY,
core.eoh_generation.personal_base_for().
Two orthogonal axes were conflated in a single PERSONAL_EOH_BASE:
| autarky delivery | collective delivery | |
|---|---|---|
| survival standard | S_a | S_c |
| sufficiency standard | F_a | F_c |
STANDARD is what is owed; DELIVERY is what discharging it costs. Abatement — infrastructure reducing the obligation rather than merely serving it — is the map from the left column to the right, and it does not exist yet (Block II).
| Constant | Value | Meaning | Bound |
|---|---|---|---|
PERSONAL_EOH_SURVIVAL |
600 | S_a — what must be met or people die | Hard: ≤ (L−R)/w = 627. A survival standard above labour supply is extinction. Set independently and checked, not pinned — a constant that cannot fail its own test says nothing. |
PERSONAL_EOH_SUFFICIENCY |
1,500 | F_a — what a decent life costs alone | None. May exceed supply; that gap is why collectives form. |
PERSONAL_EOH_BASE |
1,000 | the abatement-collapsed operating value, F_a × (1−a(K)) at an unstated point | Retired when Block II lands. 1,000 ≈ 1,500 × (1 − ⅓), and a ≈ 33% is mid-range between the 10% "all needs met" needs at ε=0.40 and the 38–74% the identity route implies at modern capital. |
Block I moved no numbers. The generation default is unchanged; the standards
are declared and selectable via personal_standard=. Defaulting to F_a would
assert zero abatement — exactly the simplification Block II exists to remove.
The category error this corrects¶
The earlier finding that "ε = 0 is not a feasible state" applied a survival feasibility test to a sufficiency number:
| inventory standard | ε_suff |
|---|---|
| survival (600) | 0.00 — subsistence survives with no automation |
| operating (1,000) | 0.31 |
| sufficiency (1,500) | 0.53 |
All three are meaningful; only the first is a survival floor. The correct
statement is subsistence can survive but cannot reach sufficiency without
automation — which is what the historical record shows. research/corridor.py
gained survival_inventory() so the floor is computed at the right standard, and
corridor band --standard exposes all three.
Consumer audit — which standard each caller should use¶
| Consumer | Should use | Status |
|---|---|---|
corridor.survival_floor_epsilon |
survival | Fixed — survival_inventory(), CLI default |
fiscal guarantee, BASKET_EOH_CONTENT |
sufficiency | Uses PERSONAL_EOH_BASE; correct once it means F_a×(1−a) |
contestability P (the exit-funding floor) |
sufficiency | Same — the floor that funds exit is a sufficiency guarantee |
membership min-hours thresholds |
sufficiency | Same |
population, capital per-capita loads |
operating | Correct as-is |
total_eoh generation default |
operating | Correct as-is |
The three sufficiency consumers are currently reading the collapsed value,
which is right in magnitude but wrong in provenance — they will be re-pointed at
F_a × (1−a(K)) when abatement lands rather than at the placeholder.
The knowledge split — no new constant¶
knowledge_eoh_breakdown() separates the domain into civilisational (the
corpus a civilisation renews whatever its capital) and apparatus (the cost of
knowing how to run the machines). The split derives from the existing functional
form and its existing rationale — complexity_per_unit is already documented as
automation-driven — giving apparatus_fraction = 1 − 1/cpu, which runs 0% at
ε=0 to 89.8% at ε=0.99. The apparatus component belongs in the collective's
overhead for the overbuild test; the civilisational component is a standing
obligation. Scale caveat: knowledge EOH is ~0.005% of total, so this split is
structurally right and numerically inconsequential until the domain bases are
commensurable.
The feasibility ceiling — PERSONAL_EOH_BASE is over-determined¶
Added 2026-08-06. hours_eoh/scenarios/feasibility.py; run it with
python3 utils/eoh_cli.py scenario run feasibility.
An EOH demand is a claim about hours that must be worked, and at ε = 0 no machine carries any of them. That gives a hard ceiling computable from constants the repo already ships:
supply L = c · a c = adult capacity h/yr, a = adult share
demand D(ε) = (1 − ε)·[w·B + R] w = 1.3016 (was 1.475), B = PERSONAL_EOH_BASE
feasible ⇔ D ≤ L ⇒ B ≤ (L/(1−ε) − R) / w
Read this passage as of its date. It is the finding that produced the 1,500 → 1,000 reprice, stated at the constants of the time: base 1,500 and w = 1.475. Both have since moved (the base on 2026-08-06, w on 2026-08-10), so the numbers below are historical. The argument is not, and it is why
scenarios/feasibility.pyexists.
The constant is not 1,500 per capita. It is 1,500 per working-age-equivalent, and the age weighting w = Σ(fraction × eoh_weight) = 1.475 made the per-capita claim 2,213 h/person·yr. Because the extra weight on infants (3.0×) and elderly (then 2.5×) is caregiver labour, all 2,213 hours still had to be supplied by adults — the weighting raises demand without raising supply. Any feasibility test run against the 1,500 figure understated the gap by 1.475×.
At today's constants the same identity gives 1,000 × 1.3016 = 1,301.6 h/person·yr, and the lower w loosens the ceiling, since it appears in the denominator of B ≤ (L−R)/w.
Self-consistency arm — no external data required. Using only H_REF = 2,000
and workforce_fraction = 0.5 (EohParams' default until 2026-10-01, now the
working-age share; the same 1e9-for-1M figure the corridor tests
pass as available_labor_eoh):
| supply | 1,000 h/person·yr |
| demand at ε = 0 | 2,288 h/person·yr |
| ratio | 2.29× |
implied ceiling on PERSONAL_EOH_BASE |
627 h/yr |
| overshoot | 2.39× |
| supply-side alternative | 4,576 h/yr per adult = 12.5 h/day, every day |
Subsistence sweep. Adult shares 0.55–0.60, adult capacities 1,200–2,600 h/yr (the top of that band exceeds the modern 2,080-hour full-time reference, so the result does not rest on a stingy labour budget): the ratio runs 1.47–3.47× and the implied ceiling 396–1,006 h/yr. No case in the sweep is feasible.
What this does and does not show. It does not falsify 1,500 in isolation — feasibility is a joint property. The finding is that the pair
PERSONAL_EOH_BASE= 1,500 andH_REF×workforce_fraction= 1,000
cannot both hold. Closing the gap on the supply side needs adults working
~10.5–12.5 h/day with no rest days, which no observed subsistence population
sustains, so the resolution has to come mostly from the demand side. On the
per-capita basis the compatible range is ≈ 1,000–1,300 h/person·yr, i.e.
PERSONAL_EOH_BASE ≈ 680–1,000 rather than 1,500.
Consequence: ε = 0 is not a feasible state of this model. The framework
documents ε = 0 as "subsistence"; its own arithmetic says subsistence requires
ε ≈ 0.58. research/corridor.survival_floor_epsilon has been reporting this all
along as ε_suff ≈ 0.53 (scoped to the personal domain alone) — the number was
visible, but it was read as a corridor bound rather than as a verdict on the
constant that produces it. Note also that the crossover is later than the naive
1 − L/D(0) = 0.563, because automation is capital and capital generates
infrastructure EOH: automation relieves demand and creates it at the same time.
Not fixed here. Changing PERSONAL_EOH_BASE moves ~95% of the ε denominator and
every downstream result with it; that is a calibration decision for the author.
The circularity trap, and the route around it¶
Added 2026-08-06 after the question was raised directly. This supersedes the
earlier note above that named ATUS as the resolving measurement — ATUS alone
cannot resolve PERSONAL_EOH_BASE, and using it that way is the trap.
What is clean: the ε = 0 endpoint. ε = machine_EOH / total_EOH, and at zero machine capital the numerator is zero, so ε = 0 whatever B is. Verified: the endpoint is B-free and an anchor society fixes it without circularity.
What is not clean: the interior. B is the scale factor of the entire ε axis. At one fixed capital inventory (all-standard tier):
| B | total EOH h/p·yr | ε at that same capital |
|---|---|---|
| 500 | 813 | 0.327 |
| 900 | 1,403 | 0.189 |
| 1,500 | 2,288 | 0.116 |
| 2,500 | 3,763 | 0.071 |
A 5× change in B moves ε by 4.6× at unchanged physical capital. Every ε-indexed result in the repo inherits that.
The trap, precisely. If B is calibrated from observed hours worked, then
demand is set equal to supply by construction — the demand/supply ratio is
1.000 identically, feasibility_check has no content, and ε_personal is forced
to 0. Observed hours are fulfilled EOH; B is total EOH. In a capital-rich
society ATUS measures the human residual (1 − ε)·D, not D — so an ATUS-derived B
would define ε ≡ 0 for the society you measured it in.
The route around it — the accounting identity.
D = M + H total obligation = machine-served + human-served
D = w·B + R the model's own decomposition
⇒ B = (M + H − R) / w and ε = M / (M + H) as a BY-PRODUCT
This is non-circular because M is B-free: it comes from a capital inventory
scored against CAPITAL_MACHINE_PROFILES elimination rates, a different
instrument entirely. Two measurements, one unknown. Implemented as
identify_base().
| capital tier | M h/p·yr | B @2.5 h/day | @2.8 | @3.2 |
|---|---|---|---|---|
| basic | 103 | 390 | 434 | 494 |
| standard | 266 | 500 | 544 | 604 |
| advanced | 741 | 822 | 867 | 926 |
B = 390–926 — inside the feasibility band 396–1,006, from a completely independent route. Two methods that share no assumption converge on ≈400–1,000 and both exclude 1,500.
The one residual assumption, and it inverts the intuition. D = M + H
assumes every hour of obligation is served. If some is unserved, true
D = M + H + deficit, so the identity returns a lower bound. Therefore:
- the ε ≈ 0 anchor fixes the endpoint cleanly but is the worst place to measure B — its deficit is largest and least observable, paid in infant mortality rather than recorded in a diary;
- a capital-rich society is the best place to measure B, because its deficit is smallest. The opposite of calibrating a subsistence constant on subsistence data.
What defending B = 1,500 requires you to assert. Not an arithmetic error — a
deficit. At standard-tier capital, D = M + H + deficit gives 62% of the
personal obligation permanently unserved (41% at advanced tier). That is a
substantive and possibly partly-true empirical claim about unmet care, deferred
health and social reproduction. It should be stated and defended, not carried
silently inside a constant. feasibility_check now returns deficit_share so
this third resolution is priced alongside the other two.
The interior from the productivity route — and the test the framework lacks¶
Yes, the interior is buildable: ε(K) = M(K) / (w·B + R(K)) with B fixed by the
identity. And it is overidentified, which is the valuable part — fixing B
turns the human-hours residual into a falsifiable prediction at every capital
stock (implied_human_hours()):
H(K) = w·B + R − M(K)
| B | basic | standard | advanced |
|---|---|---|---|
| 600 | 3.9 h/adult·day | 3.2 | 1.0 |
| 900 | 5.9 | 5.2 | 3.0 |
| 1,500 | 10.0 | 9.2 | 7.1 |
Cross-cultural time-allocation data measures exactly this. B = 1,500 predicts 7.1 h/adult·day of entropy-resistance labour in an advanced-capital society; no time-use survey reports a figure near it. B ≈ 600–900 predicts days that are in range. This is the first genuinely refutable claim the personal domain has had — the multiplier's rank ordering is falsifiable, and until now nothing in EOH generation was.
A second use, sharper. core.eoh_fulfillment.human_eoh_per_domain applies
(1 − ε) uniformly across all four domains. Run the identity per domain and any
disagreement in implied ε falsifies that uniformity — which is precisely the
ε-as-a-vector question (§12.1), so far argued on theory grounds and sign-off
gated. This converts it into a measurement.
What repricing actually looks like¶
Lowering B raises ε everywhere at unchanged physical capital, because it shrinks the denominator:
| B | total h/p·yr | ε at std capital | ×ε vs 1,500 | personal share | ε_feas | K needed for a target ε |
|---|---|---|---|---|---|---|
| 1,500 | 2,288 | 0.116 | 1.00 | 96.7% | 0.580 | 1.00× |
| 1,200 | 1,846 | 0.144 | 1.24 | 95.9% | 0.480 | 0.81× |
| 900 | 1,403 | 0.189 | 1.63 | 94.6% | 0.311 | 0.61× |
| 700 | 1,108 | 0.240 | 2.06 | 93.2% | 0.112 | 0.48× |
| 600 | 961 | 0.277 | 2.38 | 92.1% | 0.000 | 0.42× |
Consequences, in order of how much work they imply:
- Every ε-calibrated constant changes meaning, not just value. The
registration sigmoid inflections,
epoch_alpha_weights(ε),canonical_physical_state(ε), theCANONICAL_*trajectory,THERMAL_EPS_CURRENT, the contestability channel crossovers (labour→underwritten→self),formations*(ε), and every corridor bound were all positioned against the old axis. A collective previously described as "ε = 0.12" becomes "ε = 0.28" without a single machine being installed. - The feasibility defect resolves at B ≲ 600 (ε_feas → 0), and ε = 0 becomes a state the model can actually represent.
- Domain balance does NOT resolve. Personal share only falls 96.7% → 92.1%. These are two separate defects and fixing one leaves the other.
- Two mechanical hazards for whoever does it.
params.pyexposespersonal_eoh_base, butp.temporary(personal_eoh_base=…)does not reachtotal_eoh()— the function bindsPERSONAL_EOH_BASEas an argument default at import, so a sweep silently changes nothing. Andcore/population.py:462uses the module constant directly rather than the parameter. Repricing means editingdata.py, or first routing both paths through the parameter. The single most leveraged constant in the model is not actually sweepable today.
EOH Generation — Infrastructure Domain¶
| Parameter | Default | Units | Tag | What would settle it |
|---|---|---|---|---|
INFRA_MAINT_RATE |
0.025 | fraction of capital stock, as EOH-hours per year | bounded | band 0.02–0.04 of capital stock per year (OECD public-capital maintenance series) errs NEITHER. 0.025 sits in the lower half of the band. The larger problem is not the point but the PATH: this constant sits on the monetized route that scenarios/infrastructure_floor.py shows is doctrine-dominated 10.26×, so narrowing it inside the band buys very little. a physical condition census in crew-hours PLUS embodied hours per asset — infrastructure_statutory_floor supplies the first and the teh_per_unit census field is where the second would go. Until then the OECD band is the only constraint. FIELD: OECD/BEA capital consumption by asset class, or an asset census populated with both fields.THE SUPERSEDING INSTRUMENT CANNOT SET THIS VALUE, checked 2026-09-01 after this constant was ranked as a cheap win on its own resolves_by. The statutory floor IS built and IS doctrine-invariant (floor_spread 1.000), but it is currency-free by design and returns HOURS, while this constant is a ratio to a capital STOCK. Bridging them needs embodied hours per asset — the census schema carries teh_per_unit for exactly that and NOTHING SHIPS IT. So "supersedes in practice" is true of a CALLER, who can use the floor instead of this rate, and false as a derivation. Same shape as u_parcel before the parcel census: numerator yes, denominator no. A DUPLICATE LITERAL, REPORTED NOT BOUND. ASSET_TYPES["generic_infra"] ["maint_rate"] is also 0.025, a bare literal 1,087 lines away, and generic_infra is the catch-all class this aggregate is meant to describe. This repo has found five copies-of-a-value-whose-source-is-elsewhere and in every case they AGREED until one moved. Binding them is not done here because it would ASSERT that the aggregate rate and the catch-all class rate are one quantity, which is a theory claim and not a refactor. |
INFRA_AGE_FACTOR_MAX |
2.0 | dimensionless multiplier at end of design life | placeholder form: physics — maintenance burden really is convex in age. The DOUBLING is not. |
measured maintenance hours against age for a single asset class, which the NBIS condition data behind INFRA_TREATMENT_HOURS_* could supply. |
INFRA_STATUTORY_INTERVAL_MONTHS_DEFAULT |
24.0 | months between routine inspections | convention form: the statutory routine inspection interval, adopted from 23 CFR 650 (US National Bridge Inspection Standards). A stated regulatory basis rather than a claim about the world, which is what convention marks. |
the governing standard for the jurisdiction being modelled — the interval is whatever that jurisdiction's code says, and adopting a different code changes it legitimately. |
INFRA_TREATMENT_HOURS_GOOD |
8.0 | labour-hours per asset unit per year | placeholder form: task-normative — hours/unit/year = (12 / inspection_interval_months) × crew_hours_per_visit, currency-free by construction. This is the measured, auditable half of infrastructure EOH; discretionary maintenance ambition above it is a policy choice and enters the fiscal layer, never the floor. |
state DOT maintenance-activity manuals and inspection timesheets, which record the real per-condition crew-hours. This is the nearest-to-closed CHOSEN debt in the file: the instrument exists, is public, and the units match. the reason this stream exists — the monetized capital_stock_teh path is convention-dominated 10.26× while every physical knob on this path reads ×1.000 (scenarios/infrastructure_floor.doctrine_floor_invariance). The floor is ~5.9× better determined and its residual is timesheet-measurable. |
INFRA_TREATMENT_HOURS_FAIR |
20.0 | labour-hours per asset unit per year | placeholder form: task-normative — hours/unit/year = (12 / inspection_interval_months) × crew_hours_per_visit, currency-free by construction. This is the measured, auditable half of infrastructure EOH; discretionary maintenance ambition above it is a policy choice and enters the fiscal layer, never the floor. |
state DOT maintenance-activity manuals and inspection timesheets, which record the real per-condition crew-hours. This is the nearest-to-closed CHOSEN debt in the file: the instrument exists, is public, and the units match. the reason this stream exists — the monetized capital_stock_teh path is convention-dominated 10.26× while every physical knob on this path reads ×1.000 (scenarios/infrastructure_floor.doctrine_floor_invariance). The floor is ~5.9× better determined and its residual is timesheet-measurable. |
INFRA_TREATMENT_HOURS_POOR |
48.0 | labour-hours per asset unit per year | placeholder form: task-normative — hours/unit/year = (12 / inspection_interval_months) × crew_hours_per_visit, currency-free by construction. This is the measured, auditable half of infrastructure EOH; discretionary maintenance ambition above it is a policy choice and enters the fiscal layer, never the floor. |
state DOT maintenance-activity manuals and inspection timesheets, which record the real per-condition crew-hours. This is the nearest-to-closed CHOSEN debt in the file: the instrument exists, is public, and the units match. the reason this stream exists — the monetized capital_stock_teh path is convention-dominated 10.26× while every physical knob on this path reads ×1.000 (scenarios/infrastructure_floor.doctrine_floor_invariance). The floor is ~5.9× better determined and its residual is timesheet-measurable. |
INFRA_MAINT_RATE sits on the monetized path that
scenarios/infrastructure_floor.py shows is doctrine-dominated (10.26× spread);
the statutory floor below exists to route around it. CAPITAL_STOCK_DEFAULT is
listed under Fiscal architecture — at 2,000 TEH/person it
produces infrastructure EOH ≈ 75M h/yr at mid-life, ≈ 3% of total EOH.
Task-normative statutory floor (B+D design — currency-free)¶
The floor stream of infrastructure_eoh_breakdown(). These reprice the physical
condition census into hours without a money→hours conversion — the auditable
half. Motivated by the infrastructure-floor handoff: the monetized capital_stock_teh
path moves 10× with the accounting doctrine and ×1.000 with every physical knob;
the floor moves only with the physical census (scenarios/infrastructure_floor.py
proves floor_spread = 1.000). 4-tag scheme with epistemic pointers:
The four floor constants appear in the generated table above. The residual 1.69× determinacy gap is the good/fair/poor tiering, and it is measurable, not conventional.
EOH Generation — Ecological Domain¶
Scale warning.
ECOLOGICAL_BASE_RATEis documented as a relative anchor ("does not represent an absolute ecosystem-specific count") but is summed with absolute counts intotal_eoh()and then divided into ε. At defaults it contributes 0.61 h/person·yr against personal's 1,301.6 — 0.04% of total EOH. See Domain balance. Until it is put on an absolute footing, no result that depends on the ecological domain's share of total EOH should be quoted.
| Parameter | Default | Units | Tag | What would settle it |
|---|---|---|---|---|
ECOLOGICAL_BASE_RATE |
500000.0 | hours/year at pristine ecosystem health (relative anchor) | placeholder | NOT a stewardship census — that instrument is spent, and the pointer this field used to carry (land_stewardship.census_report) was written 2026-08-16, the day BEFORE the partition that invalidated it. What settles it now is an author decision on Phase 4f. If the standing term is RETAINED instead, the instrument would have to be a census that separates the reference-condition obligation from the disturbance response — which the shipped census cannot do, because it counts workers and does not decompose what they are responding to. THE DOMAIN-BALANCE DEFECT LIVES HERE. This is documented as a RELATIVE anchor — "does not represent an absolute ecosystem-specific count" — but it is SUMMED with absolute counts in total_eoh() and then divided into ε. At defaults it contributes 0.04% of total EOH (0.61 h/person·yr against personal's 1,301.6), so the ecological domain cannot move ε and the thermal obligation books at ~1.8 h/person·yr. Do not quote this domain's SHARE of total EOH until it is on an absolute footing. THE GAP IS NOW MEASURED, not just asserted (2026-08-15, scenarios/ecological_floor.py). Inverting the question — what stewardship intensity would a given EOH share require? — the anchor implies 0.37 labour-hours per hectare per year across ALL land, every biome and condition class including cropland. Reaching a 5% share of total EOH needs 48.9 h/ha·yr, a factor of 132x; a 1% share needs 9.4, a factor of 25x. So "low by 2-3 orders" is not merely plausible, it is what the arithmetic requires. This still does NOT settle the level — no stewardship-hours census exists in this repo, and choosing a value to produce a target share would be the fitted-residual error the personal floor refuses. It states what a census would have to find. Run eoh scenario run ecological_floor. THE LEVEL IS CLOSED, AND NOT BY A CENSUS (Phase 4f, 2026-08-28). The question "what should this be?" was posed as a MEASUREMENT question for months. It is not one. This constant produces standing — a RECURRING per-year term — and Phase 4d's adopted partition says everything recurring is GUF's. Checked rather than assumed: scenarios/guf_magnitude.recurring_target_by_class already charges the measured stewardship intensity of every class the census can price (forest 0.182, federal parks 0.161, urban 4.349 h/ha·yr) as part of GUF's recurring target. Raising this anchor toward the census would bill the SAME measured hours twice — once to the holder through GUF, once to the domain — which is the double-application failure the Ψ audit found, reached from the other side. And Phase 4c leaves no residue to keep: land held by no member is held by the FEDERATION and owes what any holder owes, with uncollected_hours structurally 0.0, so every hectare has a holder paying maintain-current. THE DERIVED VALUE IS THEREFORE 0.0, and the 500,000 here is a residue of the pre-partition model. This REVERSES the long-standing "low by 2-3 orders" framing: the anchor was never too low, it was the wrong kind of term. ADOPTED 2026-08-28 (author sign-off): ecological_standing_response defaults to "guf", so this constant no longer enters the ecological domain at all — it scales the DEGRADATION RESPONSE and nothing else, and at reference condition the domain is exactly zero. The pre-4f behaviour stays reachable under standing_response="domain" and is what every figure before this date was computed at. Adoption moved total EOH by −0.00007% and re-anchored KNOWLEDGE_EOH_BASE by +0.00047%; nothing else in the suite moved, which is itself the measure of how little the domain was carrying. The constant is RETAINED rather than set to zero because it still scales the degradation response, which health_response governs and which is a SEPARATE, unadopted decision (Phase 4e). |
US_MAINLAND_HECTARES |
765495267.0 | hectares | measured (Tier B) form: USDA ERS Major Land Uses, "48 States" total land, 2022 vintage (released 2026-08-14): 1,891,580 thousand acres x 0.40468564224 ha/acre. |
nothing — this is a published measurement. It moves only when ERS revises the series (5-year cycle). THE REFERENCE FRAME FOR THE ECOLOGICAL DOMAIN. Stewardship demand is a property of AREA, so the domain needs an extensive quantity to be keyed to, and a test frame needs one that is measured rather than assumed. The contiguous 48 is chosen over the 915,052,512 ha US total because Alaska's 150 Mha is overwhelmingly unmanaged and would dilute every intensity by 16% for land no stewardship workforce reaches. Paired with US_MAINLAND_POPULATION (the people on this land), it gives 2.254 ha/person against the shipped global LAND_HECTARES_PER_CAPITA of 1.65 — the US carries 36.6% MORE land per person than the planetary average, which is the direction that makes per-capita stewardship burden harder, not easier. |
ECOLOGICAL_INTENSITY_BASE |
0.000653171902629 | labour-hours per hectare per year at pristine health | convention form: ECOLOGICAL_BASE_RATE / US_MAINLAND_HECTARES. Bound by TEST rather than expression because ECOLOGICAL_BASE_RATE is defined above and the pairing is what must not drift; same treatment as GUF_ECO_KAPPA_CARBON. |
SUPERSEDED BY PHASE 4f — see ECOLOGICAL_BASE_RATE above. This field used to name scenarios/land_stewardship.census_report(), and the census does read ~625x this value at the declared scope. That comparison is still TRUE and no longer RELEVANT: those hours are GUF's under the adopted partition, so matching them here would double-count. The derived value is 0.0 and what remains is a sign-off, not a measurement.retired WAS NOT AVAILABLE, and the reason is structural rather than a preference. This is a parameter default in SEVEN places across core/ (eoh_to_teh_pipeline, ecological_scale, ecological_eoh, ecological_eoh_breakdown, total_eoh, ecological_allocation, fiscal_snapshot), and the provenance gate refuses retired for a constant core/ reads as a default — a retired constant core/ reads is a second parameter running in parallel. baseline_in: is unavailable for the same reason: its first condition is "never a parameter default anywhere", described in this scheme's own words as the condition the exemption cannot waive. Checked 2026-09-01: SKILL_DECAY_RATE, which that rule was written from, has ZERO parameter defaults today, so this is currently the only constant in the state and a new tag for one instance was declined. THE VALUE IS UNCHANGED AND STILL IDENTITY-BOUND. US_MAINLAND_HECTARES x this reproduces ECOLOGICAL_BASE_RATE exactly, and the test that pins it is untouched. It is inert on shipped paths ONLY because Phase 4f emptied the domain — supply an ecological stock and the whole chain is live again, which is a return to use and not a regression. THIS IS THE DOMAIN-BALANCE DEFECT, QUANTIFIED. Before this constant existed, ecological_eoh took no area and no population — it returned base_rate/health and nothing scaled it, making ecological the ONLY domain with no extensive quantity behind it (personal scales with population, infrastructure with capital, knowledge with the corpus). Spread over the land it is nominally the obligation for, the shipped anchor is 6.5317e-4 h/ha/yr — 2.35 SECONDS per hectare per year. Introducing it changes NO number: area x intensity reproduces ECOLOGICAL_BASE_RATE exactly at the reference frame, so this commit fixes the FORM and leaves the LEVEL for the census to move. Note this disagrees 464x with scenarios/ecological_floor .implied_stewardship_intensity, which reports 0.37 h/ha/yr — the SAME anchor over a different area (1e6 people x 1.65 ha). Both are correct and the disagreement IS the point: an anchor keyed to nothing implies whatever per-hectare figure the area you supply happens to produce. |
AMENITY_STEWARDSHIP_WEIGHT |
0.0468 | dimensionless fraction of amenity labour | bounded (Tier C) | band [0.0468, 0.0699] — the occupational composition of the amenity class. Tree Trimmers and Pruners (37-3013, 62.1k) maintain woody canopy, which delivers three of the seven GUF service categories directly (air filtration PM10, local climate regulation, flood attenuation by interception). Adding Vegetation Pesticide Handlers (37-3012, 30.7k) gives the upper bound. The 1,235.0k in Landscaping and Groundskeeping (37-3011) maintain predominantly mown turf, which delivers none of the seven. 62.1/1327.8 = 0.0468; (62.1+30.7)/1327.8 = 0.0699. errs LOW. The lower bound is adopted, so the ecological obligation is understated. That is the conservative direction for the open question — a floor that errs low cannot manufacture the "anchor is orders too low" finding it is being used to test — but it is the UNSAFE direction for provisioning, since under-booking stewardship under-provisions it. Flagged rather than split, because splitting would put a fitted number where a composition-derived one now sits. a task decomposition within SOC 37-3011 — what fraction of groundskeeping hours go to woody vegetation versus turf. Municipal urban- forestry program staffing against total grounds-maintenance staffing is the nearest public instrument; i-Tree Eco's urban-forestry surveys are the other. AUTHOR DECISION 2026-08-16 (the amenity-scope sign-off). Urban groundskeeping counts as ecological EOH to the extent it maintains a structure delivering one of the seven GUF services — canopy in, turf out. The two corners are 0.0 and 1.0 and differ 50x in the census, so a weight had to be named. Note the anchor is crossed at w* = 0.0228, BELOW this band: every admissible weight puts the census above the anchor, so the choice of w sets the magnitude and not the sign. |
AGENCY_STEWARDSHIP_ROLE_MIX |
0.2263 | dimensionless fraction of agency headcount | bounded (Tier B) | band [0.2263, 0.4073] — NPS + FWS combined, from record-level OPM Federal Workforce Data (employment 2025-09 v3, 27,104 staff, 337 occupational series). LOWER bound counts only unambiguous resource-management series (0401 general natural resources, 0404 biological science technician, 0454 rangeland, 0460/0462 forestry, 0470 soil science, 0482 fish biology, 0485 refuge management, 0486 wildlife biology, 1315 hydrology and neighbours). UPPER adds the two genuinely split series: 0456 wildland fire management (fuels treatment and prescribed burning against emergency response) and 0025 park ranger (resource protection against interpretation). errs LOW. The lower bound is adopted, matching AMENITY_STEWARDSHIP_WEIGHT's treatment of the same shape of ambiguity, so agency stewardship is understated. 0025 alone is 3,991 NPS staff who do some of both. a task decomposition inside series 0025 and 0456 — the share of park-ranger and wildland-fire hours spent on resource condition rather than visitors and response. NPS budget justifications report FTE by activity (Resource Stewardship vs Visitor Services vs Facility Operations) and are the direct instrument; they would replace this band with a measured split. THE TWO AGENCIES DISAGREE BY 5.3x AND THAT IS THE INTERESTING PART. NPS reads 10.12% (its largest series are park ranger 20.7% and maintenance mechanic 13.9%); FWS reads 53.64% (its largest is general natural resources at 27.8%). NPS is a visitor-services organisation standing on land; FWS refuges are a land-management organisation. A single federal "agency stewardship" rate would have concealed that, which is why the census splits them and this constant is only the combined summary. IT ALSO OVERTURNED A DIRECTIONAL CLAIM. Before the role mix was measured, the RAW agency intensity (0.709 h/ha/yr combined, 1.090 for NPS) suggested agency land was worked ~6x harder than forest and would RAISE the census. Role-mix-corrected it is 0.16-0.29 h/ha/yr, comparable to forest's 0.182 and BELOW the declared census mean of 0.585 — so pricing it LOWERS the mean and raises coverage. The raw figure was wrong by the size of the role mix, which is exactly why the class was not priced on it. |
US_REFERENCE_POPULATION |
340003797.0 | persons | measured (Tier A) form: Census Bureau resident population, United States (50 states + DC), July 1, 2024 (Vintage 2025): reference/data/census_adults_2000_2025.csv's 2024 row, bound by test (TestThePopulationsAreTheCensus). 2024 because the frozen O*NET/BLS registry's employment is 2024-vintage (reference epoch 2026-07-29) and BEA's stock is yearend 2024: the NATIONAL population those are drawn against. The US frame's people are US_MAINLAND_POPULATION. |
nothing — a published estimate. It moves with the registry's vintage: a registry refresh brings a new year with it. MIGRATED FROM TWO PLACES AT ONCE (2026-08-16). The same value lived as REFERENCE_POPULATION_US in scenarios/knowledge_base.py and as US_POPULATION in reference/land_stewardship.py — one value, two names, two files, neither under the gate; both names bind here. CLOSED 2026-10-15 (author: "close the national constant at the 2024 census and re-derive"): 335,000,000 (round) -> 340,003,797 (+1.49%). It sits inside the KNOWLEDGE_EOH_BASE fixed point twice — the registry's employment per head and the ATUS paid-labour anchor — so that constant was re-derived in the same change. ATUS is 2025 data read against this 2024 total: a 0.52% vintage gap, stated, not split into a second constant. |
US_MAINLAND_POPULATION |
339614767.0 | persons | measured (Tier A) form: Census Bureau resident population of the 48 contiguous states and DC, July 1, 2025 (SCPRC-EST2025): the sum of reference/states.load_states()' in_48_states rows, bound by test (TestTheMainlandPopulationIsTheCensus). |
nothing — a published estimate; it moves with each vintage. THE PEOPLE ON US_MAINLAND_HECTARES' LAND (author, 2026-10-15). The US frame had paired the national population with contiguous-48 land, parcels and energy (record/thermal.md#us-energy-eia, found not fixed). Alaska and Hawaii hold 2,170,090 people (0.63% of the national figure). |
PRACTICE_EQUIPMENT_WIDTHS_FT |
feet | instance | you supply the working width of the equipment YOUR collective actually operates. Field capacity is linear in width, so these values scale the reported stewardship hours one-for-one: halving a width doubles the hours. shipped default mid-range North American row-crop equipment, so the shipped practice figures have a stated scale rather than none. NOT a measurement and not a published standard — the ASAE table supplies efficiency and speed because those are properties of the operation, and deliberately omits width because it is a machine-size CHOICE. this is the input that makes hours-per-acre a DELIVERY PRODUCTIVITY rather than a physical constant, the same role the LSMS unassisted stratum plays in reference/personal_basket.py. It lived in reference/ until 2026-08-16, where the shadow-constant ratchet could not see it — utils.provenance.OPERATIVE_LAYERS omits that layer — which is why it moved rather than the layer boundary moving. |
|
LAND_HECTARES_PER_CAPITA |
1.65 | hectares of land per person | instance | you supply the land area your collective is responsible for stewarding, divided by its population. Intake path: the GUF parcel inventory (land/collective.py) already carries area per parcel, so a collective that has run its GUF assessment has this figure without new survey work. shipped default global land area excluding Antarctica (~1.34e10 ha) over a world population of ~8.1e9. A planetary average is the WRONG number for any actual collective — stewardship land per person varies by more than an order of magnitude between a city and a rangeland — and it is here only so scenarios/ecological_floor.py can state the inversion at a stated scale. |
WORLD_POPULATION |
8100000000.0 | persons | measured (Tier A) form: world population, UN World Population Prospects 2024 revision, mid-2025 estimate rounded to two significant figures at the scale it is used. |
nothing — a published measurement. It moves when the UN revises (2-year cycle). this number already governed a shipped constant while existing only as PROSE. LAND_HECTARES_PER_CAPITA = 1.65 is documented as "~1.34e10 ha over a world population of ~8.1e9", so the divisor was carried in a comment where nothing could read it, check it or age it. Naming it makes the global frame in JURISDICTION_FRAMES derivable instead of restated — the same move that bound US_POPULATION and REFERENCE_POPULATION_US to one source. |
REFERENCE_FRAME_POPULATION |
1000000.0 | persons | convention form: the population at which this package's extensive TEH constants are stated. CAPITAL_STOCK_DEFAULT and TRUST_BASE_TEH both say "TEH (at the 1M reference population)" in their own tag blocks; this names the population those sentences refer to. |
— A THIRD QUANTITY THAT MUST TRAVEL WITH THE FRAME, and the one that hides. Land and population are the visible pairing, but capital is stated per-frame too, so running the US population against an unscaled CAPITAL_STOCK_DEFAULT models 335M people holding the capital stock of 1M — 5.97 TEH/capita against 2,000. It was found by a frame-invariance test failing at 5.7% while the other two domains agreed exactly, not by reading the constant. What the frame holds fixed is capital INTENSITY, not the absolute stock. |
FRAME_CONSISTENCY_TOLERANCE |
0.1 | fraction | normative form: the band around a declared frame's hectares-per-capita within which a supplied (population, area) pairing is called consistent with it. |
decided by a reporting threshold, chosen. No dataset settles what counts as "the same frame"; the same status as the dashboard health thresholds, and like them it governs a label rather than a quantity. no measurement settles this deliberately WIDE. The question it answers is "is this the same order of land per person", not "do these agree to the hectare" — the mismatch it exists to catch is 335x. A tight tolerance would reclassify ordinary collectives as inconsistent and make the check noise. |
JURISDICTION_FRAMES |
dict of frame name -> | convention form: DECLARED PAIRINGS of a population with the land area it is responsible for. Every value is BOUND to the constant that already carries it — US_MAINLAND_POPULATION, US_MAINLAND_HECTARES, LAND_HECTARES_PER_CAPITA — rather than restated. A frame that restated 335,000,000 would be the sixth copy-of-a-value-whose-source-is-elsewhere, after GUF_PSI_NORM, RECAL_FOUNDING_LABOR_HOURS, DEFAULT_SEGMENTS, the mean_multiplier literal and US_POPULATION itself. |
— THE FRAME MISMATCH THIS EXISTS TO MAKE VISIBLE. ECOLOGICAL_BASE_RATE is the obligation for the WHOLE contiguous US (765,495,267 ha), while the shipped default population across the package is 1,000,000. Nothing connects them, so the ecological domain is divided by a millionth of the population that lives on the land it is keyed to, and the reported ecological SHARE is frame-dependent by a factor of 335: 0.0448% at the shipped pairing against 0.000146% at the honest US one. The shipped default is the FLATTERING reading. reference_1m is the consistent million-person frame — the US land-per-person ratio, not the whole US. REPORTING ONLY at introduction: no generation function consumes this and no shipped number moves. Making the default frame consistent is a calibration change and needs sign-off, because it moves the ecological anchor 335x. |
|
ECOLOGICAL_THRESHOLD |
0.4 | ecosystem health index ∈ [0,1] | placeholder form: physics — ecological regime shifts are established, so a threshold below which burden escalates nonlinearly is structural. Where 0.40 falls on THIS index is a mapping, not a measurement. |
an ecological time series relating a defined health index to observed regime shift. GUF_EOH_ACCUMULATION_THRESHOLD makes the same class of claim on the deferral rate rather than the state; both resolve from one series. |
ECOSYSTEM_HEALTH_DEFAULT |
0.7 | index [0, 1] — 0 collapsed, 1 pristine | instance | you supply YOUR ecosystem's measured condition, on the same index ECOLOGICAL_THRESHOLD is stated on. Nothing about your land's condition is derivable from this framework. shipped default 0.70 — a moderately degraded reference state. NAMED 2026-10-02: it was retyped as a bare literal at 24 sites (every generation, fulfilment, fiscal, dashboard, simulation and shock entry point, EohParams and two CLI flags), with no stated source. It equals the canonical arc's health at ε=1 (CANONICAL_ECOSYSTEM_HEALTH_BASE + CANONICAL_ECOSYSTEM_HEALTH_DRIFT), an equality NOT asserted as its derivation. Under the adopted Phase 4e/4f partition the ecological domain is health-invariant, so on the documented entry point this moves only the relocated-to-GUF report. |
CAPITAL_AGE_RATIO_DEFAULT |
0.591 | mean asset age / design life, value-weighted — 0 new, 1 at end of life | instance | you supply YOUR stock's average age over its service life, value-weighted — for the US, capital_retrodiction.stock_age_ratio reads it off BEA (Tables 2.9 / 7.7 ages over BEA's own service lives, line by line), and --frame us takes it from there, labelled measured.shipped default 0.591 — the US stock, MEASURED (2026-10-04): stock_age_ratio, 'government' scope, current cost — BEA 2024 average age over BEA service life, band 0.571–0.630, 89.5% of the stock covered. One economy standing in for one not stated; a test holds this value to the function. It errs LOW: BEA weights by depreciated stock, so old assets count for less.REPLACED a bare 0.50 ("halfway through design life") at 18 sites from the initial commit, with no source, and CANONICAL_CAPITAL_AGE_BASE (0.30) as the default at 11 more and the frame resolver — the canonical arc's axis at ε=0, not a reading of any stock. The arc itself still reads the canonical pair; only the DEFAULTS moved. Infrastructure EOH at ε 0.40 90.0M → 95.5M h/yr from the 0.50. |
ECOLOGICAL_SPIKE_INTENSITY |
5.0 | dimensionless multiplier on the base ecological rate | placeholder form: the magnitude of the sub-threshold spike — spike = rate × INTENSITY × ((threshold − health) / threshold)² so it is the multiple of the baseline obligation incurred at TOTAL collapse (health = 0), and the quadratic makes the approach gradual. ECOLOGICAL_THRESHOLD sets WHERE the spike begins; this sets HOW BIG it gets. |
the same ecological time series ECOLOGICAL_THRESHOLD names, read for a different FIELD — not where the regime shift begins, but the ratio of restoration labour demanded after collapse to that demanded at the threshold. A threshold study that reports only the breakpoint settles the companion constant and NOT this one. CALIBRATED TO A TARGET on the 2026-08-09 provenance pass's own reading — it was picked to produce the escalation the arc was expected to show, which is the DEFAULT_SEGMENTS / GUF_USE_* pattern. It also spent that whole period in core/eoh_generation.py rather than here, so the gate that names calibrated-to-target constants could not see it. Migrated 2026-08-28; a +7% move failed no test until the pins landed with it. |
MONITORING_SPIKE_SOFTENING_MAX |
0.2 | fraction of the spike removable by monitoring | placeholder form: automated monitoring softens the sub-threshold spike, capped at this fraction at ε=1. The CAP is the claim: monitoring makes an obligation VISIBLE sooner, it does not discharge it, so most of the spike survives however good the sensors get. |
paired remote-sensing and field-survey records over one degradation event. FIELD: restoration labour actually required where early detection occurred, against comparable sites without it. migrated from core/eoh_dynamics.py 2026-08-28 as a shadow constant. Runs in the OPPOSITE direction to monitoring_capability in the ecological domain, where better monitoring RAISES measured obligation by revealing deferred work. Both can be true — one reveals, one mitigates — but they have never been reconciled in one place and a measured pass should do both at once. |
PRE_THRESHOLD_COMPOUND_RATE |
0.1 | fraction of deferred EOH per period | placeholder form: the ceiling the pre-threshold compounding curve approaches as t → T⁻, i.e. deferred maintenance accrues at most this fraction per period BEFORE the irreversibility threshold. Past it, the escalation is governed elsewhere. |
an infrastructure deferred-maintenance panel — FHWA NBI again, or a utility asset register. FIELD: the growth in estimated restoration cost for assets left unmaintained, per year, before functional failure. migrated from core/eoh_dynamics.py 2026-08-28 as a shadow constant. THIS IS EOH COMPOUNDING, WHICH IS PHYSICS AND NOT INTEREST — Condition III forbids balances growing passively, and this does not create TEH. Deferring work makes more work; that is entropy, not a rate of return. |
REGEN_AUTOMATION_LEVERAGE_MAX |
0.3 | dimensionless leverage per ε unit | placeholder form: regenerative labour is amplified by automation — leverage = 1 + MAX × ε so at ε=1 a regenerative hour does this much more than at subsistence. |
restoration-project outcomes with and without machine assistance. FIELD: hectares restored per labour-hour by equipment level. NOT reachable from the shipped ASAE table (audit 2026-10-16): its 17 rows are all machine implements, so it has no unassisted leg to compare against and no automation index to read a slope on. migrated from core/eoh_dynamics.py 2026-08-28 as a shadow constant. It makes the same SHAPE of claim as MATURATION_AUTO_LEVERAGE (0.30, and the identical value) — automation amplifies a human activity's return — but for a different activity, and neither is bound to the other. Whether they are one quantity or two is unresolved; they are at least not independent evidence for each other. |
That ecosystems exhibit nonlinear regime shifts is established (Scheffer et al. 2009); that the shift sits at 0.40 of this health index is a framework mapping.
Not in data.py, so outside the coverage gate. _ECOLOGICAL_SPIKE_INTENSITY
(5.0, dimensionless spike multiplier) lives in hours_eoh/core/eoh_generation.py:47,
not in data.py — a standing violation of the no-anonymous-constants invariant that
says every numeric literal in domain logic is a named constant in data.py. It is
CHOSEN: reverse-engineered from a target ("calibrated to produce an EOH doubling
within ≈10% below threshold"), which makes it a knob by construction. Post-collapse
restoration labour records would measure the true post-threshold slope. Moving it
into data.py would bring it under the gate; until then the retag log covers a
constant the generated tables cannot see.
EOH Generation — Knowledge Domain¶
| Parameter | Default | Units | Tag | What would settle it |
|---|---|---|---|---|
KNOWLEDGE_ANCHOR_YEAR |
2025 | year | convention form: the ATUS survey year whose US PAID labour per capita anchors the knowledge fixed point ( personal_floor.paid_labour_anchor). |
— |
KNOWLEDGE_EOH_BASE |
292426958.878 | embodied knowledge-hours (STOCK) at the ε=0 reference, at KNOWLEDGE_REFERENCE_POPULATION | derived-then-FROZEN form: recovered from the ONET 30.3 / BLS spine already shipped in reference/data/ by inverting the documented log-minmax normalization of f_training: 11,001.3 h/worker embodied training stock over 751 occupations → 5,501.0 h/person at E/P = 0.500 → de-anchored to ε=0 by ÷ kbs(ε)·cpu(ε*). Anchor and base are solved TOGETHER at the fixed point ε* = 0.3828 (scenarios/knowledge_base.epsilon_ref_fixed_point, 6 damped iterations), because a one-shot anchor cannot be self-consistent when the constant it sets sits inside the quantity that checks it. FROZEN against data-vintage churn; it FOLLOWS internal drift, because a change to any constant inside total_eoh changes the derivation's own inputs. Re-anchored 2026-08-09 (Finding E, ε* 0.4522), 2026-08-10 (the AGE_GROUPS elderly revalue, ε* 0.3828), 2026-08-16 (SKILL_WORKING_LIFE_YEARS measured at 37.5, ε* 0.38689) and 2026-08-17 (the Phase-4b frame resolution, ε* 0.386619). THE THIRD RE-ANCHOR IS THE CHEAPEST AND THE MOST REASSURING: a 6.7% rise in the renewal rate moved this constant by −2.0%, because the fixed point absorbs most of it. The coupling is real and it is damped, which is the property a one-shot anchor could not demonstrate. THE FOURTH IS SMALLER STILL — +0.13% — and it says something about the model rather than about this constant: the ecological domain was corrected DOWNWARD by 464× and the knowledge base barely moved, because ecological is so small a share of total_eoh that even a 464× error in it is nearly invisible to everything downstream. That is the domain-balance defect restated as a sensitivity, and it converged in ONE iteration. THE FIFTH IS THE SMALLEST OF ALL — +0.00047%, 2026-08-28, when Phase 4f relocated the whole STANDING ecological obligation to GUF. Removing an entire domain term moved this constant in its seventh significant figure, and it converged in one iteration again. Read the two together: the fourth re-anchor said a 464× error in the ecological domain was nearly invisible downstream; the fifth says deleting the domain's recurring term outright is nearly invisible too. Both are the same sensitivity finding, and after 4f it is no longer a defect — it is the partition, which puts that obligation in GUF where it scales with land held rather than with the ledger. |
an ONET/BLS vintage refresh moves it mechanically; the ANCHOR resolves by whatever settles Finding B. The capital-inventory route is unusable (Finding A). THE ANCHORING ASSUMPTION IS THE UNCERTAINTY, NOT THE MEASUREMENT. Across ε_ref ∈ [0.2, 0.6] the constant moves 7.13×, against only 1.20× from the per-capita route. What the fixed point does NOT fix: the anchor is still US PAID labour ( paid_labour_anchor()), so it removes the self-inconsistency, not the US-specificity or the paid-labour convention — and the full-labour reading has no solution at all (supply exceeds the whole obligation; Finding B). tests/test_knowledge_base.py asserts the frozen value still matches the live derivation, so a registry refresh fails loudly rather than drifting. RE-ANCHORED AN EIGHTH AND NINTH TIME ON 2026-09-03, both by the floors table. Eighth: 392,689,985.65 -> 361,259,674.30 (-8.00%), epsilon 0.446277 -> 0.464313, when NUTRITION_AUTOMATION_FLOOR was adopted. Ninth: 361,259,674.30 -> 298,675,342.97 (-17.32%), epsilon* -> 0.506816, when CARE_AUTOMATION_FLOOR was raised 0.15 -> 0.2808. The ninth is the LARGEST move this constant has ever made — larger than Phase 2's -16.73% — because care is 62.1% of the personal domain and personal is 91-97% of the total. Both raise the human share of personal EOH and therefore the labour residual the anchor is solved against. This constant's own test says to expect exactly that and NOT to work around it. RE-ANCHORED A TENTH TIME, -0.30% (2026-09-04), by retiring the elderly ε-drift. Removing it RAISES personal EOH per capita at ε>0 — the drift moved population from a heavier weight (child 1.82) to a lighter one (elderly 1.48), so its stated direction was never its arithmetic — which raises total EOH and lowers the labour residual this anchor is solved against. The smallest of the ten moves, and mechanical. RE-ANCHORED AN ELEVENTH TIME, -5.90% (2026-10-15), when US_REFERENCE_POPULATION closed at the 2024 Census (335M -> 340,003,797). The population enters the fixed point TWICE, both the same direction. Through registry employment per head alone (anchor held at 937.3) the base moves -1.09%; the ATUS paid-labour anchor, now read live from personal_floor.paid_labour_anchor() (937.3 -> 923.47 h/person yr, -1.47%) rather than typed in five places, carries the rest, amplified by the fixed point. epsilon* 0.507504 -> 0.518082, 297,779,308.10 -> 280,218,381.73. RE-ANCHORED A TWELFTH TIME, +4.18% (2026-10-15, the same day), when ATUS hours stopped converting to per head over a FIXED national total and took the survey year's own Census 15+ share (atus_time_use.hours_per_capita, as the labour route already did): the anchor 923.47 -> 934.85 h/person yr, epsilon* 0.518082 -> 0.508651, 280,218,381.73 -> 291,930,848.76. RE-ANCHORED A THIRTEENTH TIME, +0.170% (2026-10-18), when the nutrition and care automation floors moved 0.2808 -> 0.2799 to follow their live source (author: "follow from the live computes"; the shipped 0.2808 had drifted 0.3% above anchored_processing_estimate()): epsilon* 0.508651 -> 0.508262, 291,930,848.76 -> 292,426,958.88. |
KNOWLEDGE_EPS_EXPONENT |
2.0 | dimensionless exponent | placeholder form: physics — knowledge EOH grows superlinearly with ε, because complexity compounds. The exponent is asserted. |
measured knowledge-maintenance hours against an automation index at three or more points, which is what distinguishes an exponent from a slope. |
KNOWLEDGE_REFERENCE_POPULATION |
1000000.0 | persons | convention form: a stated denominator, not a claim about the world — the population KNOWLEDGE_EOH_BASE is quoted at. It exists because knowledge EOH was population-INVARIANT: the same absolute number came back at 1M and at 300M, so the domain's share of total EOH fell as 1/population while every other domain scaled. 1e6 is the repo-wide default population, so this reproduces prior output exactly at the default. |
n/a — a convention is settled by declaring it, which this does. |
SKILL_DECAY_RATE |
0.1 | fraction of the knowledge stock renewed per year | baseline form: DEPRECATED as of Block K-IV — retained, not deleted, per the additive-not-destructive rule. Nothing defaults to it; the default renewal rate is SKILL_TRANSMISSION_RATE. Kept because it is the value every pre-K-IV result in this repo was produced at, so reproducing an old figure means passing it explicitly rather than guessing what it was. |
RETIRED — superseded by SKILL_TRANSMISSION_RATE + SKILL_CPD_RATE compares against SKILL_TRANSMISSION_RATE — the adopted K-IV doctrine (cohort transmission alone, the only one of the three containing no CHOSEN component). Every pre-K-IV figure in this repo was produced at 0.10, so reproducing one means passing this explicitly. expected SKILL_TRANSMISSION_RATE is STRICTLY BELOW this value — the adopted doctrine renews the stock more slowly than the refuted placeholder did, and the direction is the point: a knowledge base derived from the slower rate is LARGER, which is why K-III's mixed derivation understated it. Evaluated by tests/test_knowledge_base.py::TestKIVAdoption::test_default_renewal_rate_is_the_lower_credible_doctrine kept runnable; no measurement is owed on it IT WAS NEVER A RENEWAL RATE. At 0.10 against the measured 11,001 h/worker stock it implies 1,100 h/worker·yr — 55% of the H_REF work-year spent forever re-acquiring knowledge already held. No time-use or training series reports anything close. It was also CONFLATING two rates that Block K-III separates: transmission (cohort turnover) and CPD (staying current while working). |
SKILL_WORKING_LIFE_YEARS |
37.5 | years, entry to retirement | measured (Tier B) form: Eurostat lfsi_dwl_a, "duration of working life" — the average number of years a person aged 15 is expected to remain in the labour force (employed or unemployed), computed from life expectancy and age-specific participation rates. That IS the cohort-exit construction this constant needs, published annually. EU 2025: 37.5 years overall, 39.5 men, 35.4 women. The EU aggregate is adopted rather than either sex-specific figure. |
a US duration-of-working-life series on the Eurostat construction — age-specific participation rates against a current life table. CPS and NCHS both publish the inputs; nobody publishes the product. TIER B, NOT A, FOR A NAMED REASON: the series is EU-27, while the knowledge domain's ε_ref anchor is US paid labour ( paid_labour_anchor()). No current US equivalent exists to reconcile it against — BLS ceased publishing worklife tables, and the last (Smith 1986) rests on 1979–80 labour-force behaviour, which is older than the gap it would close. The jurisdiction mismatch is therefore unavoidable rather than a shortcut, and it is the whole of the Tier B reservation. Direction is not withheld: EU participation among older workers runs below the US, so 37.5 is more likely an UNDERSTATEMENT of a US working life, which makes transmission an OVERSTATEMENT — the conservative side, since it raises the renewal obligation rather than flattering it. |
SKILL_TRANSMISSION_RATE |
0.0266666666667 | fraction of the knowledge stock renewed per year | derived form: 1 / SKILL_WORKING_LIFE_YEARS = 0.02667. Transmission is the stock being re-created as cohorts retire — knowledge dies with people, which is the entropy this domain measures (framing accepted by the author 2026-08-08). Adopted as the default renewal rate in Block K-IV because it is the LOWER of the two credible doctrines and the only one containing no CHOSEN component. |
n/a — it inherits SKILL_WORKING_LIFE_YEARS's standing, which is now a measurement rather than a choice. THE FIRST ANCHORED DERIVATION IN THE FILE. Until 2026-08-16 this was derived from a placeholder, which the chain audit found by tracing the graph rather than reading one level — and it mattered more than the tag suggested, because the working life has ZERO direct consumers in core/land/scenarios and reached 14 call sites only through this constant. Every blast-radius scan that looks at code read it as inert. Now that the parent is measured, band_from can be claimed and the transitive gate (utils/provenance.unanchored_ancestors) verifies it. |
SKILL_CPD_RATE |
0.0027 | fraction of stock renewed per year by continuing practice | bounded form: the recurring hours a WORKING practitioner spends staying current — the term O*NET structurally cannot supply, because it measures the hours to REACH competency, never the hours to HOLD it. ~30 h/worker·yr economy-wide against an 11,001 h stock gives 0.0027, from the licensure scale (US state boards mandate 20–50 h per two-year cycle for licensed occupations, ~a quarter of employment) and Eurostat CVTS (~25 h per participating employee·yr at ~40% participation). |
band ≈10–30 h/worker·yr economy-wide — US state boards mandate 20–50 h per two-year cycle for licensed occupations (~a quarter of employment), and Eurostat CVTS reports ~25 h per participating employee·yr at ~40% participation. Against the measured 11,001 h/worker stock that is ≈0.0009–0.0027. errs LOW. At the top of that band, and then EXCLUDED from the shipped default anyway, so the adopted renewal rate understates the obligation by ~10.8% deliberately — the same posture the thermal layer takes when it withholds a budget whose sign is undetermined: prefer a defensible understatement to an unbacked completion. Eurostat CVTS (paid training hours per employee, all sectors), the single public series that measures this term directly. THE LEAST-GROUNDED NUMBER IN BLOCK K-III, and EXCLUDED FROM THE DEFAULT — not denied. skill_renewal_rate() still returns the sum and a caller who wants the fuller obligation passes it. The adopted default therefore UNDERSTATES renewal by ~10.8%, deliberately, so no CHOSEN number rides in the shipped arc — the same posture the thermal layer takes when it withholds a budget whose sign is undetermined. |
PHYSICAL_CAPACITY_CEILING_H_YR |
8766.0 | hours per person per year | physics form: SECONDS_PER_YEAR / 3600 — the hours that ELAPSE in a year, and so the bound no labour supply can exceed. Bound by TEST rather than expression because SECONDS_PER_YEAR is declared below this point (the GUF_ECO_KAPPA_CARBON precedent). This is not a claim about how long anyone works: it is the statement that a person cannot supply more labour than time passes, which no policy, technology or charter changes. |
n/a — structural THE SUSTAINABLE CEILING IS FAR BELOW THIS AND IS EMPIRICAL. Nobody works without sleeping and nobody holds a peak indefinitely, so the binding limit in practice is endurance, not the calendar. The highest level in the 50 MTUS frames is 3,035 h/adult-yr (BG1965) — 34.6% of this bound — against a median of 26.6%. Use this to REJECT an impossible intake value, never as a target and never as a plausible one. |
HOURS_ELAPSED_PER_WEEK |
168.0 | hours per week | convention form: 7 d × 24 h — the hours that ELAPSE in a week. A stated denominator for reading an annual hour figure per week; it says nothing about how long anyone works, and is not the 40-hour week. |
— |
WEEKS_PER_YEAR |
52.1785714286 | weeks per year | convention form: PHYSICAL_CAPACITY_CEILING_H_YR / HOURS_ELAPSED_PER_WEEK — the Julian year in weeks (52.18). Bound by EXPRESSION so the year has one length in this file; used only to restate per-year hours per week ( scenarios.capacity_breakdown). |
— |
MEASURED_CAPACITY_H_YR |
2335.751835 | hours per adult per year | measured (Tier A) form: the median of 50 MTUS frames over 1965-2024 across eight countries — paid work plus unpaid domestic work plus childcare, ages 18-69, weighted by PROPWT. Computed by reference.mtus_time_use.capacity_frames() and bound by TEST rather than expression, since data.py sits below reference/. |
— NO band: FIELD, deliberately — that marks a value PICKED inside measured bounds, which is bounded, and this is the median of the distribution itself. The distribution RANGES 1,958.58 (NL1975) to 3,035.09 (BG1965), a spread of 1.55x. The inputs are hours people DID work, which is a floor on capacity, so if anything the median understates what could be supplied — the conservative direction for a feasibility test. THIS IS A REFERENCE FRAME, NOT A CLAIM ABOUT ANY COLLECTIVE. It is defaulted for the reason population is defaulted to 1e6: an arithmetic that cannot run produces nothing to check, and a test needs a value. A collective's real capacity is an INTAKE FIELD — the measured spread is 1.55x, far too wide for a default to stand in for one. IT REPLACES H_REF ON THE FEASIBILITY PATH (2026-09-03, author decision). H_REF is a paid-work calendar year whose own tag block warns that read as hours actually worked it "would be wrong in most jurisdictions", and 45 of the 50 measured frames exceed it. The correction narrowed the epsilon=0 deficit from 15.3% to 2.6% and did NOT close it then; the 2026-09-04 band alignment and the 2026-09-09 capital-path decision closed it (feasibility.over_determination_report reads CONSISTENT). |
Closed 2026-08-08 (Block K-IV), re-anchored 2026-08-09 (Finding E). The
pointer used to name O*NET/BLS training hours, and the registry already carried
them: f_training is tagged "log-minmax of measured hours", so
hours = exp(lo + f·(hi−lo)) inverts it exactly. Employment-weighted mean
11,001 h/worker over 751 occupations / 157.79 M employment → 5,501 h/person at
E/P = 0.500, de-anchored by ÷ kbs(ε*)·cpu(ε*). Residual uncertainty is the
ANCHOR, not the measurement: 7.13× across ε_ref ∈ [0.2, 0.6] against 1.20× from
the per-capita route. Sweep with arc --knowledge-epsilon-ref.
The renewal-rate split (Blocks K-III/K-IV). SKILL_DECAY_RATE = 0.10 was
conflating two orthogonal rates: transmission (cohort turnover, derivable) and CPD
(staying current, not in O*NET). Set independently they sum to 0.0277 against
the shipped 0.10 — and against the measured 11,001 h/worker stock, 0.10 implies
1,100 h/worker·yr = 55% of the H_REF 2,000 h work-year, every year, forever.
No time-use or training series supports it; the shipped value was never a renewal
rate. The author's decision (2026-08-08) was to adopt the lower rate:
transmission alone, the only doctrine containing no CHOSEN component. This
deliberately understates renewal by ~10.8% rather than let a judgement call
ride in the shipped arc.
Not in data.py, so outside the coverage gate. The skill_decay_rate
parameter in EohParams now defaults to 0.025 (bound to
SKILL_TRANSMISSION_RATE), not the 0.10 module constant. Parameter defaults are a
second surface with its own provenance question, and the gate covers data.py only.
Domain balance — the denominator problem¶
Added 2026-08-05. Updated 2026-08-08 after Block K-IV, and 2026-08-09 after the Finding-E re-anchor. This is a property of the calibration set, not of any one constant, and it conditions how every measured result in this repo should be read.
PARTLY CLOSED (Block K-IV, 2026-08-08; re-anchored 2026-08-09). Putting
KNOWLEDGE_EOH_BASEon its measured O*NET/BLS footing cut the personal share from a flat 87–96% across the whole arc to 94.3% → 51.1%, and knowledge became the largest non-personal domain at the top. Re-anchoring the base to the ε_ref FIXED POINT (Finding E — the K-IV anchor was not a fixed point of its own derivation) took 0.779× off the base. The 2026-08-10 AGE_GROUPS elderly revalue then cut personal EOH 11.76% and moved the fixed point AGAIN, taking the base up 1.397× to 1.089× the original K-IV value. The share now runs 98.9% → 46.1%. The table below is the current picture; the pre-adoption figures are kept in the second table for comparison.CORRECTED 2026-08-10. This block previously reported the share as 98.9% → 78.6% and drew a finding from it — that the two moves "pulled in opposite directions" and personal's share at ε = 0.99 "ended HIGHER than after K-IV, not lower (56.2% → 78.6%)". That was wrong, and so was the finding. Measured against
arc --domain-sharesat the shipped constants, personal ends at 46.1%, not 78.6% — lower than the 56.2% K-IV left it, not higher. The ε = 0.40 and ε = 0.99 columns of the table below were wrong in the same pass (infrastructure and knowledge were also transposed at the top of the arc). The ε = 0 column was correct throughout. The two moves compounded in the same direction: both cut personal's share at the top of the arc.This is worth recording rather than quietly patching. The provenance gate covers tag blocks in
data.py; it cannot check a hand-written share table in prose, and this section says so a few paragraphs down. Here is that residual producing not a stale number but an inverted conclusion — the kind of error the gate was built to make impossible for constants and demonstrably still permits for narrative.What is still open.
ECOLOGICAL_BASE_RATEis untouched and the ecological domain is still ~0.04% of total EOH at 0.61 h/person·yr — the "relative anchor summed with absolute counts" defect is unresolved. And personal still dominates the LOW arc (98.9% at ε=0), where there is no apparatus for knowledge to attach to, soPERSONAL_EOH_BASEand ATUS still own the denominator there. Two of the three original consequences stand: ε remains a personal-domain number at low ε, and the thermal obligation is still ~0.1% of the ledger.THE ECOLOGICAL GAP IS NOW MEASURED RATHER THAN ASSERTED (2026-08-15,
scenarios/ecological_floor.py). The level cannot be fixed — no stewardship-hours census exists in this repo, and picking a value to produce a respectable share is the fitted-residual error the personal floor was built to refuse. So the question was inverted instead, which the data can answer: what stewardship intensity would a given EOH share require?
Ecological share of total EOH Required stewardship Against the anchor shipped anchor 8.0e-4 h/ha·yr — 1% 9.4 h/ha·yr 25× 5% 48.9 h/ha·yr 132× 10% 103.3 h/ha·yr 280× 25% 309.9 h/ha·yr 839× (at a planetary-average 1.65 ha/person — a figure that is wrong for any actual collective and is there only to state the inversion at a stated scale.)
The anchor implies about three seconds per hectare per year across all land — every biome and condition class, cropland included.
CORRECTED AND THEN SUPERSEDED. The anchor row above read 0.37 h/ha·yr until 2026-08-28: that was the pre-Phase-4b implied intensity, which divided the whole contiguous US obligation by a million-person population, and it had been stale by 464× since 2026-08-17. This passage then concluded that "low by 2–3 orders is not merely plausible, it is what the arithmetic requires." Phase 4f (adopted 2026-08-28) supersedes that conclusion. The anchor produces a RECURRING term; the adopted partition assigns everything recurring to GUF; and
guf_magnitude.recurring_target_by_classalready charges the measured stewardship census, so matching the anchor to it would bill the same hours twice. The anchor was never too low — it was the wrong KIND of term, and its derived value in the domain is zero. The table is retained because the arithmetic is still correct; it answers a question the partition has closed.Reproduce with
python3 utils/eoh_cli.py arc --domain-sharesandpython3 utils/eoh_cli.py scenario run ecological_floor.
Current (post-K-IV, re-anchored to the ε_ref fixed point twelve times)¶
Canonical-arc figures, re-measured 2026-10-15 (after the national population
closed at the 2024 Census and ATUS took the survey year's own Census share) from
python3 utils/eoh_cli.py --no-color arc --domain-shares --points 100:
| Domain | ε = 0 | ε = 0.40 | ε = 0.99 |
|---|---|---|---|
| personal | 99.4% | 88.8% | 58.0% |
| infrastructure | 0.0% | 5.4% | 9.5% |
| knowledge | 0.6% | 5.7% | 32.5% |
| ecological | <0.1% | <0.1% | <0.1% |
THE ELEVENTH AND TWELFTH RE-ANCHORS, ONE DAY (2026-10-15). US_REFERENCE_POPULATION
closed at the 2024 Census (335M → 340,003,797), and the fixed point moved
KNOWLEDGE_EOH_BASE −5.90%. ATUS hours then stopped converting over that
fixed 2024 total and took the 2025 survey year's own Census 15+ share, and the
base moved back +4.18%, net −1.96%. Personal at ε=0.99 is 57.5% → 58.0%,
knowledge 33.0% → 32.5%: the same direction as every move since 2026-08-16,
and the smallest of them.
THE CROSSING REVERSED, AND THE WARNING BELOW IT IS WHAT PREDICTED THAT. On
2026-08-16 this table read knowledge 47.1% against personal 45.2% and called
knowledge the largest single domain at the top of the arc. It is now personal
52.1% against knowledge 39.3%. THREE changes on 2026-09-01 did it, all moving
the same way: AGE_WEIGHT_CHILD took the MTUS self-maintenance measurement for
ages 6–14 (1.5 → 1.82), which raises personal; Phase 2 adopted per-component
automation, which raises it again because care resists automation; and the ε_ref
fixed point re-anchored KNOWLEDGE_EOH_BASE twice with them, −9.94% then
−16.73%, which lowers knowledge both times.*
AND THE GAP WIDENED TWICE MORE ON 2026-09-03, by the same mechanism. First
NUTRITION_AUTOMATION_FLOOR was adopted at 0.2808, so a second personal
component resists automation — anchor re-solved an eighth time, −8.00%,
personal 52.1% → 53.8%. Then CARE_AUTOMATION_FLOOR was raised 0.15 → 0.2808
to the ordering bound, and because care is 62.1% of the personal domain the
anchor moved a ninth time and by the largest step it has ever taken,
−17.32% — larger than Phase 2's −16.73%. Personal 53.8% → 57.5%,
knowledge 37.3% → 33.0%.
Every move in this table since 2026-08-16 has run the same direction. That is the point of the warning below rather than a coincidence: the ordering is not robust, it has reversed once and widened four times, and each widening came from measuring or bounding a floor that had been left at zero or picked.*
The previous edition of this paragraph said the crossing was not robust — "do not build an argument on which side is ahead" — because the two domains sat two points apart on an anchor that had moved four times for reasons having nothing to do with the knowledge domain. The anchor has now moved EIGHT times and the ordering has flipped back, by 12.8 points rather than the 2 it flipped by before. The caution stands, unchanged and now demonstrated: read this as "personal and knowledge are the same order of magnitude at the top of the arc", not as a ranking. Infrastructure never exceeds 8.0%.
The ε = 0 column reads 98.9% personal / 0.0% infrastructure because Block III
set the canonical capital path to zero at the origin — subsistence has no
apparatus, by ε's own definition. The legacy total_eoh(epsilon=0) path scales a
caller-supplied baseline instead and still shows infrastructure there; both are
intended and pinned in test_trajectory.py.
A CLI bug was fixed alongside: arc passed the corpus size kbs into the
base-RATE slot (knowledge_base=) while the actual kbs argument
(knowledge_complexity=) stayed at its 1.0 default, so the arc's knowledge
column had been under-reported by a factor of KNOWLEDGE_EOH_BASE for the whole
life of the command and never responded to the constant at all.
Pre-K-IV (retained for comparison)¶
ε is defined as machine-fulfilled EOH over total EOH. Running total_eoh() at
defaults for a population of 1M:
| Domain | ε = 0 | ε = 0.40 | ε = 0.99 | per person·yr (ε=0.40) |
|---|---|---|---|---|
| personal | 1,475,000,000 | 1,478,200,000 | 1,480,100,000 | 1,478 |
| infrastructure | 75,000,000 | 135,000,000 | 223,500,000 | 135 |
| ecological | 714,286 | 714,286 | 714,286 | 0.71 |
| knowledge | 10,000 | 112,240 | 973,251 | 0.11 |
| personal share | 95.1% | 91.6% | 86.8% |
(At PERSONAL_EOH_BASE = 1,500 the personal share ran 96.7% → 90.8%. The
2026-08-06 reprice to 1,000 moved it to 95.1% → 86.8% — it did not fix the
imbalance, which is a separate defect from the feasibility one.)
Three consequences, stated plainly:
- ε is ~90% a personal-domain number. Whatever else is measured, the
denominator is
PERSONAL_EOH_BASEalmost exclusively. This is why that constant's tag matters more than any other in this document. - The measurement spine landed on the small domains. The multiplier, the infrastructure statutory floor and the thermal layer are the most defensible work in the repo, and they act on domains totalling 3–9% of the denominator. That does not make them wrong; it means they cannot move ε much, and claims about ε should not be attributed to them.
- It hollows out the thermal obligation.
research/thermal_solvency.solvency_at_epsilon(0.40)books a thermal flow of 1.79M h/yr — 1.8 h/person·yr, taking loaded ecological EOH to 2.5 against personal's 1,478. The planetary radiative obligation enters the ledger at roughly one part in a thousand of what the model already says people owe to entropy, and the accompanying "the fiscal system carries it with a 38× margin" verdict passes because the obligation is negligible, not because the fisc is strong.
Both candidate explanations are unresolved and both are CHOSEN inputs: either
the ecological/knowledge bases are low by two to three orders of magnitude, or
the thermal→EOH conversion is (CDR_LABOR_HOURS_PER_TONNE = 0.6, Tier D), or
both. Nothing in the current data settles it.
Reproduce with python3 utils/eoh_cli.py arc --domain-shares, or:
from hours_eoh.core.eoh_generation import total_eoh
d = total_eoh(epsilon=0.40)
print({k: v / d["total"] for k, v in d.items() if k != "total"})
Regression-pinned in tests/test_eoh_generation.py::test_domain_balance_*.
Retag log (2026-08-05)¶
Constants whose tag changed during the four-tag migration, with the reason. No values changed — this is an evidence-labelling pass only, and every retag is reversible by argument.
| Parameter | Was | Now | Why |
|---|---|---|---|
PERSONAL_EOH_BASE |
Physics | CHOSEN | Arithmetic sum of four desk estimates; no entropy-structural derivation. Directly measurable (ATUS). |
AGE_GROUPS (eoh_weight) |
Physics | CHOSEN | Direction is structural, magnitudes are asserted. |
AGE_GROUPS (fraction) |
Calibration | CHOSEN | Straight relabel under the new scheme. |
ELDERLY_EOH_EPSILON_FACTOR |
Calibration | CHOSEN | Straight relabel. |
INFRA_MAINT_RATE |
Physics | CHOSEN | Cites a 2–4% band and picks a point inside it. |
INFRA_AGE_FACTOR_MAX |
Physics | physics (form) / CHOSEN (2.0) | Convexity structural; the doubling is not. |
CAPITAL_STOCK_DEFAULT |
Calibration | CHOSEN | Straight relabel. |
ECOLOGICAL_BASE_RATE |
Calibration | CHOSEN | Relabel, plus the absolute-vs-relative scale warning above. |
ECOLOGICAL_THRESHOLD |
Physics | physics (form) / CHOSEN (0.40) | Regime shifts are established; this index's threshold is a mapping. |
_ECOLOGICAL_SPIKE_INTENSITY |
Physics | CHOSEN | Reverse-engineered from a target outcome. |
KNOWLEDGE_EOH_BASE |
Calibration | CHOSEN | Straight relabel. |
KNOWLEDGE_EPS_EXPONENT |
Physics | physics (form) / CHOSEN (2.0) | Superlinearity structural; the exponent is asserted. |
skill_decay_rate |
Calibration | CHOSEN | Straight relabel. |
Net effect on the CHOSEN count for the EOH-generation block: 13 constants now carry an epistemic pointer where 6 previously claimed structural status. Four of the thirteen resolve against one public dataset (ATUS) that the repo does not yet use.
Retag log (2026-08-09)¶
The migration finished: 101 constants that appeared nowhere in this document, and nine tables still on the retired binary scheme. No value changed — verified constant-by-constant against the previous commit, 228 compared, 0 differences.
The CHOSEN split (added 2026-08-09, after the migration)¶
CHOSEN was retired into bounded / placeholder / normative. The reasoning is
in The tag scheme above; the counts are 14 / 106 / 60. Notable
placements:
| Went to | Examples | Why |
|---|---|---|
| bounded | PERSONAL_EOH_BASE (band 390–1006, errs HIGH), INFRA_MAINT_RATE (OECD 0.02–0.04), THERMAL_LAMBDA_FEEDBACK (1.2–1.7 across AR6/historical), SKILL_CPD_RATE (10–30 h/worker·yr from licensure + CVTS), DEP_RATE (0.045–0.05 against the derived 1/20) |
A measured band exists and the pick sits inside it. The band travels with the number, and so does the direction of error. |
| normative | M_BAND_*, M_MAX, M_FLOOR, DIV_RATE, ESTATE_*, ACCUMULATION_CEILING_MULTIPLIER, THERMAL_PROGRAMME_YEARS, CDR_ALLOCATION_BASIS, all 10 dashboard thresholds, all 5 MEMBERSHIP_*, the GUF permitted ranges and subsidy schedule |
Decisions. THERMAL_PROGRAMME_YEARS calls itself "an ETHICAL choice"; the dashboard block's own header says these govern "when the framework raises its hand, not what is physically true". |
| placeholder | ABATEMENT_HALF_CAPITAL_TEH, ECOLOGICAL_BASE_RATE, THERMAL_DT_LO, THERMAL_IOTA_FLOOR_*, CONTESTABILITY_MIN_VIABLE_POPULATION, 46 of the 51 GUF_*, CAPITAL_MACHINE_PROFILES |
Nothing constrains them yet. This is the list to drive down. |
| convention | the eight CANONICAL_* arc constants |
An ideal-arc reference frame, not a claim about any trajectory — their own pointer already said "nothing, and by design", which is what a convention is. |
Two judgement calls worth flagging, since both could reasonably go the other way:
CONTESTABILITY_CHI_CRIT = 1.00 is very nearly definitional (χ < 1 means exit is
notional) but is tagged normative, because declaring 1.0 the breach point is still
the framework's declaration. And ETA_LAND_MASK_THRESHOLD = 0.50 is a threshold on a
measured ERA5 field, tagged normative because where the line falls decides which
collectives bear an allocation.
Tags that moved¶
| Parameter(s) | Was | Now | Why |
|---|---|---|---|
M_BAND_LOW, M_BAND_HIGH, M_BAND_TARGET, M_MAX |
Physics | CHOSEN | The justification given was "below 1.8 the differential between labor tiers is too small to reflect real skill differentials" — an argument about fairness and legitimacy, not about entropy. A constitutional commitment: the strongest reason to hold it, and no reason to call it physics. |
ALPHA_SCALE |
Physics | derived | Genuinely computed as M_MAX − 1; it moves when the cap moves. Inherits M_MAX's standing. |
DEP_RATE, DIV_RATE |
Physics | CHOSEN (physics form) |
That capital depreciates and that a payout/renewal split exists are structural. 4.5% and 40% are not. |
H_MIN, COMPETENCY_THRESHOLD |
Physics | CHOSEN | Both are single economy-wide numbers standing in for domain-specific quantities. COMPETENCY_THRESHOLD's three significant figures imply a precision nothing supplies. |
CONTESTABILITY_CHI_CRIT, CONTESTABILITY_PHI_FLOOR, CONTESTABILITY_K_FLOOR_FRACTION |
Physics | CHOSEN | Proposed functional forms, never calibrated — as the block header always said. χ ≥ 1 is definitional, but the invariant it served is superseded by §8.9. |
MEMBERSHIP_MIN_HOURS_CRIT_FRACTION |
Physics-adjacent | CHOSEN | An ad-hoc fifth tag, now retired. The vocabulary is closed and tested. |
all 51 GUF_* |
(undocumented) | CHOSEN | See the NLSA warning below. |
COASEAN_COMMONS_TITHE, COASEAN_INDIVISIBLE_RESERVE_FRACTION, RECAL_CAPITAL_OUTPUT_RATIO, RECAL_ACCOUNT_CREDIT_SHARE |
Calibration | convention | Each names a specific external instrument — Italian Law 59/1992's 3% mutual-fund contribution, the statutory ~30% indivisible reserve, Piketty's β, Mondragon's internal capital accounts. Naming a real instrument is stronger than "calibration". |
INFRA_STATUTORY_INTERVAL_MONTHS_DEFAULT |
measured | convention | 23 CFR 650 is a regulation, not a measurement. It resolves by adopting a different jurisdiction's code, which is a legitimate change rather than a correction. |
H_REF, KNOWLEDGE_REFERENCE_POPULATION, SECONDS_PER_YEAR |
Calibration / physics | convention | Stated denominators. SECONDS_PER_YEAR is the Julian year; the choice matters at the fourth significant figure. |
CO2_PPM_TO_GT |
physics | derived | Arithmetic from atmospheric mass and molar masses — derivable, but not itself a structural claim. |
SKILL_TRANSMISSION_RATE, PP_INDEX_WARN_SLOPE, BASKET_EOH_CONTENT, RECAL_ESTATE_CAPITAL_ESCHEAT_SHARE, MEMBERSHIP_VESTING_WARN_YEARS, FORMATION_DEPRECIATION_RATE, BASE_LIFETIME_EARNINGS_TEH |
Calibration | derived | Each is computed from, or defined equal to, another constant. Three of them (RECAL_ESTATE_CAPITAL_ESCHEAT_SHARE, MEMBERSHIP_VESTING_WARN_YEARS, BASE_LIFETIME_EARNINGS_TEH) restate a literal instead of binding to their source, and should be bound. |
Net distribution over all 228 constants: CHOSEN 190 (83.3%), measured 13,
derived 9, convention 8, derived-then-FROZEN 6, physics 2. Two. The
scheme's own definition of physics is demanding, and applying it honestly leaves
almost nothing: A_EARTH_M2 and SIGMA_SB.
Drifts this pass found and fixed¶
| What | Was | Now |
|---|---|---|
KNOWLEDGE_EOH_BASE (doc) |
490,107,421 | 533,620,818.74 — re-anchored twice: the ε_ref fixed point (2026-08-09) then the AGE_GROUPS elderly revalue (2026-08-10) |
CARE_SIGMOID_DEFAULTS (doc) |
start_share 0.30, inflection 0.55 | 0.05 / 0.45 — the doc had never matched the code |
| membership min-hours thresholds (prose) | 750 / 1500 h/yr | 500 / 1,000 — fractions of PERSONAL_EOH_BASE, stale since the reprice |
| per-capita personal EOH (prose) | 1,500 × 1.475 = 2,213 | 1,000 × 1.475 = 1,475 |
RECAL_FOUNDING_LABOR_HOURS rationale |
"≈ 2/3 of PERSONAL_EOH_BASE" |
it is now 100% of it; the reprice moved the base and orphaned the rationale |
The last three are derived products restated in sentences, which no value-equality check can see. That is why the gate includes a curated test over exactly those figures — the drift hid where the structured check could not look.
Findings, reported rather than smoothed¶
NLSA cites this framework's own document. The Ground Use Fee block attributes
every constant to "NLSA Technical Manual TM-0042, Seventh Edition", and the
template's own header reads "Based on NLSA from HOURSFramework". It is written in
the register of an external standard. Those citations establish a functional form
the framework asserts and supply no external evidence for a value, so equation
numbers now appear only under form:, never resolves_by:. Citing one's own design
document as a source is precisely the authority-borrowing the scheme exists to
prevent, and to a reader who has not opened the template it reads as provenance.
Two constants describe the same physical quantity and disagree 4.6×.
GUF_ECO_KAPPA_CARBON = 2.750 TEH per tonne-CO₂eq (land layer) against
CDR_LABOR_HOURS_PER_TONNE = 0.6 h per tonne (thermal layer). One is wrong and
nothing reconciles them. Two further duplications: DEP_RATE 0.045 against
FORMATION_DEPRECIATION_RATE 0.05 (both aggregate capital depreciation, the second
derived from CAPITAL_MACHINE_PROFILES), and CONTESTABILITY_CAPITAL_YIELD_RATE
0.10 against the 0.20 implied by 1/RECAL_CAPITAL_OUTPUT_RATIO −
FORMATION_DEPRECIATION_RATE.
Four constants are calibrated to a target, and now say so on their own line:
GUF_USE_* (scaled ×100 so aggregate GUF matches levy revenue at mid-arc),
DEFAULT_SEGMENTS (segment means set so the weighted mean hits 2.10, the top of the
band), TRUST_BASE_TEH (sized so the dividend covers the obligations it must fund),
and CAPITAL_MACHINE_PROFILES (tiers set to bracket the mid-arc ε they are supposed
to produce). All four are the _ECOLOGICAL_SPIKE_INTENSITY pattern the 2026-08-05
pass named; they were simply not looked at then.
LEVY_SUFFICIENCY_WARN could not fire on the shipped configuration, and was
retired on 2026-09-16. It warned when the levy covered < 2% of the guarantee, and
SUFF_LEVY_RATE covered ≈2% at canonical defaults. An indicator calibrated to the
value it watches will not warn about the configuration it was drawn around.
It was not re-pointed at a new threshold, because a threshold is what made it
unfalsifiable. The dashboard pillar it drove now asks whether inflows cover the
guarantee or the Trust is drawing principal — the identity trust_end >=
trust_start, which has no free parameter and therefore cannot be drawn around its
own defaults. All three verdicts are reachable, and each is pinned.
Multipliers (Condition II)¶
Retagged 2026-08-09. These carried
Physics, justified by statements like "below 1.8 the differential between labor tiers is too small to reflect real skill differentials". That is an argument about fairness and legitimacy, not about how entropy works — a constitutional commitment, which is the strongest possible reason to hold it and no reason at all to call it physics. Mislabelling the band as physics hid the one number most in need of argument: it is the load-bearing surface of the skill-differential wound the historical autopsy identified.
| Parameter | Default | Units | Tag | What would settle it |
|---|---|---|---|---|
M_BAND_LOW |
1.8 | dimensionless multiplier | normative form: physics-adjacent in one respect only — a band must EXIST for Condition II to be checkable. Where its edges sit is not implied by that. |
decided by a charter decision on the tolerable spread of labour valuation. The measured route now exists and disagrees usefully: the O*NET/BLS reference multiplier (mult-5.1.0) produces a population-weighted mean from measured factors, and the multiplier falsifiability pass records that the band PASS is a construction artifact of the normalization (±2.8× across normalizations) with no empirical content. So the band cannot be validated against the measurement — it can only be chosen and then honoured. no measurement settles this |
M_BAND_HIGH |
2.1 | dimensionless multiplier | normative form: physics-adjacent in one respect only — a band must EXIST for Condition II to be checkable. Where its edges sit is not implied by that. |
decided by a charter decision on the tolerable spread of labour valuation. The measured route now exists and disagrees usefully: the O*NET/BLS reference multiplier (mult-5.1.0) produces a population-weighted mean from measured factors, and the multiplier falsifiability pass records that the band PASS is a construction artifact of the normalization (±2.8× across normalizations) with no empirical content. So the band cannot be validated against the measurement — it can only be chosen and then honoured. no measurement settles this |
M_BAND_TARGET |
2.1 | dimensionless multiplier | normative form: physics-adjacent in one respect only — a band must EXIST for Condition II to be checkable. Where its edges sit is not implied by that. |
decided by a charter decision on the tolerable spread of labour valuation. The measured route now exists and disagrees usefully: the O*NET/BLS reference multiplier (mult-5.1.0) produces a population-weighted mean from measured factors, and the multiplier falsifiability pass records that the band PASS is a construction artifact of the normalization (±2.8× across normalizations) with no empirical content. So the band cannot be validated against the measurement — it can only be chosen and then honoured. no measurement settles this |
MEAN_MULTIPLIER_REFERENCE |
1.99641978545 | dimensionless multiplier | measured (Tier B) form: the employment-weighted mean of the O*NET 30.3/BLS reference registry — 751 occupations, 94.2% of US employment, one weight per occupation (reference.onet_multipliers.registry_segments). Bound by TEST, not by expression: data.py sits below reference/ and cannot import it, the same constraint AGE_WEIGHT_ELDERLY and GUF_ECO_KAPPA_CARBON are bound under. TestMeasuredMeanIsBoundToTheRegistry fails whichever side moves alone. |
an O*NET/BLS vintage refresh moves it mechanically; a non-US occupational registry would test whether 1.9964 travels. TIER B — the registry is a large, well-sourced measurement, but it is US employment, and the multiplier falsifiability pass records that the BAND pass is a construction artifact of the normalization (±2.8× across normalizations). So this value is evidence about the workforce and is NOT evidence that the band is right; it lands inside [1.8, 2.1] on its own terms, which is a result rather than a construction, and that is the whole of what it establishes. |
M_MAX |
6.0 | dimensionless multiplier | normative form: physics — a hard cap must exist, or TEH accumulation is unbounded in the tier dimension. Its LEVEL is the choice. |
decided by a charter decision on maximum permitted labour-valuation inequality. 6.0 is a 6:1 ratio against the floor; that is the substantive commitment and it should be argued as a distributional limit, not derived. no measurement settles this |
ALPHA_SCALE |
5.0 | dimensionless (sum of the four alpha coefficients) | derived form: Σαᵢ = M_MAX − 1, so that perfect scores on all four factors land exactly on the cap. Genuinely computed from M_MAX rather than pinned — it moves when the cap moves. |
n/a — it inherits M_MAX's standing, which is CHOSEN. Nothing additional is owed here beyond settling the cap. |
ALPHA_IMPACT_EOH_REDUCTION_WEIGHT |
0.4 | fraction | normative form: derived only in that the three weights are constrained to sum to 1.0. |
decided by nothing measures the relative importance of EOH reduction, domain breadth and reserve capacity against each other — it is a judgement about what the collective values in a role. Sweep it: scenarios/multiplier_sensitivity.py already provides the harness, and the shipped sweep is ±0.10 per weight. no measurement settles this |
ALPHA_IMPACT_DOMAIN_COVERAGE_WEIGHT |
0.35 | fraction | normative form: derived only in that the three weights are constrained to sum to 1.0. |
decided by nothing measures the relative importance of EOH reduction, domain breadth and reserve capacity against each other — it is a judgement about what the collective values in a role. Sweep it: scenarios/multiplier_sensitivity.py already provides the harness, and the shipped sweep is ±0.10 per weight. no measurement settles this |
ALPHA_IMPACT_RESILIENCE_WEIGHT |
0.25 | fraction | normative form: derived only in that the three weights are constrained to sum to 1.0. |
decided by nothing measures the relative importance of EOH reduction, domain breadth and reserve capacity against each other — it is a judgement about what the collective values in a role. Sweep it: scenarios/multiplier_sensitivity.py already provides the harness, and the shipped sweep is ±0.10 per weight. no measurement settles this |
Multiplier governance and anti-gaming safeguards¶
The sortition, scarcity-dampening and sunset machinery. Scarcity is endogenous — raising a multiplier can itself resolve the scarcity that justified it — so the rolling window and supply lag are structurally required even though their lengths are asserted.
| Parameter | Default | Units | Tag | What would settle it |
|---|---|---|---|---|
GOVERNANCE_MIN_ASSESSORS |
3 | count of assessors | normative | decided by a charter decision on panel size. Three is the smallest panel that can break a tie, which is an argument rather than a measurement; sortition literature on minimum panel size for stable outcomes would strengthen it. no measurement settles this |
GOVERNANCE_IRR_WARN_THRESHOLD |
0.7 | inter-rater reliability coefficient | bounded form: the WARN/CRIT pair on assessment agreement. |
band the conventional inter-rater agreement reading — κ ≥ 0.80 good, 0.67–0.80 tentative, below 0.67 unreliable (Krippendorff; Landis–Koch) errs LOW. Both thresholds sit BELOW the conventional bar — 0.70 WARN against a 0.80 'good' line, 0.50 CRIT against 0.67 'unreliable' — so the gate is more permissive than the literature would set it. That is the unsafe direction for assessment quality, and it should be argued or tightened. convention exists and is close at hand — these sit near the established Krippendorff/Cohen κ reading (≥0.80 good, 0.67–0.80 tentative, below that unreliable). Adopting a cited standard would move both to convention; as written they are the framework's own rounder numbers. |
GOVERNANCE_IRR_CRIT_THRESHOLD |
0.5 | inter-rater reliability coefficient | bounded form: the WARN/CRIT pair on assessment agreement. |
band the conventional inter-rater agreement reading — κ ≥ 0.80 good, 0.67–0.80 tentative, below 0.67 unreliable (Krippendorff; Landis–Koch) errs LOW. Both thresholds sit BELOW the conventional bar — 0.70 WARN against a 0.80 'good' line, 0.50 CRIT against 0.67 'unreliable' — so the gate is more permissive than the literature would set it. That is the unsafe direction for assessment quality, and it should be argued or tightened. convention exists and is close at hand — these sit near the established Krippendorff/Cohen κ reading (≥0.80 good, 0.67–0.80 tentative, below that unreliable). Adopting a cited standard would move both to convention; as written they are the framework's own rounder numbers. |
REGISTER_CADENCE |
'episodic' | none — a named regime | instance | you supply YOUR register's design. How often a registrant must attest that a registered obligation was fulfilled: at the moment of the act ("continuous"), or at intervals on the sunset clock ("episodic"). It is a governance decision, not a physical fact — a register re-reviewing annually costs several times one re-reviewing every five years for identical physical obligation. shipped default "episodic", and the default errs in the SAFE direction, which is why it is this one. Episodic is the COSTLIER of the two regimes the evidence supports, so defaulting to it states the framework's audit claim at its weakest and any measurement can only improve it. Continuous is NOT forbidden and is not always dearer — see the two regimes below. THE TWO CONTINUOUS REGIMES HAVE OPPOSITE COSTS, AND WHICH ONE A REGISTER IS IN IS DECIDED BY WHETHER A MACHINE OR A PERSON DOES THE RECORDING. machine-mediated — Brazil's NF-e (2005) and Italy's SdI (2019) clear every invoice through a state platform at the moment of issue, and the marginal human time is ~0 BECAUSE THE INVOICE ALREADY EXISTED. The system intercepts a document the actor was creating anyway. human-performed — clinical documentation is the closest structural analogue to "record that the care happened", and it costs ~1.8 hours per hour of the activity documented (Sinsky 2016: 27.0% direct care against 49.2% EHR and desk work). Personal EOH is unpaid, undocumented activity, so there is no prior document to intercept: a HOURS register recording continuously by hand is in the SECOND regime. See scenarios/verification_cost.CADENCE_REGIMES, which prices all four against the labour budget. THE HEADROOM RISES WITH AUTOMATION EXACTLY AS THE INSTRUMENTATION THAT WOULD MAKE CONTINUOUS RECORDING CHEAP ARRIVES — verification may consume 12.0% of the obligation at eps=0 and 607% at eps=0.90. So a cadence that is episodic at low automation and continuous at high automation is coherent rather than a fudge, and nothing here forbids declaring it that way. |
SCARCITY_ROLLING_WINDOW |
3 | periods | placeholder form: physics-adjacent — SOME smoothing is structurally required, because scarcity is endogenous to the multiplier that responds to it and an unsmoothed feedback oscillates. The window LENGTH is the choice. |
the observed autocorrelation of occupational vacancy series. BLS JOLTS measures exactly this and is not yet ingested; three periods is the framework's assertion about how long the oscillation is. |
SCARCITY_SUPPLY_LAG_YEARS |
3 | years | bounded | band weeks to ~10 years across occupations (ONET job-zone training times, already shipped in reference/data/) errs WITHHELD. A single economy-wide lag cannot err in one direction when the true quantity is per-occupation and spans two orders of magnitude. 3 years is implausibly uniform, and the honest fix is to make it per-occupation rather than to move the point. measured time from a wage/valuation signal to a completed training pipeline, by occupation. Programme lengths are published (ONET job-zone training times are already shipped in reference/data/), so this is one of the more readily settled constants in the block — and three years is implausibly uniform across occupations that range from weeks to a decade. |
SCARCITY_SEVERE_THRESHOLD |
0.8 | normalized scarcity score ∈ [0,1] | normative | decided by a charter decision on when scarcity becomes an emergency worth naming. It gates a label, not an allocation. no measurement settles this |
TRAINING_VALIDATION_TOLERANCE |
1.5 | ratio of mandated to median observed training duration | placeholder form: the anti-gaming test — a credential mandating far more training than practitioners actually needed is rent extraction wearing a training claim. |
the distribution of mandated-vs-actual training ratios across licensed occupations. O*NET training data plus licensure requirements would give the empirical spread, and the tolerance should sit at its upper tail rather than at a round 1.5. |
ARTIFICIAL_SCARCITY_PASS_RATE_FLOOR |
0.3 | fraction | placeholder form: the pass-rate floor and the quality differential that can excuse falling below it — a gate is artificial unless the failures are really unqualified. |
observed licensure pass rates paired with a measured competency differential between passers and failers. Board pass rates are published; the competency half is the missing instrument, and without it the excuse cannot be tested — only asserted. |
ARTIFICIAL_SCARCITY_QUALITY_THRESHOLD |
0.2 | fraction | placeholder form: the pass-rate floor and the quality differential that can excuse falling below it — a gate is artificial unless the failures are really unqualified. |
observed licensure pass rates paired with a measured competency differential between passers and failers. Board pass rates are published; the competency half is the missing instrument, and without it the excuse cannot be tested — only asserted. |
TIER_ASSESSMENT_INTERVAL_YEARS |
5 | years | normative form: the sunset clock — a tier assessment that never expires becomes a property right, which is the failure mode the historical autopsy names. |
decided by a charter decision on revalidation cadence, with abundant precedent in professional recertification cycles (commonly 2–10 years). Several other constants are pinned to it (CONTESTABILITY_VESTING_YEARS), so moving it moves them. no measurement settles this |
DEFAULT_SEGMENTS |
fractions of workforce and dimensionless multipliers | baseline | RETIRED — superseded by hours_eoh.reference.onet_multipliers.registry_segments compares against hours_eoh.reference.onet_multipliers.registry_segments() — the measured ONET 30.3/BLS workforce that replaced this synthetic one as the default. This value is kept so "what the synthetic set said" stays runnable against it rather than being quoted from memory. expected the SYNTHETIC weighted mean sits EXACTLY on M_BAND_HIGH (2.10) because it was built to, while the MEASURED mean sits strictly inside the band on its own evidence. That contrast is the whole content of the comparison — it is what "calibrated to the target it is checked against" looks like when you can see both sides. Evaluated by tests/test_multipliers.py::TestMeasuredWorkforceIsTheDefault::test_the_measured_mean_is_inside_the_band_on_its_own_evidence kept runnable; no measurement is owed on it CALIBRATED TO A TARGET — the segment means were set so the weighted mean lands on 2.10, the top of the constitutional band, at ε=0. Same class as the GUF_USE_ rates: a value reverse-engineered from a desired outcome. ON THE THIRD MODULE NAMED IN baseline_in: scenarios/measured.py names this constant in module prose only, never in code. operative_consumers matches source TEXT, so it over-counts — the safe direction for a gate, so the module is declared rather than the matcher loosened. It earned its keep immediately: it caught that measured.py's layer paragraph still asserted "DEFAULT_SEGMENTS remains the core default" after that stopped being true. |
Registration Sigmas¶
| Parameter | Default | Units | Tag | What would settle it |
|---|---|---|---|---|
CARE_REG_START_SHARE |
0.05 | fraction of care EOH registered at ε=0 | placeholder form: the LEVEL the sigmoid starts from — formal education and public health are admitted even at subsistence; the rest of care is not. |
the formal/informal split of care labour TODAY, which is a cross-section rather than a panel and is therefore the most nearly reachable of the four. reference/atus_time_use.py already separates household care from paid care; what it lacks is the low-capital end. |
CARE_REG_INFLECTION |
0.45 | automation level ε at the sigmoid's steepest point | placeholder form: the POSITION of the transition on the arc — where admission accelerates. |
a cross-country panel indexed by automation. A cross-section cannot locate an inflection: you need societies at different ε, or one society observed across a transition, and neither is a formal/informal split measured once. THE HIGHEST-LEVERAGE FIELD OF THE FOUR, and the one this split makes visible. A 10% move here shifts the composite registration share −5.68% against start_share's +0.23%. |
CARE_REG_RATE |
8.0 | dimensionless logistic steepness | placeholder form: how FAST the transition happens once it starts — a rate, not a level and not a position, which is why it resolves differently from either. |
a TIME SERIES through a registration transition. No cross-section at any number of countries settles a steepness; it needs the same society observed while the share is moving. |
CARE_REG_SATURATION |
0.95 | fraction of care EOH registered as ε → 1 | normative form: the ASYMPTOTE. start + (saturation − start) × logistic(...), so this is the ceiling itself and not a span — the growth field of the production and stewardship sigmoids occupies the same slot and means something different. |
decided by a charter judgement that some care stays informal at ANY automation level. No dataset returns it, because no society has run at high ε for the observation to exist; asserting 0.95 rather than 1.0 is a commitment about what a ledger should recognise, not a measurement that came out short. no measurement settles this |
CARE_SIGMOID_DEFAULTS |
{'start_share': 0.05, 'inflection': 0.45, 'rate': 8.0, 'saturation': 0.95} | composite of the CARE_REG_* constants | derived form: assembled from the four constants above. Retained as the public shape — core/registration.py and every caller read this dict — and the assembled value is identical to the hand-written one it replaces. New code should prefer the specific constant it needs. |
n/a — it inherits the CARE_REG_* constants' standing; the debt is counted on each of them, not again here. docs/parameter_provenance.md's Registration table once listed start_share 0.30 and inflection 0.55 against the 0.05 and 0.45 shipped here; caught by the 2026-08 migration and corrected in the generated table. |
PRODUCTION_REG_BASE |
0.15 | fraction of production EOH registered at ε=0 | placeholder form: the LEVEL at subsistence. Organised trade and grain accounting exist there but are a minority of production labour, giving ~25% total registration at ε=0 rather than the 70% an earlier value implied. |
the recorded share of production hours today — a cross-section, like the care start_share and reachable by the same instrument. the ONE field of the twenty across these five sigmoids that carries a written physical argument rather than an assertion. |
PRODUCTION_REG_GROWTH |
0.84 | fraction of production EOH, the SPAN above the base | placeholder form: NOT an asymptote — base + growth × logistic(...), so the ceiling is base + growth = 0.99. The care, personal and knowledge sigmoids put an asymptote in this slot instead, and the two parameterisations are not interchangeable. Splitting is what makes that visible. |
the same panel the ceiling needs; a span is a difference of two levels and cannot be read off one observation. |
PRODUCTION_REG_RATE |
20.0 | dimensionless logistic steepness | placeholder form: how fast production admission completes once it starts — near-complete by ε=0.25. |
a time series through the transition, as for every rate here. |
PRODUCTION_REG_INFLECTION |
0.1 | automation level ε at the sigmoid's steepest point | placeholder form: an EARLY inflection — production is the first layer admitted to the ledger because production labour is the easiest to verify. |
a cross-country panel indexed by automation. |
PRODUCTION_SIGMOID_DEFAULTS |
{'base': 0.15, 'growth': 0.84, 'rate': 20.0, 'inflection': 0.1} | composite of the PRODUCTION_REG_* constants | derived form: assembled from the four above; identical to the dict it replaces. |
n/a — it inherits the PRODUCTION_REG_* constants' standing; the debt is counted on each of them, not again here. |
STEWARDSHIP_REG_BASE |
0.05 | fraction of stewardship EOH registered at ε=0 | placeholder form: the LEVEL at subsistence — ~7% total once the sigmoid is applied. |
the recorded share of communal maintenance labour today — shared wells, paths, drainage. A cross-section, like the other two ε=0 levels here. |
STEWARDSHIP_REG_GROWTH |
0.9 | fraction of stewardship EOH, the SPAN above the base | placeholder form: NOT an asymptote — ceiling is base + growth = 0.95. See PRODUCTION_REG_GROWTH on why this slot means two different things across the five sigmoids. |
a panel; a span is a difference of two levels. |
STEWARDSHIP_REG_RATE |
10.0 | dimensionless logistic steepness | convention form: TUNED, not asserted and not measured. Raised from 6.0 to 10.0 so that logistic(0) ≈ 0.018 and the ε=0 value stays near the floor instead of contributing a spurious 8% baseline. The number is chosen to make the sigmoid's own tail behave, which is a fitting decision about functional form rather than a claim about stewardship labour. |
— invisible to the shadow-constant scan until the 2026-08 migration, because 10.0 sits in utils.provenance._INNOCUOUS while its two siblings here were counted. |
STEWARDSHIP_REG_INFLECTION |
0.4 | automation level ε at the sigmoid's steepest point | placeholder form: mid-arc — later than production, earlier than personal or knowledge. |
a cross-country panel indexed by automation. |
STEWARDSHIP_SIGMOID_DEFAULTS |
{'base': 0.05, 'growth': 0.9, 'rate': 10.0, 'inflection': 0.4} | composite of the STEWARDSHIP_REG_* constants | derived form: assembled from the four above; identical to the dict it replaces. |
n/a — it inherits the STEWARDSHIP_REG_* constants' standing; the debt is counted on each of them, not again here. |
PERSONAL_REG_START_SHARE |
0.0 | fraction of personal EOH registered at ε=0 | convention form: 0.0 BY CONSTRUCTION rather than by estimate. At subsistence personal needs are met privately and the collective ledger recognises none of it — that is what ε=0 MEANS for this domain, so the number follows from the definition and no measurement could return a different one. |
— |
PERSONAL_REG_SATURATION |
0.95 | fraction of personal EOH registered as ε → 1 | normative form: the ASYMPTOTE, not a span. start + (saturation − start) × logistic(...). |
decided by a charter judgement that some personal EOH stays private at any automation level — grief, intimacy. The old note called this "a normative reading wearing a placeholder's tag"; it now wears its own. No dataset settles what a ledger SHOULD decline to recognise. no measurement settles this |
PERSONAL_REG_RATE |
7.0 | dimensionless logistic steepness | placeholder form: slower than care, faster than stewardship. |
a time series through the transition, as for every rate here. |
PERSONAL_REG_INFLECTION |
0.65 | automation level ε at the sigmoid's steepest point | placeholder form: LATE — capital systems must mature before the collective can fulfil personal obligations at scale. |
a cross-country panel indexed by automation. the highest-leverage single number in the whole registration layer. The personal domain is 76.6% of the mint at ε=0.40 and the least registered, so scenarios/register_capture ranks it the widest capture channel; this field is where its share is positioned. |
PERSONAL_SIGMOID_DEFAULTS |
{'start_share': 0.0, 'saturation': 0.95, 'rate': 7.0, 'inflection': 0.65} | composite of the PERSONAL_REG_* constants | derived form: assembled from the four above; identical to the dict it replaces. |
n/a — it inherits the PERSONAL_REG_* constants' standing; the debt is counted on each of them, not again here. |
KNOWLEDGE_REG_BASE |
0.0 | fraction of knowledge EOH registered at ε=0 | convention form: 0.0 by construction, as for the personal start_share: there is no formal verification apparatus at subsistence, so there is nothing to register through. The number follows from what ε=0 means rather than from an estimate. |
— |
KNOWLEDGE_REG_SATURATION |
0.8 | fraction of knowledge EOH registered as ε → 1 | normative form: the ASYMPTOTE. base + (saturation − base) × logistic(...). |
decided by a charter judgement that tacit skill, judgement and creative insight are never FULLY admissible however good automated verification becomes. The old note called this an argument rather than a measurement; it is a claim about what a ledger can in principle recognise, and the 0.80 is where this framework draws it. no measurement settles this |
KNOWLEDGE_REG_RATE |
5.0 | dimensionless logistic steepness | placeholder form: the slowest of the five — knowledge work is harder to verify than care labour, so admission completes gradually. |
a time series through the transition. Harder here than elsewhere because the DENOMINATOR — what counts as knowledge work — is itself contested, so the series has to fix a definition before it can move. |
KNOWLEDGE_REG_INFLECTION |
0.7 | automation level ε at the sigmoid's steepest point | normative form: the LATEST inflection of the five. |
decided by a charter judgement that peer review, credentialing and automated audit need mature automation to operate at scale. The old note grouped this with the saturation as "arguments, not measurements", and unlike the other four inflections here no cross-country panel decides it — the claim is about what verification REQUIRES, not about where societies happen to sit. no measurement settles this |
KNOWLEDGE_SIGMOID_DEFAULTS |
{'base': 0.0, 'saturation': 0.8, 'rate': 5.0, 'inflection': 0.7} | composite of the KNOWLEDGE_REG_* constants | derived form: assembled from the four above; identical to the dict it replaces. |
n/a — it inherits the KNOWLEDGE_REG_* constants' standing; the debt is counted on each of them, not again here. |
LABOR_CATEGORY_DEFAULTS |
shares of total labour, dimensionless; exponent dimensionless | placeholder form: production declines linearly in ε; care grows as base + growth × ε^exponent and is capped; stewardship takes the residual. All three are floored. |
an occupational time series split into these three categories against an automation index. The O*NET/BLS registry already carries the occupational side; the split into production/care/stewardship is a mapping this repo has not made. NOT a sigmoid — the composite weights that total_registration_share uses to combine the categories. Migrated with them because they share a consumer and were equally invisible. The care exponent 1.5 is the only shape parameter here: concave-up, so care's share accelerates rather than rising linearly, which is the claim that complexity drives care demand faster than automation displaces production. |
Fiscal Parameters¶
| Parameter | Default | Units | Tag | What would settle it |
|---|---|---|---|---|
SUFF_LEVY_RATE |
0.046 | fraction of labor income | normative form: scenarios/stationarity.py swept levy × base: the smallest rate at which the Trust stands still on the TEH side from ε=0 to 0.99 is 4.48%, with the V1 guarantee at 5% need, base PERSONAL_EOH_BASE (1,000 h), the urban land fee and no inheritance. Rounded up to 4.5%. RE-SIZED 2026-10-15 (author: "raise the levy to cover 0.99"), by the same sweep and the same rounding: the national population closing at the 2024 Census re-derived KNOWLEDGE_EOH_BASE -5.90%, which trimmed the mint at epsilon 0.99 and moved the smallest standing-still rate 4.4923% -> 4.5026%; 4.5% then reached 0.98, not 0.99. Rounded up to 4.6%. THE SAME DAY the ATUS vintage gap closed (hours per head at the survey year's own Census share), the knowledge base re-derived +4.18%, and the smallest standing-still rate is 4.4993%: the round-up rule alone would give 4.5% again, with a 0.016% margin. 4.6% is KEPT — the author's decision was to cover 0.99, and it does, with 2.2% margin. Returning to 4.5% is the author's call, not this rule's. |
decided by author, 2026-09-15 — raised 1.25% → 4.5% with the wage doctrine (minted TEH is the wage; the Trust owes only the guarantee); 2026-10-15 — 4.5% → 4.6% to keep the end of the arc (see form). no measurement settles this SIZED TO A DESIGN THE REPORTING LAYER NOW RUNS, AND CORE STILL DOES NOT. Until 2026-09-16 this read "sized to a design the default does not run": V1 was proposed and nothing defaulted to it. scenarios/stationarity now defaults to V1 at SUFF_NEED_FRACTION, so the rate and the design it was sized against finally agree there. core/ still books sufficiency_guarantee's shipped aggregation, which at ε=0 demands a levy of 812% of the mint — unfundable by construction, since nothing mints that was not registered — against V1's 8.07%. That gap is the open item, not this constant. Under the shipped guarantee 4.6% does not reach the end of the arc (record/fulfilment.md). The 2026-08-09 rationale — "the dividend alone runs a surplus, so the required rate is zero" — held only while the Trust was charged for minted hours and a large dividend was assumed; it no longer describes this constant. Incidence on labour income at low ε, where labour income is nearly all income, remains the charter's question. |
SUFF_NEED_FRACTION |
0.05 | fraction of on-ledger people receiving the guarantee | normative form: V1 sizes the Trust's liability as population × personal_registration_share(ε) × this fraction × the guarantee per person. The alternative charter option, V2 ("universal"), drops this term and pays every on-ledger person. |
decided by author, 2026-09-15 (V1 proposed) and 2026-09-16 (adopted as the reporting default, and named here). It is a charter decision about WHO the guarantee reaches — people between engagements, in retraining, or unable to work — not a measurable share, and no dataset settles it. no measurement settles this NAMED 2026-09-16, AND IT WAS LOAD-BEARING BEFORE IT HAD A NAME. SUFF_LEVY_RATE's own form: field above cites "the V1 guarantee at 5% need" as the basis on which 4.5% was sized, and the figure existed only as a bare 0.05 in about ten test lines and in record prose. A number that sizes the levy and decides who the guarantee reaches is not a test fixture. Changing it moves the Trust's whole liability: at 10% need the required levy roughly doubles (record/fulfilment.md). |
RETIREMENT_REGISTER_AGE |
68 | years of age | normative form: the age at which a member is ADDED TO THE REGISTER as a guarantee recipient — the retirement register event. OFF unless a run asks for it: the shipped guarantee reads the register share and SUFF_NEED_FRACTION, with no age term, so an ageing population asks nothing more of the Trust (found 2026-10-03 running the US ageing shock). Whether retirement is an automatic register event at all is the collective's governance question, which is why this is opt-in and only the AGE is defaulted. |
decided by the collective's charter — when, if ever, age alone puts a member on the register. 68 is the author's working figure (2026-10-03), not a measured retirement age. no measurement settles this |
RETIREMENT_YEARS_IN_COLLECTIVE |
10.0 | years | instance | you supply the collective's own membership record — how long its retirees were members before the register event. shipped default 10 — the author's working figure (2026-10-03), confirmed the same day as TENURE (years of membership vesting the claim), not a stock of obligation owed. Read through core.fiscal.vested_fraction, the framework's ONE tenure curve (linear, full at CONTESTABILITY_VESTING_YEARS), so any tenure at or past the vesting period is fully vested and 0 is none: under the shipped 5-year vesting this default and 5 give the same claim. |
SUFF_GUARANTEE_EPS_DECAY |
0.5 | fraction, per ε unit | normative | decided by nothing measures how fast a guarantee floor should shrink as automation rises; it is a distributional commitment about who carries the transition. Argue it, do not fit it. no measurement settles this |
SUFF_GUARANTEE_STRUCTURAL_MIN |
0.05 | fraction of the guarantee | normative form: the guarantee floor decays with ε toward this residual, never below it — effective = MIN + (floor_fraction − MIN) × (1 − SUFF_GUARANTEE_EPS_DECAY × ε) and floor_fraction is itself clamped up to MIN, so no caller can set a guarantee below it. |
decided by a charter commitment that a floor exists AT ALL automation levels. It is the companion to SUFF_GUARANTEE_EPS_DECAY: the decay says how fast the guarantee shrinks, this says what it may never shrink past. Nothing measures an irreducible entitlement — arguing it is the point. no measurement settles this migrated from core/fiscal.py 2026-08-28, where it was a shadow constant. It is the floor's floor, so it binds precisely where the model is least tested: ε→1, with human labour income near zero. |
SUFF_GUARANTEE_FLOOR_FRACTION |
0.15 | fraction of population | normative form: the SHIPPED design's recipient share at ε=0, decaying toward SUFF_GUARANTEE_STRUCTURAL_MIN at SUFF_GUARANTEE_EPS_DECAY. Read ONLY by sufficiency_guarantee(design="shipped"); the default design V1 derives the share from the register and SUFF_NEED_FRACTION, and ignores this (measured 2026-10-02: doubling it moves V1 by nothing at ε 0, 0.40, 0.90). |
decided by the charter of the pre-V1 design — who the guarantee reached before the Trust owed only what is on the ledger. NAMED 2026-10-02: the companion of the two constants above had stayed a bare 0.15 at three parameter defaults. no measurement settles this |
CARE_AUTOMATION_FLOOR |
0.2799 | fraction of the full care rate | placeholder form: the residual share of care that stays human-carried however high automation goes. care_stipend's automation factor is FLOOR + (1 − FLOOR) × (1 − ε) so the stipend falls with automation to this residual and no further, and PERSONAL_AUTOMATION_FLOORS binds the generation layer to the same value. |
errs LOW — and deliberately so. This is a floor ON the floor: the ordering gives a lower bound, not a level, and every piece of evidence points the same way past it. Care did not fall once paid carers are counted (2025 total human care exceeds 2003 unpaid alone by 8.3%), what fell has no machine substitute, and what rose is the most relational activity in the table. A care floor set too low asserts that relational care can be automated away and the obligation goes unserved, which is the unsafe direction. the share of care hours whose value depends on a HUMAN performing them — the same FIELD PERSONAL_AUTOMATION_FLOORS names, and unreachable by the construction that settled nutrition. There is no unassisted care benchmark: low-capital MTUS frames do LESS childcare than the US (ZA2010 106.9 against US 174.7 h/person-15+·yr), so the denominator runs backwards. A stated-preference instrument — would this hour be acceptable from a machine — is the route, and no such survey is in this repo.NO LONGER normative, and that is the substantive change. It was tagged as a charter commitment whose decided_by read "nothing measures an irreducible entitlement — arguing it is the point". That was right while nothing else in the floors table could be compared against it. Now something can. Per the standing policy (author, 2026-09-03): a value that could change when the data arrives is not a commitment, so it carries a confidence and a resolves_by instead of a decider. The CLAIM that the residual is non-zero remains a commitment; the LEVEL never was one. THE PREVIOUS VALUE WAS 0.15 and its own note said "whether 0.15 is the right residual is arguable; that the residual is non-zero is the load-bearing part". The nutrition adoption made the arguable part visible: 0.15 put the least-automatable component below the most-automatable one. |
CHILDCARE_CODES_MTUS |
(28, 29, 30, 31) | MTUS harmonised activity codes | measured (Tier A) form: the MTUS codes composing ACT_CHCARE, the file's own childcare aggregate. Recovered by solving against that aggregate rather than against an outside target, and EXACT on all 46 samples (ratio 1.0000, min = max), which extends the two-sample derivation in utils/mtus_ingest.py. This is the strongest identification in the MTUS work: it recovers MTUS's own definition instead of fitting one. |
— THIS IS CHILDCARE, NOT THE care COMPONENT, and the distinction is load-bearing. The model's care covers household AND non-household members, children AND adults. Measured against ATUS on 21 overlapping US years this set is 0.827 of ATUS care (spread 0.113) and 1.099 of the household-member codes alone (spread 0.064) — both outside the 5% bar nutrition (1.015) and shelter (0.976) clear, so it is NOT admitted to COMPONENT_CODES_MTUS. THE RESIDUAL HAS NO MTUS HOME. Adult care and non-household care are not carried as a separate harmonised aggregate anywhere in the twelve ACT_* columns; they fall inside blocks that mix them with unrelated activity. That is structural, not a gap a finer search would close, and searching the code space for a set that happens to hit ATUS care would be fitting. US1995 and US1998 are visible outliers on this series — 32.43 and 54.44 min/day against a US median of 28.93, on n = 1,020 and 1,786. They do not touch the 1965 and 2024 endpoints the trend is read from, and they are REPORTED rather than dropped. |
COMPONENT_CODES_MTUS |
{'nutrition': (18, 19), 'shelter': (20, 21, 22)} | MTUS harmonised activity codes | derived form: the MTUS six-digit activity codes making up each personal-EOH component, IDENTIFIED rather than assumed. US samples appear in both MTUS and ATUS, so the same population-year is coded twice and independently; a code set is the component it claims to be only if its level tracks the ATUS family across every overlapping year. Measured by automation_floors.validate_code_mapping(): nutrition (18,19) reproduces ATUS 0202 at a mean ratio of 1.0147 over 21 years (spread 0.037), and shelter (20,21,22) reproduces 0201+0203+0204+0207+0208 at 0.9757 (spread 0.068). No number here is fitted — the codes were picked, then checked. |
— THE RESIDUAL'S SIGN IS NOT PREDICTED. MTUS is read at ages 18-69 and ATUS at 15+; excluding teenagers pushes the MTUS figure up and excluding the over-69s pushes it down. Only the MAGNITUDE is evidence. an earlier version validated shelter against ATUS 0201 ALONE and read a 28% excess. The mapping was right and the target was wrong — the model's shelter is 0201 PLUS maintenance. The check now uses the model's own component definition so the target cannot be hand-picked again. care and health carry no MTUS code set. MTUS puts meals inside its personal-care block where the repo's definition excludes them, and the health component is dominated by ATUS 0804 (using health services), which has no clean MTUS counterpart. Absent, not zero. THE PUBLISHED LABELS CONFIRM THESE SETS AND WERE READ LATE (2026-09-10). utils/mtus_ingest.py derived them by solving against the file's own aggregates because no codebook ships with the DATA — which is true, and was wrongly taken to mean the labels were unobtainable. MTUS User Guide, October 2020 (Release 7.0), Table 2: 18 "Food preparation, cooking" and 19 "Set table, wash/put away dishes" are nutrition; 20 "Cleaning", 21 "Laundry, ironing, clothing repair" and 22 "Home/vehicle maintenance/improvement" are shelter. Two things the labels add that solving could not. First, the per-code identification: only 21 maps cleanly onto its ATUS family (0.9921), while 20 and 22 are resolvable as a block and not individually — component_shares.shelter_frame_check(). Second, a DIFFERENCE with MTUS's own 25-category housework aggregate (Table 3), which is 20+21+23 and puts 22 under "Maintain home/vehicle, re-fuel". This set excludes 23 and includes 22. The aggregate still reproduces ATUS at 0.9757, so it is a difference the validation absorbed rather than a defect — recorded, not resolved. |
MAPPING_TOLERANCE |
0.2 | dimensionless ratio | convention form: how far a code set's level may sit from the ATUS component it claims to be before the mapping is rejected. Loose on purpose: it exists to catch a mapping that is WRONG, not to certify one as precise, and the two shipped sets clear it by a factor of four. The tighter 0.05 used for mapping_is_strong is a reporting distinction, not a gate. |
— |
NUTRITION_AUTOMATION_FLOOR |
0.2799 | dimensionless human-labour fraction | placeholder form: the share of the nutrition obligation that stays human-carried however high automation goes. Derived, not chosen: floor = (US production + US processing) / (unassisted production + unassisted processing) counting TOTAL human labour, paid and unpaid, so marketisation cannot move it — a restaurant cook is human labour. Numerator from scenarios/food_conservation (BLS employment + ATUS unpaid); unassisted production from LSMS-ISA (330.9 h/person-yr, 7 countries, measured); unassisted processing ANCHORED on the largest measured low-capital food preparation in MTUS (FR1966, 472.6 h/person-yr). Computed live by automation_floors.anchored_processing_estimate(). |
errs HIGH — and that is the safe direction for a floor. Set too high, the model over-provisions human labour; set too low, it asserts nutrition can be automated away and the obligation goes unserved. The same asymmetry that put AGE_WEIGHT_CHILD at the top of its band. hours per person per year on food PROCESSING at genuinely low capital — threshing, winnowing, pounding, milling, drying, storage, fuel collection, water for cooking, and cooking itself. NOT obtainable from LSMS-ISA, which measures the harvest and not the meal (the personal- obligation handoff says so in as many words). Raw LSMS WASH modules reach water and fuel — 2 of the 9 activities; a time-use survey at low capital reaches all of them. SERVICE IS EXCLUDED (author decision, 2026-09-03) and the reason is structural. A floor is a LOWER bound and food service has no upper one — there is no cap on how elaborately a meal can be prepared and presented, and what those hours command is a market price. An unbounded quantity cannot be a floor; it is discovery ABOVE it, which is the floor_price / market_premium split. Including service would give 0.548. DELIBERATELY NOT normative (author policy, 2026-09-03). A value that could change when the data arrives is not a commitment, however carefully it was decided. Promoting it would remove the resolves_by the scheme requires of a placeholder and hide the fact that it is still open. |
PERSONAL_AUTOMATION_FLOORS |
{'care': 0.2799, 'nutrition': 0.2799} | dimensionless human-labour fraction | placeholder form: the floor on the human share of a personal-EOH component — the fraction that stays human-carried however high epsilon goes. TWO of the four are listed: care and, since 2026-09-03, nutrition. Each is bound to its own constant by EXPRESSION so the table cannot diverge from them. A component that is ABSENT carries no floor and behaves exactly as the uniform (1 - epsilon) split does today. |
a time-use split of each component's activities into those whose value depends on a HUMAN performing them and those where only the output matters. FIELD: the share of hours in the first class. The repo already carries the bridge — scenarios/component_shares maps ATUS tier-2 codes onto these four components — so what is missing is the relational/substitutable split WITHIN each component, not the mapping to them. That split is a declared JUDGEMENT and must be isolated the way STEWARDSHIP_ATTRIBUTIONS isolates its occupation→land-class attribution; it is not read off the data. Note the ceiling errs HIGH: every floor added lowers observable_epsilon_ceiling (0.9124 shipped; 0.8589 with all three filled at care's own value).AN AUTOMATION FLOOR IS NOT AN ABATABILITY, and conflating them would be the wrong-instrument error. PERSONAL_EOH_COMPONENTS carries abatability — "the most of this component INFRASTRUCTURE CAN EVER REMOVE", i.e. a(K), which deletes the obligation and is epsilon-FREE by construction (Block II). This is the different question of who does the work that REMAINS. The two compose; neither substitutes for the other. THE ABSENCE OF THE OTHER TWO IS AN ADMISSION, NOT A ZERO. Nothing here measures whether shelter or health have an un-automatable residue. Omitting them reproduces today's behaviour exactly, which is the conservative choice, but "no floor" is an ASSUMPTION and not a finding. Adding a floor for any of them moves the arc further in the same direction, so the shipped figure errs LOW. THE PREVIOUS resolves_by CITED A POINTER THAT CANNOT EXIST. It deferred to "CARE_AUTOMATION_FLOOR's own pointer", but that constant is normative and the scheme FORBIDS a normative constant a resolves_by — it has none. So the instrument this table was to be measured against was never named, for care or for anything else. Naming it is the first step, not the last. THE ACTIVITY SPLIT IS NOT THE BLOCKER — MEASURED 2026-09-02, and the resolves_by above is therefore necessary but not sufficient. scenarios/automation_floors ran the six-digit ATUS series 2003–2025 against this question and the window cannot answer it: automation and marketisation both push observed UNPAID hours down and are inseparable here, so only a RISE is informative; and the household automation that matters predates the sample — kitchen clean-up ROSE 15.1% despite dishwashers, while laundry fell 7.8% against a 4.04% fall in household size. What it does establish is a DIRECTION: nutrition rose 33.8% and health 21.9% across 22 years of capital deepening, so a floor of 0.0 — which is what an absent entry means to the model — is the least supported reading for those two. The level needs the CAPITAL variation this window lacks. AND THE CROSS-SECTION IS NOT THAT VARIATION — measured 2026-09-02, which narrows the pointer above. MTUS supplies 10 countries over 1965-2024, and automation_floors.cross_country() reads it: Korea has the LOWEST unpaid domestic time of any country here despite being high-income, Bulgaria ROSE 38.6% across its post-socialist transition as collective provision fell back on households, and South Africa sits mid-range and flat. Comparing rich against poor economies at a point in time measures convention, institutions and culture as much as capital. What DOES work is the same country over a long span: US unpaid domestic work fell 29.1% from 1965 to 2024, and 94.3% of that fall is before 2003 at 6.7x the later rate — which is why the ATUS window sees a flat tail. That bounds the AGGREGATE floor at <= 0.709 of the 1965 level (an UPPER bound: 1965 already had appliances), and it refutes 0.0 for the aggregate. It still constrains no single component, because ACT_UNDOM is nutrition and shelter together. THE SIX-DIGIT SPLIT IS BUILT AND IT REPLICATES — measured 2026-09-02, which supersedes the sentence above about needing it. COMPONENT_CODES_MTUS identifies the codes against ATUS; automation_floors.replication() then runs each within-country span as a separate test. NUTRITION falls in 5 of 7 countries (FR -33.6%, US -31.6%, CA -16.3%, NL -15.9%, KR -7.2%), SHELTER in 6 of 7. Bulgaria rises in both and carries a DECLARED institutional break (the post-socialist transition returned collective provision to households); it stays in the denominator. South Africa rises 2.1% on nutrition with NO declared explanation and is reported as such. AND NUTRITION CONVERGES WHERE SHELTER DOES NOT, which is the asymmetry worth the most here. The five economies whose nutrition fell land in 39.5-51.6 min/day — a 1.31x band across different cuisines, histories and institutions — while shelter spreads 2.42x over six. Convergence across independent economies is a better floor signature than any single series' minimum, which the US reversal already showed is not one. It is STILL NOT a floor value: every figure is UNPAID time, so the band may be a convergence in how much cooking is BOUGHT. Food-away-from-home spending would separate them and is not in this repo. Per-component upper bounds meanwhile: nutrition <= 0.511 of its 1965 level, shelter <= 0.624. CARE IS PART-MEASURED AND THE PART BEHAVES AS THE FLOOR PREDICTS — 2026-09-02. CHILDCARE_CODES_MTUS is EXACT against MTUS's own aggregate on all 46 samples, but childcare is only 0.827 of ATUS care and the residual — adult and non-household care — has no MTUS home at all, so it is NOT admitted as a component. What the part shows: US childcare moved -0.5% across 1965-2024 against nutrition's -31.6% on the same instrument, with a median absolute change across countries of 0.024 against 0.163. Childcare did not respond to 59 years of capital deepening where nutrition halved. AND THE CONFOUND RUNS THE HELPFUL WAY HERE, which is unusual. Paid daycare and residential care move care OUT of unpaid time, so observed unpaid childcare should FALL even with no automation at all. It does not. That makes the flatness harder to explain away rather than easier, and it is independent support for CARE_AUTOMATION_FLOOR being non-zero — a constant that is normative and has never had a dataset behind it. It corroborates the commitment; it does not measure the level, and care_floor_corroboration() says so in its own return value. HEALTH REMAINS UNMEASURED. It is dominated by ATUS 0804 (using health services), which has no clean MTUS counterpart. Absent, not zero. |
PROVIDER_CAP_EQUIVALENTS |
2.5 | full-infant-rate dependent equivalents | normative form: the per-provider cap on care stipend — provider_cap_teh = base_infant_stipend × CAP_EQUIVALENTS × automation_factor so one provider may claim at most this many full-rate dependents' worth, however many dependents they actually have. |
decided by a policy limit on how much care one person may be paid to provide, which is a judgement about capacity and about gaming, not a measurable quantity. Note it interacts with DEPENDENT_SCALE: the diminishing per-dependent rate already reduces large households, and this cap binds on top of that. no measurement settles this migrated from core/fiscal.py 2026-08-28 as a shadow constant. |
TRUST_BASE_TEH_PER_CAPITA |
8760.0 | TEH per person — the inheritance one person brings | instance | you supply your collective's actual Trust balance divided by its population, or, for a converting jurisdiction, the inventory it brings per head. Intake path: research/epsilon_inverse.capital_for_epsilon() makes an inventory-first reading possible. Nothing requires editing this constant — every fiscal function takes trust_balance, and an unsupplied one resolves against your population.shipped default 8,760 TEH/person (author, 2026-09-17). WHAT IS BROUGHT IS PRIOR WORK, NOT AN ENTITLEMENT. People bring TEH, and assets that reduce EOH and carry EOH costs of their own, when a collective is FORMED or JOINED. 8,760 is what the CURRENT WORLD's prior work is assumed to amount to per head — an estimate of a real stock, NOT a hard number and NOT a per-head grant. A collective founded at subsistence brings 0.0, and a joiner may bring nothing; both are honoured as zero when passed. scenarios/stationarity defaulted trust_start to 0.0 until 2026-10-18; it now resolves the frame's Trust when none is stated (author: the empty default was an artefact), and 0.0 passed is a new collective with no prior. CAPITAL_STOCK_DEFAULT says the same of capital ("Callers passing it at low ε are asserting capital the arc says is not there"). NOTHING IS MINTED BY ARRIVING. Prior work already exists, so bringing it is a TRANSFER — which is why this doctrine leaves the one-mint-path gate, Condition III and trust_management's all-transfers property untouched. An earlier option under which joining MINTED 8,760 TEH was measured at 13.5% of the mint, cumulatively exceeding the whole founding stock within 200 periods, and was rejected: it would have created TEH for someone who had met no registered obligation, which is the hole-digger case the anchor argument exists to refuse (tests/test_one_mint_path.py). It replaces the 35,000 TEH/person implied by the former 35e9 aggregate, whose own sizing rationale was WITHDRAWN by the author 2026-09-16 and deliberately not re-fitted. The figure equals the hours in a calendar year (24 × 365); that equality is NOTED, not claimed as the derivation.DO NOT POINT THIS AT THE CAPITAL RETRODICTION. scenarios/ capital_retrodiction measures the gross fixed CAPITAL stock in TEH — which is the quantity CAPITAL_STOCK_DEFAULT holds and names in its own supplied_by, not this one. Its US grid spans 2,535–16,703 TEH/capita across scope, doctrine and conversion rate, so 8,760 landing mid-band is CONSISTENCY, not corroboration: a 6.6x range admits almost any mid-range figure. Attaching that instrument here would be binding a measurement to the wrong quantity (failure mode 8). SETTLED 2026-09-18 (author) — THIS IS THE TEH COMPONENT, NOT TOTAL PRIOR WORK. make_economy_state builds teh_endowment = trust_balance + capital_embodied_teh = 8,760 + 2,400 = 11,160 TEH/person, and that sum is CORRECT under this reading: the assets a collective brings are counted once, in the capital term. WHY NOT TOTAL, WHICH WAS THE ARGUABLE ALTERNATIVE. Total is the MEASURABLE reading — capital_retrodiction measures a capital stock in TEH — and it matches what a converting collective hands over, an economy rather than two separate things. Four objections beat it: 1. THE TRUST WOULD BECOME A RESIDUAL. Total − capital = 8,760 − 2,400 = 6,360, so the Trust stops being intake and becomes leftover arithmetic. Any error in the capital figure then moves the Trust by the same amount in the OPPOSITE direction — one measurement error, two constants, inversely coupled, and no way to tell which one a solvency result came from. 2. IT IS UNFUNDABLE. Exit claims at 11,160/person are 127.4% of the liquid Trust (measured 2026-09-17). Embodied capital cannot pay an exit without dismantling the apparatus. 3. ONE NUMBER CANNOT CARRY TWO DESTRUCTION RULES. D1 writes capital down; the Trust is drawn down only for what it OWES. 4. IT COLLAPSES TWO ANSWERABLE QUESTIONS INTO ONE. This constant's supplied_by asks for a Trust balance per head; CAPITAL_STOCK_DEFAULT's asks for a gross fixed capital stock in TEH. An institution can answer those independently, and epsilon_inverse.capital_for_epsilon uses that independence to check an inventory against an ε. THE COST OF THIS CHOICE, STATED RATHER THAN GLOSSED: the TEH component has NO measurement path. Total had one; this does not, and no resolves_by is claimed for it. It is an instance figure an institution supplies, with 8,760 shipped as a SCENARIO. Naming an instrument that measures a different quantity would be failure mode 8, which the note above already refuses. |
TRUST_BASE_TEH |
8760000000.0 | TEH (at the 1M reference population) | instance | you supply nothing separately — supply TRUST_BASE_TEH_PER_CAPITA, which carries the judgement; this is its restatement at the package reference frame. Every fiscal function takes trust_balance, and an unsupplied one resolves against your population.shipped default DEFINED equal to TRUST_BASE_TEH_PER_CAPITA × REFERENCE_FRAME_POPULATION = 8,760 × 1e6 = 8.76e9 (author, 2026-09-17), replacing the former 35e9 whose sizing rationale was withdrawn 2026-09-16 and not re-fitted. IT IS TAGGED instance, NOT derived, AND THE DIFFERENCE IS A COUNT. Tagging it derived — which its VALUE now is — moved it from the verdict ladder's INSTANCE tier to CERTAIN (31 → 32) at the moment of the reprice, because the ladder reads derived by its own tag and does not follow through to what the value bottoms out on (utils/provenance.py names this one-level gap). Its COMPUTATION became derived; its STANDING did not, and the tag records standing. Left as derived the framework would have read as more certain about the most-consumed solvency constant in the repo purely because a tag moved. THE FRAME IS RESOLVED, NOT ASSUMED (2026-09-17). Consumers take trust_balance: float \| None = None and resolve an unsupplied balance against THEIR OWN population via core.fiscal.resolve_trust_balance(), so the inheritance travels with the frame and per-capita Trust is what stays fixed. A SUPPLIED balance is the ACTUAL balance and is never rescaled; 0.0 means "this collective has no inheritance" and is honoured as zero. Two sites keep an explicit default because they have NO population in scope and so nothing to resolve against — research/contestability.min_levy_for_pi and scenarios/shocks.demographic_shock — and both DECLARE that in their docstrings. Before the repair, ten CLI flags defaulted --trust-balance to this constant while --population sat beside them freely settable, so --population 335000000 ran 335M people on a 1M-person Trust. Gated by tests/test_trust_scale_resolution.py. |
DEP_RATE |
0.045 | fraction of Trust per year | bounded form: physics — the capital the Trust represents really does deteriorate, so a depreciation term must exist. The RATE is not structural. |
band 0.045–0.05 per year. The upper end is FORMATION_DEPRECIATION_RATE, derived in this file from CAPITAL_MACHINE_PROFILES design lives (≈20 yr → δ ≈ 1/20) — the same physical quantity reached a second way. errs LOW. Understating depreciation overstates the Trust's durability and therefore its dividend, which flatters solvency: the unsafe direction. The two constants should be reconciled to one derivation rather than left 11% apart. THE AUTHOR NAMING WHICH SCOPE THE TRUST'S CAPITAL IS. The measurement this field used to ask for — a weighted aggregate over the actual inventory — is run (2026-10-08, note below): BEA's depreciation over its stock, 0.052–0.090 in 2024 by scope. What remains is the choice of scope, and with it reconciling this and FORMATION_DEPRECIATION_RATE to one value. (Until 2026-10-08 this read "a weighted mean design life over the actual capital inventory", which the profiles could not settle — see below.) THE RESOLVES_BY WAS RUN, 2026-09-17, AND THE STATED DERIVATION DOES NOT REPRODUCE. A depreciation rate aggregates as a mean of RATES, not as the reciprocal of a mean life: δ = Σ(wᵢ/lifeᵢ)/Σwᵢ weighted by TEH at the standard tier gives 0.0428 (implied life 23.35 yr) — not the ≈20 yr → 1/20 that the band and resolves_by above both assert. The profiles therefore support a value BELOW this band, not at its upper end. AND THE METHOD DOMINATES THE DISPUTE: weighted mean of rates 0.0428, reciprocal of the weighted mean life 0.0286, unweighted mean of rates 0.0602 — a 2.1× spread, against the 11% gap these two constants are asked to reconcile. Choosing the aggregation IS the decision, and it is not made here. NEITHER VALUE IS CHANGED. Both err high against 0.0428, which by the errs field above is the SAFE direction, and re-fitting a calibration constant to a freshly-run derivation is an author decision (§5). See record/provenance.md#depreciation-derivation-does-not-reproduce. MEASURED 2026-10-08, AND THE "SAFE DIRECTION" ABOVE DOES NOT SURVIVE IT. BEA sums depreciation asset by asset, so its depreciation over the stock it is taken from IS the stock-weighted mean of rates — the aggregation above, measured rather than chosen. 2024: 0.0904 productive, 0.0704 government (nondefence), 0.0524 residential, 0.0534 all fixed assets; 0.034–0.091 over 1926–2024, lowest in 1936 for every line. 0.045 is BELOW every line in 2024 — the UNSAFE direction by the errs field — and so are the profiles' 0.0428 and 0.0286. Not changed: which SCOPE the Trust's capital is decides between 0.05 and 0.09, and that is the author's. Call capital_retrodiction.depreciation_report(); see record/provenance.md#depreciation-measured. |
DIV_RATE |
0.4 | fraction of annual depreciation | normative form: the dividend/renewal split. That a split exists is structural — pay out everything and the Trust erodes; retain everything and it never circulates. |
decided by a charter decision on the payout ratio. It is the framework's central distributional lever and belongs in deliberation, not measurement. no measurement settles this |
MEANINGFUL_ACTIVITY_TEH_BASE |
120.0 | TEH per recipient per year (at ε=0) | normative form: base × (1 + scale × ε²) — quadratic so non-participants gain real purchasing power as the labour pool shrinks. Also serves as the sufficiency basket cost at ε=0, so basket_price(0) = 120 TEH/yr. |
decided by a charter decision on discretionary provision above biological reimbursement — this is what a collective thinks a life beyond subsistence costs, which is the same question PERSONAL_EOH_SUFFICIENCY asks in hours. The two should be reconciled; at present they are set independently. no measurement settles this |
MEANINGFUL_ACTIVITY_TEH_SCALE |
1.5 | TEH per recipient per year (at ε=0) | normative form: base × (1 + scale × ε²) — quadratic so non-participants gain real purchasing power as the labour pool shrinks. Also serves as the sufficiency basket cost at ε=0, so basket_price(0) = 120 TEH/yr. |
decided by a charter decision on discretionary provision above biological reimbursement — this is what a collective thinks a life beyond subsistence costs, which is the same question PERSONAL_EOH_SUFFICIENCY asks in hours. The two should be reconciled; at present they are set independently. no measurement settles this |
BASKET_GOODS_WEIGHT |
0.6 | fraction of the basket | normative form: the two weights partition the reference basket and must sum to 1.0. |
decided by a charter decision about what a sufficiency basket CONTAINS — goods (food, clothing, shelter materials, manufactured items) against services (healthcare, care, education, local skilled services). No dataset settles the split, because it is a statement of what the guarantee covers. no measurement settles this migrated from core/prices.py 2026-08-28 as shadow constants. The split matters more than it looks: services fall to a floor 4x higher than goods, so the weights decide how much of the basket is protected from the price collapse automation drives. |
BASKET_SERVICES_WEIGHT |
0.4 | fraction of the basket | normative form: the two weights partition the reference basket and must sum to 1.0. |
decided by a charter decision about what a sufficiency basket CONTAINS — goods (food, clothing, shelter materials, manufactured items) against services (healthcare, care, education, local skilled services). No dataset settles the split, because it is a statement of what the guarantee covers. no measurement settles this migrated from core/prices.py 2026-08-28 as shadow constants. The split matters more than it looks: services fall to a floor 4x higher than goods, so the weights decide how much of the basket is protected from the price collapse automation drives. |
GOODS_PRICE_FLOOR |
0.05 | fraction of the ε=0 price | placeholder form: the ε→1 limits of the two price ratios. Goods decline LINEARLY to their floor; services decline as (1−ε)**SERVICES_PRICE_DECLINE_EXPONENT, so they approach theirs far more slowly — at ε=0.99 services still sit at 0.360, 1.8x its floor, while linear goods is already there. |
the non-labour cost share of each basket half at high mechanisation — energy, materials and logistics for goods; the irreducible human contact time for services. FIELD: input-output tables' non-labour intermediate share by sector, NOT a price index, which measures what things cost rather than what they cannot stop costing. THE ORDERING IS THE CLAIM AND IT IS THE DEFENSIBLE PART — services stay dearer than goods at every ε because they remain labour-bearing, which is the same conclusion Block II reached from abatement (care is the least abatable component). The LEVELS are desk estimates. Migrated from core/prices.py 2026-08-28, where all three were shadow constants and a +7% move failed no test. |
SERVICES_PRICE_FLOOR |
0.2 | fraction of the ε=0 price | placeholder form: the ε→1 limits of the two price ratios. Goods decline LINEARLY to their floor; services decline as (1−ε)**SERVICES_PRICE_DECLINE_EXPONENT, so they approach theirs far more slowly — at ε=0.99 services still sit at 0.360, 1.8x its floor, while linear goods is already there. |
the non-labour cost share of each basket half at high mechanisation — energy, materials and logistics for goods; the irreducible human contact time for services. FIELD: input-output tables' non-labour intermediate share by sector, NOT a price index, which measures what things cost rather than what they cannot stop costing. THE ORDERING IS THE CLAIM AND IT IS THE DEFENSIBLE PART — services stay dearer than goods at every ε because they remain labour-bearing, which is the same conclusion Block II reached from abatement (care is the least abatable component). The LEVELS are desk estimates. Migrated from core/prices.py 2026-08-28, where all three were shadow constants and a +7% move failed no test. |
SERVICES_PRICE_DECLINE_EXPONENT |
0.35 | dimensionless exponent | placeholder form: services_ratio = FLOOR + (1 − FLOOR) × (1 − ε)**EXPONENT. An exponent below 1 makes the decline CONCAVE — slower than the linear goods path. |
as for the two floors — the non-labour share by sector, read as a curve against a mechanisation index rather than at a single point. FIELD: BEA/OECD input–output tables, non-labour intermediate share by sector across vintages. Standard, published, and never attempted here. this is the term that decides HOW SLOWLY services approach their floor, and it is why the two halves of the basket reach their limits at completely different rates. Its own source comment says 0.35 was "chosen to keep services meaningful in the care economy while prices still fall substantially" — i.e. picked for the shape it produces, which is the calibrated-to-target pattern stated plainly. Migrated 2026-08-28. THREE CONSTANTS IN THIS REPO MAKE THE SAME SHAPE OF CLAIM AND NOTHING RECONCILES THEM (found 2026-09-01). "Labour content declines with automation to an irreducible floor", written three times with different parameters: GUF administration (1−ε)^0.8 + 0.05; services prices 0.2 + 0.8·(1−ε)^0.35; personal care 0.15 + 0.85·(1−ε)^1.0. Exponents spread 2.9×, floors 4×, and goods is linear to 0.05 — a fourth shape again. They MAY be four genuinely different activities with four different curves; nothing says so, and they are at least not independent evidence for one another. Same posture as REGEN_AUTOMATION_LEVERAGE_MAX and MATURATION_AUTO_LEVERAGE, recorded rather than reconciled. If they ARE one quantity, one measurement settles four constants, which is why this is worth writing down. |
CAPITAL_STOCK_DEFAULT |
2000000000.0 | TEH (at the 1M reference population) | instance | you supply your gross fixed capital stock, converted to TEH at the TEH/currency exchange rate you choose (the model does not determine it). Intake path: research/epsilon_inverse.capital_for_epsilon() inverts an ε target into the capital that produces it, so an inventory and an ε can be checked against each other rather than assumed apart. shipped default 2,000 TEH/capita, and Block III established that the ε=0 endpoint carries NO apparatus — so this default describes a MID-ARC collective, not a subsistence one. Callers passing it at low ε are asserting capital the arc says is not there. |
BASKET_EOH_CONTENT |
1000.0 | personal EOH hours per sufficiency basket | derived form: DEFINED equal to PERSONAL_EOH_BASE — one basket covers one person-year. Was a literal 1500.0 duplicating it; bound to the constant on 2026-08-06 so the two cannot drift apart under repricing. |
n/a — it inherits PERSONAL_EOH_BASE's standing by construction, and the binding is the point: this is the repricing-hazard fix, not a free value. |
Labor Parameters (Condition IV)¶
| Parameter | Default | Units | Tag | What would settle it |
|---|---|---|---|---|
ESSENTIAL_DOMAINS |
list of domain names | normative form: physics-adjacent — a civilization does have a set of functions whose failure is not survivable, so the CATEGORY is structural. Which domains, and how many, is not. |
decided by the author (2026-10-01, care) on the Mission Statement's seven — a criticality analysis for the jurisdiction being modelled. National critical-infrastructure sector designations are the nearest external analogue, and they do not agree with each other on the list either. no measurement settles this CARE ADDED 2026-10-01 (author: "add care as an eighth essential domain"). Care is 62% of the personal obligation and the least abatable component; with no domain of its own it was set against healthcare, and at the Condition IV minimum that left the agents' own needs without competent hands over most of the upper arc. Its paid counterparts are SOC 31 (healthcare support) and 39 (personal care) in reference/obligation_work. |
|
COMPETENCY_THRESHOLD |
0.155 | fraction of workforce certified per essential domain | placeholder | an observed relationship between practitioner density and recovery time from a domain outage. The Mission Statement asserts 15.5%; the three significant figures imply a precision nothing supplies, which is itself the tell. Workforce composition series plus outage post-mortems would settle it. |
H_MIN |
260 | hours per year | placeholder form: 5 h/wk × 52 wk. Below some floor a practitioner stops maintaining competency, which is structural; the level is the choice. |
measured skill-retention against practice hours by domain — the currency-of-practice literature in aviation and surgery measures exactly this and reports domain-specific thresholds, which is the point: one economy-wide 260 cannot be right for both a surgeon and a farmhand. MEASURED 2026-09-02 — IT NEVER BINDS ANYWHERE ON THE ARC. Required labour runs 3,238.7 h/worker·yr at capability 0 down to 341.2 at 0.99 on a 1M-person frame at 70% employment, so it is still 1.3× this floor at the top of the arc. Read correctly that is a POSITIVE result rather than an unused constant: the model never reaches an automation level at which ordinary work falls below the point where practitioners keep their skills. It also answers a different question from H_REF — competency retention, not labour supply — so the two do not belong on one ladder. |
H_MIN_ALLOCATION |
fractions of H_MIN, summing to 1.0 | normative | decided by a charter decision on how the minimum obligation is apportioned. The three-way split is a policy design; nothing measures it. no measurement settles this |
H_MIN is one economy-wide floor, and the currency-of-practice literature (aviation,
surgery) reports domain-specific retention thresholds — so 260 h/yr cannot be right
for both a surgeon and a farmhand. COMPETENCY_THRESHOLD's three significant figures
imply a precision nothing supplies, which is its own tell.
Reference hours¶
| Parameter | Default | Units | Tag | What would settle it |
|---|---|---|---|---|
H_REF |
2080 | hours/year per worker | convention form: 40 h × 52 wk — the calendar, with NO leave policy in the base. Used to convert workforce-hours to TEH; not a claim about how long anyone works. |
n/a as a convention. Read as a measurement of hours actually worked it would be wrong in most jurisdictions (OECD annual hours run ~1,400–2,200), which is precisely why it is tagged as the denominator it is. THIS IS US-NOMINAL AND IS A DECLARED JURISDICTION CHOICE, not a universal. EU statutory leave of 4–6 weeks gives 1,760–1,880 h/yr. Note the near-coincidence worth remembering: EU-nominal (~1,880 at 5 weeks) and the US MEASURED ACTUAL (1,874.4, ATUS-derived) agree to 0.3% — the old 2000 sat between the two nominals, which is plausibly why it was chosen. See WORK_YEAR_REFERENCE_POINTS for the band this is the denominator of. |
WORK_YEAR_REFERENCE_POINTS |
dimensionless (fraction of H_REF) | convention form: reference points on the work-year, expressed against the policy-free nominal. They are a REPORTING BAND, not alternatives to H_REF: a caller quoting an hours figure should say which point it sits on. |
—measured_actual is ATUS-derived average paid hours per EMPLOYED worker (see scenarios/food_conservation.hours_per_worker_year, 1874.4288). It is an ACTUALS answer to a CAPACITY question and must not be used as a supply ceiling — multiplying it by working-age population assumes full employment, which overstates labour supply by the unemployment and non-participation rates together. |
H_REF is a convention, not a measurement of hours worked: OECD average annual
hours run ~1,400–2,200, so read as a measurement it would be wrong nearly everywhere.
Note BASE_LIFETIME_EARNINGS_TEH uses 2,080 h (40 × 52, no leave) instead — the repo
carries two work-year conventions and they are not reconciled.
Capital and Asset Lifecycle¶
Maintenance profiles for EOH compounding, the machine-capacity sub-model that makes ε emergent from physical state, and the condition-decay constants.
| Parameter | Default | Units | Tag | What would settle it |
|---|---|---|---|---|
ASSET_TYPES |
maint_rate fraction of capital/yr; threshold_age years; compound_exp dimensionless | placeholder form: physics — post-threshold maintenance escalates as a power law rather than linearly, and the ORDERING across asset classes (software fastest to fail, stone slowest) is a defensible engineering claim. The exponents are not. |
measured maintenance and failure curves by asset class. The infrastructure floor shows the route — a physical condition census in crew-hours rather than money (INFRA_TREATMENT_HOURS_*). Design lives here are order-of-magnitude right; nothing measures the compounding exponents. | |
ASSET_FULL_NEGLECT_DECAY |
0.2 | fraction of condition per period | placeholder form: the two arms of the maintenance response in core/capital.asset_condition. Under-maintenance: condition *= (1 − deficit_fraction × NEGLECT_DECAY), so NEGLECT_DECAY is the drop at TOTAL neglect. Over-maintenance: condition += surplus × RESTORE_RATE × condition, bounded by the initial condition — you may not build a better asset by polishing it. |
an infrastructure condition-rating panel with maintenance spending per asset — FHWA NBI bridge condition ratings carry exactly this (condition rating 0–9 by structure by year, against reported maintenance expenditure). FIELD: the year-on-year rating change for structures at zero-versus-adequate maintenance. NOT the ASCE report-card grades, which are an aggregate letter and cannot resolve a per-period rate. THE ASYMMETRY IS THE CLAIM AND IT IS THE DEFENSIBLE PART — neglect costs 4x what surplus effort recovers, which is the entropy argument applied to one asset: degradation is spontaneous and repair is not. The LEVELS are desk estimates. Migrated from core/capital.py 2026-08-27, where both were shadow constants and a +7% move failed no test. |
ASSET_WRITEDOWN_CONDITION |
0.2 | condition ∈ [0, 1] | placeholder form: the condition below which an asset is written down — "the maintenance labour required to restore function exceeds the labour required to rebuild" ( core.capital.writedown_trigger). NAMED 2026-10-04: it was a bare 0.20 default in writedown_trigger and copied into eoh_dynamics.maintenance_strategy_compare with a comment saying it matched. |
the same FHWA NBI panel as ASSET_FULL_NEGLECT_DECAY — the condition rating at which structures are replaced rather than repaired. |
ASSET_OVER_MAINT_RESTORE_RATE |
0.05 | fraction of condition per period | placeholder form: the over-maintenance arm of the same response — condition += surplus × RESTORE_RATE × condition, bounded above by the MAINTAINED path via asset_condition_trajectory (what full upkeep would have left — 2026-10-04; it was the current condition, so nothing ever restored); asset_condition alone still caps at its initial_condition. See ASSET_FULL_NEGLECT_DECAY for the pair and for why the 4x asymmetry between them is the defensible part. |
as for ASSET_FULL_NEGLECT_DECAY — FHWA NBI condition ratings against maintenance expenditure. FIELD: the rating change for structures maintained ABOVE their assessed need, which is the rarer half of that panel and the reason this arm is the weaker of the two. |
ASSET_MAX_MAINTENANCE_QUALITY |
2.0 | multiple of the period's maintenance demand | normative | decided by how much upkeep a period can usefully absorb above its demand — the most surplus effort the restore arm credits. It sets the fastest catch-up, and with it the rebuild crossover (capital.rebuild_crossover_ratio). Named 2026-10-04 from a bare 2.0 in asset_condition.no measurement settles this |
ASSET_NATURAL_WEAR_RATE |
0.005 | fraction of condition per year | placeholder form: an asset's unavoidable wear under FULL maintenance — the maintained path asset_condition_trajectory carries, and the ceiling restoration climbs to. Split 2026-10-04 from HUMAN_CAPITAL_NATURAL_DECAY, which the asset functions read although it names a person's functional decline; same value, so nothing moved — the two are now free to differ. |
the FHWA NBI panel named for ASSET_FULL_NEGLECT_DECAY — FIELD: the year-on-year rating change for structures under ADEQUATE maintenance. |
MATURATION_BASE_GROWTH_RATE |
50.0 | EOH capacity per year; EOH capacity per TEH^exponent; dimensionless | placeholder form: core/capital.maturation_update — capacity_delta = BASE_GROWTH × years + EDU_COEFFICIENT × investment**EDU_EXPONENT × (1 + MATURATION_AUTO_LEVERAGE × ε) BASE_GROWTH is maturation without schooling; the education arm has diminishing returns via the exponent. |
as for MATURATION_EDU_* — PIAAC proficiency by age for adults at a FIXED level of completed education, which isolates ageing from schooling. the schooling-free arm — maturation that happens with age alone. Migrated from core/capital.py 2026-08-27 as a shadow constant. |
MATURATION_EDU_COEFFICIENT |
5.0 | EOH capacity per TEH^exponent; dimensionless | placeholder form: the education arm of maturation_update — EDU_COEFFICIENT × investment**EDU_EXPONENT × (1 + MATURATION_AUTO_LEVERAGE × ε) |
returns to schooling measured as CAPACITY, not earnings — earnings embed the wage structure this framework replaces, so a Mincer coefficient is the WRONG INSTRUMENT here for the same reason BLS Employee Tenure was wrong for SKILL_WORKING_LIFE_YEARS. FIELD: PIAAC numeracy and literacy proficiency by years of education — capability measured directly. EDU_EXPONENT = 0.5 is a SQUARE ROOT, the strongest diminishing return short of a logarithm, and it is the term deciding whether education investment ever saturates. Pinned by SHAPE (test_capital.TestMaturationShape), not level. Both migrated from core/capital.py 2026-08-27 as shadow constants. |
MATURATION_EDU_EXPONENT |
0.5 | EOH capacity per TEH^exponent; dimensionless | placeholder form: the education arm of maturation_update — EDU_COEFFICIENT × investment**EDU_EXPONENT × (1 + MATURATION_AUTO_LEVERAGE × ε) |
returns to schooling measured as CAPACITY, not earnings — earnings embed the wage structure this framework replaces, so a Mincer coefficient is the WRONG INSTRUMENT here for the same reason BLS Employee Tenure was wrong for SKILL_WORKING_LIFE_YEARS. FIELD: PIAAC numeracy and literacy proficiency by years of education — capability measured directly. EDU_EXPONENT = 0.5 is a SQUARE ROOT, the strongest diminishing return short of a logarithm, and it is the term deciding whether education investment ever saturates. Pinned by SHAPE (test_capital.TestMaturationShape), not level. Both migrated from core/capital.py 2026-08-27 as shadow constants. |
CAPITAL_MACHINE_PROFILES |
EOH eliminated per TEH of capital per year; TEH per capita; years; condition ∈ [0,1] | placeholder | measured EOH-elimination rates per capital class — the labour-hours a unit of each capital type actually displaces per year. This is the same instrument the food conservation test used at one stage (scenarios/food_conservation.py found a 62× collapse in production labour), so the method is proven and the coverage is what is missing. Note research/thermal_capital.py already treats the same inventory as dual-output; a measured pass should settle both fields at once. CALIBRATED TO A TARGET, on its own admission — the tiers were set so that "standard" across all types totals ~2000 TEH/person (matching CAPITAL_STOCK_DEFAULT) and implies ε ≈ 0.18, with "advanced" implying ε ≈ 0.48, so the table brackets the mid-arc by construction. That makes ε emergent from a capital stock whose profile was chosen to produce the ε expected of it. The circularity is documented, not resolved. |
|
AGE_EFFICIENCY_BETA_EQUIPMENT |
0.5 | dimensionless — the hyperbolic shape parameter | convention form: BLS's age-efficiency function for productive capital stocks, S_t = (L − t) / (L − β·t): efficiency relative to a new asset, slow loss early and fast late. It measures PRODUCTIVE EFFICIENCY, not price — the quantity condition is in machine_eoh_from_capital, where it multiplies what a unit of capital does. BLS Handbook of Methods, "Industry productivity — calculation" (bls.gov/opub/hom/inp/calculation.htm), read 2026-10-04: "assumed to be 0.5 for equipment and 0.75 for structures". |
— REPLACED the linear COND_DECAY_SLOPE (0.70 lost over a design life, a placeholder whose own note said "real condition curves are convex"). BLS is silent on IPP; software and R&D take the equipment β — a judgement, stated. BLS applies the curve over a normal distribution of service lives and retires to zero; applied here at a stock's MEAN age with a floor, so the derived condition errs HIGH (a concave curve at the mean overstates the mean of the curve), in the same direction as BEA's net-stock-weighted ages. |
AGE_EFFICIENCY_BETA_STRUCTURES |
0.75 | dimensionless — the hyperbolic shape parameter | convention form: BLS's age-efficiency function for productive capital stocks, S_t = (L − t) / (L − β·t): efficiency relative to a new asset, slow loss early and fast late. It measures PRODUCTIVE EFFICIENCY, not price — the quantity condition is in machine_eoh_from_capital, where it multiplies what a unit of capital does. BLS Handbook of Methods, "Industry productivity — calculation" (bls.gov/opub/hom/inp/calculation.htm), read 2026-10-04: "assumed to be 0.5 for equipment and 0.75 for structures". |
— REPLACED the linear COND_DECAY_SLOPE (0.70 lost over a design life, a placeholder whose own note said "real condition curves are convex"). BLS is silent on IPP; software and R&D take the equipment β — a judgement, stated. BLS applies the curve over a normal distribution of service lives and retires to zero; applied here at a stock's MEAN age with a floor, so the derived condition errs HIGH (a concave curve at the mean overstates the mean of the curve), in the same direction as BEA's net-stock-weighted ages. |
COND_DECAY_FLOOR |
0.3 | fraction of condition | placeholder form: the condition of an asset still in service at or past the end of its life — the floor must be above zero (write-down is a separate event). |
measured condition ratings against age by asset class. Bridge inventories publish exactly this (FHWA NBI, the source behind INFRA_TREATMENT_HOURS_*). Under BLS the curve reaches zero at end of life over a DISTRIBUTION of lives; this floor stands in for that distribution. |
CAPITAL_STRUCTURES_SHARE_DEFAULT |
0.788 | share of value, current cost | measured form: structures' share of the US stock that carries both an age and a BEA service life ('government' scope, current cost, 2024) — the blend between the two BLS curves for a stock whose mix is not stated ( civilization.condition_from_age_ratio). Frozen here because data.py cannot import the scenario layer; a test holds it to stock_age_ratio. |
— the unclassed path reads the US mix, as the default age reads the US age (CAPITAL_AGE_RATIO_DEFAULT): one economy standing in for one not stated. |
ENV_MONITORING_SATURATION_TEH_PER_CAPITA |
500.0 | TEH per capita of environmental-monitoring capital | placeholder | an observed relationship between monitoring investment and detected fraction of ecological deferral. This constant governs how much deferred ecological EOH is VISIBLE, so it sets what the ledger can see rather than what is there — the honest pointer is a detection-rate study, and until then monitoring capability is an assumption about the framework's own eyesight. |
CAPITAL_MACHINE_PROFILESis calibrated to a target, on its own admission. The tiers were set so that "standard" across all types totals ~2,000 TEH/person (matchingCAPITAL_STOCK_DEFAULT) and implies ε ≈ 0.18, with "advanced" implying ε ≈ 0.48 — so the table brackets the mid-arc by construction. That makes ε emergent from a capital stock whose profile was chosen to produce the ε expected of it. The circularity is documented here, not resolved.
TEH Destruction and ε-Scaling¶
The D1–D6 destruction constants and the named ε-scaling slopes that were previously
anonymous literals in eoh_fulfillment.py and simulation.py.
| Parameter | Default | Units | Tag | What would settle it |
|---|---|---|---|---|
CAPITAL_FAILURE_RATE |
0.005 | fraction of capital stock per year | placeholder form: catastrophic failure beyond recoverability, triggering D1 write-down. |
observed catastrophic-failure rates by asset class. Insurance and asset-registry loss data measure this directly; ASSET_TYPES in this file already carries per-class threshold ages, so a measured pass should produce a per-class rate rather than one economy-wide 0.5%. |
CAPITAL_WRITEDOWN_MONITORING_SLOPE |
0.3 | fraction of the failure rate removable at ε=1 | placeholder form: better monitoring at high ε reduces catastrophic failure — structurally right in direction (detected degradation is repairable degradation), asserted in magnitude. |
measured failure-rate reduction attributable to condition monitoring. Note this shares the framework's monitoring-eyesight assumption with ENV_MONITORING_SATURATION_TEH_PER_CAPITA and neither is measured. |
SHOCK_DEGRADED_TRUST_FRACTION |
0.1 | fraction of the Trust balance per period | normative form: the boundary between a DEGRADED and a CRISIS shock outcome. A shock that leaves the Trust insolvent is DEGRADED while its per-period deficit is at most this fraction of the balance — equivalently, while the Trust could carry it for at least 1 / fraction periods (ten, at 0.10) — and CRISIS beyond. With no Trust there is no runway, so every deficit is CRISIS. |
decided by a charter decision on how much runway counts as "degraded" rather than "in crisis" — a reporting boundary, not a measurement. no measurement settles this ONE CONCEPT, THREE UNNAMED COPIES, TWO VALUES until 2026-09-30: demographic_shock used 0.05, labor_income_shock and compound_shock 0.10, so the same deficit could read DEGRADED in one shock and CRISIS in another. Unified at the value two of three used; shocks._classify is the one reader. |
WORKFORCE_FRACTION_MIN |
0.05 | fraction of population in the workforce | placeholder form: the minimum workforce retained at any automation level. Structural in direction — full automation still needs someone, which Condition IV asserts as distributed competency — and asserted in level. |
the minimum staffing that holds ESSENTIAL_DOMAINS above COMPETENCY_THRESHOLD — but NOT derivable from those two alone (audit 2026-10-16): the threshold is a per-domain FRACTION of the workforce, so it implies no minimum workforce size. CONTESTABILITY_MIN_VIABLE_POPULATION retracted the same derivation for the same reason. What would settle it is that constant's pointer too: a minimum certified count per domain (an absolute) plus a multi-certification rate. |
ANNUAL_DEATH_RATE |
0.01 | fraction of population per year | bounded form: crude death rate. EXOGENOUS — nothing in the model links mortality to the deferred personal-EOH deficit that core/eoh_fulfillment.py now tracks, so a severe unserved survival obligation and this rate are independent. That is a known limit, stated because the deficit reports HOURS, not outcomes. |
band ≈0.007–0.011 per year across developed-world crude death rates (UN WPP / national vital statistics) errs NEITHER. Near the top of the band, and directly measurable — one of the cheapest debts in this file to close. The real limit is not the value: mortality is EXOGENOUS, and nothing links it to the deferred personal-EOH deficit the fulfillment layer now tracks. national vital statistics or UN WPP for the jurisdiction being modelled. 1%/yr is a plausible developed-world crude rate and directly measurable, making this one of the cheaper CHOSEN debts to close. |
ESTATE_INHERITANCE_FRACTION |
0.35 | fraction of the excess above reserve | normative form: the D5 split on death — inherited (circulatory), levied to Trust (circulatory), and the remainder written down. Note the three shares are a distributional design, and RECAL_ESTATE_CAPITAL_ESCHEAT_SHARE deliberately reuses the 0.15 levy fraction so capital estates get the same treatment as TEH estates rather than a new rule. |
decided by a charter decision on inheritance. There is no measurement of what fraction of an estate SHOULD pass to heirs; comparative inheritance-tax schedules give precedent for the range, not the value. no measurement settles this |
ESTATE_LEVY_FRACTION |
0.15 | fraction of the excess above reserve | normative form: the D5 split on death — inherited (circulatory), levied to Trust (circulatory), and the remainder written down. Note the three shares are a distributional design, and RECAL_ESTATE_CAPITAL_ESCHEAT_SHARE deliberately reuses the 0.15 levy fraction so capital estates get the same treatment as TEH estates rather than a new rule. |
decided by a charter decision on inheritance. There is no measurement of what fraction of an estate SHOULD pass to heirs; comparative inheritance-tax schedules give precedent for the range, not the value. no measurement settles this |
ESTATE_PERSONAL_RESERVE_YEARS |
10.0 | years of basket cost | normative form: the unconditionally preserved personal reserve — the part of an estate D5 never touches. |
decided by a charter decision. It is a commitment about how much security a person may hold beyond their own lifetime without it being reclaimed. no measurement settles this |
ACCUMULATION_CEILING_MULTIPLIER |
3.5 | multiple of base lifetime earnings | normative form: the D6 accumulation ceiling above which excess TEH is committed to capital formation rather than sitting in perpetual savings. Disabled by default. |
decided by a charter decision on the maximum permitted accumulation — the framework's most direct statement about tolerable wealth concentration, and it belongs in deliberation. Note it interacts with M_MAX: a 6× multiplier cap and a 3.5× accumulation cap are two different answers to the same question and have not been reconciled. no measurement settles this |
BASE_CAREER_YEARS |
42.0 | years | convention form: the career length the lifetime-earnings reference is built on. |
whether a lifetime-earnings reference should span the measured working life or a longer nominal career is a convention question, not a measurement one. DELIBERATELY NOT BOUND to SKILL_WORKING_LIFE_YEARS (37.5). They are different quantities — this is the span a lifetime-earnings reference is quoted over, that is measured cohort exit from the labour force — and binding them would move this value 10.7% on a claim nobody has made. The previous note here said the two were "close (40)", which went stale when that constant was measured down to 37.5. |
BASE_LIFETIME_EARNINGS_TEH |
87360.0 | TEH over a career | derived form: H_REF × BASE_CAREER_YEARS at a 1× multiplier = 87,360. |
n/a — arithmetic from a stated career length and work-year. BOUND, not restated (2026-09-02). This used the literal 2080 while H_REF was 2000, and its own form recorded that the repo therefore carried two work-year conventions. H_REF is now 2080 and this is an expression, so the two cannot diverge again. The VALUE IS UNCHANGED — 2080 × 42 = 87,360 either way, which is what made the defect survivable and invisible. |
ANNUAL_DEATH_RATE is exogenous: nothing links mortality to the deferred
personal-EOH deficit that core/eoh_fulfillment.py now tracks, so a severe unserved
survival obligation and this rate are independent. The deficit reports hours, not
outcomes, and this is why.
Human Capital and Population¶
| Parameter | Default | Units | Tag | What would settle it |
|---|---|---|---|---|
INFANT_EOH_EPSILON_FACTOR |
0.1 | fraction shift per ε unit | placeholder form: infant personal EOH declines with automation — formula feeding, monitoring and sanitation displace caregiver hours. This is the abatement claim of Block II applied to one age group, and note it runs OPPOSITE to care's low abatability; the two have not been reconciled. |
ATUS childcare hours per child against a capital index, which is the same cut AGE_GROUPS needs. |
HUMAN_CAPITAL_NATURAL_DECAY |
0.005 | fraction of condition per year | placeholder form: annual health-condition decay, higher for the elderly. Direction is biological; the 3× ratio between them is asserted. |
measured functional-decline rates by age — NHATS/HRS carry exactly this and are already named as the pointer for the AGE_GROUPS care weights, so one dataset closes both. |
HUMAN_CAPITAL_ELDERLY_DECAY |
0.015 | fraction of condition per year | placeholder form: annual health-condition decay, higher for the elderly. Direction is biological; the 3× ratio between them is asserted. |
measured functional-decline rates by age — NHATS/HRS carry exactly this and are already named as the pointer for the AGE_GROUPS care weights, so one dataset closes both. |
MATURATION_AUTO_LEVERAGE |
0.3 | dimensionless leverage coefficient per ε unit | placeholder form: automation amplifies the return on education — leverage = 1 + factor × ε. |
measured returns to schooling against an automation index. The direction is contested in the literature (automation may raise the return to skill or hollow the middle), so the sign is not safe to assume either. |
CAPACITY_DECLINE_ONSET_AGE |
50 | years of age | placeholder form: the three breakpoints of the piecewise capacity-decline schedule in core/population._capacity_decline_rate — no decline below onset, then early, mid and late phases. A step schedule is itself an approximation: real functional decline is continuous and accelerating, and the steps are a readable stand-in for a curve nobody here has fitted. |
NHATS or HRS functional-limitation prevalence by single year of age. FIELD: the age at which ADL/IADL limitation prevalence first departs from its plateau, and the two inflections above it. The same dataset is already the named pointer for HUMAN_CAPITAL_*_DECAY and the AGE_GROUPS care weights, so one ingest closes all three. Grip strength (NHANES, mean kg by age) bounds the PHYSICAL axis only and would understate cognitive decline. CAPACITY_DECLINE_MID_AGE is BOUND to the AGE_GROUP_RANGES elderly boundary rather than restating 65, so the two cannot drift apart. The onset at 50 is deliberately NOT the retirement age — the claim is biological capacity, not labour-force status, and conflating them would be the wrong-instrument error this repo keeps finding (a participation series measures whether people DO work, not what they are capable of). |
CAPACITY_DECLINE_MID_AGE |
65 | years of age | placeholder form: the three breakpoints of the piecewise capacity-decline schedule in core/population._capacity_decline_rate — no decline below onset, then early, mid and late phases. A step schedule is itself an approximation: real functional decline is continuous and accelerating, and the steps are a readable stand-in for a curve nobody here has fitted. |
NHATS or HRS functional-limitation prevalence by single year of age. FIELD: the age at which ADL/IADL limitation prevalence first departs from its plateau, and the two inflections above it. The same dataset is already the named pointer for HUMAN_CAPITAL_*_DECAY and the AGE_GROUPS care weights, so one ingest closes all three. Grip strength (NHANES, mean kg by age) bounds the PHYSICAL axis only and would understate cognitive decline. CAPACITY_DECLINE_MID_AGE is BOUND to the AGE_GROUP_RANGES elderly boundary rather than restating 65, so the two cannot drift apart. The onset at 50 is deliberately NOT the retirement age — the claim is biological capacity, not labour-force status, and conflating them would be the wrong-instrument error this repo keeps finding (a participation series measures whether people DO work, not what they are capable of). |
CAPACITY_DECLINE_LATE_AGE |
80 | years of age | placeholder form: the three breakpoints of the piecewise capacity-decline schedule in core/population._capacity_decline_rate — no decline below onset, then early, mid and late phases. A step schedule is itself an approximation: real functional decline is continuous and accelerating, and the steps are a readable stand-in for a curve nobody here has fitted. |
NHATS or HRS functional-limitation prevalence by single year of age. FIELD: the age at which ADL/IADL limitation prevalence first departs from its plateau, and the two inflections above it. The same dataset is already the named pointer for HUMAN_CAPITAL_*_DECAY and the AGE_GROUPS care weights, so one ingest closes all three. Grip strength (NHANES, mean kg by age) bounds the PHYSICAL axis only and would understate cognitive decline. CAPACITY_DECLINE_MID_AGE is BOUND to the AGE_GROUP_RANGES elderly boundary rather than restating 65, so the two cannot drift apart. The onset at 50 is deliberately NOT the retirement age — the claim is biological capacity, not labour-force status, and conflating them would be the wrong-instrument error this repo keeps finding (a participation series measures whether people DO work, not what they are capable of). |
CAPACITY_DECLINE_EARLY_RATE |
0.015 | fraction of capacity lost per year | placeholder form: annual fractional loss of entropy-reduction capacity within each phase. The ORDERING (early < mid < late) is the claim and is biologically well-founded; the three LEVELS and the ~2.7x and ~1.75x steps between them are desk estimates. |
as for the breakpoints above — NHATS/HRS by single year of age. FIELD: the year-on-year change in mean functional capacity within each band, NOT the prevalence level, which answers a different question. these govern a SHAPE, so they are pinned by shape tests (test_population.TestCapacityDeclineShape) rather than by their levels — a +7% perturbation of any of them moved no test at all before 2026-08-27, which is how they were found. |
CAPACITY_DECLINE_MID_RATE |
0.04 | fraction of capacity lost per year | placeholder form: annual fractional loss of entropy-reduction capacity within each phase. The ORDERING (early < mid < late) is the claim and is biologically well-founded; the three LEVELS and the ~2.7x and ~1.75x steps between them are desk estimates. |
as for the breakpoints above — NHATS/HRS by single year of age. FIELD: the year-on-year change in mean functional capacity within each band, NOT the prevalence level, which answers a different question. these govern a SHAPE, so they are pinned by shape tests (test_population.TestCapacityDeclineShape) rather than by their levels — a +7% perturbation of any of them moved no test at all before 2026-08-27, which is how they were found. |
CAPACITY_DECLINE_LATE_RATE |
0.07 | fraction of capacity lost per year | placeholder form: annual fractional loss of entropy-reduction capacity within each phase. The ORDERING (early < mid < late) is the claim and is biologically well-founded; the three LEVELS and the ~2.7x and ~1.75x steps between them are desk estimates. |
as for the breakpoints above — NHATS/HRS by single year of age. FIELD: the year-on-year change in mean functional capacity within each band, NOT the prevalence level, which answers a different question. these govern a SHAPE, so they are pinned by shape tests (test_population.TestCapacityDeclineShape) rather than by their levels — a +7% perturbation of any of them moved no test at all before 2026-08-27, which is how they were found. |
INFANT_EOH_EPSILON_FACTOR says infant personal EOH declines with automation —
which is Block II's abatement claim applied to one age group, and it runs opposite
to care's low abatability (PERSONAL_EOH_COMPONENTS, care abatability 0.25). The two
have not been reconciled.
Dashboard Health Thresholds¶
Every constant in this block is CHOSEN, and that is the honest reading rather than
a gap. These set where an indicator turns YELLOW or RED — they govern when the
framework raises its hand, not what is physically true. A threshold is a judgement
about tolerable risk by construction, so "measure it" is the wrong demand; the right
demand is that each be argued, and that the quantity it watches be measured. Where a
threshold could be derived from a modelled quantity rather than picked, the pointer
says so.
| Parameter | Default | Units | Tag | What would settle it |
|---|---|---|---|---|
DEFERRED_RATIO_WARN |
0.1 | fraction of EOH deferred | normative | decided by an observed relationship between deferral and unrecoverable degradation — the point past which deferred maintenance stops being catch-up work and becomes replacement. scenarios/recovery.py models the recovery side, so the crossover is derivable in-model rather than needing new data. no measurement settles this |
DEFERRED_RATIO_CRIT |
0.25 | fraction of EOH deferred | normative | decided by an observed relationship between deferral and unrecoverable degradation — the point past which deferred maintenance stops being catch-up work and becomes replacement. scenarios/recovery.py models the recovery side, so the crossover is derivable in-model rather than needing new data. no measurement settles this |
REGISTRATION_WARN |
0.35 | registration share (fraction of human EOH admitted to the ledger) | normative | decided by a charter decision on the minimum ledger coverage that keeps TEH circulating meaningfully. Note these are ε-INVARIANT while total_registration_share(ε) is low by design at low ε, so at subsistence the indicator reads RED for a state the framework considers correct. no measurement settles this |
REGISTRATION_CRIT |
0.2 | registration share (fraction of human EOH admitted to the ledger) | normative | decided by a charter decision on the minimum ledger coverage that keeps TEH circulating meaningfully. Note these are ε-INVARIANT while total_registration_share(ε) is low by design at low ε, so at subsistence the indicator reads RED for a state the framework considers correct. no measurement settles this |
COMPOUNDING_WARN |
0.15 | fraction of original EOH added by compounding | normative | decided by the compounding rate at which ASSET_TYPES' power-law escalation outruns any feasible maintenance response — derivable from that table plus a labour-supply constraint, so this is a wiring debt rather than a data debt. no measurement settles this |
COMPOUNDING_CRIT |
0.5 | fraction of original EOH added by compounding | normative | decided by the compounding rate at which ASSET_TYPES' power-law escalation outruns any feasible maintenance response — derivable from that table plus a labour-supply constraint, so this is a wiring debt rather than a data debt. no measurement settles this |
MAINTENANCE_CRISIS_FULFILMENT |
0.85 | fraction of annual infrastructure EOH fulfilled | instance | you supply the collective's own maintenance record — what share of its infrastructure upkeep it actually performs. shipped default 0.85 — chronic under-service, the CLI's working figure for the maintenance_crisis scenario since it was first wired; not a measurement. |
MAINTENANCE_CRISIS_YEARS |
10 | years | instance | you supply the horizon the caller wants to see the backlog over. shipped default 10 — long enough to show the compounding the scenario is about. |
CAPITAL_LOSS_FRACTION_DEFAULT |
0.1 | fraction of the capital stock | instance | you supply the event's own damage assessment — the share of the collective's capital a wildfire, flood or earthquake destroyed. shipped default 0.10 — illustrative, so scenario run capital_loss runs with no flags; not a statement about any event (2026-10-03). |
PP_INDEX_WARN |
1.05 | purchasing-power index (1.0 = parity) | normative form: the threshold is ε-scaled, threshold = 1 + slope × ε, because purchasing power is expected to RISE across the arc — so a flat 1.05 would pass trivially at high ε. |
decided by a charter decision on how much purchasing-power gain the arc is expected to deliver before the absence of it counts as a warning. no measurement settles this |
PP_INDEX_WARN_SLOPE |
0.125 | purchasing-power index per ε unit | derived form: (PP_INDEX_WARN − 1.0) / 0.40 — the slope through the ε=0.40 reference point that makes the threshold 1.0 at ε=0. |
n/a — it inherits PP_INDEX_WARN's standing by construction. |
CARE_ADMISSION_GREEN_FRAC |
0.2 | fraction of care-registration saturation | normative | decided by a charter decision on how much care must be on the ledger before admission counts as working. The quantity watched resolves with CARE_SIGMOID_DEFAULTS; the thresholds are the framework's own bar. no measurement settles this |
CARE_ADMISSION_YELLOW_FRAC |
0.1 | fraction of care-registration saturation | normative | decided by a charter decision on how much care must be on the ledger before admission counts as working. The quantity watched resolves with CARE_SIGMOID_DEFAULTS; the thresholds are the framework's own bar. no measurement settles this |
Two honest problems this block has carried (the first no longer appears in the table above — the constant was retired on 2026-09-16 and the row went with it):
LEVY_SUFFICIENCY_WARNwas calibrated to the value it watched, and is now RETIRED (2026-09-16). It warned when the levy covered < 2% of the guarantee, and the shippedSUFF_LEVY_RATEcovered ≈2% at canonical defaults, so it would not warn about the configuration it was drawn around. Its pillar was replaced by an identity rather than another threshold; see the note above.REGISTRATION_WARN/_CRITare ε-invariant whiletotal_registration_share(ε)is low by design at low ε — so at subsistence the indicator reads RED for a state the framework considers correct.
Ground Use Fee (NLSA — land/guf.py)¶
The largest single block in data.py (51 constants) and, before 2026-08-09, entirely
absent from this document.
Provenance warning. "NLSA" is the National Land Stewardship Authority, and its Technical Manual TM-0042 is a document of this framework — the template's own header reads "Based on NLSA from HOURSFramework". It is written in the register of an external standard, and every constant in the block cites it by equation number.
Those citations establish a functional form the framework asserts. They supply no external evidence for a value. So an "NLSA Eq. N" reference appears only under
form:, never underresolves_by:, and every value constant in the block isCHOSEN. Citing one's own design document as a source is exactly the authority-borrowing the tag scheme exists to prevent, and the equation numbers read like external provenance to anyone who has not opened the template.
| Parameter | Default | Units | Tag | What would settle it |
|---|---|---|---|---|
GUF_PSI_A |
0.8 | dimensionless | placeholder form: NLSA Eq. 18 — the framework's own claim that land's labour-content cost peaks mid-arc and is low at both extremes. |
a ground-fee-vs-automation panel across jurisdictions at differing automation levels. Nothing in the repo constrains the rise and fall speeds independently of one another, so sweep them jointly until it does. NOTE such a panel would now have to justify Ψ existing at all alongside α, not merely its shape parameters. THESE NO LONGER GOVERN THE SHIPPED FEE (2026-08-20, author decision). land/guf.psi_application defaults to retired (Ψ ≡ 1) and the fee's only automation response is now α(ε) = labor_content_scaling inside U. The whole family remains LIVE, not retired, because psi_policy="bell" still applies it and the NLSA §4.4 boundary conditions are still pinned against it — but nothing in the default path reads the curve. The audit that retired it: the ε→0.99 end duplicated α's own stated rationale (combined discount 273× for one mechanism), and the ε=0 floor was a claim about institutional COLLECTION CAPACITY pointing opposite to α's cost claim. See the GUF term-basis audit §17. |
GUF_PSI_B |
1.2 | dimensionless | placeholder form: NLSA Eq. 18 — the framework's own claim that land's labour-content cost peaks mid-arc and is low at both extremes. |
a ground-fee-vs-automation panel across jurisdictions at differing automation levels. Nothing in the repo constrains the rise and fall speeds independently of one another, so sweep them jointly until it does. NOTE such a panel would now have to justify Ψ existing at all alongside α, not merely its shape parameters. THESE NO LONGER GOVERN THE SHIPPED FEE (2026-08-20, author decision). land/guf.psi_application defaults to retired (Ψ ≡ 1) and the fee's only automation response is now α(ε) = labor_content_scaling inside U. The whole family remains LIVE, not retired, because psi_policy="bell" still applies it and the NLSA §4.4 boundary conditions are still pinned against it — but nothing in the default path reads the curve. The audit that retired it: the ε→0.99 end duplicated α's own stated rationale (combined discount 273× for one mechanism), and the ε=0 floor was a claim about institutional COLLECTION CAPACITY pointing opposite to α's cost claim. See the GUF term-basis audit §17. |
GUF_PSI_FLOOR |
0.02 | fraction of the reference fee | placeholder | the lowest ground-use fee observed in a highly-automated jurisdiction that still levies one. The floor asserts the fee never reaches zero, which is a policy commitment awaiting an observed analogue. |
GUF_PSI_NORM |
3.76527397188 | dimensionless | derived form: the normalization that puts Ψ's peak at exactly 1.0. Ψ(ε) = N·ε^a·(1−ε)^b + floor peaks at ε* = a/(a+b), so N = (1 − floor) / (ε*^a · (1−ε*)^b). It now MOVES when a, b or the floor move, which is the whole point — it was pinned, and a pinned normalization of two live parameters is a stale value waiting to happen. COMPUTED 2026-08-15, was pinned at 4.0. Its own form claimed "peak ≈ 1.0"; at 4.0 the actual peak was 1.061, a 6% overshoot of the constant's stated purpose. The derived value is 3.765274. Effect on the fee curve is a near-uniform −5.7% across the productive arc (−5.73% at ε=0.20, −5.76% at 0.40, −5.64% at 0.80), tapering to −2.6% at ε=0.99 where the floor dominates. NO TEST MOVED, which is the second finding: the peak of the GUF fee curve was entirely unpinned. tests/land/test_calibration.py now pins it. No measurement was ever owed here — the debt was in the wiring, and this is the wiring. It is derived, not bounded: it inherits GUF_PSI_A and GUF_PSI_B's standing, and both are placeholders. Deriving it removes a free parameter and a 6% inconsistency; it does not make the curve better founded. |
— |
GUF_ALPHA_ZETA |
0.8 | dimensionless | placeholder form: NLSA Eq. 19–20 — labour content declines with automation to an irreducible human-judgment floor. |
measured labour-hours per parcel-administration task against an automation index — a TIME SERIES of the eight occupations SCALING_BASIS names, or a per-occupation automatability score built for that purpose. FIELD: BLS employment for those eight SOC codes across vintages, which measures the decline directly and needs no index at all.THE MISSING HALF IS AN AUTOMATION INDEX AND THE REGISTRY HAS NONE. multiplier_registry_v5.csv carries i_substitutability, which measures whether ANOTHER HUMAN can substitute for a worker — adjacent to automatability and not the same thing. Reading it as an automation index would repeat the SKILL_WORKING_LIFE_YEARS wrong-instrument error, so it is named here as refused rather than left for someone to notice. the 10 is the SHAPE being bounded rather than free — α must be positive, fall monotonically in ε, and equal 1.0 at the calibration point by construction, which fixes the level and leaves the curvature open. |
GUF_ALPHA_FLOOR |
0.05 | dimensionless | placeholder form: NLSA Eq. 19–20 — labour content declines with automation to an irreducible human-judgment floor. |
measured labour-hours per parcel-administration task against an automation index — a TIME SERIES of the eight occupations SCALING_BASIS names, or a per-occupation automatability score built for that purpose. FIELD: BLS employment for those eight SOC codes across vintages, which measures the decline directly and needs no index at all.THE MISSING HALF IS AN AUTOMATION INDEX AND THE REGISTRY HAS NONE. multiplier_registry_v5.csv carries i_substitutability, which measures whether ANOTHER HUMAN can substitute for a worker — adjacent to automatability and not the same thing. Reading it as an automation index would repeat the SKILL_WORKING_LIFE_YEARS wrong-instrument error, so it is named here as refused rather than left for someone to notice. the 10 is the SHAPE being bounded rather than free — α must be positive, fall monotonically in ε, and equal 1.0 at the calibration point by construction, which fixes the level and leaves the curvature open. |
GUF_LVI_W_CENTRALITY |
0.35 | fraction | instance form: NLSA Eq. 3 — the four weights are constrained to sum to 1.0. The split between them is constrained by nothing. |
you supply a hedonic regression of parcel transaction values on the four sub-indices FOR YOUR JURISDICTION. These weights ARE that regression's coefficients, so this is a well-defined study rather than an aspiration — it is the standard land-valuation method. Land value is local by construction: no national or global figure substitutes. shipped default an even-handed split (0.35/0.30/0.20/0.15) summing to 1.0, standing in for a regression nobody has run here. The ORDER encodes a claim (centrality dominates, natural amenity least) that your own regression may invert. |
GUF_LVI_W_TRANSIT |
0.3 | fraction | instance form: NLSA Eq. 3 — the four weights are constrained to sum to 1.0. The split between them is constrained by nothing. |
you supply a hedonic regression of parcel transaction values on the four sub-indices FOR YOUR JURISDICTION. These weights ARE that regression's coefficients, so this is a well-defined study rather than an aspiration — it is the standard land-valuation method. Land value is local by construction: no national or global figure substitutes. shipped default an even-handed split (0.35/0.30/0.20/0.15) summing to 1.0, standing in for a regression nobody has run here. The ORDER encodes a claim (centrality dominates, natural amenity least) that your own regression may invert. |
GUF_LVI_W_SERVICES |
0.2 | fraction | instance form: NLSA Eq. 3 — the four weights are constrained to sum to 1.0. The split between them is constrained by nothing. |
you supply a hedonic regression of parcel transaction values on the four sub-indices FOR YOUR JURISDICTION. These weights ARE that regression's coefficients, so this is a well-defined study rather than an aspiration — it is the standard land-valuation method. Land value is local by construction: no national or global figure substitutes. shipped default an even-handed split (0.35/0.30/0.20/0.15) summing to 1.0, standing in for a regression nobody has run here. The ORDER encodes a claim (centrality dominates, natural amenity least) that your own regression may invert. |
GUF_LVI_W_NATURAL_AMENITY |
0.15 | fraction | instance form: NLSA Eq. 3 — the four weights are constrained to sum to 1.0. The split between them is constrained by nothing. |
you supply a hedonic regression of parcel transaction values on the four sub-indices FOR YOUR JURISDICTION. These weights ARE that regression's coefficients, so this is a well-defined study rather than an aspiration — it is the standard land-valuation method. Land value is local by construction: no national or global figure substitutes. shipped default an even-handed split (0.35/0.30/0.20/0.15) summing to 1.0, standing in for a regression nobody has run here. The ORDER encodes a claim (centrality dominates, natural amenity least) that your own regression may invert. |
GUF_USE_RESIDENTIAL_PRIMARY |
10.0 | TEH per Standard Land Unit per year, at ε=0.40 | placeholder form: NLSA Eq. 9 — midpoints of the manual's per-category ranges. |
a servicing census indexed by USE CATEGORY — collective labour-hours per year attributable to servicing each category (roads, utilities, inspection, dispute resolution). THIS FIELD USED TO PROMISE THAT SUCH A CENSUS, "divided by land area", WOULD SETTLE "THE LEVELS AND THE RATIOS IN ONE INSTRUMENT". Corrected 2026-08-31: a per-area census reaches at most 41.9% of the cost structure. scenarios/use_split measured what each servicing occupation's cost actually follows — area 41.9%, PARCEL COUNT 44.5%, THROUGHPUT 13.6% — and the fee acquired a SECOND BASIS on 2026-08-30 (GUF_PARCEL_RATE_TEH_PER_PARCEL_YR, author sign-off), so "the fee" is no longer one per-SLU number to settle. What settles what: these ten per-SLU coefficients take the area-scaling 41.9% per use category, and that census is still the instrument and still unrun; the per-parcel term needs a PER-PARCEL servicing cost per use category, which does not exist (GUF_PARCEL_RATE_TEH_PER_PARCEL_YR is a national blended rate); and throughput's 13.6% is reachable by NO term the fee has, because Omega is an occupancy FRACTION of a parcel and not a headcount. THE INDEXING OBSTACLE IS UNCHANGED AND IS THE REAL ONE: both censuses this repo owns aggregate over LAND CLASSES while this table is indexed by USE CATEGORY, and occupational data is not coded by the land use it serves. GUF_SERVICE_RETENTION_BY_USE is the one measured ordering that IS indexed this way, correlating at Spearman 0.891 with the shipped ratios — a lead for the SHAPE, not a level, and scenarios/use_split records why four categories disagree by two ranks.CALIBRATED TO A TARGET THAT IS NOW WITHDRAWN (retagged 2026-08-09; target withdrawn by the author 2026-09-16). These were scaled ×100 from the template's abstract unit values so that aggregate GUF over a 1M-population inventory (~400k residential + 20k commercial parcels) landed co-equal with levy revenue at mid-arc: residential ≈ 9.3M TEH/yr, commercial ≈ 4.1M, total ≈ 13.4M against levy ≈ 6.2M (≈2.2×) at the 1.25% levy. The tag stays placeholder for the same reason it always did — a value reverse-engineered from a desired outcome is CHOSEN under this scheme's own precedent (_ECOLOGICAL_SPIKE_INTENSITY, 2026-08-05) — and withdrawing the target does not make it measured. It makes the ratios unjustified rather than justified by a goal the framework no longer holds. |
GUF_USE_RESIDENTIAL_SECONDARY |
21.5 | TEH per Standard Land Unit per year, at ε=0.40 | placeholder form: NLSA Eq. 9 — midpoints of the manual's per-category ranges. |
a servicing census indexed by USE CATEGORY — collective labour-hours per year attributable to servicing each category (roads, utilities, inspection, dispute resolution). THIS FIELD USED TO PROMISE THAT SUCH A CENSUS, "divided by land area", WOULD SETTLE "THE LEVELS AND THE RATIOS IN ONE INSTRUMENT". Corrected 2026-08-31: a per-area census reaches at most 41.9% of the cost structure. scenarios/use_split measured what each servicing occupation's cost actually follows — area 41.9%, PARCEL COUNT 44.5%, THROUGHPUT 13.6% — and the fee acquired a SECOND BASIS on 2026-08-30 (GUF_PARCEL_RATE_TEH_PER_PARCEL_YR, author sign-off), so "the fee" is no longer one per-SLU number to settle. What settles what: these ten per-SLU coefficients take the area-scaling 41.9% per use category, and that census is still the instrument and still unrun; the per-parcel term needs a PER-PARCEL servicing cost per use category, which does not exist (GUF_PARCEL_RATE_TEH_PER_PARCEL_YR is a national blended rate); and throughput's 13.6% is reachable by NO term the fee has, because Omega is an occupancy FRACTION of a parcel and not a headcount. THE INDEXING OBSTACLE IS UNCHANGED AND IS THE REAL ONE: both censuses this repo owns aggregate over LAND CLASSES while this table is indexed by USE CATEGORY, and occupational data is not coded by the land use it serves. GUF_SERVICE_RETENTION_BY_USE is the one measured ordering that IS indexed this way, correlating at Spearman 0.891 with the shipped ratios — a lead for the SHAPE, not a level, and scenarios/use_split records why four categories disagree by two ranks.CALIBRATED TO A TARGET THAT IS NOW WITHDRAWN (retagged 2026-08-09; target withdrawn by the author 2026-09-16). These were scaled ×100 from the template's abstract unit values so that aggregate GUF over a 1M-population inventory (~400k residential + 20k commercial parcels) landed co-equal with levy revenue at mid-arc: residential ≈ 9.3M TEH/yr, commercial ≈ 4.1M, total ≈ 13.4M against levy ≈ 6.2M (≈2.2×) at the 1.25% levy. The tag stays placeholder for the same reason it always did — a value reverse-engineered from a desired outcome is CHOSEN under this scheme's own precedent (_ECOLOGICAL_SPIKE_INTENSITY, 2026-08-05) — and withdrawing the target does not make it measured. It makes the ratios unjustified rather than justified by a goal the framework no longer holds. |
GUF_USE_AGRICULTURAL_ACTIVE |
2.0 | TEH per Standard Land Unit per year, at ε=0.40 | placeholder form: NLSA Eq. 9 — midpoints of the manual's per-category ranges. |
a servicing census indexed by USE CATEGORY — collective labour-hours per year attributable to servicing each category (roads, utilities, inspection, dispute resolution). THIS FIELD USED TO PROMISE THAT SUCH A CENSUS, "divided by land area", WOULD SETTLE "THE LEVELS AND THE RATIOS IN ONE INSTRUMENT". Corrected 2026-08-31: a per-area census reaches at most 41.9% of the cost structure. scenarios/use_split measured what each servicing occupation's cost actually follows — area 41.9%, PARCEL COUNT 44.5%, THROUGHPUT 13.6% — and the fee acquired a SECOND BASIS on 2026-08-30 (GUF_PARCEL_RATE_TEH_PER_PARCEL_YR, author sign-off), so "the fee" is no longer one per-SLU number to settle. What settles what: these ten per-SLU coefficients take the area-scaling 41.9% per use category, and that census is still the instrument and still unrun; the per-parcel term needs a PER-PARCEL servicing cost per use category, which does not exist (GUF_PARCEL_RATE_TEH_PER_PARCEL_YR is a national blended rate); and throughput's 13.6% is reachable by NO term the fee has, because Omega is an occupancy FRACTION of a parcel and not a headcount. THE INDEXING OBSTACLE IS UNCHANGED AND IS THE REAL ONE: both censuses this repo owns aggregate over LAND CLASSES while this table is indexed by USE CATEGORY, and occupational data is not coded by the land use it serves. GUF_SERVICE_RETENTION_BY_USE is the one measured ordering that IS indexed this way, correlating at Spearman 0.891 with the shipped ratios — a lead for the SHAPE, not a level, and scenarios/use_split records why four categories disagree by two ranks.CALIBRATED TO A TARGET THAT IS NOW WITHDRAWN (retagged 2026-08-09; target withdrawn by the author 2026-09-16). These were scaled ×100 from the template's abstract unit values so that aggregate GUF over a 1M-population inventory (~400k residential + 20k commercial parcels) landed co-equal with levy revenue at mid-arc: residential ≈ 9.3M TEH/yr, commercial ≈ 4.1M, total ≈ 13.4M against levy ≈ 6.2M (≈2.2×) at the 1.25% levy. The tag stays placeholder for the same reason it always did — a value reverse-engineered from a desired outcome is CHOSEN under this scheme's own precedent (_ECOLOGICAL_SPIKE_INTENSITY, 2026-08-05) — and withdrawing the target does not make it measured. It makes the ratios unjustified rather than justified by a goal the framework no longer holds. |
GUF_USE_AGRICULTURAL_FALLOW |
5.0 | TEH per Standard Land Unit per year, at ε=0.40 | placeholder form: NLSA Eq. 9 — midpoints of the manual's per-category ranges. |
a servicing census indexed by USE CATEGORY — collective labour-hours per year attributable to servicing each category (roads, utilities, inspection, dispute resolution). THIS FIELD USED TO PROMISE THAT SUCH A CENSUS, "divided by land area", WOULD SETTLE "THE LEVELS AND THE RATIOS IN ONE INSTRUMENT". Corrected 2026-08-31: a per-area census reaches at most 41.9% of the cost structure. scenarios/use_split measured what each servicing occupation's cost actually follows — area 41.9%, PARCEL COUNT 44.5%, THROUGHPUT 13.6% — and the fee acquired a SECOND BASIS on 2026-08-30 (GUF_PARCEL_RATE_TEH_PER_PARCEL_YR, author sign-off), so "the fee" is no longer one per-SLU number to settle. What settles what: these ten per-SLU coefficients take the area-scaling 41.9% per use category, and that census is still the instrument and still unrun; the per-parcel term needs a PER-PARCEL servicing cost per use category, which does not exist (GUF_PARCEL_RATE_TEH_PER_PARCEL_YR is a national blended rate); and throughput's 13.6% is reachable by NO term the fee has, because Omega is an occupancy FRACTION of a parcel and not a headcount. THE INDEXING OBSTACLE IS UNCHANGED AND IS THE REAL ONE: both censuses this repo owns aggregate over LAND CLASSES while this table is indexed by USE CATEGORY, and occupational data is not coded by the land use it serves. GUF_SERVICE_RETENTION_BY_USE is the one measured ordering that IS indexed this way, correlating at Spearman 0.891 with the shipped ratios — a lead for the SHAPE, not a level, and scenarios/use_split records why four categories disagree by two ranks.CALIBRATED TO A TARGET THAT IS NOW WITHDRAWN (retagged 2026-08-09; target withdrawn by the author 2026-09-16). These were scaled ×100 from the template's abstract unit values so that aggregate GUF over a 1M-population inventory (~400k residential + 20k commercial parcels) landed co-equal with levy revenue at mid-arc: residential ≈ 9.3M TEH/yr, commercial ≈ 4.1M, total ≈ 13.4M against levy ≈ 6.2M (≈2.2×) at the 1.25% levy. The tag stays placeholder for the same reason it always did — a value reverse-engineered from a desired outcome is CHOSEN under this scheme's own precedent (_ECOLOGICAL_SPIKE_INTENSITY, 2026-08-05) — and withdrawing the target does not make it measured. It makes the ratios unjustified rather than justified by a goal the framework no longer holds. |
GUF_USE_COMMERCIAL_RETAIL |
30.0 | TEH per Standard Land Unit per year, at ε=0.40 | placeholder form: NLSA Eq. 9 — midpoints of the manual's per-category ranges. |
a servicing census indexed by USE CATEGORY — collective labour-hours per year attributable to servicing each category (roads, utilities, inspection, dispute resolution). THIS FIELD USED TO PROMISE THAT SUCH A CENSUS, "divided by land area", WOULD SETTLE "THE LEVELS AND THE RATIOS IN ONE INSTRUMENT". Corrected 2026-08-31: a per-area census reaches at most 41.9% of the cost structure. scenarios/use_split measured what each servicing occupation's cost actually follows — area 41.9%, PARCEL COUNT 44.5%, THROUGHPUT 13.6% — and the fee acquired a SECOND BASIS on 2026-08-30 (GUF_PARCEL_RATE_TEH_PER_PARCEL_YR, author sign-off), so "the fee" is no longer one per-SLU number to settle. What settles what: these ten per-SLU coefficients take the area-scaling 41.9% per use category, and that census is still the instrument and still unrun; the per-parcel term needs a PER-PARCEL servicing cost per use category, which does not exist (GUF_PARCEL_RATE_TEH_PER_PARCEL_YR is a national blended rate); and throughput's 13.6% is reachable by NO term the fee has, because Omega is an occupancy FRACTION of a parcel and not a headcount. THE INDEXING OBSTACLE IS UNCHANGED AND IS THE REAL ONE: both censuses this repo owns aggregate over LAND CLASSES while this table is indexed by USE CATEGORY, and occupational data is not coded by the land use it serves. GUF_SERVICE_RETENTION_BY_USE is the one measured ordering that IS indexed this way, correlating at Spearman 0.891 with the shipped ratios — a lead for the SHAPE, not a level, and scenarios/use_split records why four categories disagree by two ranks.CALIBRATED TO A TARGET THAT IS NOW WITHDRAWN (retagged 2026-08-09; target withdrawn by the author 2026-09-16). These were scaled ×100 from the template's abstract unit values so that aggregate GUF over a 1M-population inventory (~400k residential + 20k commercial parcels) landed co-equal with levy revenue at mid-arc: residential ≈ 9.3M TEH/yr, commercial ≈ 4.1M, total ≈ 13.4M against levy ≈ 6.2M (≈2.2×) at the 1.25% levy. The tag stays placeholder for the same reason it always did — a value reverse-engineered from a desired outcome is CHOSEN under this scheme's own precedent (_ECOLOGICAL_SPIKE_INTENSITY, 2026-08-05) — and withdrawing the target does not make it measured. It makes the ratios unjustified rather than justified by a goal the framework no longer holds. |
GUF_USE_COMMERCIAL_OFFICE |
22.5 | TEH per Standard Land Unit per year, at ε=0.40 | placeholder form: NLSA Eq. 9 — midpoints of the manual's per-category ranges. |
a servicing census indexed by USE CATEGORY — collective labour-hours per year attributable to servicing each category (roads, utilities, inspection, dispute resolution). THIS FIELD USED TO PROMISE THAT SUCH A CENSUS, "divided by land area", WOULD SETTLE "THE LEVELS AND THE RATIOS IN ONE INSTRUMENT". Corrected 2026-08-31: a per-area census reaches at most 41.9% of the cost structure. scenarios/use_split measured what each servicing occupation's cost actually follows — area 41.9%, PARCEL COUNT 44.5%, THROUGHPUT 13.6% — and the fee acquired a SECOND BASIS on 2026-08-30 (GUF_PARCEL_RATE_TEH_PER_PARCEL_YR, author sign-off), so "the fee" is no longer one per-SLU number to settle. What settles what: these ten per-SLU coefficients take the area-scaling 41.9% per use category, and that census is still the instrument and still unrun; the per-parcel term needs a PER-PARCEL servicing cost per use category, which does not exist (GUF_PARCEL_RATE_TEH_PER_PARCEL_YR is a national blended rate); and throughput's 13.6% is reachable by NO term the fee has, because Omega is an occupancy FRACTION of a parcel and not a headcount. THE INDEXING OBSTACLE IS UNCHANGED AND IS THE REAL ONE: both censuses this repo owns aggregate over LAND CLASSES while this table is indexed by USE CATEGORY, and occupational data is not coded by the land use it serves. GUF_SERVICE_RETENTION_BY_USE is the one measured ordering that IS indexed this way, correlating at Spearman 0.891 with the shipped ratios — a lead for the SHAPE, not a level, and scenarios/use_split records why four categories disagree by two ranks.CALIBRATED TO A TARGET THAT IS NOW WITHDRAWN (retagged 2026-08-09; target withdrawn by the author 2026-09-16). These were scaled ×100 from the template's abstract unit values so that aggregate GUF over a 1M-population inventory (~400k residential + 20k commercial parcels) landed co-equal with levy revenue at mid-arc: residential ≈ 9.3M TEH/yr, commercial ≈ 4.1M, total ≈ 13.4M against levy ≈ 6.2M (≈2.2×) at the 1.25% levy. The tag stays placeholder for the same reason it always did — a value reverse-engineered from a desired outcome is CHOSEN under this scheme's own precedent (_ECOLOGICAL_SPIKE_INTENSITY, 2026-08-05) — and withdrawing the target does not make it measured. It makes the ratios unjustified rather than justified by a goal the framework no longer holds. |
GUF_USE_INDUSTRIAL_LIGHT |
17.0 | TEH per Standard Land Unit per year, at ε=0.40 | placeholder form: NLSA Eq. 9 — midpoints of the manual's per-category ranges. |
a servicing census indexed by USE CATEGORY — collective labour-hours per year attributable to servicing each category (roads, utilities, inspection, dispute resolution). THIS FIELD USED TO PROMISE THAT SUCH A CENSUS, "divided by land area", WOULD SETTLE "THE LEVELS AND THE RATIOS IN ONE INSTRUMENT". Corrected 2026-08-31: a per-area census reaches at most 41.9% of the cost structure. scenarios/use_split measured what each servicing occupation's cost actually follows — area 41.9%, PARCEL COUNT 44.5%, THROUGHPUT 13.6% — and the fee acquired a SECOND BASIS on 2026-08-30 (GUF_PARCEL_RATE_TEH_PER_PARCEL_YR, author sign-off), so "the fee" is no longer one per-SLU number to settle. What settles what: these ten per-SLU coefficients take the area-scaling 41.9% per use category, and that census is still the instrument and still unrun; the per-parcel term needs a PER-PARCEL servicing cost per use category, which does not exist (GUF_PARCEL_RATE_TEH_PER_PARCEL_YR is a national blended rate); and throughput's 13.6% is reachable by NO term the fee has, because Omega is an occupancy FRACTION of a parcel and not a headcount. THE INDEXING OBSTACLE IS UNCHANGED AND IS THE REAL ONE: both censuses this repo owns aggregate over LAND CLASSES while this table is indexed by USE CATEGORY, and occupational data is not coded by the land use it serves. GUF_SERVICE_RETENTION_BY_USE is the one measured ordering that IS indexed this way, correlating at Spearman 0.891 with the shipped ratios — a lead for the SHAPE, not a level, and scenarios/use_split records why four categories disagree by two ranks.CALIBRATED TO A TARGET THAT IS NOW WITHDRAWN (retagged 2026-08-09; target withdrawn by the author 2026-09-16). These were scaled ×100 from the template's abstract unit values so that aggregate GUF over a 1M-population inventory (~400k residential + 20k commercial parcels) landed co-equal with levy revenue at mid-arc: residential ≈ 9.3M TEH/yr, commercial ≈ 4.1M, total ≈ 13.4M against levy ≈ 6.2M (≈2.2×) at the 1.25% levy. The tag stays placeholder for the same reason it always did — a value reverse-engineered from a desired outcome is CHOSEN under this scheme's own precedent (_ECOLOGICAL_SPIKE_INTENSITY, 2026-08-05) — and withdrawing the target does not make it measured. It makes the ratios unjustified rather than justified by a goal the framework no longer holds. |
GUF_USE_INDUSTRIAL_HEAVY |
37.5 | TEH per Standard Land Unit per year, at ε=0.40 | placeholder form: NLSA Eq. 9 — midpoints of the manual's per-category ranges. |
a servicing census indexed by USE CATEGORY — collective labour-hours per year attributable to servicing each category (roads, utilities, inspection, dispute resolution). THIS FIELD USED TO PROMISE THAT SUCH A CENSUS, "divided by land area", WOULD SETTLE "THE LEVELS AND THE RATIOS IN ONE INSTRUMENT". Corrected 2026-08-31: a per-area census reaches at most 41.9% of the cost structure. scenarios/use_split measured what each servicing occupation's cost actually follows — area 41.9%, PARCEL COUNT 44.5%, THROUGHPUT 13.6% — and the fee acquired a SECOND BASIS on 2026-08-30 (GUF_PARCEL_RATE_TEH_PER_PARCEL_YR, author sign-off), so "the fee" is no longer one per-SLU number to settle. What settles what: these ten per-SLU coefficients take the area-scaling 41.9% per use category, and that census is still the instrument and still unrun; the per-parcel term needs a PER-PARCEL servicing cost per use category, which does not exist (GUF_PARCEL_RATE_TEH_PER_PARCEL_YR is a national blended rate); and throughput's 13.6% is reachable by NO term the fee has, because Omega is an occupancy FRACTION of a parcel and not a headcount. THE INDEXING OBSTACLE IS UNCHANGED AND IS THE REAL ONE: both censuses this repo owns aggregate over LAND CLASSES while this table is indexed by USE CATEGORY, and occupational data is not coded by the land use it serves. GUF_SERVICE_RETENTION_BY_USE is the one measured ordering that IS indexed this way, correlating at Spearman 0.891 with the shipped ratios — a lead for the SHAPE, not a level, and scenarios/use_split records why four categories disagree by two ranks.CALIBRATED TO A TARGET THAT IS NOW WITHDRAWN (retagged 2026-08-09; target withdrawn by the author 2026-09-16). These were scaled ×100 from the template's abstract unit values so that aggregate GUF over a 1M-population inventory (~400k residential + 20k commercial parcels) landed co-equal with levy revenue at mid-arc: residential ≈ 9.3M TEH/yr, commercial ≈ 4.1M, total ≈ 13.4M against levy ≈ 6.2M (≈2.2×) at the 1.25% levy. The tag stays placeholder for the same reason it always did — a value reverse-engineered from a desired outcome is CHOSEN under this scheme's own precedent (_ECOLOGICAL_SPIKE_INTENSITY, 2026-08-05) — and withdrawing the target does not make it measured. It makes the ratios unjustified rather than justified by a goal the framework no longer holds. |
GUF_USE_INSTITUTIONAL |
1.0 | TEH per Standard Land Unit per year, at ε=0.40 | placeholder form: NLSA Eq. 9 — midpoints of the manual's per-category ranges. |
a servicing census indexed by USE CATEGORY — collective labour-hours per year attributable to servicing each category (roads, utilities, inspection, dispute resolution). THIS FIELD USED TO PROMISE THAT SUCH A CENSUS, "divided by land area", WOULD SETTLE "THE LEVELS AND THE RATIOS IN ONE INSTRUMENT". Corrected 2026-08-31: a per-area census reaches at most 41.9% of the cost structure. scenarios/use_split measured what each servicing occupation's cost actually follows — area 41.9%, PARCEL COUNT 44.5%, THROUGHPUT 13.6% — and the fee acquired a SECOND BASIS on 2026-08-30 (GUF_PARCEL_RATE_TEH_PER_PARCEL_YR, author sign-off), so "the fee" is no longer one per-SLU number to settle. What settles what: these ten per-SLU coefficients take the area-scaling 41.9% per use category, and that census is still the instrument and still unrun; the per-parcel term needs a PER-PARCEL servicing cost per use category, which does not exist (GUF_PARCEL_RATE_TEH_PER_PARCEL_YR is a national blended rate); and throughput's 13.6% is reachable by NO term the fee has, because Omega is an occupancy FRACTION of a parcel and not a headcount. THE INDEXING OBSTACLE IS UNCHANGED AND IS THE REAL ONE: both censuses this repo owns aggregate over LAND CLASSES while this table is indexed by USE CATEGORY, and occupational data is not coded by the land use it serves. GUF_SERVICE_RETENTION_BY_USE is the one measured ordering that IS indexed this way, correlating at Spearman 0.891 with the shipped ratios — a lead for the SHAPE, not a level, and scenarios/use_split records why four categories disagree by two ranks.CALIBRATED TO A TARGET THAT IS NOW WITHDRAWN (retagged 2026-08-09; target withdrawn by the author 2026-09-16). These were scaled ×100 from the template's abstract unit values so that aggregate GUF over a 1M-population inventory (~400k residential + 20k commercial parcels) landed co-equal with levy revenue at mid-arc: residential ≈ 9.3M TEH/yr, commercial ≈ 4.1M, total ≈ 13.4M against levy ≈ 6.2M (≈2.2×) at the 1.25% levy. The tag stays placeholder for the same reason it always did — a value reverse-engineered from a desired outcome is CHOSEN under this scheme's own precedent (_ECOLOGICAL_SPIKE_INTENSITY, 2026-08-05) — and withdrawing the target does not make it measured. It makes the ratios unjustified rather than justified by a goal the framework no longer holds. |
GUF_USE_CONSERVATION_CREDIT |
-6.0 | TEH per SLU per year | normative form: the only negative coefficient in the fee table. It enters base_fee like any other U, so it OFFSETS the positive terms — and ground_use_fee clamps the total at guf_floor (0.0), so it can take a fee to zero and no further. |
decided by CHARTER DECISION, 2026-08-30 (author sign-off): THE CLAMP IS ADOPTED. A credit may reduce a fee to zero; it may not pay out. Four measurements decided it, none of them solvency alone: (1) SCALE. A payout at L=0.75 would be 450.0 TEH/ha·yr against a measured stewardship cost of 0.218 (forest, 0.182 h/ha·yr at the reference multiplier) — about 2,064x the cost of the work being rewarded. (2) BASIS. It is proportional to LOCATION VALUE, not to ecological service: an identical ecosystem earns 30.0 at L=0.05 and 570.0 at L=0.95, a 19x spread on ground delivering the same thing. That is opportunity-cost compensation, not an ecological payment. (3) DIRECTION. GUF exists to charge for exclusive use of valuable land. A payout proportional to location value pays MOST to whoever holds the most valuable land — the instrument run backwards, and unearned income proportional to holdings is precisely what the contestability work (§8.9, the Piketty inversion) exists to prevent. (4) REDUNDANCY. The reward already exists and is large: conserving rather than developing already avoids 750.0 TEH/ha·yr against residential, 2,250.0 against retail, 2,812.5 against heavy industry. A payout would add 450.0 on top of land already charged nothing. FUNDING FOLLOWS FROM THE ABOVE RATHER THAN LEADING IT. GUF revenue flows to the Trust, so a payout is a Trust expenditure backed by the labour levy and the dividend — labour subsidising landholding. WHAT THE DECISION DOES NOT BLOCK, and the reason it costs nothing: restoration is LABOUR. It registers and mints TEH through the ordinary pipeline. Paying a holder for a DESIGNATION is unearned; paying a restorer for HOURS WORKED is the ledger working as designed. The clamp forbids only the first. (That claim was FALSE at the entry point when this was written — restoration_obligation was stranded at ecological_eoh — and plumbing it through was part of the same decision.)no measurement settles this THE COEFFICIENT IS NOT DECORATION AND MUST NOT BE RETIRED ON THE STRENGTH OF THIS DECISION. On a conservation parcel that also carries an infrastructure premium it does real work: at I = 240.20 it brings the fee to 180.20 at L=0.10 and 90.20 at L=0.25. Setting it to 0.0 would RAISE those fees. The clamp bounds it below; above that bound it is live. |
GUF_DEMAND_ETA_RESIDENTIAL |
0.15 | dimensionless elasticity | placeholder form: NLSA Eq. 11–13 — fee sensitivity to occupancy pressure, by land class. |
measured fee-to-occupancy elasticity by land class — vacancy and turnover response in a jurisdiction that has actually varied its ground fees. |
GUF_DEMAND_ETA_COMMERCIAL |
0.25 | dimensionless elasticity | placeholder form: NLSA Eq. 11–13 — fee sensitivity to occupancy pressure, by land class. |
measured fee-to-occupancy elasticity by land class — vacancy and turnover response in a jurisdiction that has actually varied its ground fees. |
GUF_DEMAND_D_MAX |
1.8 | dimensionless multiplier | normative form: NLSA Eq. 11–13 — a constitutional CEILING on D(p), not an estimate of it. |
decided by a charter decision, not a measurement. It bounds how far demand pressure may lift a fee above its reference; 1.80 is the framework's own judgement about tolerable variation and should be argued, not fitted. no measurement settles this |
GUF_ZONE_MIN |
0.8 | dimensionless multiplier | normative form: NLSA §2.4.1 — the permitted band for a collective's local zone adjustment: governance headroom, not an estimated quantity. |
decided by a charter decision on how much local discretion the schedule allows. No measurement settles a permitted range — the honest pointer is the deliberation, and pretending otherwise would be the error. no measurement settles this |
GUF_ZONE_MAX |
1.25 | dimensionless multiplier | normative form: NLSA §2.4.1 — the permitted band for a collective's local zone adjustment: governance headroom, not an estimated quantity. |
decided by a charter decision on how much local discretion the schedule allows. No measurement settles a permitted range — the honest pointer is the deliberation, and pretending otherwise would be the error. no measurement settles this |
GUF_ECO_KAPPA_WATER_FILTRATION |
1.65 | TEH per megalitre per year, at ε=0.40 | placeholder form: NLSA Eq. 14–15. |
crew-hours to operate treatment capacity delivering equivalent filtration — a plant staffing schedule, not a valuation study. |
GUF_ECO_KAPPA_FLOOD_ATTENUATION |
0.006 | TEH per cubic metre of retention per year, at ε=0.40 | placeholder form: NLSA Eq. 14–15. |
crew-hours to build and maintain engineered retention of equal volume, amortized over its design life. |
GUF_ECO_KAPPA_CARBON |
0.6 | TEH per tonne CO₂-equivalent per year, at ε=0.40 | measured (Tier D) form: adopted EQUAL to CDR_LABOR_HOURS_PER_TONNE — labour-hours per tonne removed, from operator staffing disclosures. Supersedes the NLSA Eq. 14–15 midpoint. |
operator staffing disclosures, jointly with the thermal layer. Tier D — one plant, and the sink-reversal question above is unresolved. |
GUF_ECO_KAPPA_AIR_QUALITY |
5.5 | TEH per tonne particulate per year, at ε=0.40 | placeholder form: NLSA Eq. 14–15. |
operating hours for filtration capacity of equal removal rate. |
GUF_ECO_KAPPA_POLLINATION |
1.0 | TEH per hectare-equivalent per year, at ε=0.40 | placeholder form: NLSA Eq. 14–15. |
measured hand-pollination labour per hectare, which is the one service in this table with a directly observed human-substitute cost (Sichuan pear orchards, Maoxian). |
GUF_ECO_KAPPA_BIODIVERSITY |
0.35 | TEH per Habitat Quality Unit per year, at ε=0.40 | placeholder form: NLSA Eq. 14–15. |
nothing yet, and this is the weakest of the seven — a Habitat Quality Unit is a framework construct, so the pointer has to define the unit before it can price it. Managed-reserve staffing per unit area is the nearest observable. |
GUF_ECO_KAPPA_THERMAL |
0.03 | TEH per cooling-degree-day per year, at ε=0.40 | placeholder form: NLSA Eq. 14–15. |
operating and maintenance hours for mechanical cooling delivering the same degree-day offset. Note the thermal layer treats this quantity as a physical budget rather than a service (research/thermal.py) — the two readings have not been reconciled. |
GUF_ECO_BETA_WATER_FILTRATION |
0.8 | dimensionless exponent | placeholder form: NLSA Eq. 15 — how fast each service's replacement cost falls with automation. The ORDERING is an argument the framework makes (physical treatment automates readily; pollination and biodiversity resist it, the same Baumol logic that bounds care abatability in Block II); the magnitudes are not constrained by anything. |
per-service labour intensity of the replacement task measured at two or more automation levels. Until then the ordering is the claim and the values are placeholders that happen to encode it. |
GUF_ECO_BETA_FLOOD_ATTENUATION |
0.7 | dimensionless exponent | placeholder form: NLSA Eq. 15 — how fast each service's replacement cost falls with automation. The ORDERING is an argument the framework makes (physical treatment automates readily; pollination and biodiversity resist it, the same Baumol logic that bounds care abatability in Block II); the magnitudes are not constrained by anything. |
per-service labour intensity of the replacement task measured at two or more automation levels. Until then the ordering is the claim and the values are placeholders that happen to encode it. |
GUF_ECO_BETA_CARBON |
0.9 | dimensionless exponent | placeholder form: NLSA Eq. 15 — how fast each service's replacement cost falls with automation. The ORDERING is an argument the framework makes (physical treatment automates readily; pollination and biodiversity resist it, the same Baumol logic that bounds care abatability in Block II); the magnitudes are not constrained by anything. |
per-service labour intensity of the replacement task measured at two or more automation levels. Until then the ordering is the claim and the values are placeholders that happen to encode it. |
GUF_ECO_BETA_AIR_QUALITY |
1.0 | dimensionless exponent | placeholder form: NLSA Eq. 15 — how fast each service's replacement cost falls with automation. The ORDERING is an argument the framework makes (physical treatment automates readily; pollination and biodiversity resist it, the same Baumol logic that bounds care abatability in Block II); the magnitudes are not constrained by anything. |
per-service labour intensity of the replacement task measured at two or more automation levels. Until then the ordering is the claim and the values are placeholders that happen to encode it. |
GUF_ECO_BETA_POLLINATION |
0.6 | dimensionless exponent | placeholder form: NLSA Eq. 15 — how fast each service's replacement cost falls with automation. The ORDERING is an argument the framework makes (physical treatment automates readily; pollination and biodiversity resist it, the same Baumol logic that bounds care abatability in Block II); the magnitudes are not constrained by anything. |
per-service labour intensity of the replacement task measured at two or more automation levels. Until then the ordering is the claim and the values are placeholders that happen to encode it. |
GUF_ECO_BETA_BIODIVERSITY |
0.7 | dimensionless exponent | placeholder form: NLSA Eq. 15 — how fast each service's replacement cost falls with automation. The ORDERING is an argument the framework makes (physical treatment automates readily; pollination and biodiversity resist it, the same Baumol logic that bounds care abatability in Block II); the magnitudes are not constrained by anything. |
per-service labour intensity of the replacement task measured at two or more automation levels. Until then the ordering is the claim and the values are placeholders that happen to encode it. |
GUF_ECO_BETA_THERMAL |
0.8 | dimensionless exponent | placeholder form: NLSA Eq. 15 — how fast each service's replacement cost falls with automation. The ORDERING is an argument the framework makes (physical treatment automates readily; pollination and biodiversity resist it, the same Baumol logic that bounds care abatability in Block II); the magnitudes are not constrained by anything. |
per-service labour intensity of the replacement task measured at two or more automation levels. Until then the ordering is the claim and the values are placeholders that happen to encode it. |
GUF_ECO_KAPPA_FLOOR_FRACTION |
0.1 | fraction of the reference κ | placeholder | the residual human oversight hours in the most automated environmental-management operation observable. Same structural claim as GUF_ALPHA_FLOOR and PERSONAL_EOH_COMPONENTS' care abatability ceiling — that judgment does not automate to zero — reached here for a third time and still without a measurement behind any of the three. |
GUF_ECOSYSTEM_SERVICES |
dict of service name -> | derived form: PAIRS each ecosystem service's replacement cost with its own automation exponent, both bound to the constants above rather than restated. The unit string is carried because κ is meaningless without it — 0.6 TEH/tonne-CO₂eq and 0.006 TEH/m³ are not comparable magnitudes, and a caller supplying a volume in the wrong unit gets a silently wrong surcharge. |
n/a — it inherits the standing of the GUF_ECO_KAPPA_* and GUF_ECO_BETA_* constants it pairs; the debt is counted on each of them. THE SEVEN κ CONSTANTS WERE READ BY NOTHING. Before this registry, only GUF_ECO_KAPPA_FLOOR_FRACTION was consumed anywhere in the package: E(p,ε) defaults to zero, no scenario supplied ecosystem_services, and every caller that did — the CLI example, the collective parcel schema — passed BARE LITERALS ("kappa_ref": 1.65). So the named defaults documented a value the code never used, which is the = 1500.0 and mean_multiplier = 2.10 hazard in its purest form: the constants and the running values could not disagree, because the constants were not running values at all. It also explains the GUF_ECO_KAPPA_CARBON reconciliation's "zero blast radius" finding of 2026-08-09 — nothing was reading it. κ AND β WERE ALSO UNPAIRED, and that is the sharper defect: they are per-service partners (Eq. 15 derives κ_max from κ_ref THROUGH β), so a caller passing carbon's κ with pollination's β got a curve belonging to neither, and nothing could detect it. Pairing them makes that unstateable. this registry is a BINDING, not a measurement. Six of the seven κ are placeholders and the seventh (carbon) is Tier D; the β ORDERING is an argument the framework makes and the magnitudes are unconstrained. Naming the services does not ground them — it makes them reachable, which is the precondition for grounding them. |
|
SLU_HECTARES |
0.01 | hectares per Standard Land Unit | convention form: 1 SLU = 100 m² = 0.01 ha, by the NLSA definition of the unit. |
— the definition was carried in PROSE ONLY — "1 SLU = 100 m²" appears in land/guf.py's module header and in three docstrings, and nowhere as a value anything could read. Nothing needed it while GUF worked entirely in SLU; ecosystem service volumes arrive per HECTARE (i-Tree, FIA and every ecological survey report per unit area), so linking a service profile to a parcel needs the conversion to exist. Third prose-only number named this session, after WORLD_POPULATION and REFERENCE_FRAME_POPULATION. |
M2_PER_HECTARE |
10000.0 | square metres per hectare | convention form: the SI definition of the hectare (1 ha = 100 m × 100 m). |
— |
GUF_SERVICE_PROFILE_DECLARED |
{'carbon': 2.0, 'air_quality': 0.005} | dict of service name -> volume per hectare per year | instance | you supply an ecological survey of YOUR OWN land. The two services here are the ones with a public instrument that reports the right quantity in the right units per unit area: carbon — USDA Forest Service FIA carbon estimates, or EPA GHG Inventory LULUCF by land class. FIELD: net annual sequestration per hectare by forest type. Not the stock. air_quality — i-Tree Eco / i-Tree Landscape. FIELD: annual pollution removal (PM2.5/PM10) by canopy, mass per unit area. The other five registered services are deliberately ABSENT rather than guessed: water filtration and pollination are modelled (InVEST) not measured, thermal's cooling-degree-day is a climate variable rather than a service volume, and biodiversity's "HQU" is not a standard unit anywhere — it needs a DEFINITION before it needs data. shipped default ORDER-OF-MAGNITUDE PLACEHOLDERS, and they are not a measurement of anywhere. They exist so E(p,ε) can be exercised at a stated scale and so the ×100 calibration can be re-run with the ecological term switched ON — which has never been done, because E has been zero in every scenario the package ships. Round values are used deliberately: false precision here would read as a measurement, and the discipline reference/personal_basket.py holds is that an invented figure entering beside a measured one becomes indistinguishable from it afterwards. Treat any number computed from this profile as a SENSITIVITY, never as a result. |
GUF_SERVICE_RETENTION_BY_USE |
fraction of natural service retained, by use category | instance form: ρ_s(p) in NLSA Eq. 14 — E = Σ V_s · κ_s(ε) · (1 − ρ_s). ρ = 1 means the developed state still delivers the service in full and the parcel owes NO ecosystem surcharge; ρ = 0 means total displacement. |
you supply impervious-surface fraction for YOUR parcels. Intake path: the USGS/MRLC National Land Cover Database publishes it directly — FIELD: NLCD Percent Developed Imperviousness, 30 m raster — and for services delivered by soil and vegetation ρ ≈ 1 − impervious_fraction is a defensible first mapping. It is measured, gridded, and already aligned to land class, which is more than any of the seven κ values can say. shipped default ORDERED PLACEHOLDERS. The RANKING is argued (sealed surface destroys soil and canopy function; agriculture keeps soil but loses canopy; conservation keeps nearly all); the MAGNITUDES are not constrained by anything here. Do not quote a level. The ranking is what a first NLCD pass would confirm or refute, and refuting the ranking would be the interesting result. THE AUTHOR'S REFRAMING IS ALREADY IN THIS TERM. Under "nature in balance asks little of us; GUF is the cost of resetting land for human use", E is structurally a DISTURBANCE measure — undisturbed land keeps ρ ≈ 1 and owes nothing, and the fee rises precisely as use displaces function. That is why conservation sits at 0.95 and industrial_heavy at 0.02: the ordering IS the claim, and it is the same shape as the 27× disturbance gradient the stewardship census found independently (federal parks 0.161 → urban 4.349 h/ha·yr, the GUF restoration-cost derivation §2c). Before this existed, ρ defaulted to 0.0 EVERYWHERE — asserting that every parcel, including conservation land, displaces its services totally. That is the upper bound on E, not a neutral default. |
|
GUF_USE_SCALE_FACTOR |
100.0 | dimensionless multiplier | convention form: the factor GUF_USE_* were scaled by, from the NLSA template's abstract per-category values. Stated in the GUF_USE_* tag block; named here so the servicing census can quote it without restating it. |
— THE VALUE PHASE 2 EXISTS TO TEST. It was chosen so aggregate GUF over a 1M-population inventory would land co-equal with levy revenue at mid-arc — a value reverse-engineered from a desired outcome, which is why GUF_USE_* is tagged placeholder rather than measured. THAT TARGET IS WITHDRAWN (author, 2026-09-16): GUF is a portion of Trust inflow, not the levy's equal. The scalar is unchanged, because withdrawing a target is not a licence to refit. eoh scenario run servicing_census measures the quantity the fee is DEFINED as and finds this overshoots by ~35× in aggregate, implying ~2.8 in its place. It is NOT changed on that finding: the census settles the LEVEL and cannot settle the ten RATIOS, and one scalar cannot be right for both archetypes — rural lands within 1.12× while urban runs 18× over. Retiring it is a calibration decision, not a rescaling. AND THERE IS A SECOND REASON, found 2026-08-18 (eoh scenario run guf_magnitude). This factor scales a PER-SLU coefficient, and SLUs are an area unit, so the fee it governs is proportional to ground area and to nothing else. Re-cut by what each servicing occupation's cost actually follows, only 41.9% of the measured hours scale with area; 44.5% scale with parcel count and 13.6% with throughput. No value of this factor lets a one-basis fee track a three-basis cost. The area-scaling half alone implies ×1.18, against the ×2.82 that falls out of dividing every servicing hour by area because the fee offers nowhere else to put them. |
GUF_PARCEL_RATE_TEH_PER_PARCEL_YR |
4.7702100549 | TEH per parcel per year | measured (Tier B) form: hours(parcel) / fifty_states_parcel_count, both halves measured — 758,393,730 h/yr from the servicing census (404,600 workers on a per-parcel basis × the derived 1,874.4 h/worker·yr) over 158,985,395 assessor parcels in the 50 states + DC from reference/parcels. The territories left the denominator 2026-10-15 (author): BLS national employment covers none of them, so their 1,587,742 parcels had no hours in the numerator (4.723 → 4.770, +1.0%). Bound by TEST to scenarios.guf_magnitude.two_part_rates(), never by expression: data.py sits below reference/ and scenarios/ and cannot import them — the same constraint MEAN_MULTIPLIER_REFERENCE and GUF_ECO_KAPPA_CARBON are bound under. TestParcelRateIsBoundToTheCensus fails whichever side moves alone. |
the parcel roll keyed to LAND CLASS, which closes the scope mismatch and turns the bound into a point. FIELD: assessor usedesc normalised onto the ERS Major Land Uses classes — 41.2% filled free text across 3,230 independent county systems, a normalisation project rather than a lookup. Census county housing-unit estimates would separately settle P_service's residential share.THIS IS A LOWER BOUND AND MUST NOT BE QUOTED AS A POINT. The numerator is restricted to SERVICED_LAND_CLASSES (37.1 Mha of urban and rural transportation land); the denominator is every parcel in the country, including parcels on land that census never charged. Restricting the denominator can only remove parcels, so it can only RAISE the rate. errs LOW. The gap is deliberately not quantified — parcels concentrate in developed land so the bound is probably close, but "probably close" is not a measurement, and guessing it is exactly what GUF_USE_SCALE_FACTOR did. IT ALSO BLENDS TWO QUANTITIES THAT SHOULD SEPARATE. scenarios/use_split proposed P_title per legal parcel and P_service per SERVICE POINT, because consolidating a hundred apartments into one parcel removes a hundred deeds but not one refuse collection. P_service is not buildable — numunits carries other columns entirely (see reference/parcels) — so this is one blended rate and the split is a declared open item. |
SUBDIVISION_FP_TOLERANCE |
1e-12 | dimensionless relative tolerance | convention form: the relative tolerance for guf_magnitude.subdivision_invariance, which compares a fee summed over N parcels against the same fee summed over 2N halved ones. Floating-point addition is NOT associative, so the two accumulations may differ in the last ulp. |
— NUMERICS ONLY. It must not move any reported result, and the effect it has to distinguish — a parcel-blind ratio of 1.0 against a per-parcel ~1.12 — is eleven orders of magnitude larger, which test_the_tolerance_cannot_hide_the_effect_it_must_distinguish pins. A tolerance wide enough to absorb the finding is worse than none, which is the GOODS_PRICE_FLOOR lesson (abs=0.02 on a floor of 0.05 let a 40% move pass). |
RECOVERY_FP_TOLERANCE |
1e-12 | dimensionless (relative) | convention form: the relative tolerance within which recovery.maintenance_recovery_schedule counts a backlog EQUAL to one year's demand as recovered (backlog <= demand). |
— NUMERICS ONLY. On the US frame the backlog after year 1 equals one year's demand to the last digit (1.5x demand at 150% fulfilment), and the bare <= fell either side by rounding: recovery year 2 -> 1 -> 2 across two recalibrations that moved neither ratio (2026-10-15). A real miss of 1e-6 still reads as a miss (tests/scenarios/test_recovery.py). |
ARC_REPORTING_POINTS |
(0.0, 0.2, 0.4, 0.7, 0.9, 0.99) | dimensionless (automation level epsilon) | convention form: the epsilon values arc TABLES are reported at. A superset of the four this repo's own rule requires every function to be meaningful at — 0, 0.40, 0.90, 0.99 (CLAUDE.md, "Adding new functions") — with 0.20 and 0.70 added so the shape BETWEEN the required points is visible rather than interpolated by the reader. It is a reporting frame, not a calibration: no result depends on which points are displayed, and tests/test_tolerances.py is the precedent for constants whose correct behaviour is to move nothing. |
— |
FAILURE_BOUNDARY_TOLERANCE |
0.0001 | dimensionless (automation level epsilon) | convention form: the precision to which shocks.automation_failure_shock locates its failure_boundary — bisection between the highest capability at which the failure is still fully taken up and the lowest at which it is not. |
— NUMERICS ONLY — it sets how finely a boundary is located, never where it is. It replaced a 0.05 grid stepped from the caller's ε (2026-10-08), under which the reported boundary depended on where the run STARTED: on the reference frame a run at 0.37 read 0.42 and one at 0.38 read 0.38, for a boundary between 0.37 and 0.38. |
RESTORATION_BOUNDING_ASSUMPTION_H_PER_HA |
100.0 | labour-hours per hectare | convention form: the restoration cost the Phase-0 bounding exercise ASSUMED, retained as the declared comparison point for the derived figure that replaced it. |
— A SUPERSEDED ESTIMATE, NOT A SUPERSEDED CONSTANT — which is why this is convention and not retired. It never governed shipped output; it was a figure used in an analysis ("a plausible restoration figure, prairie seeding/planting") to bound whether a legacy restoration backlog could move the ecological domain. Deriving it from ASAE field capacity instead gives 0.87–4.81 h/ha over a whole restoration lifetime, so THE GUESS WAS 21–115× TOO HIGH. It is kept because the correction is the finding: the conclusion it supported — that no basis rebalances the domains — holds a fortiori, and a reader who saw only the derived figure could not tell that the earlier reasoning had been checked rather than quietly dropped. WHY IT WAS SO FAR OUT, which is the transferable part: most of a restoration's DOLLAR cost is not labour — it is seed, plant material, design and survey — so reasoning from a remembered cost-per-acre and converting at a wage prices all of that as labour. The same defect that made NRCS EQIP payment schedules unusable. |
RESTORATION_AMORTIZATION_YEARS |
50.0 | years | convention form: the horizon a one-off restoration is amortised over when expressed as an annual obligation. |
— a REPORTING FRAME, not a claim about how long restoration takes — the same role GUF_WRITEDOWN_AMORTIZATION_YEARS plays for write-downs, and it carries the same value for the same reason. Every figure derived through it scales inversely with it, which is asserted in the tests rather than left for a reader to assume. |
GUF_INFRA_MU_TRANSIT |
0.5 | per kilometre | placeholder form: NLSA Eq. 16 — exponential decay of infrastructure benefit with distance. |
measured catchment gradients — transit ridership, utility connection cost, and park usage against distance. All three are routinely measured by transport and planning agencies; none has been ingested here. |
GUF_INFRA_MU_UTILITIES |
0.2 | per kilometre | placeholder form: NLSA Eq. 16 — exponential decay of infrastructure benefit with distance. |
measured catchment gradients — transit ridership, utility connection cost, and park usage against distance. All three are routinely measured by transport and planning agencies; none has been ingested here. |
GUF_INFRA_MU_PUBLIC_SPACE |
0.8 | per kilometre | placeholder form: NLSA Eq. 16 — exponential decay of infrastructure benefit with distance. |
measured catchment gradients — transit ridership, utility connection cost, and park usage against distance. All three are routinely measured by transport and planning agencies; none has been ingested here. |
GUF_CHI_EXTERNAL |
0.3 | fraction of infrastructure burden attributed externally | placeholder form: NLSA Eq. 25b. |
a federation cost-allocation study — the share of a parcel's infrastructure benefit physically supplied by a neighbouring collective. In the polycentric model (research/coasean.py) this is a settlement question between collectives, so it resolves by agreement as much as by measurement. |
GUF_REVIEW_CYCLE_CAP |
0.1 | fraction increase per 5-year review cycle | normative form: NLSA Eq. 21. |
decided by a charter decision. A rate cap is a commitment about how fast a leaseholder can be asked to absorb change, which is deliberation, not measurement. Precedent exists in statutory rent-review caps. no measurement settles this |
GUF_SUBSIDY_LOWER_THRESHOLD |
0.4 | fraction | normative form: NLSA Eq. 24 — a taper from a lower income threshold to a floor rate. |
decided by a charter decision on the subsidy schedule. Distributional thresholds are political commitments; the measurable input is the income distribution they are applied to, not the thresholds themselves. no measurement settles this |
GUF_SUBSIDY_FLOOR_RATE |
0.25 | fraction | normative form: NLSA Eq. 24 — a taper from a lower income threshold to a floor rate. |
decided by a charter decision on the subsidy schedule. Distributional thresholds are political commitments; the measurable input is the income distribution they are applied to, not the thresholds themselves. no measurement settles this |
GUF_AFFORDABILITY_THRESHOLD |
0.25 | fraction of income | normative form: NLSA Eq. 24 — the accessibility test on a primary residence. |
decided by a charter decision, with a strong external analogue: 25% mirrors the housing-cost-burden convention in national housing statistics (the US 30% burden threshold is the better-known variant). Adopting a published threshold explicitly would move this to convention.no measurement settles this |
COLLECTIVE_LAND_RESERVE_FACTOR |
4.0 | multiple of BASKET_SHELTER_M2_PER_PERSON, as ground area | normative form: reserve_ha = population × BASKET_SHELTER_M2_PER_PERSON × this / M2_PER_HECTARE — the collective land held back from private lease so the register can cover every member's shelter: a collective advances the arc only if the register covers the EOH. Sized to the WHOLE population (anyone may fall back on the collective), measured as GROUND, not floor area. |
decided by the author, 2026-10-01 ("default to the already per person shelter amount * 4 (rough account of misc space needed)"). INSTANCED: a collective states its own; this is the default. no measurement settles this |
GUF_SOIL_CREDIT_RATE |
0.05 | TEH per Standard Land Unit per unit Soil Health Index gain | placeholder form: NLSA Eq. 26. |
measured labour-hours of soil-building practice (cover cropping, reduced tillage, amendment) per unit index gain — an agronomic trial with a labour diary. Agricultural extension services run the trials; the labour column is the part usually missing. |
GUF_WRITEDOWN_AMORTIZATION_YEARS |
50.0 | years | bounded form: NLSA Eq. 28 — Y_r, the design life over which replacement infrastructure is amortized. |
band 40–60 years, BEA service lives for the replacement classes a write-down buys (reference/capital_inventory.py): 40 for water supply, sewage and conservation structures, 60 for government sewer, water and conservation structures. 50 sits inside. Retagged from placeholder 2026-10-16 (author: "let guf be a bound"), record/provenance.md#placeholders-audited. errs neither way by construction — the midpoint. A shorter life raises the annual surcharge (Eq. 28 divides by Y_r), so 40 is the end that charges the holder more, 60 the end that charges less. engineering design lives for the specific replacement asset class a given write-down funds, which picks a point in the band. |
GUF_EOH_ACCUMULATION_THRESHOLD |
0.3 | fraction of ecological EOH left unfulfilled | placeholder form: NLSA §9.8 — the preventive monitoring trigger. |
an observed relationship between deferred stewardship and ecosystem regime shift. ECOLOGICAL_THRESHOLD in this file makes the same class of claim on the state variable rather than the deferral rate, and neither is measured; both would resolve from the same ecological time series. |
Three findings the migration produced here, reported rather than smoothed:
- The
GUF_USE_*reference rates are calibrated to a target. They were scaled ×100 from the template's abstract unit values so aggregate GUF over a 1M-population inventory lands co-equal with levy revenue at mid-arc (≈13.4M against ≈6.2M TEH/yr, ≈2.2×). Under this scheme's own precedent —_ECOLOGICAL_SPIKE_INTENSITY, retagged on 2026-08-05 for being reverse-engineered from a target — that makes all tenCHOSEN. Ten constants in the fiscal spine moved from implied-derived to admittedly-chosen. GUF_ECO_KAPPA_CARBON(2.750 TEH/tonne-CO₂eq) andCDR_LABOR_HOURS_PER_TONNE(0.6 h/tonne) are the same quantity reached from two layers — a 4.6× disagreement inside one repo. One of them is wrong and nothing currently reconciles them.- The κ table's common debt is the money→hours step. Ecosystem-service replacement cost is a well-established quantity, but it is published in money, and this repo's own infrastructure work found that conversion convention-dominated ~10.26× while every physical knob read ×1.000. So each pointer names a labour-hours engineering estimate of the replacement task, not a valuation study — the same discipline the infrastructure floor adopted.
Canonical Trajectory Constants (data.py CANONICAL_* prefix)¶
These define the ideal-arc reference. A real simulation diverges from this arc; canonical_physical_state(ε) is for testing and cross-sectional analysis only.
| Parameter | Default | Units | Tag | What would settle it |
|---|---|---|---|---|
CANONICAL_CAPITAL_GROWTH_SLOPE |
2.0 | mixed — see each line; slopes are per ε unit, bases are in the governed quantity's own units | convention form: these define the IDEAL ARC, not a prediction. A real simulation diverges from it, and divergence is the point of modelling — canonical_physical_state(ε) exists for arc testing and cross-sectional analysis, so these constants are a deliberately smooth reference rather than a claim about any actual trajectory. That is why they are one family: they share a single epistemic status. |
— the capital path was corrected in Block III to 2.0B × (1 + slope) × ε so that ε=0 carries NO apparatus — a collective with infrastructure and no automation contradicts ε's own definition. Only the intercept moved; ε=1 is still 3× the base. DELIBERATE DIVERGENCE: effective_capital_from_epsilon(base, ε) was NOT changed, because it scales a caller-supplied ε=0 baseline and zeroing it would destroy the caller's input. nothing, and by design — an ideal arc is a reference frame, not a measurement. What CAN be measured is how far an actual trajectory sits from it, which is what the scenario layer reports. Treat these as the axis, not the data. |
CANONICAL_MONITORING_CAPABILITY_BASE |
0.5 | mixed — see each line; slopes are per ε unit, bases are in the governed quantity's own units | convention form: these define the IDEAL ARC, not a prediction. A real simulation diverges from it, and divergence is the point of modelling — canonical_physical_state(ε) exists for arc testing and cross-sectional analysis, so these constants are a deliberately smooth reference rather than a claim about any actual trajectory. That is why they are one family: they share a single epistemic status. |
— the capital path was corrected in Block III to 2.0B × (1 + slope) × ε so that ε=0 carries NO apparatus — a collective with infrastructure and no automation contradicts ε's own definition. Only the intercept moved; ε=1 is still 3× the base. DELIBERATE DIVERGENCE: effective_capital_from_epsilon(base, ε) was NOT changed, because it scales a caller-supplied ε=0 baseline and zeroing it would destroy the caller's input. nothing, and by design — an ideal arc is a reference frame, not a measurement. What CAN be measured is how far an actual trajectory sits from it, which is what the scenario layer reports. Treat these as the axis, not the data. |
CANONICAL_MONITORING_CAPABILITY_SLOPE |
0.5 | mixed — see each line; slopes are per ε unit, bases are in the governed quantity's own units | convention form: these define the IDEAL ARC, not a prediction. A real simulation diverges from it, and divergence is the point of modelling — canonical_physical_state(ε) exists for arc testing and cross-sectional analysis, so these constants are a deliberately smooth reference rather than a claim about any actual trajectory. That is why they are one family: they share a single epistemic status. |
— the capital path was corrected in Block III to 2.0B × (1 + slope) × ε so that ε=0 carries NO apparatus — a collective with infrastructure and no automation contradicts ε's own definition. Only the intercept moved; ε=1 is still 3× the base. DELIBERATE DIVERGENCE: effective_capital_from_epsilon(base, ε) was NOT changed, because it scales a caller-supplied ε=0 baseline and zeroing it would destroy the caller's input. nothing, and by design — an ideal arc is a reference frame, not a measurement. What CAN be measured is how far an actual trajectory sits from it, which is what the scenario layer reports. Treat these as the axis, not the data. |
CANONICAL_KNOWLEDGE_COMPLEXITY_SLOPE |
9.0 | mixed — see each line; slopes are per ε unit, bases are in the governed quantity's own units | convention form: these define the IDEAL ARC, not a prediction. A real simulation diverges from it, and divergence is the point of modelling — canonical_physical_state(ε) exists for arc testing and cross-sectional analysis, so these constants are a deliberately smooth reference rather than a claim about any actual trajectory. That is why they are one family: they share a single epistemic status. |
— the capital path was corrected in Block III to 2.0B × (1 + slope) × ε so that ε=0 carries NO apparatus — a collective with infrastructure and no automation contradicts ε's own definition. Only the intercept moved; ε=1 is still 3× the base. DELIBERATE DIVERGENCE: effective_capital_from_epsilon(base, ε) was NOT changed, because it scales a caller-supplied ε=0 baseline and zeroing it would destroy the caller's input. nothing, and by design — an ideal arc is a reference frame, not a measurement. What CAN be measured is how far an actual trajectory sits from it, which is what the scenario layer reports. Treat these as the axis, not the data. |
CANONICAL_KNOWLEDGE_COMPLEXITY_EXP |
2.0 | mixed — see each line; slopes are per ε unit, bases are in the governed quantity's own units | convention form: these define the IDEAL ARC, not a prediction. A real simulation diverges from it, and divergence is the point of modelling — canonical_physical_state(ε) exists for arc testing and cross-sectional analysis, so these constants are a deliberately smooth reference rather than a claim about any actual trajectory. That is why they are one family: they share a single epistemic status. |
— the capital path was corrected in Block III to 2.0B × (1 + slope) × ε so that ε=0 carries NO apparatus — a collective with infrastructure and no automation contradicts ε's own definition. Only the intercept moved; ε=1 is still 3× the base. DELIBERATE DIVERGENCE: effective_capital_from_epsilon(base, ε) was NOT changed, because it scales a caller-supplied ε=0 baseline and zeroing it would destroy the caller's input. nothing, and by design — an ideal arc is a reference frame, not a measurement. What CAN be measured is how far an actual trajectory sits from it, which is what the scenario layer reports. Treat these as the axis, not the data. |
CANONICAL_CAPITAL_AGE_BASE |
0.3 | mixed — see each line; slopes are per ε unit, bases are in the governed quantity's own units | convention form: these define the IDEAL ARC, not a prediction. A real simulation diverges from it, and divergence is the point of modelling — canonical_physical_state(ε) exists for arc testing and cross-sectional analysis, so these constants are a deliberately smooth reference rather than a claim about any actual trajectory. That is why they are one family: they share a single epistemic status. |
— the capital path was corrected in Block III to 2.0B × (1 + slope) × ε so that ε=0 carries NO apparatus — a collective with infrastructure and no automation contradicts ε's own definition. Only the intercept moved; ε=1 is still 3× the base. DELIBERATE DIVERGENCE: effective_capital_from_epsilon(base, ε) was NOT changed, because it scales a caller-supplied ε=0 baseline and zeroing it would destroy the caller's input. nothing, and by design — an ideal arc is a reference frame, not a measurement. What CAN be measured is how far an actual trajectory sits from it, which is what the scenario layer reports. Treat these as the axis, not the data. |
CANONICAL_CAPITAL_AGE_DRIFT |
0.2 | mixed — see each line; slopes are per ε unit, bases are in the governed quantity's own units | convention form: these define the IDEAL ARC, not a prediction. A real simulation diverges from it, and divergence is the point of modelling — canonical_physical_state(ε) exists for arc testing and cross-sectional analysis, so these constants are a deliberately smooth reference rather than a claim about any actual trajectory. That is why they are one family: they share a single epistemic status. |
— the capital path was corrected in Block III to 2.0B × (1 + slope) × ε so that ε=0 carries NO apparatus — a collective with infrastructure and no automation contradicts ε's own definition. Only the intercept moved; ε=1 is still 3× the base. DELIBERATE DIVERGENCE: effective_capital_from_epsilon(base, ε) was NOT changed, because it scales a caller-supplied ε=0 baseline and zeroing it would destroy the caller's input. nothing, and by design — an ideal arc is a reference frame, not a measurement. What CAN be measured is how far an actual trajectory sits from it, which is what the scenario layer reports. Treat these as the axis, not the data. |
CANONICAL_ECOSYSTEM_HEALTH_BASE |
0.9 | mixed — see each line; slopes are per ε unit, bases are in the governed quantity's own units | convention form: these define the IDEAL ARC, not a prediction. A real simulation diverges from it, and divergence is the point of modelling — canonical_physical_state(ε) exists for arc testing and cross-sectional analysis, so these constants are a deliberately smooth reference rather than a claim about any actual trajectory. That is why they are one family: they share a single epistemic status. |
— the capital path was corrected in Block III to 2.0B × (1 + slope) × ε so that ε=0 carries NO apparatus — a collective with infrastructure and no automation contradicts ε's own definition. Only the intercept moved; ε=1 is still 3× the base. DELIBERATE DIVERGENCE: effective_capital_from_epsilon(base, ε) was NOT changed, because it scales a caller-supplied ε=0 baseline and zeroing it would destroy the caller's input. nothing, and by design — an ideal arc is a reference frame, not a measurement. What CAN be measured is how far an actual trajectory sits from it, which is what the scenario layer reports. Treat these as the axis, not the data. |
CANONICAL_ECOSYSTEM_HEALTH_DRIFT |
-0.2 | mixed — see each line; slopes are per ε unit, bases are in the governed quantity's own units | convention form: these define the IDEAL ARC, not a prediction. A real simulation diverges from it, and divergence is the point of modelling — canonical_physical_state(ε) exists for arc testing and cross-sectional analysis, so these constants are a deliberately smooth reference rather than a claim about any actual trajectory. That is why they are one family: they share a single epistemic status. |
— the capital path was corrected in Block III to 2.0B × (1 + slope) × ε so that ε=0 carries NO apparatus — a collective with infrastructure and no automation contradicts ε's own definition. Only the intercept moved; ε=1 is still 3× the base. DELIBERATE DIVERGENCE: effective_capital_from_epsilon(base, ε) was NOT changed, because it scales a caller-supplied ε=0 baseline and zeroing it would destroy the caller's input. nothing, and by design — an ideal arc is a reference frame, not a measurement. What CAN be measured is how far an actual trajectory sits from it, which is what the scenario layer reports. Treat these as the axis, not the data. |
EPSILON_ARC_MAX |
0.99 | dimensionless ε | convention form: the EVALUATION BOUND of the arc — where guards stop accepting, grids stop stepping and reports quote their top row. Conceptually the top is 1.0; evaluation stops at 0.99 because several ε-dependent terms are degenerate at exactly 1. It is a statement about where this package LOOKS, not about how far automation can go. |
— NOT THE ACHIEVABLE CEILING, WHICH IS DERIVED AND MOVES. core.eoh_fulfillment.observable_epsilon_ceiling() computes 1 − personal_share · Σ share_c · floor_c — the highest observed machine share the declared care floors permit — reading 0.788 → 0.877 across the arc under per_component, against exactly 1.000 under uniform. ε does not reach 1 because CARE RESISTS AUTOMATION, and that ceiling is a function of the obligation MIX as well as of the floors, so a care-heavier civilisation has a lower one. The two are already gated apart: tests/test_capability_vs_observable.py asserts the derived ceiling is strictly below this convention. Conflating them would put a FIXED number where a MEASURED one belongs. THIS NAMES ONE OF ~56 COPIES, AND THE REST ARE A RECORDED LEAD. The bare literal 0.99 appears at ~55 further operative sites across core/ and scenarios/ — 11 validation guards, 7 clamps, 7 grid constructions, 18 default arcs and 4 bisection brackets. Migrating them touches guard semantics and grid arithmetic and is its own change with its own blast radius; it is NOT done here. This constant exists so a NEW site binds instead of copying. |
Contestability Parameters (Workstream B — research/contestability.py)¶
Added to support the contestability instrumentation (originally the bare invariant χ(ε) = P(ε)/K_entry(ε) ≥ 1, since superseded by the §8.9 time-to-finance/two-arm form — see the Recalibration and §8.9c sections below; the χ machinery remains as documented negative results). Derived in the reconciliation §8 and the Workstream B plan.
| Parameter | Default | Units | Tag | What would settle it |
|---|---|---|---|---|
CONTESTABILITY_K0_TEH |
1800.0 | TEH per person | placeholder form: K_entry(0) — the founding cost of a viable alternative collective at ε=0. Set at ≈1.2× the annual sufficiency guarantee per person. |
observed founding capitalization of real cooperatives and intentional communities per member. Mondragon and the Italian co-op sector (already cited in this file for COASEAN_COMMONS_TITHE and the indivisible reserve) both publish enough to bound it, which makes this one of the more closable debts here. |
CONTESTABILITY_K_SLOPE |
1.6 | fraction of K₀ per ε unit | placeholder form: the ADVERSARIAL increasing-returns regime — K_entry rises with automation because incumbents' capital advantage compounds. Chosen as the default because it is the hostile case; the replicable regime is the optimistic one. |
measured entry costs in an industry across an automation transition. the regime is the honest uncertainty, not the slope (reconciliation §8.5). Nothing in the data settles which regime a real automation arc follows, and the two give opposite answers about whether exit stays viable. |
CONTESTABILITY_K_FLOOR_FRACTION |
0.1 | fraction of K₀ | placeholder form: in the replicable regime K_entry falls, but not to zero — there is always some minimum founding cost. Structural in that respect, asserted in level. |
the cheapest observed viable founding, which is the empirical floor. |
CONTESTABILITY_CHI_WARN |
1.2 | dimensionless χ ratio | normative form: CRIT at 1.00 is definitional, not chosen — χ < 1 means the portable endowment cannot cover entry, so exit is notional rather than substantive. WARN at 1.20 is an early-warning margin and is chosen. |
decided by n/a — SUPERSEDED. §8.9 replaced the ratio with a TIME (t_exit ≤ one vesting period), because a stock target against a flow yields a time, not a ratio. core/dashboard.py now demotes χ to a YELLOW advisory when exit_financeable is supplied. no measurement settles this |
CONTESTABILITY_CHI_CRIT |
1.0 | dimensionless χ ratio | normative form: CRIT at 1.00 is definitional, not chosen — χ < 1 means the portable endowment cannot cover entry, so exit is notional rather than substantive. WARN at 1.20 is an early-warning margin and is chosen. |
decided by n/a — SUPERSEDED. §8.9 replaced the ratio with a TIME (t_exit ≤ one vesting period), because a stock target against a flow yields a time, not a ratio. core/dashboard.py now demotes χ to a YELLOW advisory when exit_financeable is supplied. no measurement settles this |
CONTESTABILITY_PHI_FLOOR |
0.1 | fraction of automation value held in common | placeholder form: φ(0) — even at subsistence some automation value is commonly held (the Trust baseline). |
measured commonization shares across real collectives at known ε — the same evidence §8.9b's charter-formation model needs, since that model reads this value as its target policy rather than deriving one. THE superseded_by HERE WAS WRONG AND WAS WITHDRAWN 2026-09-16 (author sign-off). It named hours_eoh.research.recalibration as the replacement, on the reading that §8.9b makes φ(ε) emerge from the charter formation share rather than from a floor plus a power law. That module CONSUMES this value: commonized_fraction() reads it, and recalibration.phi_actual(ε, "target") returns exactly commonized_fraction(ε) — pinned by tests/test_recalibration.py::test_target_policy_is_commonized_fraction. A successor that calls the thing it supposedly replaced has not replaced it. The tag was hiding a LIVE parameter inside the retired set, where the gate exempts it from naming what would settle it. |
CONTESTABILITY_PHI_EXPONENT |
1.5 | dimensionless power | placeholder form: sub-linear growth of commonization early in the arc (ε^1.5 rather than ε), asserting that political-economy constraints make rapid commonization hard. |
measured commonization shares across real collectives at known ε, with the floor above — one measurement settles the pair, since they are the two parameters of a single curve.superseded_by withdrawn 2026-09-16 (author sign-off) for the same reason as CONTESTABILITY_PHI_FLOOR above — commonized_fraction() reads this exponent and the §8.9b model calls that function as its target policy. |
CONTESTABILITY_G_PRIV |
0.03 | fraction per year | instance form: g_priv, the private capital growth rate. The Piketty-inversion condition requires dτ/dε ≥ 0, i.e. the Trust must grow faster than private capital. |
you supply real capital returns net of depreciation for the jurisdiction being modelled. Piketty's r series is the standard source and gives 4–5% historically — well above this 3%, so supplying your own makes the Piketty-inversion condition HARDER to satisfy, not easier. shipped default 3%/yr, chosen below the historical range. Read the note above first: §8.9c found endogenous g_priv turns negative past ε≈0.5, so this fixed rate is not the operative reading in the adopted model and is retained for the §8.3 comparison. at canonical defaults the levy-alone path to that condition is infeasible (levy_fraction ≫ 1) — the adversarial finding of reconciliation §8.3, and §8.9 showed the failure was the miscalibrated cash-Trust frame rather than the levy. §8.9c then found endogenous g_priv turns NEGATIVE past ε≈0.5, so this fixed 3% is not the operative reading in the adopted model. |
CONTESTABILITY_CAPITAL_YIELD_RATE |
0.2 | fraction per year | derived form: gross return on automated capital, 1/ν − δ = 1/RECAL_CAPITAL_OUTPUT_RATIO − FORMATION_DEPRECIATION_RATE = 0.25 − 0.05. Used as automated_output_teh = ε × capital_stock × yield. The same identity is already written out in FORMATION_DEPRECIATION_RATE's own block. RECONCILED 2026-08-15 (0.10 → 0.20). The repo held two capital-yield figures 2× apart; this one was the unexamined side. Measured blast radius before the change: NONE — the full suite passed except the provenance regeneration gate, nothing in recalibrated_arc moved, and machine_output_teh was unchanged because the §8.8 M3 replacement uses ε·total_eoh instead. Two of its three consumers (min_levy_for_pi, levy_schedule_for_chi) are SUPERSEDED by §8.9 and the third is research-tier and unpinned. It was 2× wrong and its wrongness never mattered, which is the finding. BOUND BY TEST, NOT BY EXPRESSION — both inputs are defined BELOW this line, so a reference would be forward. Same treatment as GUF_ECO_KAPPA_CARBON; tests/test_recalibration.py::TestCapitalYieldIdentity fails if either side moves alone. THIS ADDS NO EVIDENCE, AND SAYS SO. ν is convention and δ is derived from CAPITAL_MACHINE_PROFILES, which is a placeholder — so the identity is anchored only TRANSITIVELY, and a derived tag here inherits a placeholder two steps down. What the change buys is one fewer independent unknown and the removal of a 2× internal contradiction, not a better-grounded number. See the placeholder-inversion audit on the transitive form of the anti-circularity rule. |
— |
CONTESTABILITY_VESTING_YEARS |
5.0 | years of federation tenure | normative form: linear vesting of the Trust dividend. Tenure is FEDERATION-wide (reconciliation §8.7b): moving between collectives never resets the clock or forfeits vested balance, and the sufficiency floor never vests at all — it is membership-independent (§8.1). Matches TIER_ASSESSMENT_INTERVAL_YEARS. |
decided by a charter decision. Shorter vesting strengthens the marginal member's exit directly, so this is the cheapest lever on contestability the framework has — which is exactly why it belongs in deliberation and not in a data pointer. no measurement settles this |
Coasean Federation Parameters (Workstream D / Phase 3 — research/coasean.py)¶
| Parameter | Default | Units | Tag | What would settle it |
|---|---|---|---|---|
COASEAN_N_MAX |
20 | number of collectives | placeholder form: N(0) — the collective count at maximum fragmentation, consolidating toward N=1 as ε→1 (the existing single-ledger model is that limit case). |
an institutional study of collective scale against coordination technology — the empirical form of Coase's boundary-of-the-firm question. a working hypothesis from reconciliation §6, explicitly NOT derived from institutional data. The real count depends on governance, geography and transaction-cost structure, which is the Coasean question the block is named for. |
COASEAN_BOUNDARY_EXPONENT |
1.0 | dimensionless exponent | placeholder form: N(ε) = max(1, round(N_max × (1−ε)^exp)). Linear by default: the count consolidates in proportion to automation. Higher values front-load consolidation. |
as for COASEAN_N_MAX — the same study settles both, and neither is independently identifiable without it. |
COASEAN_RESERVE_FRACTION |
0.1 | fraction of period TEH creation | normative form: each collective's inter-collective reserve, consumed by settlement_check() for imbalance settlement. Analogous to a central-bank FX reserve ratio. |
decided by the author, 2026-10-16 ("no data will settle the union and changed to normative"). A clearing union's design, set by its charter. Was a placeholder; record/provenance.md#placeholders-audited. precedent: reserve ratios in monetary unions and clearing systems — an analogue that informs the choice and does not settle it. no measurement settles this |
COASEAN_IMBALANCE_CEILING |
0.5 | fraction of the debtor collective's reserve | normative form: the bilateral net-flow credit ceiling (the paper's bilateral-imbalance-ceiling sketch, reconciliation §9-item-4). Within it trade continues on credit; beyond it settlement from reserve is required. |
decided by the author, 2026-10-16 ("no data will settle the union and changed to normative"). Was a placeholder; record/provenance.md#placeholders-audited. precedent: the European Payments Union and regional Asian Clearing Unions set exactly this parameter, by charter. no measurement settles this |
COASEAN_DEPRECIATION_SLOPE |
0.2 | dimensionless slope | placeholder form: factor = 1/(1 + slope × excess_ratio) — exchange-rate depreciation per unit of unsettled imbalance beyond the ceiling. Makes over-issuance a visible exchange rate movement, which is reconciliation §7's transition-regime claim: inflation between collectives shows up as FX, not as a broken price identity. |
a proposed functional form, not calibrated from anything. Observed depreciation against payment-imbalance data would settle the slope; the FORM is the substantive claim and it is the part worth arguing. |
COASEAN_COMMONS_TITHE |
0.03 | fraction of each collective's common-fund levy revenue | convention form: the tithe passed up to the federation commons (reconciliation §8.7a). Adopted from Italian Law 59/1992, which requires cooperatives to contribute 3% of annual surplus to the mutualistic funds — a real statutory rate, and the only real-world calibration point for a federation-level mutual levy. Tagged convention rather than CHOSEN because it names a specific external instrument. |
n/a as a convention. Departing from 3% would make it CHOSEN and require its own argument. honest adversarial finding, reported not tuned — at 3% the commons floor coverage is tiny, so the federation commons cannot carry the sufficiency floor at the precedent rate. |
COASEAN_INDIVISIBLE_RESERVE_FRACTION |
0.3 | fraction of a collective's trust | convention form: the unallocated (indivisible) share, credited to no individual capital account, escheating to the federation commons on merger/split/dissolution (reconciliation §8.7c). Adopted from Italian co-op law's statutory ~30% indivisible legal reserve. The allocated remainder follows members' accounts. |
n/a as a convention, per COASEAN_COMMONS_TITHE. the model tracks no individual accounts, so a named fraction is the minimal honest allocated/unallocated split — a tenure-derived fraction would be false precision. Adversarial finding: consolidation escheat drains per-collective dividends, so the worst marginal χ worsens toward ε→1 even as total τ holds. |
CONTESTABILITY_MIN_VIABLE_POPULATION |
5000.0 | persons | placeholder form: the smallest population that can staff a viable alternative collective — run the four-domain EOH pipeline with a full age distribution and a governance quorum. Deliberately far below Coasean-efficient scale at any ε: a viable alternative need only clear MINIMUM scale, accepting a coordination-cost disadvantage. Requiring optimal scale would make the entry threat vacuous at high ε, because the "alternative" would have to be the whole economy. |
NOT the derivation this line used to claim. COMPETENCY_THRESHOLD × len(ESSENTIAL_DOMAINS) = 0.155 × 8 = 1.24 (0.155 × 7 = 1.085 before care was added, 2026-10-01) is a fraction GREATER THAN ONE, so it yields no headcount at all without a further assumption the repo does not make — namely how many domains one worker may be certified in at once. Condition IV is a per-domain fraction of the workforce, not a partition of it. What would settle this: a minimum-certified-count per domain (an absolute, not a fraction) plus a multi-certification rate, which core/workforce.competency_reserve() would then close over a full age distribution. UNCALIBRATED research placeholder; checked 2026-08-09. |
CONTESTABILITY_UNDERWRITE_FRACTION |
0.5 | fraction of the federation commons per period | normative form: the ceiling on entry underwriting (§8.8 M2). The remainder stays as the sufficiency-floor backstop (§8.7a) — underwriting must never empty the fund that backs the floor. Underwritten capital moves commons → new collective trust, staying commonized and indivisible (§8.7c), never becoming a personal claim. |
decided by a charter decision on the split between underwriting and backstop. It is a prudential limit, so it resolves by argument — but the ARGUMENT can be made quantitative: the backstop needs to cover the floor at the worst modelled drawdown, which is computable from the fiscal layer. no measurement settles this |
Recalibration Prototype (proposed §8.9 — research/recalibration.py)¶
| Parameter | Default | Units | Tag | What would settle it |
|---|---|---|---|---|
RECAL_CAPITAL_OUTPUT_RATIO |
4.0 | years (capital stock per unit annual output) | convention form: ν in K(ε) = K₀ + ν·Y(ε). Adopted from Piketty's β (national capital / national income), observed at ≈4–6 across economies; the LOW end is taken as the adversarially-cheap-capital posture, because a smaller commons weakens the underwriting arm. Tagged convention because it names a specific measured external series and then picks its conservative edge. |
the capital/income ratio for the jurisdiction being modelled. Moving to the middle of the observed range would strengthen the commons, so the choice is deliberately unflattering to the framework's own result. this fixed §8.8 open item 3 at the root — the old frame held an ε=0-era stock fixed while ε rose, giving τ = 17.5 for a quantity DEFINED as a share ≤ 1. |
RECAL_EPSILON_RATE_PER_YEAR |
0.02 | ε per year | placeholder form: arc speed dε/dt — a ~50-year subsistence→post-scarcity transition. Converts per-ε acquisition needs into per-year flows, and faster arcs tighten acquisition feasibility LINEARLY, so this is a real lever on every §8.9 result. |
an observed pace of automation transition — the rate at which a real economy's machine share of obligation has risen, read off the capital or labour route (scenarios.capital_retrodiction, scenarios.labour_epsilon) at two dates. External; no rearrangement of the model's own loop can supply it. THE FIXED-POINT ROUTE WAS BUILT AND SETTLES NOTHING (2026-10-16, record/provenance.md#rate-fixed-point). research.formation. epsilon_rate_fixed_point solves (rate, realised pace) with damping. Under the null anchor the realised pace is the rate times a near-constant shape factor ( ratio_at_start), so the solve finds no interior rate and leaves the range: the 2026-08-09 "27% disagreement" is that factor, not a calibration signal. Under the endogenous charter it converges where formation stops keeping up — a CEILING on the rate, not a reading of it. |
RECAL_FOUNDING_FRACTION |
0.666666666667 | fraction of PERSONAL_EOH_BASE | placeholder form: the share of a person's entropy obligation that a floor-backed founder can redirect into building an alternative collective. Two-thirds leaves a third for their own personal EOH, which the sufficiency floor is meanwhile covering. |
time-use data on discretionary hours available to recipients of an unconditional floor. The cash-transfer and basic-income literature measures exactly this — how recipients reallocate time — and would replace the fraction with an observed one. |
RECAL_FOUNDING_LABOR_HOURS |
666.666666667 | hours per year | derived form: RECAL_FOUNDING_FRACTION × PERSONAL_EOH_BASE = 666.67 h/yr. The sufficiency floor is what frees this labour — the floor IS the entry finance of the low-ε arc, which is the substantive §8.9 claim. |
n/a — it inherits PERSONAL_EOH_BASE's and RECAL_FOUNDING_FRACTION's standing, both CHOSEN. was a literal 1,000.0, which the 2026-08-06 reprice orphaned from its own stated derivation (see the block comment above). Binding it means a future reprice of PERSONAL_EOH_BASE moves it, as the rationale always implied. |
RECAL_EXIT_HORIZON_YEARS |
5.0 | years | normative form: exit must be financeable within one vesting period (= CONTESTABILITY_VESTING_YEARS): a member who joins can accumulate the means to leave by the time they fully vest. THIS IS THE RC4 FIX — a stock target (K_entry) against a flow (savable income) yields a TIME, not a ratio, and the retired χ = P/K_entry demanded the founding stock be covered by ONE year of flow, which made the invariant nearly unclosable. |
decided by a charter decision, bound to the vesting period rather than set independently. The substantive commitment is "within one vesting period", not the number 5 — so this resolves whenever CONTESTABILITY_VESTING_YEARS does. no measurement settles this |
RECAL_ACCOUNT_CREDIT_SHARE |
0.5 | fraction of the annual per-capita dividend | convention form: the share credited to the member's individual capital account (a stock, per §8.7b) rather than paid as cash. Zero-interest per Condition III: the account is a sum of credits, never compounded. Adopted from Mondragon's internal capital accounts, which retain a share of each year's surplus to member accounts. |
n/a as a convention — but the 0.50 is rounder than Mondragon's actual practice, so the precedent supports the MECHANISM more strongly than the level. |
RECAL_ESTATE_CAPITAL_ESCHEAT_SHARE |
0.15 | fraction of a decedent's private capital estate | derived form: set EQUAL to ESTATE_LEVY_FRACTION — capital estates are treated exactly like TEH estates, so this is the existing D5 doctrine extended to capital rather than a new rule. That is the whole point of the value, and it should be bound to ESTATE_LEVY_FRACTION rather than restated as a literal. |
n/a — it inherits ESTATE_LEVY_FRACTION's standing (a charter decision). |
RECAL_ESCALATION_ESTATE_SHARE |
1.0 | fraction of a capital estate | normative form: full generational conversion while a §8.9b charter escalation is active (Piketty's inheritance-tax instrument). No living holder is ever divested; conversion happens at mortality speed. |
decided by a charter decision — the maximum is definitionally 1.0, so the only question is whether full conversion is the right escalation, not what number it is. no measurement settles this even at 1.0 the private-capital half-life is ≈69 years at the 1%/yr death rate, so φ → target is asymptotic over generations and the exit invariant never depends on reaching it. At canonical defaults the escalation NEVER fires. |
RECAL_ESCALATION_CAPACITY_FLOOR |
10.0 | number of foundings financeable per period | normative form: the underwriting capacity below which the charter escalates (with the adversarial regime observed) — the commons must always be able to finance about an order of magnitude more foundings than one, because a commons that can fund exactly one alternative is not a credible entry threat. |
decided by a charter decision on the credible-threat margin. no measurement settles this UNCALIBRATED placeholder. At canonical defaults capacity stays ≈145–280, so the trigger never fires and this constant has never been exercised by a shipped run. |
Formation feedback (§8.9c — research/formation.py)¶
Who actually builds K(ε) under the charter share — the investment-disincentive loop the static §8.9b model flagged as open.
| Parameter | Default | Units | Tag | What would settle it |
|---|---|---|---|---|
FORMATION_DEPRECIATION_RATE |
0.05 | fraction per year | derived form: derived from CAPITAL_MACHINE_PROFILES design lives (≈20 yr → δ ≈ 1/20) — the aggregate counterpart of the per-asset lifecycle in core/capital.py. Gross return on capital = 1/ν − δ = 0.25 − 0.05 = 0.20 at defaults, and the commons replacement cost δ·T_K is a ≈20–24% haircut on the gross dividend. |
n/a — it inherits CAPITAL_MACHINE_PROFILES' standing, which is CHOSEN. See DEP_RATE (0.045) for the same physical quantity derived a second way; the two should be reconciled to one. THE form: ABOVE DOES NOT REPRODUCE, RUN 2026-09-17. Weighting CAPITAL_MACHINE_PROFILES by TEH at the standard tier and aggregating as a RATE gives δ = 0.0428 (life 23.35 yr), against the 0.05 held here and the "≈20 yr" the form claims. A derived tag asserts the value IS its stated formula, so this is a provenance defect rather than a caveat. Recorded and not repaired: retagging moves the verdict-ladder census and re-fitting is an author decision. See record/provenance.md#depreciation-derivation-does-not-reproduce. MEASURED 2026-10-08: BEA's 2024 rate is 0.052–0.090 by scope, so 0.05 sits below all four scopes — see DEP_RATE and capital_retrodiction.depreciation_report(). Not changed. |
FORMATION_HURDLE_RATE_MIN |
0.02 | net return per year | placeholder form: the linear private-supply curve — no formation below the hurdle rate, all needed formation supplied at or above the full-supply rate, heterogeneous hurdle rates in between. Implies the incentive-compatible charter share s* = 1 − 0.10/0.20 = 0.50. |
UNCALIBRATED placeholders. No observed economy runs at zero interest with an accumulation ceiling, so there is no series to read these off — the counterfactual is the argument and the sensitivity is the honest output. THE HURDLE IS LOW BECAUSE OF CONDITION III, and that is the finding, not an assumption: idle TEH earns zero interest and leaks via the accumulation ceiling (D6) and estate dissolution (D5), so the opportunity cost of investing is uniquely small and only risk compensation remains. A fiat-like 0.18 full-supply rate gives s* ≈ 0.10 — i.e. zero interest is what makes the charter affordable, quantified. Raising the hurdle toward fiat levels IS the Condition III counterfactual. |
FORMATION_FULL_SUPPLY_RATE |
0.1 | net return per year | placeholder form: the linear private-supply curve — no formation below the hurdle rate, all needed formation supplied at or above the full-supply rate, heterogeneous hurdle rates in between. Implies the incentive-compatible charter share s* = 1 − 0.10/0.20 = 0.50. |
UNCALIBRATED placeholders. No observed economy runs at zero interest with an accumulation ceiling, so there is no series to read these off — the counterfactual is the argument and the sensitivity is the honest output. THE HURDLE IS LOW BECAUSE OF CONDITION III, and that is the finding, not an assumption: idle TEH earns zero interest and leaks via the accumulation ceiling (D6) and estate dissolution (D5), so the opportunity cost of investing is uniquely small and only risk compensation remains. A fiat-like 0.18 full-supply rate gives s* ≈ 0.10 — i.e. zero interest is what makes the charter affordable, quantified. Raising the hurdle toward fiat levels IS the Condition III counterfactual. |
Membership-Terms Audit Thresholds (reconciliation §8.7e — research/membership.py)¶
| Parameter | Default | Units | Tag | What would settle it |
|---|---|---|---|---|
MEMBERSHIP_VESTING_WARN_YEARS |
10.0 | years | derived form: 2 × CONTESTABILITY_VESTING_YEARS — a dividend held hostage for twice the vesting period thins the marginal member's exit without formally breaching χ. Should be BOUND to that constant rather than restated as 10.0. |
n/a — inherits CONTESTABILITY_VESTING_YEARS' standing. |
MEMBERSHIP_EXIT_NOTICE_WARN_YEARS |
1.0 | years of exit notice | normative form: WARN at one year (friction accumulating), CRIT at three. The CRIT is close to definitional under reconciliation §8.1: exit deferred three years is nominal, not substantive, so the term itself breaches the invariant whatever χ reads. |
decided by a charter decision, with real precedent — cooperative and partnership withdrawal-notice periods are documented and would give an observed distribution to place these against. no measurement settles this |
MEMBERSHIP_EXIT_NOTICE_CRIT_YEARS |
3.0 | years of exit notice | normative form: WARN at one year (friction accumulating), CRIT at three. The CRIT is close to definitional under reconciliation §8.1: exit deferred three years is nominal, not substantive, so the term itself breaches the invariant whatever χ reads. |
decided by a charter decision, with real precedent — cooperative and partnership withdrawal-notice periods are documented and would give an observed distribution to place these against. no measurement settles this |
MEMBERSHIP_MIN_HOURS_WARN_FRACTION |
0.5 | fraction of PERSONAL_EOH_BASE | normative form: WARN above half the personal entropy load, CRIT at or above the whole of it. The CRIT is definitional rather than chosen: an obligation equal to a person's entire entropy load is compulsion, not a membership term (§9-item-7). |
decided by a charter decision on the maximum obligation membership may impose. no measurement settles this THESE ARE FRACTIONS, SO THEY MOVED WITH THE REPRICE. At PERSONAL_EOH_BASE = 1000 they are 500 and 1,000 h/yr; docs/parameter_provenance.md still printed the pre-reprice 750 and 1500. Caught by this migration and corrected — and the reason the gate now includes a curated test over prose-restated derived figures, which a value-equality check cannot see. |
MEMBERSHIP_MIN_HOURS_CRIT_FRACTION |
1.0 | fraction of PERSONAL_EOH_BASE | normative form: WARN above half the personal entropy load, CRIT at or above the whole of it. The CRIT is definitional rather than chosen: an obligation equal to a person's entire entropy load is compulsion, not a membership term (§9-item-7). |
decided by a charter decision on the maximum obligation membership may impose. no measurement settles this THESE ARE FRACTIONS, SO THEY MOVED WITH THE REPRICE. At PERSONAL_EOH_BASE = 1000 they are 500 and 1,000 h/yr; docs/parameter_provenance.md still printed the pre-reprice 750 and 1500. Caught by this migration and corrected — and the reason the gate now includes a curated test over prose-restated derived figures, which a value-equality check cannot see. |
MEMBERSHIP_DIVIDEND_POLICY_WARN |
0.25 | fraction of the pro-rata dividend | normative form: distributing less than a quarter of the pro-rata dividend to accounts → WARN, because retention rebuilds the undistributed-commons honeypot INSIDE the collective that the indivisible-reserve escheat rule exists to defuse. |
decided by a charter decision on minimum distribution. no measurement settles this |
Reference Multiplier (measured — O*NET 30.3 / BLS, mult-5.1.0)¶
The multiplier prices one hour of labour and sets the floor at which TEH is minted — not realized earnings (a discovered market premium sits on top; reconciliation §3). All four assessment factors are measured from public survey data; the map that turns them into a multiplier is derived-then-frozen.
Know which half you are citing before citing any number.
The rank ordering and pairwise ratios are measurements (falsifiable against
source data); the absolute range, global spread ratio and band pass are
construction artifacts of the normalization choice (±2.8× swing across
normalizations) with no empirical content. scenarios/multiplier_sensitivity.py
quantifies both — run eoh multiplier sensitivity.
Measured factors and the geometric map¶
The four assessment factors themselves are not data.py constants — they are
per-occupation columns in the shipped registry, so they sit outside the coverage
gate: f_training, f_demand, f_scarcity, f_impact, each ∈[0,1], measured from
O*NET 30.3 education+training (T), abilities/skills/work-context burden (D), BLS EP
openings+growth (S), and O*NET+BLS impact sub-components (I), over 751 occupations
and 94.2% of US employment. Loaded via hours_eoh.reference.onet_multipliers; their
provenance is in
multiplier_provenance_v5.csv.
The map that turns them into a multiplier is in data.py:
| Parameter | Default | Units | Tag | What would settle it |
|---|---|---|---|---|
M_FLOOR |
1.0 | dimensionless multiplier | normative form: the constitutional floor of the geometric map — one hour of the least demanding registered labour mints exactly one TEH. |
decided by a charter decision on the floor. It is arguably the framework's cleanest normative commitment (an hour is an hour at the floor) and needs no measurement — but it is a commitment, not a measured minimum. no measurement settles this |
M_GEOMETRIC_R |
3.2 | dimensionless ratio | derived-then-FROZEN form: solved once at the reference epoch from {M_FLOOR, the band, the measured composite distribution} so that the mapped mean lands in the band. |
an O*NET/BLS vintage refresh re-solves it mechanically. It is NOT a knob — re-deriving it per vintage restores the circularity the freeze exists to break. Note the consequence recorded in the multiplier falsifiability pass: because R is solved to make the band pass, the band pass carries no empirical content. The rank ordering and pairwise ratios do. |
M_COMPOSITE_Z_LO |
0.153073096218 | composite score, dimensionless | derived-then-FROZEN form: the observed composite range at the reference epoch, used to normalize z = clip((composite − Z_LO)/(Z_HI − Z_LO), 0, 1). |
an O*NET/BLS vintage refresh. Frozen for the same reason as R. |
M_COMPOSITE_Z_HI |
0.740198609448 | composite score, dimensionless | derived-then-FROZEN form: the observed composite range at the reference epoch, used to normalize z = clip((composite − Z_LO)/(Z_HI − Z_LO), 0, 1). |
an O*NET/BLS vintage refresh. Frozen for the same reason as R. |
M_FACTOR_WEIGHTS |
(0.3, 0.25, 0.2, 0.25) | fraction | normative | decided by no measurement stands behind the split between the four assessment factors — it is what the collective decides a labour-hour's value turns on. Sweep ±0.10 each; scenarios/multiplier_sensitivity.py runs it and reports that rank ordering survives while absolute levels do not. no measurement settles this |
M_IMPACT_SUBDOMAIN_WEIGHTS |
(0.3, 0.25, 0.25, 0.2) | fraction | normative | decided by as for M_FACTOR_WEIGHTS — a governance judgement, swept not fitted. no measurement settles this |
M_IMPACT_COMPOSITE_LO |
0.331749422563 | impact composite score, dimensionless | derived-then-FROZEN form: the observed impact-composite range at the reference epoch; the impact composite is affine outer-normalized against these bounds. |
an O*NET/BLS vintage refresh. |
M_IMPACT_COMPOSITE_HI |
0.751958294388 | impact composite score, dimensionless | derived-then-FROZEN form: the observed impact-composite range at the reference epoch; the impact composite is affine outer-normalized against these bounds. |
an O*NET/BLS vintage refresh. |
M_EPOCH_WEIGHT_ANCHORS |
fraction, per ε anchor | normative | decided by the ε-dependence of the weighting is a governance judgement, not a measurement. The DIRECTION is argued (training matters less as skills stop being scarce; impact matters more as fewer hours carry more consequence); the four anchor vectors are illustrative. no measurement settles this |
The map: composite = Σ wᵢ·fᵢ; m = M_FLOOR · M_GEOMETRIC_R ** z. It has no
free parameters — floor constitutional, R and z-range derived-then-frozen,
curvature deleted (core/multipliers.py:reference_multiplier).
CHOSEN constants — each with its epistemic pointer¶
Every remaining CHOSEN carries the evidence that would resolve it. The data.py
constants are in the generated table above (M_FACTOR_WEIGHTS,
M_EPOCH_WEIGHT_ANCHORS, M_IMPACT_SUBDOMAIN_WEIGHTS). The load-bearing ones
outside data.py — registry-level knobs, so outside the coverage gate, with
sweep ranges in
multiplier_provenance_v5.csv:
| Parameter | Default | Epistemic pointer (resolves_by) |
|---|---|---|
scarcity_leg_weights |
O 0.667 / G 0.333 | Add the vacancy leg V (JOLTS by SOC, economy-wide) and fit O/G/V from realized time-to-fill. |
substitution_tier_weights |
1.0 / 0.6 / 0.3 | Observed cross-occupation transition rates (BLS mobility / longitudinal survey). |
temporal_activity_lists |
5 persisting / 3 transient | An output-half-life measure (how long the work's product persists) would replace hand-picked activity lists. |
epsilon |
0.40 | Measure ε = machine_EOH / total_EOH from capital stock (civilization.py) — then ε is observed, not chosen. |
band scope |
[1.8, 2.1] | Resolve whether it binds the minted floor or realized compensation; the band is near-non-discriminating (a convention). A distributional target the data could actually fail would replace it. |
Not yet available (tag: planned)¶
vacancy_leg_V (JOLTS by SOC), abandonment_rate (longitudinal exit-without-
onward-destination — an audit trigger, not a multiplier input), time_to_harm_speed
(no dataset exists), ai_exposure_machine_leg (per-occupation Iceberg Index).
These are the model's honest data debts.
Thermal Sink EOH — planetary radiative budget (research/thermal.py, P0)¶
The uncounted vector: degraded energy exits only by radiation to space, and that capacity is fixed and non-restorable by labour (established in the thermal-sink implementation handoff). P0 computes the provable automation-ceiling bound (E29 / finding F2) — advisory-only, generates no obligation. Two provenance tiers, kept explicit:
| Parameter | Default | Units | Tag | What would settle it |
|---|---|---|---|---|
A_EARTH_M2 |
5.101e+14 | m² | physics form: Earth surface area. Definitional geometry. |
n/a — structural |
SIGMA_SB |
5.670374419e-08 | W·m⁻²·K⁻⁴ | physics form: the Stefan–Boltzmann constant. A physical constant of nature. |
n/a — structural |
EARTH_EMISSION_TEMPERATURE_K |
255.0 | kelvin | derived form: Earth's effective emission temperature — the blackbody temperature that radiates the absorbed solar flux. Computable as (S₀(1−α)/4σ)^¼ from the solar constant and planetary albedo; neither is carried here, so the standard value is adopted and the derivation is stated rather than run. |
nothing — a standard geophysical quantity. It moves only if the solar constant or planetary albedo is revised, and carrying those two would let this be computed rather than adopted. EXISTS TO GIVE SIGMA_SB SOMETHING TO DO. SIGMA_SB is one of only two physics-tagged constants in this file and was read by NOTHING until 2026-08-17 — the headline "only 2 constants are physics" was true and neither was doing any work. Paired with this temperature it yields the Planck feedback 4σT³ = 3.761 W·m⁻²·K⁻¹, which bounds THERMAL_LAMBDA_FEEDBACK from above (research/thermal_lambda.planck_feedback). Before that, the Planck term lived as the prose "Planck-only ≈ 3.2" in this file's λ note and in thermal_path_c.json — a number governing the model from inside a comment, the same shape as WORLD_POPULATION and SLU_HECTARES. |
SECONDS_PER_YEAR |
31557600.0 | seconds | convention form: Δt_s for a one-year period — 365.25 d, the Julian year. A stated denominator; the choice between Julian, tropical and calendar years is a convention and matters at the 4th significant figure. |
— |
THERMAL_LAMBDA_FEEDBACK |
1.2 | W·m⁻²·K⁻¹ | bounded (Tier C) form: the EQUILIBRIUM climate feedback parameter. FRAME DISCIPLINE: it pairs only with the equilibrium budget λ·ΔT − F. The historical 1.492 pairs with a transient reading the framework rejects; mixing them inflates the allowance ~6×, and thermal_lambda.budget_forcing_headroom() refuses it. |
band 1.2–1.7 W·m⁻²·K⁻¹ — AR6-implied 1.310 at ECS 3.0 K, historical energy-budget ratio 1.492, and regression 1.693 ± 0.472 over 53 yr, the last two derived from the shipped IGCC series (research/thermal_lambda.py). errs LOW, deliberately the conservative side: a LOWER λ means a SMALLER budget and a LARGER obligation, so 1.2 is not flattering the framework. But the band is not the real uncertainty — λ_equilibrium cannot be assessed from the shipped data at all, because converting historical to equilibrium needs the pattern effect. Across AR6's likely ECS range the budget runs from ZERO to ~11× the shipped case; never publish a ψ*-derived figure without λ and that band. an assessed ECS with uncertainty — an EXTERNAL input, not a rearrangement of what we already hold. BEST GUESS, AND IT STAYS ONE (checked 2026-08-05): λ_equilibrium CANNOT be assessed from the shipped data. Two independent estimators of the HISTORICAL feedback agree — 1.492 (ratio) and 1.693 ± 0.472 (regression, 53 yr) — but converting historical to equilibrium needs the pattern effect, which requires pattern-forced model experiments or paleoclimate constraints. Neither is derivable from ERF, EEI and GMST. The value is unchanged but its POSITION is now derived: it sits below the AR6-implied 1.310 (ECS 3.0 K) and below the historical energy-budget estimate, so 1.2 is the CONSERVATIVE side — a lower λ means a smaller budget and a LARGER obligation, and it was not flattering the result. SENSITIVITY IS FIRST-CLASS: across AR6's likely ECS range the budget runs from ZERO (ECS 5 K) to ~11× the shipped case. Never publish a ψ*-derived figure without λ and that band. |
THERMAL_F_GHG |
3.0 | W·m⁻² | bounded (Tier C) form: anthropogenic well-mixed GHG forcing, at the order of AR6. Lowering it raises the budget, which is finding F3: decarbonization and automation headroom trade against each other. |
band 3.0–3.585 W·m⁻², from AR6-order to the measured IGCC 2025a well-mixed GHG ERF errs LOW, AND THIS IS THE UNSAFE DIRECTION. Lowering F raises the budget, so 3.0 against the measured 3.585 overstates the allowance and understates the obligation. Superseded in practice by THERMAL_F_NET_ERF / THERMAL_F_WMGHG_ERF (measured, Tier A); this P0 constant is retained only for the scaffolding bound. a published forcing assessment — already done, see the Path C block. SUPERSEDED IN PRACTICE by the Path C measured values (THERMAL_F_WMGHG_ERF = 3.585, IGCC 2025a, Tier A). This P0 constant is retained for the scaffolding bound. |
THERMAL_F_ALB |
-0.192 | W·m⁻² | measured (Tier A) form: net anthropogenic albedo forcing — the land-use term of IGCC 2025a ( land_use in ERF_best / ERF_p05 / ERF_p95, time 2025.5): −0.192 [−0.300, −0.053] W·m⁻². Negative, so it COOLS: subtracting it in residual_thermal_forcing RAISES the residual, from −0.600 to −0.408 W·m⁻² on the P0 defaults — still an overage at both percentiles. |
an annual IGCC refresh. was a 0.0 placeholder until 2026-10-16 (author: "Thermal takes the measurement"); record/provenance.md#placeholders-audited. The 0 erred toward a larger obligation; the measured value is less conservative, by design. ONLY THE P0 CHAIN READS IT. Path C passes f_alb=0 because its net and anthro bases already contain land use (IGCC's anthro_nonwmghg sums it); adding this there would count it twice. Path C's wmghg basis omits it, as that basis omits every non-GHG term. |
THERMAL_DT_LO |
2.0 | K | placeholder (Tier D) form: the assessed habitability threshold. |
a habitability assessment naming the variable that actually binds — not a GMST round number. THE SINGLE MOST LEVERAGED INPUT IN THE WHOLE THERMAL LAYER. It sets the overage, the drawdown job and the obligation, and it is the framework's own judgment rather than a measurement. 2.0 K is adopted because it keeps results stable and lands inside the indeterminate band, NOT because it is assessed. It may well be judged too HIGH later, and every downward revision ENLARGES the obligation (1.5 K is ~1.5× the job). Assess in land extremes and convert by ÷THERMAL_TXX_PER_GMST per C6. |
THERMAL_COMMONS_RESERVE |
0.2 | fraction of the thermal budget | normative form: r — the share held in reserve rather than allocated. RATCHETED DOWN ONLY, which is the governance property that matters more than the level: a reserve that can be raised again is not a commitment. |
decided by a charter decision on precautionary margin. No measurement settles how much of a planetary budget to leave unspent. no measurement settles this |
THERMAL_ANTHROPOGENIC_DISSIPATION_W |
2e+13 | W (global total) | measured (Tier C) form: the present Φ_other reference — anthropogenic heat dissipation not attributable to modelled automation capital, ~0.04 W·m⁻² when spread over A_EARTH_M2. |
a global energy-balance inventory. The order is well established from primary energy consumption; the split between Φ_other and Φ_auto is the framework's own partition and is where the uncertainty sits. |
THERMAL_IOTA_FLOOR_PERSONAL |
360000.0 | joules per EOH fulfilled | placeholder (Tier D) form: the per-domain thermodynamic MINIMUM joules to fulfill one EOH by machine (E27). Ordering follows the handoff: personal and infrastructure carry real caloric and enthalpy floors, while knowledge's Landauer floor is astronomically lower (finding F6). One EOH is one hour of entropy-obligation-equivalent, and the J/EOH mapping is the open quantity. |
measured ι via the handoff §13.1 ladder D→C→B. Path C (research/thermal_path_c.py) already bypasses these entirely — ι and EOH_total cancel in ε_max = ε_current · budget / Φ_auto — so the measured route exists and these are retained for the provable bound, not for reported results. THE GATING UNCERTAINTY OF THE P0 LAYER, and a floor-based bound can only OVERSTATE ε_max (real ι ≥ ι_floor) — so a floor bound < 1 would be CONCLUSIVE (F2), while a bound ≥ 1 is inconclusive and points to the measured-ι ladder rather than to changing these numbers. At non-degenerate constants the bound comes back ε_max ≫ 1 → INCONCLUSIVE, which is the honest P0 result: the thermodynamic floor is too low to bind automation. |
THERMAL_IOTA_FLOOR_INFRASTRUCTURE |
360000.0 | joules per EOH fulfilled | placeholder (Tier D) form: the per-domain thermodynamic MINIMUM joules to fulfill one EOH by machine (E27). Ordering follows the handoff: personal and infrastructure carry real caloric and enthalpy floors, while knowledge's Landauer floor is astronomically lower (finding F6). One EOH is one hour of entropy-obligation-equivalent, and the J/EOH mapping is the open quantity. |
measured ι via the handoff §13.1 ladder D→C→B. Path C (research/thermal_path_c.py) already bypasses these entirely — ι and EOH_total cancel in ε_max = ε_current · budget / Φ_auto — so the measured route exists and these are retained for the provable bound, not for reported results. THE GATING UNCERTAINTY OF THE P0 LAYER, and a floor-based bound can only OVERSTATE ε_max (real ι ≥ ι_floor) — so a floor bound < 1 would be CONCLUSIVE (F2), while a bound ≥ 1 is inconclusive and points to the measured-ι ladder rather than to changing these numbers. At non-degenerate constants the bound comes back ε_max ≫ 1 → INCONCLUSIVE, which is the honest P0 result: the thermodynamic floor is too low to bind automation. |
THERMAL_IOTA_FLOOR_ECOLOGICAL |
36000.0 | joules per EOH fulfilled | placeholder (Tier D) form: the per-domain thermodynamic MINIMUM joules to fulfill one EOH by machine (E27). Ordering follows the handoff: personal and infrastructure carry real caloric and enthalpy floors, while knowledge's Landauer floor is astronomically lower (finding F6). One EOH is one hour of entropy-obligation-equivalent, and the J/EOH mapping is the open quantity. |
measured ι via the handoff §13.1 ladder D→C→B. Path C (research/thermal_path_c.py) already bypasses these entirely — ι and EOH_total cancel in ε_max = ε_current · budget / Φ_auto — so the measured route exists and these are retained for the provable bound, not for reported results. THE GATING UNCERTAINTY OF THE P0 LAYER, and a floor-based bound can only OVERSTATE ε_max (real ι ≥ ι_floor) — so a floor bound < 1 would be CONCLUSIVE (F2), while a bound ≥ 1 is inconclusive and points to the measured-ι ladder rather than to changing these numbers. At non-degenerate constants the bound comes back ε_max ≫ 1 → INCONCLUSIVE, which is the honest P0 result: the thermodynamic floor is too low to bind automation. |
THERMAL_IOTA_FLOOR_KNOWLEDGE |
1e-06 | joules per EOH fulfilled | placeholder (Tier D) form: the per-domain thermodynamic MINIMUM joules to fulfill one EOH by machine (E27). Ordering follows the handoff: personal and infrastructure carry real caloric and enthalpy floors, while knowledge's Landauer floor is astronomically lower (finding F6). One EOH is one hour of entropy-obligation-equivalent, and the J/EOH mapping is the open quantity. |
measured ι via the handoff §13.1 ladder D→C→B. Path C (research/thermal_path_c.py) already bypasses these entirely — ι and EOH_total cancel in ε_max = ε_current · budget / Φ_auto — so the measured route exists and these are retained for the provable bound, not for reported results. THE GATING UNCERTAINTY OF THE P0 LAYER, and a floor-based bound can only OVERSTATE ε_max (real ι ≥ ι_floor) — so a floor bound < 1 would be CONCLUSIVE (F2), while a bound ≥ 1 is inconclusive and points to the measured-ι ladder rather than to changing these numbers. At non-degenerate constants the bound comes back ε_max ≫ 1 → INCONCLUSIVE, which is the honest P0 result: the thermodynamic floor is too low to bind automation. |
Honest P0 result. At non-degenerate constants the floor-based bound comes back ε_max ≫ 1 → INCONCLUSIVE: the thermodynamic floor is too low to bind automation. A floor bound can only overstate ε_max, so a bound < 1 would be conclusive (F2) — but it does not bind, which correctly points to the measured-ι ladder (path C) as the binding question, not a constant change. The only "binding" corner is UNBUDGETED (ψ*=0), driven by GHG forcing exhausting the allowance — an F3 statement about decarbonization, not automation intensity.
Path C — measured top-down thermal residual (research/thermal_path_c.py)¶
The measurement that resolves the P0 "INCONCLUSIVE" bound into a concrete answer,
via the operative formula ε_max = ε_current · allocated_budget / Φ_auto (ι and
EOH_total cancel — no EOH register needed). Measured energy mix, κ table, forcing
and national records ship in reference/data/thermal_path_c.json
with per-input provenance tiers (A retrieved / B constant / C training-data-unverified
/ D framework placeholder) — the weakest data drives the strongest finding, so
read the tiers before citing. Structural constants added to data.py:
| Parameter | Default | Units | Tag | What would settle it |
|---|---|---|---|---|
A_LAND_CLAIMED_M2 |
1.35e+14 | m² | measured (Tier B) form: land area ex-Antarctica — the denominator for land-allocated ψ*. Geographic rather than a free parameter, but the EXCLUSION of Antarctica is a framework decision about what land can bear an allocation, not a measurement. |
a standard geographic dataset; the figure is not in dispute. What is in dispute is the exclusion rule, which ETA_LAND_MASK_THRESHOLD also touches. |
THERMAL_F_NET_ERF |
3.366 | W·m⁻² | measured (Tier A) form: TOTAL effective radiative forcing, IGCC 2025a p50 at time = 2025 — the BUDGET basis per C4, because natural forcing consumes the habitability allowance regardless of cause. Verified 2026-08-03 against the shipped synthesis timeseries ( total column). Correction C5 replaced AR6 2019-baseline Tier C values; the recalled 2.72 was right for the wrong year. |
an annual IGCC refresh. Guardrail I quantity — measured, published with uncertainty, never negotiated. |
THERMAL_F_NET_ERF_P05 |
2.602 | W·m⁻² | measured (Tier A) form: the IGCC 2025a p05/p95 bounds on total ERF. This band is what makes the determinacy map computable — the layer withholds a budget where its sign is undetermined across the band rather than reporting the p50 alone. |
an annual IGCC refresh. |
THERMAL_F_NET_ERF_P95 |
4.102 | W·m⁻² | measured (Tier A) form: the IGCC 2025a p05/p95 bounds on total ERF. This band is what makes the determinacy map computable — the layer withholds a budget where its sign is undetermined across the band rather than reporting the p50 alone. |
an annual IGCC refresh. |
THERMAL_F_ANTHRO_ERF |
3.104 | W·m⁻² | measured (Tier A) form: anthropogenic ERF alone, including aerosol cooling — the REMOVABLE forcing, hence the defensible F3 gain basis. Carried separately from the budget basis because decarbonization gain and budget consumption are different questions: only the anthropogenic part is removable by labour. |
an annual IGCC refresh. |
THERMAL_F_WMGHG_ERF |
3.585 | W·m⁻² | measured (Tier A) form: well-mixed GHG ERF alone (IGCC 2025a wmghg) — the forward-looking basis as aerosol cooling declines. |
an annual IGCC refresh. |
| Parameter | Default | Units | Tag | What would settle it |
|---|---|---|---|---|
CO2_FORCING_COEFFICIENT |
5.645 | W·m⁻² per ln(C/C₀) | measured (Tier A) form: DERIVED by OLS of the IGCC 2025a CO₂ ERF series on ln(concentration) over 350–426 ppm (n=38) — the range a drawdown actually traverses. Self-validating: the fitted intercept implies C₀ = 279.8 ppm against the accepted pre-industrial 278. Myhre's classic 5.35 runs 5.2% low over this range. |
an IGCC vintage refresh re-fits it. Moved from recalled to derived in the measurement spine pass. |
CO2_CONCENTRATION_PPM |
425.65 | ppm | measured (Tier A) form: IGCC 2025a annual mean at 2025. |
an annual refresh. |
CO2_PPM_TO_GT |
7.82 | GtCO₂ per ppm | derived form: atmospheric mass 5.148e18 kg × 1e-6 × (44.01/28.96 molar ratio). Derivable arithmetic from physical constants, not fitted to anything. |
n/a — it follows from atmospheric mass and molar masses. |
CDR_GROSS_REMOVAL_FACTOR |
1.8 | dimensionless gross/net ratio | placeholder (Tier D) form: removing CO₂ from the air lets ocean and land sinks OUTGAS back, so the gross tonnage removed exceeds the concentration drop achieved. |
ESM CDR reversibility experiments (Zickfeld et al.). OMITTING IT WOULD UNDERSTATE THE OBLIGATION ~2× and bias the solvency gate toward passing — exactly the wrong error, which is why a Tier D placeholder is carried rather than the term dropped. |
CDR_ENERGY_GJ_PER_TONNE |
4.0 | GJ per tonne CO₂ removed | bounded (Tier C) form: DAC-order energy intensity; recalled range 2–6. |
band 2–6 GJ per tonne CO₂, DAC-order errs NEITHER. Mid-band, and it does not affect the EOH obligation at all — the energy term cancels out of it (EOH = gross tonnes × labour-hours/tonne), so it drives only the programme's own dissipation. published plant LCA. Together with CDR_LABOR_HOURS_PER_TONNE this DERIVES ι_drawdown = (GJ/t)/(h/t) ≈ 6.7e9 J/EOH, so the framework's drawdown ι is a function of two plant observables rather than a third free placeholder. |
THERMAL_PROGRAMME_YEARS |
40.0 | years | normative form: the horizon over which the drawdown obligation is discharged. 40 yr keeps the programme inside a single lifetime of responsibility: the generation that incurred the debt discharges it, rather than booking the benefit and willing the work to people who did not choose it. |
decided by nothing measurable. This is an ETHICAL choice about who bears the work, not a technical one, and it should be argued as such — which is why the pointer says so rather than naming a study that would not settle it. no measurement settles this A REAL LEVER — the obligation scales as 1/horizon, so 30 yr is 1.33× the annual load and 100 yr is 0.4×. |
| Parameter | Default | Units | Tag | What would settle it |
|---|---|---|---|---|
CDR_ALLOCATION_BASIS |
'responsibility' | policy switch — "responsibility" | normative form: how the global drawdown job is split across collectives. "responsibility" (cumulative emissions) is chosen over "population" because a collective cannot burden others with the consequences of choices it made. See allocation_share(). |
decided by nothing measurable — a governance decision, not physics. Both options are implemented so the choice is visible and reversible rather than baked in. no measurement settles this |
CDR_RESPONSIBILITY_BASIS |
'incl_luc' | policy switch — "incl_luc" | normative form: which cumulative-CO₂ measure weights responsibility. "incl_luc" (fossil + cement + land-use change) is the whole atmospheric burden the drawdown must remove, and it matches the forcing coefficient, which was fitted to a concentration record that already reflects land use. "fossil" has lower uncertainty but leaves ~33% of the burden unallocated. |
decided by consumption-based allocation once trade data supports it. Recorded for live implementations to settle, not resolved by the model. no measurement settles this A LIVE EQUITY QUESTION and a sign-off item. Including land use moves substantial burden onto collectives that were often converting land under external demand, and the framework cannot yet trade-adjust — OWID consumption-based emissions begin only in 1990, far too short for a cumulative measure. |
ETA_BASIS |
'clear_sky' | policy switch — "clear_sky" | normative form: which radiative-efficiency field weights a collective's land allocation. Clear-sky measures the STRUCTURAL radiative transparency of the column, which is what "this land's share of the sink" should mean. All-sky η credits a collective for being cloudy — cloud cover is not a policy lever, is partly endogenous to warming, and is the noisiest part of the field, so an all-sky rule rewards weather. |
decided by a governance decision on what the allocation is meant to track. The FIELDS themselves are measured (ERA5, 258 collectives); the choice between them is not. no measurement settles this NOT COSMETIC — the two differ by up to 0.27 in η (RMS 0.051, p95 0.085), so all-sky is reported alongside as the physical reality check and the per-collective gap must stay visible. |
ETA_LAND_MASK_THRESHOLD |
0.5 | ERA5 land-sea-mask fraction ∈ [0,1] | normative form: lsm ≥ this counts as land (§5 decision 1: territorial sea excluded). |
RETIRED — superseded by hours_eoh.research.thermal_path_c.load_eta_land — the shipped η dataset it returns records, in its own _method.weighting field, "cos(latitude) x land FRACTION (lsm), not a binary threshold, so partial coastal cells contribute their actual land area".decided by superseded. The continuous-fraction weighting is the operative decision and it lives with the data that implements it, which is the right place for a method choice the generation step makes. no measurement settles this THE SHIPPED DATA CONTRADICTED THIS CONSTANT AND NOTHING RECORDED IT (found 2026-08-17 by a dead-code sweep). Its form: asserted that "the ERA5 mask is a fraction, so a THRESHOLD IS REQUIRED"; the η dataset that actually shipped states in its own method field that it used the continuous land fraction and explicitly NOT a binary threshold. The generation step answered the question this constant was posed to settle, and answered it the other way — so §5 decision 1 was superseded in practice while still being carried here as live governance. It is retired rather than wired, because wiring it would REINTRODUCE the binary threshold the data deliberately avoided: partial coastal cells would flip to all-or-nothing instead of contributing their actual land area, which is strictly worse and would silently change every per-collective η. The wider lesson is that the provenance gate proves a constant is DOCUMENTED, not that it is USED — this one was tagged, audited, and contradicted by the dataset it governed. |
CDR_UNATTRIBUTED_POLICY |
'pro_rata' | policy switch — "pro_rata" | normative form: what happens to emissions belonging to no territory — international shipping and aviation, 46 GtCO₂ / 2.49% of the cumulative fossil total. "pro_rata" redistributes across collectives in proportion to existing shares, so shares sum to 1 and no part of the obligation is left without a bearer: we all inherited the world as it is. "unallocated" leaves the gap open, which means the commons silently absorbs it — and silence is the objection. |
decided by consumption-based allocation once trade data supports it. OWID's begins in 1990, and 1990-forward is where the framework will start when it does. no measurement settles this |
| Parameter | Default | Units | Tag | What would settle it |
|---|---|---|---|---|
CDR_LABOR_HOURS_PER_TONNE |
0.6 | labour-hours per tonne CO₂ removed | measured (Tier D) form: a ~1 Mt/yr plant at ~300 staff × 2000 h. Together with CDR_ENERGY_GJ_PER_TONNE this DERIVES ι_drawdown ≈ 6.7e9 J/EOH — ~4 orders above the infrastructure ι floor, as expected: drawdown is energy-intensive and labour-thin. |
operator staffing disclosures. WAS A CANDIDATE FOR THE DOMAIN-BALANCE DEFECT, and that framing is SUPERSEDED (Phase 4f, 2026-08-28). This read "Either ECOLOGICAL_BASE_RATE is low by 2–3 orders or this is, or both; nothing in current data settles it." The partition settles the first disjunct: ECOLOGICAL_BASE_RATE produces a RECURRING term, everything recurring is GUF's, and its derived value in the domain is zero — it was never "low", it was the wrong kind of term. So if a discrepancy remains between the two layers it is THIS constant's to answer, and the ecological anchor can no longer absorb it. GUF_ECO_KAPPA_CARBON reached the SAME quantity from the land layer at 2.750, a 4.58× disagreement inside one repo; it is now bound EQUAL to this constant (2026-08-09, author decision), so this figure carries both layers and a staffing refresh moves both. TestCarbonKappaReconciliation enforces it. |
THERMAL_F_NATURAL_ERF |
0.262 | W·m⁻² | measured (Tier A) form: solar + volcanic ERF at 2025 (IGCC 2025a natural). Consumes budget per C4 but is NOT removable by labour, so it is the floor on achievable forcing and the wedge between the budget basis and the F3 gain basis (§10.1). |
an annual IGCC refresh. |
THERMAL_GMST_OBSERVED |
1.23 | K (GMST anomaly) | measured (Tier A) form: observed GMST anomaly, 2015–2024 mean (IGCC 2025a). Paired with the committed F/λ to expose the pipeline — the warming already bought and not yet delivered (§10.3). |
an annual refresh. |
THERMAL_TXX_PER_GMST |
1.48 | K per K (dTXx/dGMST) | measured (Tier A) form: land extreme amplification (C6). OLS on the ERA5/Berkeley/HadEX3 mean TXx series against GMST, 1950–2025, n = 76, slope 1.483. Per-dataset spread 1.33–1.57 is the honest uncertainty. |
annual refresh. Guardrail I quantity. |
THERMAL_U_FLOOR |
0.5 | utilization fraction | placeholder form: the utilization boundary separating the Standing-exposure regime. |
observed variance in Φ and ψ* — a measured quantity, not a chosen value, and it should stop being a constant once that variance is characterized. |
THERMAL_EPS_CURRENT |
0.4 | ε (dimensionless automation fraction) | bounded form: the framework's current-equilibrium ε for Eq. C1 — set to the arc midpoint. |
band 0.2–0.6, the range global_ceiling() reports ε_max over, so the chosen point always travels with its sensitivity errs NEITHER. ε_max is directly PROPORTIONAL to this, so the band matters more than the point — and the deeper objection is that ε is meant to be an observable, not an input. Superseded wherever an inventory exists: thermal_capital.epsilon_current_from_inventory() derives it from the same capital that produces Φ. a measured world capital inventory in TEH. SUPERSEDED WHERE AN INVENTORY EXISTS. thermal_capital.epsilon_current_from_inventory() derives ε from the same capital that produces Φ, via civilization_epsilon, and capital_thermal_ceiling() now defaults to that. This constant survives for global ε_max, where no measured world capital inventory in TEH exists — and there global_ceiling() reports a band over ε_current ∈ [0.2, 0.6] so the chosen value travels with its sensitivity. |
Also derived in this layer but not a data.py constant, so outside the
coverage gate:
| Parameter | Default | Units | Kind | resolves_by |
|---|---|---|---|---|
| λ_historical (derived) | 1.492 | W·m⁻²·K⁻¹ | measured (Tier A) | (F − N)/ΔT from IGCC 2025a total ERF, Earth energy imbalance and GMST. Four windows 1995–2024 agree within 5% (1.466–1.537), so it is a property of the data not the window. Band 0.52–2.44, dominated by aerosol forcing uncertainty. Pattern effect vs AR6-implied equilibrium: +0.182, the expected sign and scale — an independent check the derivation behaves. Not for the budget. |
P0 reorder (F3-first). Per the Path C run, the P0 headline is now F3
(research/thermal.py:decarbonization_headroom, computable from constants), and
the thermodynamic-floor ceiling bound (E29/F1/F2) is demoted to CONDITIONAL —
non-binding at current dissipation.
Findings (reproduced exactly). F1: the global thermal ceiling does NOT bind at
current dissipation (ε_max = 2.6–19×) — conditional, binds at ~10–50× present Φ.
F3 (load-bearing, now the P0 headline): decarbonization is worth ~1000–1100 TW ≈ 60× current dissipation —
carbon has consumed the budget. F11 (strongest measured, now a corridor bound):
dense collectives are in Contact NOW (Singapore U≈22, S. Korea 1.4, Netherlands 1.0)
while the World aggregate sits at U≈0.05 — so the thermal corridor bound is a
collective-level instrument (measured_thermal_ceiling), global is uninformative.
ΔT_lo (Tier D) dominates all of it; Path C is 5–10× uncertainty — regime SIGN only,
not obligation (that needs Path B).
Asset census — one survey, two floors (B1/B2)¶
The condition census consumed by infrastructure_statutory_floor carries four
optional thermal keys alongside the two required ones. The hours side ignores
them; research/thermal_capital.infrastructure_thermal_floor reads them and
returns the dissipation floor in watts from the same survey.
| Key | Required | Kind | Notes |
|---|---|---|---|
count |
yes | measured | physical asset count in the condition class |
hours_per_unit_year |
yes | task-normative | interval × crew-hours; no currency enters |
type |
no | measured | CAPITAL_THERMAL_PROFILES key |
teh_per_unit |
no | measured | bridges census counts to per-TEH intensities |
condition |
no | measured | ∈ [0, 1]; missing reads as 1.0 — conservative (max draw) |
design_life_years |
no | measured | missing falls back to the type's profile life |
A bucket without usable thermal keys contributes zero and is reported in
unpriced_buckets, with coverage giving the share of counted assets actually
priced — a thermal floor at 40% coverage is a different claim from one at 100%.
The good/fair/poor condition defaults in census_from_condition_counts
(0.85 / 0.60 / 0.35) are CHOSEN, mapping NBI-style classes onto the [0, 1]
scale the capital profiles use. A real census carries per-asset condition and
should pass it rather than accept these.
Specifying the thermal keys at survey time costs nothing; retrofitting means re-surveying. That is the whole argument for fixing this schema before the census is collected rather than after.
Capital thermal profiles — §12.2 dual-output (research/thermal_capital.py)¶
The §12.2 adaptation: the same capital inventory that eliminates EOH
(CAPITAL_MACHINE_PROFILES) also dissipates heat. CAPITAL_THERMAL_PROFILES
(parallel dict, all 11 capital types) carries the two new physical fields;
design_life (already in the EOH profiles) is the third §12.2 field, and grid κ
is a collective input (§8.1), not per-type.
| Parameter | Default | Units | Tag | What would settle it |
|---|---|---|---|---|
CAPITAL_THERMAL_PROFILES |
power_intensity W per TEH; embodied_energy J per TEH | placeholder (Tier D) form: the two new physical fields per capital type that turn a capital stock into a thermal load Φ_auto. Kept as a SEPARATE parallel dict rather than merged into CAPITAL_MACHINE_PROFILES, so the established EOH capital model stays visibly distinct from the experimental thermal overlay. |
power intensity ← measured energy-use intensity by capital class (IEA end-use / sectoral energy balances); embodied energy ← LCA inventories (ecoinvent, EPDs). Both are Path-D placeholders awaiting exactly those two sources. relative ORDERING is defensible (compute and industry heavy; software and monitoring light); the absolute scale is anchored only to order-of-consistency with Path C's measured ~2200 W·person⁻¹ net-additive dissipation, NOT fitted. |
|
THERMAL_GRID_KAPPA_DEFAULT |
0.93 | dimensionless net-thermal-addition coefficient | measured (Tier C) form: κ̄ of the grid serving the capital (§8.1). Default = world fossil+nuclear share (Path C, 2025). A fully flux-redirecting grid → 0, because renewable generation redirects an existing flux rather than adding a new one. |
the PHYSICAL grid mix serving the capital, not procurement contracts — a collective buying renewable certificates on a fossil grid still dissipates fossil heat, and κ̄ measures the electrons, not the paperwork. |
machine_dissipation_from_capital derives Φ_auto = Σ (teh·condition·power_intensity
+ teh·embodied/(design_life·Δt_s))·κ̄ — the thermal twin of
machine_eoh_from_capital, reusing its resolved stock (DRY). Honest status: the
intensities are CHOSEN placeholders — relative ordering defensible (compute/industry
heavy), absolute scale anchored only to order-of-consistency with Path C's measured
~2200 W·person⁻¹ (a well-invested standard-tier collective reads ~3200 W·person⁻¹,
within ~1.5×; NOT fitted). Path-B-shaped structure on Path-D magnitudes: the
deliverable is the closed loop (one inventory → {ε, Φ, U, thermal ceiling}), not the
numbers. Advisory only.
Obligation-state probe — the low-ε floor diagnostic¶
What this block exists to examine, and what it deliberately does not change.
labour_epsilonsolves ε = 1 − human_hours / total_eoh(ε) as a fixed point, and until 2026-09-21 it always evaluated that obligation at the canonical arc's physical state. The canonical arc holdscapital_stock_teh = 0at ε = 0, so infrastructure and ecological EOH are both 0.00 there and the obligation collapses to personal-only — 1,352.80 of 1,360.74 per capita, 99.4%.Measured against a labour-intensive economy's hours the fixed point then floors at zero. On the 65-sample MTUS panel the floor binds for 2 samples at
coreand 9 atbroad, all but one of them 1965–66 — the low-automation corner the framework most needs to describe. RS1965 overshoots by 0.3267 and reports the same 0.0000 as a sample overshooting by 0.0001.Two repairs shipped, both additive:
obligation_statelets a caller supply their OWN physical state (a suppliedcapital_stocklifts the floor — US1965 near 4,000 TEH/capita, CZ1965 near 8,301, RS1965 near 16,000), andepsilon_raw/clampedreport the unclamped value so the overshoot survives.Whether a subsistence economy genuinely owes no infrastructure obligation is a THEORY claim and it is untouched.
canonical_physical_stateis unchanged; a test asserts it still returns zero capital at ε = 0, so this diagnostic cannot quietly become a rewrite of the arc it was built to examine (CLAUDE.md §3).
| Parameter | Default | Units | Tag | What would settle it |
|---|---|---|---|---|
LOW_EPSILON_CAPITAL_PROBE_TEH_PER_CAPITA |
(0.0, 500.0, 1000.0, 2000.0, 4000.0, 8301.0, 16000.0) | TEH per capita, at the reference frame | convention form: the capital levels swept by scenarios.labour_epsilon.low_epsilon_obligation_sensitivity(), which asks what the obligation would be if a jurisdiction's OWN capital replaced the canonical arc's. A PROBE GRID, not a measurement: no entry is anybody's measured capital stock, and nothing outside that REPORTING-ONLY table reads it. |
— the grid BRACKETS the US BEA reading of 8,301 TEH/capita used by the USA case study, so a reader can see where one real economy sits inside the sweep. The other endpoints are round numbers chosen to span it; moving them changes the RESOLUTION of a reported table and no shipped quantity. this constant exists because the canonical arc sets capital_stock_teh = 0 at ε = 0, which makes infrastructure and ecological EOH both 0.00 and collapses the obligation to personal-only (1,352.80 of 1,360.74 per capita, 99.4%). Whether a subsistence economy truly owes no infrastructure obligation is a THEORY claim; this grid lets the claim be examined without altering it. |
INSTRUMENT_ADJACENT_GAP |
0.05 | dimensionless ε — the gap between two ε intervals | convention form: instrument_comparison's cut between ADJACENT and DIVERGENT, when the labour and capital intervals do not overlap: a gap below it is ADJACENT. |
— NAMED 2026-10-04: a bare 0.05 at two sites (the corner and the grid); the measured stock age alone moved the US gap to 0.0597, past it, before the measured condition closed it. It states how near counts as near, not a property of either instrument; the verdict is reported beside both intervals and the grid's, so a reader can apply their own. |