Files
2026-11-05 09:57:11 -05:00

34 KiB
Executable File
Raw Permalink Blame History

Calendar lifecycle foundation

Scope and status

The policy module returns a plain, pure Lua namespace. It does not load itself into hearth, call an engine API, read the clock, seed a global RNG, register plants/entities/callbacks, or write metadata, inventories, storage or files. It has no dependencies. Content integration explicitly assigns its return to hearth.lifecycle before botany, ecology and succession are constructed. No engine was launched for this integration pass.

This is not complete biological simulation. Current succession now separates persistent calendar root ages from bounded loaded work. Current wildlife registers 23 animated animal identities with persisted epoch ages; it loads the fixed fauna factory when needed. Content publishes that exact returned catalogue as hearth.fauna, not another independent instance. Six evidence-backed profiles enable guarded reproduction; other incomplete profiles remain disabled. There are no accelerated adult births, lifespan-endpoint deaths, force-loaded simulations or replayed offline meals/seeds/births. Movement, nutrition and timing fallbacks remain deliberately conservative game policies, not a true-life certification.

The runtime catalogue has 100 botanical taxa and 23 animal identity slots, including unresolved generic deer. Botanical groups are intentionally uneven: 13 trees, 14 shrubs, 10 grasses, 22 herbs, 11 ferns/mosses, 10 fungi, 10 aquatic taxa and 10 lichens. The twenty additions extend actual ecological roles rather than padding every category to ten. Every profile now has pending=false, reflecting actual registration, not evidence confidence. The original ten trees and twenty additions carry Latin names in lifecycle; remaining identities come from botany, not invented alternative taxonomy. Actual cross-module identities and all tree-stage IDs, including multi-underscore names, are covered by the focused content/botany tests.

Units, stages and uncertainty

  • SECONDS_PER_DAY = 86400: one real elapsed day is always 86,400 seconds. No speed multiplier, growing-season compression, nutrient acceleration or session-time substitution exists.
  • DAYS_PER_YEAR = 365.2425 is a mean Gregorian-year conversion convention, not a biological constant or a calendar-anniversary calculator. Month gates take an explicit UK/NW-European month from the caller; no timezone or hemisphere is inferred.
  • Every duration is either false (unknown/not applicable) or a range {min, max, confidence, source_url, note, statistic} measured in days. birth_count has the same range shape but represents counts, not days. Unknown is never represented by zero or infinity.
  • germination_days is the policy age at emergence from seed/propagule. It includes a broad waiting allowance in fallback profiles, but is not a measured stratification model. Spores, vegetative recruitment, seed banks and dormancy need species-specific treatment later.
  • juvenile_days is the absolute age threshold ending early dependency/seedling establishment, not a duration to add after germination. Animal notes identify weaning or independence, which are not reproductive maturity.
  • maturity_days is absolute reproductive-age policy, not full height, timber harvest age, fledging, metamorphosis or an entitlement to breed. Endpoints sometimes span different sexes or different milestones; read statistic and note.
  • lifespan_days is contextual longevity information: an average, typical range, or upper-record envelope. It is never a mandatory death deadline, a survival curve, or proof that an organism of that age is dead. Colony/genet ages are not stem or fruitbody ages.
  • life_cycle is annual, biennial, perennial, or not_applicable. Most group defaults are explicitly unverified perennial policy, not verified species habit. Fungi have not_applicable; fern/moss/lichen propagule stages are deliberately coarse. Foxglove and garlic-mustard second-season flowering have evidence. Teasel's biennial representation remains a labelled fallback.
  • All profiles, nested ranges/evidence, lists and resolved selections are fresh copies. Altering a returned profile never changes the module's catalogue.

confidence = partial_species_evidence means some fields have evidence, not that every number is researched. Check each range's own confidence and each evidence[field]. source_reported means the referenced page actually reported the observation reviewed on 2026-11-03, not scientific consensus, an exact constant, or independent primary-literature validation. policy_fallback means an unverified modelling window. A source on a profile does not validate its fallback germination/maturity numbers. source_url = false is intentional where no supporting source is claimed.

