ASSEMBLY-WP-0006-T02: ground organism depreciation, robustness checks

- dO grounded at 0.20/yr (software, R&D capital, AI hardware evidence);
  investment/learning rescaled so the baseline organism path is unchanged
- robustness.py: key readings hold for grounded dO and brackets on channel
  self-reinforcement and wealth conversion; P3 effect size grows at strong
  self-reinforcement
- models/ParameterGrounding.md: register of grounded / bracketed / assumed /
  calibrated parameters, open grounding needs

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

Assistant: claude-code
Assistant-Model: opus
Assistant-Process: 1494246@bnt-lap001
Assistant-Session: caf6de6f-f9e4-47ce-a584-49baa271fa4b
This commit is contained in:
tegwick 2026-10-12 08:27:08 +02:00
parent c03cf98756
commit ee7b17da5e
12 changed files with 252 additions and 30 deletions

View file

@ -2,12 +2,20 @@
# Custodian Brief — assembly-economics
**Domain:** communication
**Last synced:** 2026-10-12 05:38 UTC
**Last synced:** 2026-10-12 06:24 UTC
**State Hub:** http://127.0.0.1:8000 *(adjust if running on a remote machine)*
## Active Workstreams
*(none — repo may need first-session setup)*
### GADM-0.4: durable capability, cohort agency, estimated parameters
Progress: 1/6 done | workplan_id: `0016caec-fec5-5943-b565-a2c3d66b750f`
**Open tasks:**
- · Ground key parameters `d4603db8`
- · Global sensitivity on GADM-0.3 `c33dd30b`
- · Equilibrium initialisation `16c2bb94`
- · Agency per cohort `788c4143`
- · Sectors and rival goods `a0a25ecb`
## Inbox Hygiene

View file

