# Coupled event-time stand experiment — 12 September 2026 **13 September birth-time occupancy follow-up:** The optional simulator now projects only nearby incumbents from the last growth boundary to each recruit's actual birth date before applying S6 spacing. The projection holds the most recently computed competition constant; it is a numerical approximation, not a fitted growth law. The same seed `11111111`, attempts, events and provisional biology give these living counts (young means age <40; old means age 250+): | Step years | No S5: total / young / old | S5: total / young / old | |---:|---:|---:| | 1 | 23,875 / 1,801 / 412 | 9,337 / 391 / 3 | | 2 | 23,891 / 1,803 / 412 | 9,322 / 371 / 3 | | 5 | 23,908 / 1,800 / 412 | 9,081 / 294 / 3 | | 10 | 23,796 / 1,786 / 410 | 8,789 / 237 / 3 | | 20 | 23,230 / 1,688 / 409 | 8,144 / 115 / 5 | Before this correction, no-S5 totals at 5/10/20 years were 24,569/25,135/25,874, and S5 totals were 9,107/8,824/8,180. The 1–5-year no-S5 spread is now 33 trees, but S5 still shifts the 5-year result by 256 trees relative to 1 year and nearly removes the oldest cohort at every step. The S5 check remains at growth-step ends; this experiment does not establish coupled convergence or justify production promotion. `stand_history_test.mjs` now covers a birth between step boundaries whose occupancy formerly flipped with step size. `node stand_history_test.mjs`, `node build.js --check` and `node selfcheck.js --quick` passed (44/44); browser acceptance was not run. **13 September field addendum:** [TV010 v28 actual rows](tv010_field_evidence.md) now establish Cascade Head PISI interval DBH and census-bounded mortality/ ingrowth. They do not supply a complete mapped neighbourhood (zero X/Y pairs; selective CH10 relative notes are audited separately), universal ages, exact event dates or a fitted S7 response. No numeric candidate parameter was changed. The same production rejection and separate model metrics below remain the current decision. `node stand_history_test.mjs` passed; `node selfcheck.js --quick` passed 44/44; `node build.js --check` passed. Rerunning `validate_closure.cjs event` and `audit` at identical seeds/settings reproduced the separate counts, 34/48 specimens, branches, foliage occupancy and raster canopy values below, with deterministic images, unchanged forest objects and no browser errors. Rerunning `stand_history_sensitivity.mjs` reproduced 9,107 / 8,824 / 8,180 living at 5 / 10 / 20 years, so convergence still fails. **Decision: reject for production.** The ordinary `collectForest(seed)` remains the survivor-first snapshot; `collectForest(seed, { standHistory: true })` retains the experiment for inspection. No L3, L6–L10, camera, crown or posture coefficient was adjusted. All comparisons use the same two seeds and `createRuntime(seed)` camera/settings in `validate_closure.cjs`. Counts include modeled stems behind other trees; “in frame” means the base projects inside 480×320, **not** that the canopy is visible. The evidence-to-parameter matrix is `stand_history_evidence.md`. This rejection is a decision about **one candidate parameterization and numerical scheme**. The cohort losses are regressions against the retained production approximation, not proof that the candidate violates a measured field age distribution: no such local distribution is held. No cited scientific fact forces a conflict that rules out a plausible coupled hillside. The event-time candidate does, however, fail numerical-step stability and does not preserve the intended young/old scene balance. The next pass must explore admissible process combinations with each observational constraint reported separately; it must not treat the species record's provisional parameter ranges as measured confidence intervals or fit to the raster. The candidate draws the same finite S4/S6 attempts as production, assigns stable IDs and exact establishment dates, and turns each regeneration ellipse into a dated disturbance with a footprint and establishment window. At each growth step, only living stems supply S7 competition and local S5 Dq. Death is recorded by time/cause, removes later competition and can never resize previously grown wood. The fixed-competition difference of the existing L3 diameter-at-age curve is a **candidate** increment kernel, not a fitted release law. Growth and S5 checks use a numerical step; births and disturbances are ordered at their exact dates. Growth is split at disturbance dates; births within an ordinary growth step enter the contemporaneous neighbour set for that step, an approximation whose resolution is tested below. No event hazard below the S5 maximum is inferred. The disturbance-mortality fraction 0.5 is provisional in the species record. **13 September resolution isolation.** With seed `11111111`, the same attempts, events and disturbance fraction 0.5 were run through `standOnly` at 5/10/20-year steps. With S5 deaths **disabled**, living counts are 24,569 / 25,135 / 25,874; young (<40) counts are 1,997 / 2,175 / 2,572; old (250+) counts are 413 / 415 / 415. Births have exact recorded dates but spacing reads incumbent DBH last updated at a growth-step boundary, so within-step establishment can change with step width. With S5 **enabled**, living counts are 9,107 / 8,824 / 8,180; young counts 301 / 244 / 117; old counts 3 / 4 / 5; S5 death counts 21,015 / 21,497 / 22,016. S5 evaluation at step ends amplifies the difference and nearly eliminates old survivors. These are fixed-seed model diagnostics, not field estimates. The next numerical experiment should isolate birth-time incumbent size/occupancy from S5 death-check timing and verify both under smaller steps before any parameter fit or production promotion. ## Cohorts and scene outcomes Each cell reads `total / under 18 / young <40 / mature 40–249 / old 250+`. The four historical references are retained experiments or snapshots, not interchangeable model fits. | State | Seed 11111111 all | Seed 11111111 in frame | Seed abcd1234 all | Seed abcd1234 in frame | |---|---|---|---|---| | `closure_regrowth` | 7702 / 1381 / 2287 / 5390 / 25 | 5421 / 1381 / 2287 / 3123 / 11 | 3967 / 283 / 547 / 3285 / 135 | 2487 / 206 / 390 / 2080 / 17 | | `closure_history` (rejected L3-only) | 6241 / 532 / 1081 / 5150 / 10 | 4009 / 532 / 1081 / 2926 / 2 | 3180 / 129 / 273 / 2839 / 68 | 1948 / 92 / 185 / 1758 / 5 | | `closure_chronology` (rejected oldest-first) | 5530 / 11 / 92 / 5385 / 53 | 3274 / 11 / 92 / 3154 / 28 | 3402 / 42 / 102 / 3111 / 189 | 2088 / 34 / 85 / 1980 / 23 | | `closure_survivor` / `closure_audit` (production) | 7518 / 1375 / 2278 / 5194 / 46 | 5277 / 1375 / 2278 / 2973 / 26 | 3775 / 239 / 462 / 3126 / 187 | 2419 / 203 / 385 / 2010 / 24 | | `closure_event` (candidate) | 8824 / 104 / 244 / 8576 / 4 | 5123 / 104 / 244 / 4876 / 3 | 5812 / 615 / 1156 / 4552 / 104 | 3305 / 256 / 416 / 2880 / 9 | The candidate severely depletes both young and old trees in seed 11111111; seed abcd1234 gains total young trees but old bases in frame fall 24→9. The first outcome is close to the rejected oldest-first young-cohort failure, and the old-tree losses recapitulate the rejected L3-history failure. ## Size, spacing and S5 Quantiles below are `p10 / median / p90` in centimetres (DBH, local Dq) or metres (nearest neighbour). Dq uses every living DBH inside the 12 m S7 plot; S5 excess is local current stems/ha divided by its maximum `Nmax(Dq)`. Quadrat variance/mean uses occupied 20 m cells, so it is a diagnostic rather than a calibrated point-pattern target. | Seed/state | DBH cm | Local Dq cm | Nearest m | Quadrat variance/mean | S5 ceiling violations | |---|---|---|---:|---:|---:| | 11111111 production | 5.15 / 45.20 / 54.85 | 16.04 / 44.42 / 53.00 | 5.39 | 7.97 | 0 | | 11111111 candidate | 38.54 / 47.80 / 55.62 | 41.66 / 48.30 / 52.96 | 3.02 | 0.76 | 0 | | abcd1234 production | 18.94 / 68.40 / 89.54 | 40.61 / 67.46 / 85.35 | 6.31 | 1.19 | 0 | | abcd1234 candidate | 12.26 / 62.70 / 82.50 | 29.92 / 61.69 / 79.46 | 3.38 | 1.84 | 0 | The first seed loses much of its gap aggregation (7.97→0.76) while pair distances shrink on both seeds. A valid S5 ceiling at the end is therefore insufficient: the model gets there through 21,497 / 12,057 dated S5 removals and produces a different spatial and age structure. There are no local raw stem maps to decide whether its new seedling-scale inhibition or death sequence is realistic. Of 416 survivor-source attempts on the first seed, one is excluded at birth, 411 die under S5 and only four remain. On the second, 1,064 attempts yield 104 living survivors after 19 birth exclusions, 57 disturbance deaths and 884 S5 deaths. This identifies S5/L3/recruitment coupling, rather than the new disturbance-death fraction alone, as the immediate old-cohort failure. The full finite-attempt accounting by establishment source is: | Seed | Source | Attempts | Birth exclusions | Disturbance deaths | S5 deaths | Living now | |---|---|---:|---:|---:|---:|---:| | 11111111 | Background cohort | 24,277 | 1,884 | 103 | 13,826 | 8,464 | | 11111111 | Old survivor | 416 | 1 | 0 | 411 | 4 | | 11111111 | Gap regeneration | 11,745 | 4,129 | 0 | 7,260 | 356 | | abcd1234 | Background cohort | 13,424 | 677 | 431 | 7,962 | 4,354 | | abcd1234 | Old survivor | 1,064 | 19 | 57 | 884 | 104 | | abcd1234 | Gap regeneration | 5,961 | 1,385 | 11 | 3,211 | 1,354 | At the dated gap events, seed 11111111's single event (47.89 years ago) kills 103 then-living stems and retains 2,756; its window accepts 7,616 regeneration attempts and rejects 4,129 at establishment. Seed abcd1234's three events (71.43 / 39.55 / 9.08 years ago) kill 254 / 170 / 75 and retain 1,749 / 765 / 555. Their regeneration windows accept 1,641 / 1,832 / 1,103 and reject 662 / 357 / 366 at establishment. Later S5 losses are counted in the source table and their individual dates/causes remain in the simulator's deterministic state. ## Growth and process sensitivity The synthetic two-neighbour release test at age 70 holds the old survivor's DBH at **100.206 cm at the death event**. Over the next 50 years, its DBH reaches 145.028 cm, versus 135.280 cm with its neighbour retained. This establishes the candidate's direction and no-instant-gain invariant; it is not a calibration to Poage's mixed-species thinning treatments. For surviving scene trees, median cumulative pre/post-release gains are 31.94 / 11.05 cm on seed 11111111 and 28.28 / 23.64 cm on abcd1234. These totals span different lifetimes and cannot be compared as annual rates. At fixed competition 0.4, no events and no mortality, L3 differences telescope to the existing age-100 DBH of 60.351 cm at 5-, 10- and 20-year steps. The nonnegative one-year kernel yields 60.364 cm, exposing a small non-monotonic segment in the current L3 curve; clipping it adds 0.013 cm. This prevents calling the kernel an exact growth law at arbitrary resolution. For seed 11111111, varying the new provisional disturbance-death fraction at a 10-year growth step gives 0 / 103 / 205 disturbance deaths and 8,837 / 8,824 / 8,833 living trees at fractions 0 / 0.5 / 1; all three retain only 4 old trees. Holding fraction 0.5 and changing step to 5 / 10 / 20 years gives **9,107 / 8,824 / 8,180** living, **301 / 244 / 117** young, and **3 / 4 / 5** old. The coupled process has not converged in these tests. Raw counts, DBH and gain quantiles are in `stand_history_sensitivity.json`. ## Raster and acceptance The fixed specimens remain **34/48** in every referenced run; this standalone check does not validate the hillside's cohort history. `closure_audit.json` and `closure_event.json` retain full quantiles, per-source attempt/rejection/death counts, event affected/retained counts, and deterministic flags. The opt-in simulator retains individual IDs and event dates in its in-memory ledger. Both scene rerenders were pixel-identical, did not mutate their forest object, and raised no browser error. Foliage occupancy uses a separate accumulating foliage mask from the selected tree draw pass, before overpainting. Actual raster-visible canopy counts green-classified pixels changed by the tree draw pass relative to the already drawn terrain and shadows, before weather. The older `foliageFraction` is the green-classified **whole final scene**, including possible non-tree green and weather effects; it is not ecological canopy closure. | Seed/state | Live branches | Modeled foliage occupancy | Raster-visible tree canopy | Whole-scene green pixels | |---|---:|---:|---:|---:| | 11111111 production | 87,100 | 34.82% | 49,660 px (32.33%) | 88,065 px (57.33%) | | 11111111 candidate | 77,263 | 32.40% | 41,682 px (27.14%) | 73,742 px (48.01%) | | abcd1234 production | 73,663 | 32.16% | 45,506 px (29.63%) | 82,191 px (53.51%) | | abcd1234 candidate | 73,668 | 32.56% | 43,635 px (28.41%) | 77,732 px (50.61%) | The first seed loses 7,978 raster-visible tree-canopy pixels even though the foliage-mask occupancy falls only 2.42 percentage points. These are style/raster diagnostics, not field canopy-closure measurements. Visually the candidate has fewer large old crowns and a more even small-stem texture; no image trait was used to fit a coefficient. ## Why production remains unchanged The candidate satisfies basic event ordering, deterministic replay, retained old survivors in a synthetic gap, recruitment after death, occupancy rejection, no instant wood gain, camera-independent biology and the terminal S5 ceiling. It fails the coupled cohort and spatial review and has unresolved time-step sensitivity. TV010 now supplies TREEID census intervals with tagged-population ingrowth and first-dead records, but no exact births/deaths, mapped Cascade Head stem coordinates, full age distribution or measured mapping to local S7 competition. Taylor's published Sitka-specific gap-size summary is available; event footprints for these plots are not. Those missing relationships still prevent identification of release response and dated mortality schedule. The interim survivor-first priority remains in production until a coupled replacement passes each ledger item.