|
1 | 1 | # Changelog |
2 | 2 |
|
| 3 | +## v3.5.0 - 2026-04-18 |
| 4 | + |
| 5 | +Chemical coupling and adaptive signal. alpha_coupling and beta_modulation added as searchable |
| 6 | +signal parameters. Three signal-only behavioral descriptors. Descriptor library 15→18. |
| 7 | + |
| 8 | +### alpha_coupling [-1, 1] |
| 9 | + |
| 10 | +New Params field. Reception-to-growth coupling: G *= (1 + alpha * reception).clamp(min=0). |
| 11 | +Applied globally (no ownership gating) -- species B grows into species A's territory when B's |
| 12 | +receptor_profile aligns with A's emission_vector. Positive = chemotaxis (predation pathway). |
| 13 | +Negative = chemorepulsion. Zero = no coupling (previous behavior). |
| 14 | + |
| 15 | +### beta_modulation [-1, 1] |
| 16 | + |
| 17 | +New Params field. Adaptive emission: rate_eff = clip(emission_rate * (1 + beta * mean(reception)), 0, 0.1). |
| 18 | +Reception computed before emission each step. Positive = quorum sensing (amplify when stimulated). |
| 19 | +Negative = feedback inhibition (suppress when stimulated). Zero = static emission rate. |
| 20 | + |
| 21 | +### Signal-only descriptors |
| 22 | + |
| 23 | +Three new Descriptor objects with signal_only=True registered in REGISTRY: |
| 24 | +- emission_activity: mean G_pos * emission_rate over trace tail, normalized to [0,1] |
| 25 | +- receptor_sensitivity: mean |dot(convolved_signal, receptor_profile)| over trace tail, [0,1] |
| 26 | +- signal_retention: final_mass / initial_mass clipped to [0,1]; 1.0 for non-signal traces |
| 27 | + |
| 28 | +Descriptor dataclass gains signal_only: bool = False field. loop.py validates at search startup: |
| 29 | +raises ValueError if any signal_only descriptor is active without signal_field=True. |
| 30 | +RolloutTrace gains signal_emission_history, signal_reception_history, signal_retention fields. |
| 31 | +rollout.py captures these per-step during signal rollouts. |
| 32 | + |
| 33 | +### Quality metric adjustment |
| 34 | + |
| 35 | +Signal run weights: stability 0.3→0.2, retention 0.2→0.3. Non-signal unchanged (0.6/0.4). |
| 36 | + |
| 37 | +--- |
| 38 | + |
| 39 | +## v3.4.0 - 2026-04-18 |
| 40 | + |
| 41 | +Signal physics corrections, multi-component quality metric, signal observables, signal GIF, |
| 42 | +viewer improvements across archive and ecosystem pages. |
| 43 | + |
| 44 | +### Signal physics |
| 45 | + |
| 46 | +emission_rate and decay_rates made per-creature searchable (were hardcoded constants). |
| 47 | +standard_preset 300→500 steps. signal_preset auto-selects 800 steps with --signal-field. |
| 48 | +CREATURE_MASS_FLOOR raised 0.1→0.2. Reception moved before emission in localized.py. |
| 49 | + |
| 50 | +### Multi-component quality metric |
| 51 | + |
| 52 | +q = 0.6·min(compact(T/2), compact(T)) + 0.4·stability (non-signal) |
| 53 | +q = 0.5·min(compact(T/2), compact(T)) + 0.2·stability + 0.3·retention (signal) |
| 54 | +midpoint_state captured in rollout loop and stored on RolloutTrace. |
| 55 | +stability = clip(1 - drift/0.2, 0, 1) -- continuous version of persistent filter. |
| 56 | + |
| 57 | +### Signal observables |
| 58 | + |
| 59 | +SimOutput captures signal_total_history, signal_channel_snapshots, species_signal_received, |
| 60 | +signal_sum_snapshots (downsampled 4x spatial signal for GIF). EcosystemMeasures gains 6 new |
| 61 | +fields: signal_total_history, signal_mass_fraction, signal_channel_snapshots, |
| 62 | +dominant_channel_history, receptor_alignment, emission_reception_matrix. All in summary.json. |
| 63 | + |
| 64 | +### Signal GIF |
| 65 | + |
| 66 | +signal.gif generated alongside ecosystem.gif using species-colored teal colormap. |
| 67 | +Mass/Signal tab toggle in ecosystem viewer. signal.gif checked in smoke_ecosystem.sh. |
| 68 | + |
| 69 | +### Viewer improvements |
| 70 | + |
| 71 | +Archive: SIGNAL badge, alpha/beta in creature modal, per-channel bar charts for signal params. |
| 72 | +Ecosystem: SIGNAL badge, outcome tooltips, signal charts sidebar, corrected mass chart label. |
| 73 | +Index: System tab anchor nav, quality metric section with formula, signal field section with |
| 74 | +diagram, signal descriptors in descriptor grid, SIGNAL/TORUS badges on run cards. |
| 75 | +docs/signal-field.svg: new diagram showing one-step signal mechanics with alpha/beta. |
| 76 | + |
| 77 | +--- |
| 78 | + |
| 79 | +## v3.3.0 - 2026-04-18 |
| 80 | + |
| 81 | +Signal field: per-creature emission and sensing in a shared (H,W,16) chemical field. |
| 82 | + |
| 83 | +Per-creature parameters: emission_vector (C,), receptor_profile (C,), signal_kernel (ring), |
| 84 | +emission_rate scalar, decay_rates (C,). --signal-field flag in CLI. Archive tagged |
| 85 | +signal_field: true/false in manifest.json. Quality filter updated for mass+signal conservation. |
| 86 | +Both homogeneous and heterogeneous ecosystem paths signal-aware. validate_signal_consistency() |
| 87 | +enforces archive compatibility (signal and non-signal archives cannot be mixed). |
| 88 | + |
| 89 | +--- |
| 90 | + |
| 91 | +## v3.2.0 - 2026-04-18 |
| 92 | + |
| 93 | +Temporal outcome classifier with separate taxonomies per run mode. |
| 94 | + |
| 95 | +Heterogeneous: merger, coexistence, exclusion, fragmentation -- now as temporal label sequence |
| 96 | +(list of OutcomeWindow with from_step, to_step, label) per species. Fragmentation uses patch |
| 97 | +count from v3.1.0 HeteroSpatial. Homogeneous taxonomy: full_merger, stable_isolation, |
| 98 | +partial_clustering, cannibalism, fragmentation -- all measurable from patch count dynamics. |
| 99 | +Outcome timeline visualization in ecosystem viewer. outcome_sequence stored in summary.json. |
| 100 | + |
| 101 | +--- |
| 102 | + |
| 103 | +## v3.1.0 - 2026-04-18 |
| 104 | + |
| 105 | +Spatial observables for both run modes from existing snapshot data (no new simulation code). |
| 106 | + |
| 107 | +Heterogeneous: patch count per species per snapshot, interface area per pair per snapshot, |
| 108 | +Euclidean COM distance per pair per snapshot, spatial entropy per species per snapshot, |
| 109 | +contact_occurred S×S bool matrix. Interaction coefficients gated to windows where |
| 110 | +interface_area > 0. 4-connected component labeling via scipy.ndimage.label. |
| 111 | +Homogeneous: patch count over time, mass spatial entropy, initial patch sizes, patch size |
| 112 | +distribution per snapshot. scipy declared as explicit dependency. HeteroSpatial / |
| 113 | +HomoSpatial typed dataclasses in analytics.py. |
| 114 | + |
| 115 | +--- |
| 116 | + |
3 | 117 | ## v3.0.0 - 2026-04-17 |
4 | 118 |
|
5 | 119 | Growth field capture, empirical interaction coefficients, ecosystem outcome classification, interaction heatmap in viewer. |
|
0 commit comments