Unverified group baselines

These are broad, non-accelerated policy placeholders, not sourced species ranges. They should not authorize reproductive events or automatic mortality. d = real days; y = mean Gregorian years.

Group Germination/establishment Seedling/dependency end Maturity Longevity context
trees 14–365 d 1–5 y 10–60 y 60–500 y
shrubs 14–365 d 1–2 y 2–10 y 5–80 y
grasses 7–90 d 30–90 d 90–365 d 2–10 y
herbs 7–90 d 90–365 d 365–730 d 2–10 y
ferns/mosses 30–730 d 1–2 y 2–5 y unknown
fungi unknown unknown unknown unknown
aquatic 7–90 d 90–365 d 365–730 d unknown
lichens unknown 1–5 y unknown unknown

No uniform group window can describe all species, propagules, sites or genets correctly. In particular these windows do not turn water-starwort into a verified perennial, a fungal fruitbody into a seedling, or all lichens into organisms with a known sexual maturity. Species-specific verification is still needed.

Ten tree profiles with species-reference review, plus three fallback trees

The playable tree order now contains thirteen IDs. crab_apple, wild_cherry and field_maple use the labelled group baseline (14–365 days emergence, 1–5 years seedling/dependency, 10–60 years maturity, 60–500 years longevity context), not species-researched numeric timings. The ten profiles below retain their separately reviewed evidence. An identity source does not upgrade a fallback threshold.

All ten inherit the fallback germination and seedling windows above. Only oak, beech and rowan currently have accepted source-reported reproductive-age fields. All other maturity windows below are explicitly unverified policy; do not describe the example birch/alder ages as verified facts.

ID / species Maturity window, years Longevity context, years Actual reviewed evidence and limits
oak / Quercus robur around 40 500–1000 envelope Forestry England reports acorns usually around 40; Wikipedia describes survivors exceeding 500 and some exceeding 1000. Neither is a death schedule.
birch / Betula pendula fallback 10–20 typical 60–90 Trees for Life covers both silver and downy birch and notes exceptional ages of 150 or more. No numeric maturity accepted.
pine / Pinus sylvestris fallback 15–30 typical 150–300 Wikipedia distinguishes normal longevity from much older records. Cone ripening time is not tree reproductive age.
willow / Salix alba fallback 5–15 fallback 60–120 Wikipedia supports fast growth, comparatively short life and dioecy; the numerical windows here are not sourced.
alder / Alnus glutinosa fallback 10–20 composite 60–160 Woodland Trust says approximately 60; Wikipedia reports up to 160. This is a composite envelope, not a measured typical range or a universal 100-year age.
beech / Fagus sylvatica about 10 onset to 30 heavy crop 300–500 envelope Wikipedia distinguishes small early seed quantities from heavy crops and undisturbed longevity from exceptional individuals.
aspen / Populus tremula fallback 10–20 fallback envelope 80–200 Wikipedia supports upper longevity 200, but not the chosen lower endpoint. It also describes suckering and growth-rate changes, not a verified reproductive threshold.
rowan / Sorbus aucuparia around 10 80–150 envelope Wikipedia reports maturity around ten, often no older than 80 in warmer regions, with occasional 150-year trees.
hazel / Corylus avellana fallback 3–10 fallback envelope 60–80 Woodland Trust supports uncoppiced upper age 80, not lower age 60. Coppice stools can persist centuries; do not apply stem ages to a stool.
spruce / Picea abies fallback 20–40 fallback envelope 200–532 Wikipedia records a ring-dated 532-year individual, not a typical 200–532 lifespan. Millennia-old clonal roots are not ages for a new stem.

Oak's 40-year approximate onset is represented as {min=40y,max=40y} to retain the source's single approximate value, not manufacture a research range. It is still an approximate observation. A real reproduction engine must consider location, weather, health, sex, pollination and seed production separately.