@ -25,6 +25,7 @@ cd simulations/gadm02 && python3 -B wealth.py # GADM-0.3 wealth vs. power
cd simulations/gadm02 && python3 -B organism_grid.py # GADM-0.3 organism grid
cd simulations/gadm02 && python3 -B life_cycle.py # GADM-0.3 cohorts
cd simulations/gadm02 && python3 -B life_cycle.py --model gadm04 # GADM-0.4 durable capability
cd simulations/gadm02 && python3 -B robustness.py # GADM-0.4 robustness of key readings
```
Use `python3 -B` after quick edits; a stale bytecode cache once masked a change.

View file

@ -13,7 +13,7 @@
| workplan | ASSEMBLY-WP-0003 | finished | — | workplans/ASSEMBLY-WP-0003-seed-integration.md |
| workplan | ASSEMBLY-WP-0004 | finished | — | workplans/ASSEMBLY-WP-0004-gadm-0.2-modeling.md |
| workplan | ASSEMBLY-WP-0005 | finished | — | workplans/ASSEMBLY-WP-0005-gadm-0.3.md |
| workplan | ASSEMBLY-WP-0006 | proposed | — | workplans/ASSEMBLY-WP-0006-gadm-0.4.md |
| workplan | ASSEMBLY-WP-0006 | active | — | workplans/ASSEMBLY-WP-0006-gadm-0.4.md |
| task | ASSEMBLY-WP-0001-T01 | done | — | workplans/ASSEMBLY-WP-0001-statehub-bootstrap.md |
| task | ASSEMBLY-WP-0001-T02 | done | — | workplans/ASSEMBLY-WP-0001-statehub-bootstrap.md |
| task | ASSEMBLY-WP-0001-T03 | done | — | workplans/ASSEMBLY-WP-0001-statehub-bootstrap.md |
@ -47,7 +47,7 @@
| task | ASSEMBLY-WP-0005-T04 | done | — | workplans/ASSEMBLY-WP-0005-gadm-0.3.md |
| task | ASSEMBLY-WP-0005-T05 | done | — | workplans/ASSEMBLY-WP-0005-gadm-0.3.md |
| task | ASSEMBLY-WP-0005-T06 | done | — | workplans/ASSEMBLY-WP-0005-gadm-0.3.md |
| task | ASSEMBLY-WP-0006-T01 | todo | — | workplans/ASSEMBLY-WP-0006-gadm-0.4.md |
| task | ASSEMBLY-WP-0006-T01 | done | — | workplans/ASSEMBLY-WP-0006-gadm-0.4.md |
| task | ASSEMBLY-WP-0006-T02 | todo | — | workplans/ASSEMBLY-WP-0006-gadm-0.4.md |
| task | ASSEMBLY-WP-0006-T03 | todo | — | workplans/ASSEMBLY-WP-0006-gadm-0.4.md |
| task | ASSEMBLY-WP-0006-T04 | todo | — | workplans/ASSEMBLY-WP-0006-gadm-0.4.md |

View file

@ -7,7 +7,8 @@ the code is the reference if the two ever disagree.
# Generative Assembly Dynamics Model — GADM-0.4
**Status:** in development, exploratory. Implemented so far: durable human
capability (§ 1, ASSEMBLY-WP-0006-T01).
capability (§ 1, ASSEMBLY-WP-0006-T01), grounded organism depreciation and
robustness checks (§ 2, T02).
GADM-0.4 builds on the GADM-0.3 cohort model (`GADM-0.3.md` § 5), which stays
unchanged and reproducible in `gadm03c.py`. Time unit: one year.
@ -49,6 +50,9 @@ identical to GADM-0.3 (unit-tested).
### 1.3 Results
Computed at T01, before `dO` was grounded (§ 2). The grounded values differ
by at most 0.004.
| | GADM-0.3 cohorts | GADM-0.4 |
|---|---|---|
| Baseline VFAC (t = 100) | 0.323 | 0.323 |
@ -83,9 +87,29 @@ Full tables: `simulations/gadm02/results/life_cycle_gadm04.md`.
- `hform` was chosen so that baseline children's durable capability settles
near 0.6. It has no empirical anchor yet (see T02).
---
## 2. Parameter grounding (T02)
Details and sources: `ParameterGrounding.md`.
- **Organism depreciation is grounded:** `dO` = 0.20 per year (evidence range
0.15–0.35, from software, R&D-capital and AI-hardware depreciation), instead
of 0.06. Investment, learning and seeding are rescaled (×3.33) so the
baseline organism path is unchanged. The evidence changes the timescale;
the level of organism capability remains ungrounded.
- **The key readings are robust** to the grounded `dO` and to brackets on the
ungrounded channel self-reinforcement (0.15–0.45) and wealth conversion
(0.02–0.20). One exception: P3's effect size grows to −0.078 at strong
self-reinforcement.
- With grounded `dO`: baseline VFAC 0.325, generative regime 0.665. The life-cycle results
are essentially unchanged: L3 half-time 17 years, final ΔH working age +0.032;
L1 ΔH −0.028 (ageing, strong mentoring) against −0.038 (stable, none).
## Reproduce
```bash
python3 -B -m unittest discover -s simulations/gadm02
cd simulations/gadm02 && python3 -B life_cycle.py --model gadm04
cd simulations/gadm02 && python3 -B robustness.py # T02 robustness checks
```

View file

@ -0,0 +1,76 @@
<!--
Created 2026-10-12 under ASSEMBLY-WP-0006-T02. A register of how each key
GADM parameter is justified. Update it whenever a parameter is grounded,
bracketed or changed.
-->
# Parameter Grounding Register
**Status:** v0.1. Most GADM parameters are still assumptions. This register
says which ones have evidence behind them, which are bracketed by
sensitivity analysis only, and which are open.
Status codes: **G** grounded in external evidence · **B** bracketed: not
grounded, but key readings checked across a range · **A** assumed, not yet
checked · **C** calibration choice (set to reproduce a target behaviour).
| Parameter | Meaning | Value | Status | Basis |
|---|---|---|---|---|
| time unit | one period | 1 year | C | WP-0005-T01; implied timescales checked in `GADM-0.2.md` § 3.4 |
| `dO` | depreciation of organism capability | 0.20 (range 0.15–0.35) per year; GADM-0.2/0.3: 0.06 | **G** | Software depreciates geometrically over roughly 3–10 years (CBO-based summary); business R&D capital depreciation is generally above the traditional 15 % (Li & Hall 2020, *Review of Income and Wealth* 66(1)); economic life of AI GPUs is about 2–6 years. Organism capability combines all three. |
| `aO`, `ell`, `oseed` | organism investment, learning with use, seeding | 0.50, 0.83, 0.033 (×3.33) | C | Rescaled with `dO` so the baseline organism path stays as before (0.46 at t = 25, 0.37 at t = 100). The **level** of organism capability is therefore still ungrounded. |
| `aext` | attention extraction | 0.275; GADM-0.2: 0.12 | **G** (order of magnitude) | ATUS 2023: 5.2 h/day leisure, 2.7 h TV; social media about 2 h 20 min/day. Engagement media take about half of discretionary time (`GADM-0.3.md` § 4.1). |
| `r_k` | channel self-reinforcement | 0.3 (0.4 discovery) | **B** | Not grounded. Readings checked for 0.15–0.45 (`results/robustness.md`). |
| `k_w` | wealth → control conversion | 0.04 | **B** | Not grounded. Readings checked for 0.02–0.20. |
| `birth`, ageing and death rates | demography | 1/45; 1/20, 1/45, 1/15; 1/8 | C | Gives a stationary structure of about 23 / 51 / 17 / 9 % at replacement fertility, plausible for an aged high-income society. |
| `hform` | durable capability formation | 0.15 | C | Chosen so children's durable capability settles near 0.6. |
| `v0`, `aK`, `n1` | experimentation, capacity build, entry | 2.5, 0.35, 0.30 | C | Keep the GADM-0.2 baseline from collapsing (`GADM-0.2.md` § 3.4). |
| all other rates | — | see code | A | First guesses in the 0.03–0.3 per-year range. |
## Robustness of key readings (T02)
`simulations/gadm02/results/robustness.md`, GADM-0.4 with cohorts and
durable capability. Channel counters are recalibrated for every variant.
| Reading | dO 0.06 → 0.20 | r 0.15 / 0.45 | k_w 0.02 / 0.20 |
|---|---|---|---|
| Generative regime best, automated capitalism worst | holds | holds | holds |
| Scenario ranking (Spearman ρ vs. grounded) | 1.00 | 0.98 / 1.00 | 1.00 / 1.00 |
| Generative regime has the lowest domination | holds | holds | holds |
| Organism lever order lineage > membrane > attention | holds | holds | holds |
| P3: full wealth tax lowers P by < 0.06 where membrane/lineage dominate | holds (−0.055) | holds (−0.035) / **fails (−0.078)** | holds |
Readings:
1. **Grounding `dO` changes almost nothing**, because the organism level was
held fixed by rescaling. The GADM-0.2 Sobol result ("dO explains a third of
baseline variance") really measures sensitivity to the **level** of
organism capability, which `dO` sets together with investment and learning.
That level is the next thing to ground, for example from AI-capital or
task-automation shares.
2. **The structural readings are robust** across the brackets for the two
ungrounded power parameters.
3. **P3 is robust in direction, but its size depends on r.** With strong
self-reinforcement, market and political channels sit closer to their
tipping points, so a wealth tax tips them down and becomes more effective
(ΔP −0.078). Even then, total domination stays dominated by membrane and
lineage control.
## Open grounding needs
1. The level of organism capability K_Ω (AI capital share, task-automation
share).
2. The channel self-reinforcement r_k (persistence of market leadership,
platform tipping evidence).
3. The wealth → influence conversion k_w (political-economy evidence on
lobbying and influence).
4. Durable capability formation `hform` and the ½ / ½ durable/current split
(human-capital literature on the persistence of early education).
## Sources
- Li, W. C. Y. & Hall, B. H. (2020). Depreciation of Business R&D Capital. *Review of Income and Wealth* 66(1): 161–180. https://www.bea.gov/research/papers/2016/depreciation-business-rd-capital
- BEA, Estimation of Software in the US National Accounts. https://www.bea.gov/sites/default/files/2018-05/Estimation-of-Software-in-the-US-National-Accounts.pdf
- Software depreciation schedule (CBO-based summary). https://www.route-fifty.com/digital-government/2002/05/by-the-numbers/286193/
- AI GPU economic life: https://siliconangle.com/2025/11/22/resetting-gpu-depreciation-ai-factories-bend-dont-break-useful-life-assumptions/ ; https://drops.mts.now/ai-capex/wiki/economics/gpu-depreciation/
- BLS American Time Use Survey. https://www.bls.gov/news.release/PDF/atus.pdf

View file

@ -12,7 +12,8 @@ exploratory: they generate hypotheses and are not established results.
| [GADM-CLD.md](GADM-CLD.md) | v0.1 | causal-loop diagram, loops, signed link table (ASSEMBLY-WP-0004-T01/T02) |
| [GADM-0.2.md](GADM-0.2.md) | GADM-0.2 | extensions decision, equations, scenario and sensitivity findings (ASSEMBLY-WP-0004) |
| [GADM-0.3.md](GADM-0.3.md) | GADM-0.3 | power channels (P1/P2) wealth separated from power (P3), attention recalibration, organism grid, life-cycle cohorts (ASSEMBLY-WP-0005) |
| [GADM-0.4.md](GADM-0.4.md) | in development | durable human capability (ASSEMBLY-WP-0006-T01) |
| [GADM-0.4.md](GADM-0.4.md) | in development | durable human capability, grounded organism depreciation (ASSEMBLY-WP-0006) |
| [ParameterGrounding.md](ParameterGrounding.md) | v0.1 | which parameters are grounded, bracketed, assumed or calibrated |
| [GADM-0.3-Candidates.md](GADM-0.3-Candidates.md) | outline | life-cycle and power extensions, deferred items (ASSEMBLY-WP-0004-T08) |
## Conventions

View file

@ -8,7 +8,7 @@ model version it implements.
| `gadm02/` | GADM-0.2 (`models/GADM-0.2.md`) | `run_scenarios.py`, `sensitivity.py`, `gsa.py`, `test_gadm02.py` |
| `gadm02/gadm03.py` | GADM-0.3: power channels, wealth, attention (`models/GADM-0.3.md`) | `power_channels.py`, `wealth.py`, `organism_grid.py`, `test_gadm03.py` |
| `gadm02/gadm03c.py` | GADM-0.3 with life-cycle cohorts (`models/GADM-0.3.md` § 5) | `life_cycle.py`, `test_gadm03c.py` |
| `gadm02/gadm04.py` | GADM-0.4 (in development): durable capability (`models/GADM-0.4.md`) | `life_cycle.py --model gadm04`, `test_gadm04.py` |
| `gadm02/gadm04.py` | GADM-0.4 (in development): durable capability (`models/GADM-0.4.md`) | `life_cycle.py --model gadm04`, `robustness.py`, `test_gadm04.py` |
Python 3.10+, standard library only. Use `python3 -B` after quick edits: a stale
bytecode cache can mask same-size changes made within the same second.

View file

@ -44,6 +44,11 @@ PARAMS.update({
"dDd": 0.04, # very old
"ll": 0.005, # lifelong durable formation for working-age adults
"lbl": 1.0, # strength of "learning begets learning" (0 = off)
# T02 grounding: organism capability depreciates like software / R&D / AI
# hardware (geometric 0.15-0.35 per year), not 0.06. Investment, learning and
# seeding are rescaled by 3.33 so the baseline organism path stays as before
# (K_Omega ~0.46 at t=25, ~0.37 at t=100): evidence changes the timescale.
"dO": 0.20, "aO": 0.50, "ell": 0.83, "oseed": 0.033,
})

View file

@ -7,12 +7,12 @@ t = 100 years. Ageing demography: births at 75 % of replacement.
| Demography | T_g (tg) | seniors + very old (share, t=100) | H (t=0) | H (t=100) | ΔH |
|---|---|---|---|---|---|
| stable | 0.00 | 0.26 | 0.502 | 0.463 | -0.039 |
| stable | 0.05 | 0.26 | 0.502 | 0.469 | -0.034 |
| stable | 0.15 | 0.26 | 0.502 | 0.479 | -0.023 |
| ageing | 0.00 | 0.29 | 0.502 | 0.456 | -0.047 |
| ageing | 0.05 | 0.29 | 0.502 | 0.462 | -0.041 |
| ageing | 0.15 | 0.29 | 0.502 | 0.473 | -0.029 |
| stable | 0.00 | 0.26 | 0.502 | 0.464 | -0.038 |
| stable | 0.05 | 0.26 | 0.502 | 0.470 | -0.033 |
| stable | 0.15 | 0.26 | 0.502 | 0.480 | -0.022 |
| ageing | 0.00 | 0.29 | 0.502 | 0.457 | -0.046 |
| ageing | 0.05 | 0.29 | 0.502 | 0.463 | -0.040 |
| ageing | 0.15 | 0.29 | 0.502 | 0.474 | -0.028 |
## L2: care load and attention
@ -21,14 +21,14 @@ initial cohort attention is not at its own equilibrium).
| Demography | care_sen (seniors' care share) | cp | A working age | A seniors | care load per working-age person | per senior |
|---|---|---|---|---|---|---|
| stable | 0.1 | 0.00 | 0.399 | 0.438 | 0.0432 | 0.0144 |
| stable | 0.1 | 0.15 | 0.441 | 0.465 | 0.0238 | 0.0079 |
| stable | 0.3 | 0.00 | 0.417 | 0.395 | 0.0336 | 0.0432 |
| stable | 0.3 | 0.15 | 0.452 | 0.439 | 0.0185 | 0.0238 |
| ageing | 0.1 | 0.00 | 0.402 | 0.443 | 0.0407 | 0.0128 |
| ageing | 0.1 | 0.15 | 0.443 | 0.467 | 0.0224 | 0.0070 |
| ageing | 0.3 | 0.00 | 0.420 | 0.403 | 0.0317 | 0.0383 |
| ageing | 0.3 | 0.15 | 0.454 | 0.444 | 0.0174 | 0.0210 |
| stable | 0.1 | 0.00 | 0.402 | 0.442 | 0.0432 | 0.0144 |
| stable | 0.1 | 0.15 | 0.444 | 0.469 | 0.0238 | 0.0079 |
| stable | 0.3 | 0.00 | 0.420 | 0.398 | 0.0336 | 0.0432 |
| stable | 0.3 | 0.15 | 0.456 | 0.442 | 0.0185 | 0.0238 |
| ageing | 0.1 | 0.00 | 0.405 | 0.447 | 0.0407 | 0.0128 |
| ageing | 0.1 | 0.15 | 0.446 | 0.472 | 0.0224 | 0.0070 |
| ageing | 0.3 | 0.00 | 0.423 | 0.406 | 0.0317 | 0.0383 |
| ageing | 0.3 | 0.15 | 0.458 | 0.448 | 0.0174 | 0.0210 |
## L3: lag from education to working-age capability
@ -37,15 +37,15 @@ Run difference: education intensity 1.5 vs. 1.0, everything else equal.
| t | ΔH children | ΔH working age | ΔH aggregate |
|---|---|---|---|
| 0 | +0.000 | +0.000 | +0.000 |
| 5 | +0.071 | +0.004 | +0.018 |
| 5 | +0.070 | +0.004 | +0.018 |
| 10 | +0.085 | +0.010 | +0.025 |
| 15 | +0.084 | +0.015 | +0.027 |
| 20 | +0.081 | +0.018 | +0.029 |
| 25 | +0.080 | +0.020 | +0.030 |
| 30 | +0.079 | +0.022 | +0.032 |
| 40 | +0.079 | +0.025 | +0.034 |
| 50 | +0.079 | +0.027 | +0.036 |
| 75 | +0.080 | +0.030 | +0.039 |
| 15 | +0.085 | +0.015 | +0.028 |
| 20 | +0.083 | +0.018 | +0.029 |
| 25 | +0.081 | +0.021 | +0.031 |
| 30 | +0.080 | +0.023 | +0.032 |
| 40 | +0.080 | +0.026 | +0.034 |
| 50 | +0.080 | +0.028 | +0.036 |
| 75 | +0.080 | +0.031 | +0.039 |
| 100 | +0.081 | +0.032 | +0.040 |
Half of the final effect is reached after 3 years for children and 17 years for working-age capability.

View file

@ -0,0 +1,16 @@
# GADM-0.4-dev: robustness of key readings
Generated by `simulations/gadm02/robustness.py`. t = 100 years.
Readings checked: (1) scenario VFAC ranking (Spearman ρ against the grounded
variant), (2) generative regime lowest P, (3) organism lever order on the
baseline background, (4) P3: full wealth tax lowers P by < 0.06 in the
membrane/lineage-dominated case.
| Variant | best scenario | worst scenario | ρ ranking | generative P | lineage / membrane / attention effect | lever order holds | P3 ΔP | P3 holds |
|---|---|---|---|---|---|---|---|---|
| old dO = 0.06 | Generative regime (0.660) | Automated capitalism (0.264) | 1.00 | 0.11 (lowest) | +0.127 / +0.086 / +0.031 | yes | -0.055 | yes |
| grounded dO = 0.20 | Generative regime (0.665) | Automated capitalism (0.263) | 1.00 | 0.10 (lowest) | +0.123 / +0.084 / +0.032 | yes | -0.055 | yes |
| grounded, r = 0.15 | Generative regime (0.653) | Automated capitalism (0.284) | 0.98 | 0.15 (lowest) | +0.115 / +0.063 / +0.032 | yes | -0.035 | yes |
| grounded, r = 0.45 | Generative regime (0.671) | Automated capitalism (0.255) | 1.00 | 0.08 (lowest) | +0.126 / +0.094 / +0.033 | yes | -0.078 | no |
| grounded, k_w = 0.02 | Generative regime (0.665) | Automated capitalism (0.261) | 1.00 | 0.10 (lowest) | +0.120 / +0.082 / +0.032 | yes | -0.038 | yes |
| grounded, k_w = 0.20 | Generative regime (0.663) | Automated capitalism (0.273) | 1.00 | 0.11 (lowest) | +0.126 / +0.082 / +0.032 | yes | -0.046 | yes |

View file

@ -0,0 +1,91 @@
"""Robustness of key GADM readings to grounded and bracketed parameters (T02).
Variants: GADM-0.4 with the old organism depreciation (dO = 0.06), with the
grounded value (dO = 0.20, rescaled), and the grounded value with brackets on
the ungrounded channel self-reinforcement r and wealth conversion k_w. Channel
counters are recalibrated for every variant so each starts in equilibrium.
Usage: python3 -B simulations/gadm02/robustness.py
"""
from __future__ import annotations
import itertools
import sys
from pathlib import Path
sys.dont_write_bytecode = True
import gadm03 as g3 # noqa: E402
import gadm04 as g # noqa: E402
from scenarios import load_all # noqa: E402
OUT = Path(__file__).resolve().parent / "results"
R_KEYS = ("r_m", "r_i", "r_mem", "r_lin", "r_pol")
OLD_DO = {"dO": 0.06, "aO": 0.15, "ell": 0.25, "oseed": 0.01}
def variant(extra: dict) -> dict:
return {**extra, **g3.calibrate(extra)}
VARIANTS = [
("old dO = 0.06", variant(OLD_DO)),
("grounded dO = 0.20", variant({})),
("grounded, r = 0.15", variant({**{k: 0.15 for k in R_KEYS}, "r_d": 0.2})),
("grounded, r = 0.45", variant({**{k: 0.45 for k in R_KEYS}, "r_d": 0.6})),
("grounded, k_w = 0.02", variant({"k_w": 0.02})),
("grounded, k_w = 0.20", variant({"k_w": 0.20})),
]
GRID = {"lineage": ({"L": 0.1, "lin_open": 0.1}, {"L": 0.8, "lin_open": 0.8}),
"membrane": ({"m": 0.2}, {"m": 0.8}),
"attention": ({"x_att": 0.9}, {"x_att": 0.2})}
def main() -> None:
OUT.mkdir(exist_ok=True)
scs = load_all()
names = list(scs)
ref_rank = None
lines = [f"# {g.MODEL_VERSION}: robustness of key readings", "",
"Generated by `simulations/gadm02/robustness.py`. t = 100 years.",
"Readings checked: (1) scenario VFAC ranking (Spearman ρ against the grounded",
"variant), (2) generative regime lowest P, (3) organism lever order on the",
"baseline background, (4) P3: full wealth tax lowers P by < 0.06 in the",
"membrane/lineage-dominated case.", "",
"| Variant | best scenario | worst scenario | ρ ranking | generative P | lineage / membrane / attention effect | lever order holds | P3 ΔP | P3 holds |",
"|---|---|---|---|---|---|---|---|---|"]
rows = []
for label, prm in VARIANTS:
res = {n: g.simulate({**scs[n]["params"], **prm}, scs[n]["init"])[-1] for n in names}
order = sorted(names, key=lambda n: -res[n]["VFAC"])
rank = {n: i for i, n in enumerate(order)}
rows.append((label, prm, res, order, rank))
ref_rank = rows[1][4]
k = len(names)
for label, prm, res, order, rank in rows:
rho = 1 - 6 * sum((rank[n] - ref_rank[n]) ** 2 for n in names) / (k * (k * k - 1))
gen_lowest = min(names, key=lambda n: res[n]["P"]) == "generative_regime"
base = scs["baseline"]
out = {}
for lv in itertools.product((0, 1), repeat=3):
p = {**base["params"], **prm}
for ax, l in zip(GRID, lv):
p.update(GRID[ax][l])
out[lv] = g.simulate(p, base["init"])[-1]["VFAC"]
eff = [sum((1 if lv[i] else -1) * v for lv, v in out.items()) / 4 for i in range(3)]
order_ok = eff[0] > eff[1] > eff[2] > 0
mem = scs["generative_concentrated_lineages"]
p0 = g.simulate({**mem["params"], **prm, "wtax": 0.0}, mem["init"])[-1]["P"]
p1 = g.simulate({**mem["params"], **prm, "wtax": 1.0}, mem["init"])[-1]["P"]
lines.append(f"| {label} | {scs[order[0]]['title']} ({res[order[0]]['VFAC']:.3f}) | "
f"{scs[order[-1]]['title']} ({res[order[-1]]['VFAC']:.3f}) | {rho:.2f} | "
f"{res['generative_regime']['P']:.2f}{' (lowest)' if gen_lowest else ''} | "
f"{eff[0]:+.3f} / {eff[1]:+.3f} / {eff[2]:+.3f} | {'yes' if order_ok else 'no'} | "
f"{p1 - p0:+.3f} | {'yes' if p0 - p1 < 0.06 else 'no'} |")
(OUT / "robustness.md").write_text("\n".join(lines) + "\n")
print("\n".join(lines))
if __name__ == "__main__":
main()

View file

@ -38,7 +38,7 @@ education-formed component next to the current one, then re-test L3.
```task
id: ASSEMBLY-WP-0006-T02
status: todo
status: done
priority: high
state_hub_task_id: "d4603db8-b302-5f86-ac75-649f82b6a43e"
```