Skip to content

EOH Fulfillment & Registration

Modules: hours_eoh/core/eoh_fulfillment.py, hours_eoh/core/registration.py

These two modules form the fulfillment pipeline: registration curves gate which EOH enters the collective ledger; the fulfillment functions turn registered EOH into TEH. Both are genuinely ε-driven.


Registration (registration.py)

Registration curves are sigmoid functions of ε. Each domain uses a distinct curve.

register_shares(epsilon, registration_epsilon=None) → dict — the one reading point

The register is separate from machine capability: one is what the collective carries, the other how much human labour carries it. Every registration share in the package is read through this function, at the register's own maturity registration_epsilon — None means the register tracks the capability (the canonical arc). Returns a share for each of REGISTER_KEYS: personal, labour, infrastructure, ecological, knowledge, care, land. eoh_to_teh_pipeline, fiscal_snapshot / sufficiency_guarantee, make_economy_state / simulate_period and the dashboard indicators all take registration_epsilon; tests/test_one_register.py refuses a curve imported anywhere else in the package.

from hours_eoh.core.registration import register_shares

tracking = register_shares(0.90)                            # the register follows ε
held = register_shares(0.0, registration_epsilon=0.90)      # machines failed, register stands
assert held["personal"] == tracking["personal"]

The individual curves below remain public for study.

personal_eoh_registration_share(epsilon, …) → float

Share of personal EOH admitted to the collective ledger. Near-zero at ε = 0 (off-ledger subsistence), rising through the mid-automation range to most — not all — of personal EOH at ε = 0.99. It is a demand boundary (what the collective is formally accountable for), not a labor registration share.

Distinct mechanism from other domains

Personal EOH uses its own sigmoid — do not conflate with total_registration_share(). The two represent distinct mechanisms.

total_registration_share(epsilon, …) → float

The weighted composite of care, production and stewardship registration, each weighted by its share of human EOH fulfillment at ε. The pipeline applies it to the non-personal domains.

Domain-specific registration

from hours_eoh.core.registration import (
    care_registration_share,
    production_registration_share,
    stewardship_registration_share,
    knowledge_eoh_registration_share,
    labor_category_weights,
    validate_registration_trajectory,
)

Each follows its own sigmoid with different inflection points. Care registration accelerates in the mid-ε range.

validate_registration_trajectory(epsilon_sequence) — verifies all registration curves are monotonically non-decreasing and well-behaved at the arc extremes.


Fulfillment Pipeline (eoh_fulfillment.py)

human_eoh_share(total_eoh, epsilon) → float

The uniform split factor 1 − ε. This is not the human share of the obligation under the default per-component automation response: personal EOH has its own automation floors, so the human share is higher. Read human_fraction from human_eoh_per_domain() or the pipeline for that.

human_eoh_per_domain(total_eoh_dict, epsilon, …) → dict

Applies the human/machine split to each domain's EOH.

registered_eoh(human_eoh, registration_share) → float

EOH admitted to the collective ledger: human_eoh × registration_share.

teh_created(registered_eoh_hours, mean_multiplier) → float

TEH entering circulation: registered_eoh × mean_multiplier.

teh_supply(teh_created_total, teh_destroyed_total) → float

Net TEH for an economy that began with no endowment: cumulative creation minus cumulative destruction — Condition I's operational definition. It currently has no caller, and a test fails if it gains one.

capital_writedown(capital_stock_teh, …) → float

D1 destruction: TEH removed when capital degrades beyond maintainability.

eoh_to_teh_pipeline(epsilon, …) → dict

Full pipeline in one call — physical state (canonical where not supplied) → EOH → machine/human split → registration → TEH. With available_labor_eoh supplied, the mint is capped at the labour actually available and the shortfall is booked as deferral. Solvency is the fiscal layer's question, not this function's — see fiscal_snapshot() or scenarios.collective.collective_snapshot().

from hours_eoh.core.eoh_fulfillment import eoh_to_teh_pipeline

result = eoh_to_teh_pipeline(0.40)
# Returns, among others: teh_created, total_eoh, eoh_by_domain, human_eoh,
# registered_eoh, registration_share, human_fraction, epsilon_observable,
# labor_constrained, deferred_total. Supply available_labor_eoh= to mint from
# what was SERVED rather than what was demanded.
print(result["teh_created"], result["labor_constrained"])

TEH Destruction Mechanisms

D# Name Location
D1 Capital write-down capital.py → execute_writedown()
D2 Income-driven consumption simulation.py → simulate_period() (the default)
D3 Biology-anchored consumption simulation.py → simulate_period(use_d3=True)
D4 CPI delivery (paused in simulate_period) prices.py → cpi_goods_destruction()
D5 Estate dissolution capital.py → estate_dissolution()
D6 Accumulation ceiling fiscal.py → accumulation_ceiling_commitment()

Levies and Trust spending are circulatory — TEH moves, not destroyed.