Twenty added plant identities (historical policy contract)

ID Exact requested Latin name Policy group
dandelion Taraxacum officinale herbs
daisy Bellis perennis herbs
red_clover Trifolium pratense herbs
birdsfoot_trefoil Lotus corniculatus herbs
ribwort_plantain Plantago lanceolata herbs
selfheal Prunella vulgaris herbs
knapweed Centaurea nigra herbs
oxeye_daisy Leucanthemum vulgare herbs
field_scabious Knautia arvensis herbs
teasel Dipsacus fullonum herbs
cow_parsley Anthriscus sylvestris herbs
garlic_mustard Alliaria petiolata herbs
honeysuckle Lonicera periclymenum shrubs
ivy Hedera helix shrubs
gorse Ulex europaeus shrubs
broom Cytisus scoparius shrubs
crab_apple Malus sylvestris trees
wild_cherry Prunus avium trees
field_maple Acer campestre trees
holly_fern Polystichum setiferum ferns_mosses

The ID holly_fern is retained exactly as requested; Polystichum setiferum is generally called soft shield-fern, so this ID must not be used to infer a different Latin species. These group assignments are policy categories, not research claims about precise growth rates. The new twenty are not all fully researched. Garlic mustard has a verified two-season habit with retained winter leaves; its numeric 365–730 day window remains policy, since second spring is not exactly day 365. Existing foxglove likewise has second-year flower stems. Teasel supports seasonal flowers/seedheads, but that page was not accepted as numerical biennial timing evidence.

Animal research coverage

The following are real species pages retrieved during implementation, not constructed citation placeholders. Each accepted diet/movement or numeric field retains its own URL and original short evidence note. Average lifespans below are source-reported averages, including sources that use a range for that label. They are not hard limits.

ID / species Reported average years Accepted evidence / remaining limits
rabbit / Oryctolagus cuniculus 3 Wildlife Trusts: grazing, warrens, 3–7 young. ADW: gestation 30–37 d; weaning 22–31 d; year-round capability. Maturity unknown: eight-month prose conflicts with an embedded 730-day female value. Thirty days is gestation, not maturity.
red_squirrel / Sciurus vulgaris 6 Wildlife Trusts: tree movement, nuts/seeds, no hibernation. ADW: 38–39 d gestation, 56–70 d independence, 296–365.2425 d composite maturity envelope; narratives/sex entries differ. Birth/litter months were not converted into conception months.
bank_vole / Myodes glareolus 0.5–1.5 Wildlife Trusts: 3–5 young, fruit/nuts/insects. Woodland Trust: about 25 d weaning; female maturity six weeks, male eight (42–56 d sex envelope). Gestation unknown here.
wood_mouse / Apodemus sylvaticus 1 Wildlife Trusts: nocturnal climbing/caching, 4–8 young. ADW: 21–26 d gestation; 21 d weaning; 65/71 d male/female maturity entries. Breeding-month endpoint “early winter” is not encoded as an invented exact month.
hedgehog / Erinaceus europaeus 2–3 Wildlife Trusts: nocturnal invertebrate feeding, winter hibernation; reproductive timing unknown.
badger / Meles meles 5–8 Wildlife Trusts: digging, setts, varied diet. January/February births do not establish conception/gestation timing; those fields remain unknown.
roe_deer / Capreolus capreolus 7 Wildlife Trusts: July–August mating, delayed implantation, May–June births, 2–3 kids. Numeric maturity/gestation unknown.
stoat / Mustela erminea 2–5 Wildlife Trusts: bounding, small-animal diet, 6–12 kits, summer mating followed by delayed implantation. No invented fixed gestation or exact summer months.
weasel / Mustela nivalis 2 Wildlife Trusts: low running gait, rodent/bird diet, 3–6 kits. Numeric reproductive ages unknown.
otter / Lutra lutra 5–10 Wildlife Trusts: swimming, fish and aquatic prey. Young entering water at ten weeks is not reproductive maturity.
robin / Erithacus rubecula unknown RSPB: territorial resident behaviour, invertebrates/fruit, about 4–5 eggs. “A few years” and record ages were not turned into invented average bounds.
blackbird / Turdus merula 3 RSPB: ground feeding, 3–4 eggs, UK nesting March–August. Incubation/maturity not supplied by the reviewed page.
blue_tit / Cyanistes caeruleus 3 RSPB: clinging/flight, caterpillars/seeds/nuts, UK nesting April–June. “Up to 16” does not establish a lower clutch bound, so no fabricated clutch range.
barn_owl / Tyto alba unknown RSPB: low silent hunting flight and small-mammal prey; no accepted numerical lifecycle fields.
mallard / Anas platyrhynchos unknown RSPB: swimming/flight, varied diet, weather-dependent breeding. A February start and “up to 13” ducklings do not supply a complete breeding window or clutch range.
common_frog / Rana temporaria 5–10 Wildlife Trusts: pond spawning, hopping, winter shelter; about 14 weeks after hatch to froglet (larval_days=98). Not incubation or sexual maturity.
smooth_newt / Lissotriton vulgaris 6 Wildlife Trusts: aquatic breeding, nocturnal land feeding, winter shelter; precise reproductive timing unknown.
brown_trout / Salmo trutta 15–20 Wildlife Trusts: river swimming, insect/fish diet, external eggs in gravel. Its January–March statement was not generalized into a universal salmonid breeding window; local spawning/degree-day data still needed.
bumblebee / Bombus terrestris unknown Wildlife Trusts: nectar/pollen, flight, underground colony, possible winter activity. ID explicitly models this species, not every bumblebee. Caste-specific life history is required; no single queen/worker lifespan is invented.
earthworm / Lumbricus terrestris wild lifespan unknown Wikipedia: paired hermaphroditic cocoon reproduction, leaf litter and vertical burrows; at least one-year development with reproductive maturity in second year. Six years in captivity is not a wild lifespan. Generic earthworm ID explicitly represents this species only.

