nx_ecotone.nx
buildroot/runtime/nx_ecotone.nx
about
nx_ecotone.nx -- ecological design at ecosystem transition zones.
Per META-CARDINAL feedback-regenerative-stewardship-doctrine-captain-moroni:
an ecotone is the transition between two ecosystems (forest-to-meadow,
grassland-to-savanna, riparian-to-upland, desert-to-oasis). Ecotones
host highest biodiversity because organisms from both adjacent systems
can occupy the gradient. They are also where regenerative intervention
has HIGHEST LEVERAGE.
V1 ships sealed enum of ecotone transition types + sealed enum of
candidate-species roles + companion-plant compatibility matrix +
per-ecotone succession trajectory at 5/10/25/50/100 year horizons.
Per [[feedback-real-playtest-loop-not-just-logs]] honest scope: per-
site selection is operator-attested; substrate provides the design
substrate, never claims unique knowledge of any specific site.
Composes:
nx_phenology -- species timing co-design
nx_pollinator -- pollinator requirements per species
nx_disturbance -- some ecotones depend on disturbance regime
nx_microclimate -- microclimate gates species selection
nx_covenant -- Indigenous + landowner consent for any planting
Gap list (V1 honest perf verdict):
- species enum is illustrative (V2 ingests species DB via nx_hypha
from USDA PLANTS / GBIF / regional flora authorities)
- companion-plant matrix is per-functional-role (V2 species-level)
- succession trajectories are at functional-class granularity
genealogy_id: nishi_metacardinal_2026-05-19_regenerative_stewardship
lineage_id: substrate_ecotone_v1
nx_safety_envelope:
intended_use: "Ecotone transition modeling + species role
matching + companion matrix + succession
trajectory; substrate informs gardener,
per-site selection is operator + ecologist"
sil_target: SIL2
evidence: [enum_sealed, succession_at_5_horizons,
invasive_flag_per_role_recommended]
dependencies 2 imports · 1 importers
imports: nx_syscalls.nxnx_tier.nx
imported by: nx_ecotone_test.nx
structs
| none |
consts
| 48 | const NX_ET_FOREST_MEADOW: nx_int = 0 |
| 49 | const NX_ET_GRASSLAND_SAVANNA: nx_int = 1 |
| 50 | const NX_ET_RIPARIAN_UPLAND: nx_int = 2 |
| 51 | const NX_ET_DESERT_OASIS: nx_int = 3 |
| 52 | const NX_ET_WETLAND_UPLAND: nx_int = 4 |
| 53 | const NX_ET_ALPINE_TIMBERLINE: nx_int = 5 |
| 54 | const NX_ET_COASTAL_DUNE: nx_int = 6 |
| 55 | const NX_ET_FOREST_CLEARCUT: nx_int = 7 // restoration context |
| 56 | const NX_ET_STRIPMINE_RECLAMATION: nx_int = 8 |
| 57 | const NX_ET_URBAN_GREENSPACE: nx_int = 9 |
| 58 | const NX_ET_N_TRANSITIONS: nx_int = 10 |
| 68 | const NX_SR_CANOPY_DOMINANT: nx_int = 0 // mature canopy tree |
| 69 | const NX_SR_CANOPY_PIONEER: nx_int = 1 // fast-growing pioneer (e.g. paulownia) |
| 70 | const NX_SR_NITROGEN_FIXER: nx_int = 2 // legume / actinorhizal |
| 71 | const NX_SR_UNDERSTORY_SHRUB: nx_int = 3 |
| 72 | const NX_SR_GROUND_COVER: nx_int = 4 |
| 73 | const NX_SR_HERBACEOUS_PERENNIAL: nx_int = 5 |
| 74 | const NX_SR_GRAMINOID: nx_int = 6 // grasses + sedges |
| 75 | const NX_SR_SOIL_FUNGI_PARTNER: nx_int = 7 // mycorrhizal partner |
| 76 | const NX_SR_POLLINATOR_NECTAR: nx_int = 8 // bee/butterfly/hummingbird-attractor |
| 77 | const NX_SR_WILDLIFE_FOOD: nx_int = 9 // bird/mammal-food |
| 78 | const NX_SR_RIPARIAN_BANK_STABILIZER: nx_int = 10 // willow/cottonwood class |
| 79 | const NX_SR_INVASIVE_RISK_FLAG: nx_int = 11 // explicit flag |
| 80 | const NX_SR_N_ROLES: nx_int = 12 |
| 86 | const NX_SU_PHASE_PIONEER_0_5_YR: nx_int = 0 |
| 87 | const NX_SU_PHASE_EARLY_5_25_YR: nx_int = 1 |
| 88 | const NX_SU_PHASE_MID_25_50_YR: nx_int = 2 |
| 89 | const NX_SU_PHASE_LATE_50_100_YR: nx_int = 3 |
| 90 | const NX_SU_PHASE_OLDGROWTH_100_PLUS: nx_int = 4 |
| 91 | const NX_SU_PHASE_N_PHASES: nx_int = 5 |
| 95 | const NX_ET_V_DESIGN_OK: nx_int = 0 |
| 96 | const NX_ET_V_MISSING_FUNCTIONAL_ROLE: nx_int = 1 // gap in role coverage |
| 97 | const NX_ET_V_INVASIVE_FLAGGED: nx_int = 2 // chosen species invasive |
| 98 | const NX_ET_V_SUCCESSION_GAP: nx_int = 3 // phase not covered |
| 99 | const NX_ET_V_INVALID: nx_int = 99 |
| 100 | const NX_ET_V_N_VERDICTS: nx_int = 4 |
| 163 | const NX_SR_BIT_CANOPY_DOM: nx_int = 1 |
| 164 | const NX_SR_BIT_CANOPY_PIO: nx_int = 2 |
| 165 | const NX_SR_BIT_N_FIXER: nx_int = 4 |
| 166 | const NX_SR_BIT_SHRUB: nx_int = 8 |
| 167 | const NX_SR_BIT_GROUND: nx_int = 16 |
| 168 | const NX_SR_BIT_PERENNIAL: nx_int = 32 |
| 169 | const NX_SR_BIT_GRASS: nx_int = 64 |
| 170 | const NX_SR_BIT_MYCO: nx_int = 128 |
| 171 | const NX_SR_BIT_POLL: nx_int = 256 |
| 172 | const NX_SR_BIT_WILDLIFE: nx_int = 512 |
| 173 | const NX_SR_BIT_BANK: nx_int = 1024 |
| 174 | const NX_SR_BIT_INVASIVE: nx_int = 2048 |
functions
| 104 | func nx_et_transition_is_valid(t: nx_int) -> nx_int |
| 112 | func nx_sr_role_is_valid(r: nx_int) -> nx_int called by 1: main |
| 120 | func nx_su_phase_is_valid(p: nx_int) -> nx_int called by 1: main |
| 128 | func nx_et_v_is_valid(v: nx_int) -> nx_int |
| 139 | func nx_sr_is_structural(r: nx_int) -> nx_int called by 1: main |
| 153 | func nx_sr_is_provisioning(r: nx_int) -> nx_int called by 1: main |
| 178 | func nx_sr_role_to_bit(r: nx_int) -> nx_int called by 1: main |
| 200 | func nx_et_canonical_required_roles(t: nx_int) -> nx_int |
| 245 | func nx_et_role_coverage_gap(transition: nx_int, |
| 263 | func nx_et_classify_design(transition: nx_int, |
| 282 | func nx_et_v_is_concerning(v: nx_int) -> nx_int |