Existing hare provisionally represents Lepus europaeus: 2–4 reported average years, grazing/bark feeding, surface forms, 2–4 leverets. Existing fox represents Vulpes vulpes: 2–3 reported average years, omnivorous diet and territorial/nocturnal behaviour. Existing generic deer is not silently mapped to roe_deer: Latin identity and every timing field remain unknown.

The table above records the initial research baseline; the reproductive additions below supersede its unknown gestation/incubation/maturity statements where explicitly listed. No precise meal frequency or species metabolic model is claimed. Qualitative diet/movement descriptions do not establish numeric physiology.

Reproductive implementation update (2026-11-03)

Six profiles now set reproduction_enabled=true: bank vole, wood mouse, blackbird, mallard, European hare and red fox. All other 17 remain disabled, not silently completed.

  • European hare ADW: maturity 8 months to one year, 30-42 d gestation, about one-month weaning, 1-8 leverets, and breeding from midwinter through midsummer. Runtime uses the conservative 365 d maturity, 42 d gestation and one young; Winter/Spring/Summer is a coarse northern-season mapping and the 30 d care lock is policy.

  • Red fox ADW: about 304 d maturity, typical 51-53 d gestation, 56-70 d nursing/weaning and winter mating in central-range populations. The account's prose count (1-13) differs from its summary table (1-9); runtime uses the narrower table and one pup. A 300 d postpartum lock approximates once-yearly breeding, as a policy. Paternal provisioning and den care are not simulated by the generic dependent-young model. The source and implementation register details values, source disagreements and policy limits.

  • Bank vole ADW: 17-24 d gestation, 20-25 d weaning, late April-September season. Existing 42-56 d maturity and 3-5 litter range retain their own Woodland Trust/Wildlife Trusts citations. Runtime conservatively uses 56 d maturity, 24 d development, three young, 25 d care lock.

  • Wood mouse Wikipedia: February-October breeding; this differs from ADW's March-early winter. Existing ADW 21-26 d gestation, 65-71 d maturity and 21 d dependency remain independently attributed; Wildlife Trusts 4-8 count is retained. Runtime uses 71 d, 26 d, four young and a 21 d care lock, not the differing Wikipedia gestation range.

  • Blackbird ADW: first breeding about one year; 13-day incubation prose versus 14-day summary; nest departure 13-14 d, not full independence. Runtime uses one mean Gregorian year and 14 d incubation; existing RSPB count yields three young. Bird care lock is a labelled conservative 42 d policy, not a measured reproductive interval.

  • Mallard ADW: 365 d maturity both sexes, 26-28 d incubation, 9-13 eggs. Wikipedia supplies 50-60 d to flight and spring nesting. Runtime uses 365 d, 28 d, nine young; conservative care lock 81 d. Unknown lifespan is not a breeding veto.

  • Blue tit BTO diary: majority 8-10 eggs, about 14 d incubation, 18-21 d fledging, first breeding the following spring. Exact maturity day and caterpillar provisioning remain unresolved, so reproduction stays disabled. ADW's Cyanistes page was missing; Parus yielded taxonomy only. BTO BirdFacts extraction redirected to an audio embed; no numerical claim is attributed to that failed extraction.

  • Common frog Wikipedia: about three-year sexual maturity, 14-21 d egg incubation. Its 98 d post-hatch larval observation remains distinct. Eggs/tadpoles/feeding are not represented: still disabled.

  • Brown trout Wikipedia: approximately 2000 eggs/kg, not a fixed litter; female mass, gravel redd and temperature-based development are absent. Bumblebee needs caste-specific colony/larva/pupa care. Both stay disabled.

Every added numeric range has field-level source evidence. Spring/Summer breeding seasons, conservative upper endpoints, minimum litter counts, reserve costs and postpartum locks are explicitly simulation policies, not new source-reported physiological precision. fauna.can_breed uses hearth.climate_at(utc).season or an explicit season, so southern spring is not vetoed by northern reference months. Unknown climate denies conception. Reproduction requires two mature, healthy, recently fed, same-species opposite-sex animals, real loaded food-bearing habitat and space. Lifespan completeness is intentionally unnecessary.

Wildlife persists one pregnancy/incubation and its partial-delivery counters. Overdue broods can finish once, after safe loaded habitat/caps/energy permit; there is no offline replay of missed conceptions or multiple litters. One young per additional AI action shares the 24-action budget. Newborn age starts at actual admission, never at an invented adult cohort age. Dependent young rest and can receive debited maternal reserve. This does not claim complete nest, lactation, species-specific chick diet, mortality, genetic parentage or crash-atomic saving.

Sources were fetched and read, including failed/empty candidates. USDA FEIS requests returned HTTP 403; several guessed species/older bird subpages were missing or unextractable. Those failures are not citations and contributed no numerical overrides. Wikipedia and ADW are secondary educational accounts with their own limitations; no downloaded article text or images are bundled here, only original notes and factual references. ADW's rabbit conflict is explicitly retained as an uncertainty, not resolved by cherry-picking a maturity number.

Exact API for the main integration owner

Content now loads the fixed sibling with dofile and explicitly assigns its returned table to hearth.lifecycle before constructing any biological consumer. There is no factory argument and no implicit global publication. Wildlife's returned fauna is exposed unchanged. /botany displays the 100 taxa over ten pages; /fauna is an independent observational catalogue with identities, source URLs, field confidence and UNKNOWN values. The plant-only article reader is unchanged.

Call Return / contract
plant(id, group?) Fresh plant profile or nil, reason. Bare exact ID only; optional group must match the fixed snapshot. Unknown ID plus a group hint does not invent a species. Canonicalize node/stage/season names through botany before calling.
animal(id) Fresh animal profile or nil, reason. Exact bare ID; no deer → roe_deer alias.
ids("plant" or "animal") Fresh sorted ID list (100 / 23); invalid kind returns nil, "kind".
duration(range, seed, salt) Deterministic number in inclusive range, in the range's units. Seed integer 0–2147483646; salt string at most 64 bytes; finite nonnegative bounds with max <= 1000000. Invalid inputs return nil, reason. Selection is continuous, not a claim of a measured uniform distribution.
resolve(profile, seed) Fresh profile retaining original ranges/provenance, plus selected_days, selection_seed. Uses species/field salts; overlapping germination/dependency/maturity/lifespan selections are clamped upward to preserve stage order, never outside a range. Invalid/impossible ordering returns nil, reason. Does not sample counts or month lists.
elapsed(previous, now, work_cap_seconds) {elapsed_seconds, work_seconds, deferred_seconds}; full calendar delta plus a separate capped work allowance. No age is discarded. Cap zero is valid. Invalid inputs return nil, "clock" or nil, "cap"; reversal returns nil, "clock_reversed". Does not loop through missed events.
phase(profile, born_at, now) Observation {phase, age_days, age_seconds, beyond_lifespan_range, death_due=false, reproductive_ready=false, confidence} or nil, reason. All times are caller-supplied epoch seconds; no clock reads.
seasonal(profile, season) {dormant, death_due=false, confidence="policy_fallback"} for explicit Spring, Summer, Autumn, Winter. Winter dormancy is presentation policy, not a frost/survival calculation; some evergreen-policy profiles retain foliage.
breeding_window(profile, month) {known, within_window, eligible=false}. Numeric integer month 1–12 only. Unknown window is not all-year permission. Known windows here are rabbit capability, roe-deer mating, blackbird nesting and blue-tit nesting. No births are scheduled.

Clock inputs must be finite numeric seconds in [0, 9007199254740991]; strings, NaN, infinities, negatives and larger values fail closed. Fractional seconds are allowed. Equality has zero elapsed age. now < born_at and reversed elapsed clocks are explicit errors, not a silent age reset. Callers must also detect reversals relative to a saved last_observed_at: this stateless module cannot remember a previously observed future timestamp. Very large valid ages are handled with constant work, not an age-proportional replay loop.

Without resolution, phase uses each range's upper endpoint; it never redraws durations while reading. Resolved samples can be persisted by the main owner with the policy version so later reads are reproducible. Stages are seed, seedling, dependent, juvenile, mature, unknown. A known dependency threshold can classify an animal as dependent even when its sexual maturity is unknown; after dependency ends its phase is unknown until a maturity field exists. beyond_lifespan_range is informational, never dead. Six explicitly enabled animal profiles authorize wildlife reproduction, subject to runtime pairing/resource/season/space checks. Do not bypass that gate by reading phase == "mature". The pure observation still returns reproductive_ready=false because it cannot know those runtime conditions.

Runtime persistence, resource transactions and remaining boundaries

  1. Root epochs: succession persists succ_birth_at, separate succ_initial_age_seconds, succ_last_observed_at, succ_lifecycle_version=1, exact profile/seed/origin and calendar_v1_conservative_max policy. Natural recruits start at zero. Stage swaps retain the root anchor; components refer to that root. The full contract is in botany.
  2. Established assumptions: legacy natural roots adopt legacy_established at the current epoch with explicit stage-based initial age; worldgen stands use worldgen_established. These are documented generation/adoption assumptions, not historically observed ages. succ_age is not reinterpreted as years or a birth epoch. Unknown thresholds do not invent age.
  3. Full age, bounded work: calendar age includes the entire unloaded interval. Reconciliation is limited to loaded, eligible natural roots/entities; no force loading, whole-world scan, missed-event queue or offline replay. Invalid metadata/versions, future clocks and rollback fail closed. Cold/dormancy can defer visible stages, never subtract age.
  4. Uncertainty: source-reported ranges carry field evidence; fallback ranges remain unverified policy; false/not-applicable remains UNKNOWN. Succession uses conservative upper endpoints, not nutrient acceleration. Named trees require their real year/decade thresholds; fungi do not shorten seedling age by 25%. Unknown fungal/lichen maturity does not authorize seeding. Nitrogen-fixer eligibility starts at 90 calendar days; saprotrophic decay bonuses are finite and conserve substrate nutrients.
  5. Shared fruit: humans and animals debit exactly botany_ready_at. A successful botanical harvest locks for 365.2425 * 86400 seconds, not 24 hours; a valid fruit season is still required. No accumulated missed-year payout. The initial existing crop is usable. This is conservative annual resource policy, not researched species phenology or organism lifespan. Animal feeding discards the rest of the batch and yields no inventory.
  6. Pollination credit: succession reserves succ_nectar_ready_at = now + 3600 and at most one succ_pollinated_until = now + 86400 credit, not a stacking counter. Human harvest accepts only finite nonnegative pollen expiry at most one day ahead; a credit is live exactly when expiry > now. It adds one berry to the existing two-berry crop, never doubles inventory, bypasses fruit readiness or creates seeds. Both budgets are reserved before inventory callbacks. No-space/full-leftover rejection restores both original values; any successful partial transfer spends the batch and credit once. Invalid delivery results retain the lock to prevent unsafe retries.
  7. Fauna: saved version-1 JSON retains epoch born_at, explicit origin, sex/seed and observation high-water clocks plus bounded reproductive counters. Establishment is immigration, not an adult birth. Unload advances age but creates no meals, dung or missed mating cycles. An already-persisted overdue brood may finish once on loaded budgeted ticks. Six profiles breed; nests, aquatic larvae, caste/cocoon development and delayed implantation remain incomplete. Numeric mean/record longevity is never an automatic death deadline. Hedgehog/frog/newt winter dormancy is a retained-resident policy, not death or a physiological metabolism model. See fauna limits and animations.
  8. Seasonal presentation: winter textures are not death evidence. Biennial second-season flowering, perennial dormancy, annual seed completion and colony/fruitbody age require distinct policies. No complete climate-survival, migration, historical degree-day or mortality model is claimed. No version bump, existing-world launch or save rewrite was performed for this integration.

No credentials, embedded certificates, runtime HTTP, dynamic evaluation or security-sensitive random identifiers are introduced. The deterministic selector is explicitly not cryptography. Defensive input bounds and copied read results are the relevant CodeGuard protections here.

Focused validation

The earlier content integration ran the focused content, botany, journal/recipe, character and species-effects suites. Checks use actual sibling factories, exact catalogue/schema counts and known UTC epochs. Require exact named counts, final markers and empty stderr: Fengari exit status alone can mask assertion failures. No engine, world, wiki-cache or art-generator changes are part of this pass. Native rendering, skeletal animation acceptance and full integrated validation remain with the main owner. The lifecycle suite now checks the actual 100-entry catalogue, all 23 registration flags and the updated reproductive profiles; all original 31 named contracts are retained and reconciled, not dropped. Earlier content-integration results: 40 content, 44 botany, 52 journal/recipe, 19 character and 8 species-effects checks (163 total). These are historical results, not rerun by this lifecycle change.

Updated specs now define 32 lifecycle, 10 fauna catalogue and 57 wildlife checks (99 total). They were not executed in this pass; prior focused runs are historical only. Earlier baseline notes reported 31 lifecycle, 9 fauna catalogue and 31 wildlife checks, plus 85 succession checks. Tests inject UTC epochs instead of waiting for real gestation or accelerating ages. Coverage includes funded pairing, denied juvenile/same-sex/unhealthy/missing mates, incubation, overdue restoration, capped partial litter restart, unsafe/no-player delivery delays, hostile pregnancy fields, callback reentry, dependent care and postpartum locks. No full-engine or full-repository test run is claimed.