diff --git a/AGENTS.md b/AGENTS.md index 8332779..d432a2a 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -29,6 +29,7 @@ cd simulations/gadm02 && python3 -B life_cycle.py --model gadm04 # GADM-0.4 du cd simulations/gadm02 && python3 -B robustness.py # GADM-0.4 robustness of key readings cd simulations/gadm02 && python3 -B agency.py # GADM-0.4 cohort agency cd simulations/gadm02 && python3 -B grounded_readings.py # readings under grounded parameters +cd simulations/gadm02 && python3 -B band_probe.py # scenarios across the adoption band B1–B4 ``` Use `python3 -B` after quick edits; a stale bytecode cache once masked a change. diff --git a/models/AdoptionBand.md b/models/AdoptionBand.md new file mode 100644 index 0000000..b392737 --- /dev/null +++ b/models/AdoptionBand.md @@ -0,0 +1,91 @@ + + +# Adoption Band — Anchors and Probe Results + +**Status:** v0.1. GADM-0.4 with grounded power, care and attention +parameters (`grounding.py`). The band anchors differ only in adoption +parameters. Each starts at its own equilibrium, with recalibrated channels. + +## 1. Anchors (T01) + +| Anchor | Adoption parameters | K_Ω at t 5 / 10 / 25 / 100 | Basis | +|---|---|---|---| +| **B1 conservative** | `aO` 0.10, `ell` 0.166 | 0.09 / 0.10 / 0.12 / 0.07 | Acemoglu (2024) | +| **B2 central** | `aO` 0.25, `ell` 0.415 | 0.20 / 0.27 / 0.28 / 0.16 | between LLM exposure and the tooling ceiling (Eloundou et al. 2023) | +| **B3 fast** | `aO` 0.50, `ell` 0.83 | 0.39 / 0.49 / 0.46 / 0.34 | tooling ceiling reached within a decade | +| **B4 aggressive** | B3 + self-enhancement `selfenh` 3.0 | 0.70 / 0.80 / 0.72 / 0.64 | AI accelerating its own development (Trammell & Korinek; Davidson et al.) | + +**Self-enhancement loop (new in GADM-0.4, default off):** organism investment +and learning are scaled by \((1 + selfenh \cdot K_\Omega)\), so the more +capable organisms are, the faster they improve. `selfenh` = 3.0 is tuned so +B4 reaches about 0.8 within ten years. At `selfenh` ≥ 6, K_Ω saturates instead +of declining, which is a different trajectory regime. That variant is not an +anchor yet. + +All anchors show a peak-and-decline path for K_Ω under baseline governance: +rising domination and eroding demand slow organism investment after the +first decade or two. This is a model property, to be checked against data +(ASSEMBLY-WP-0010). + +## 2. Probe results (T02) + +Full tables: `simulations/gadm02/results/band_probe.md`. 36 readings: +**22 robust, 7 quantitative shifts, 7 qualitative breaks.** + +### 2.1 Robust across the whole band + +- Generative regime best, automated capitalism worst, generative regime + lowest domination. +- Generative regime gain over baseline: +0.29 to +0.34 VFAC. +- Commons-rich economy gain over baseline: +0.10 to +0.12. +- Organism lever order lineage > membrane > attention. +- P3: a wealth tax alone barely moves domination. +- Dominant domination channel in all non-generative regimes: lineage + (membrane in the attention oligopoly). + +### 2.2 Quantitative shifts + +| Reading | B1 → B4 | Reading | +|---|---|---| +| Dividend abundance gain over baseline | +0.038 → +0.013 | dividends matter less as adoption accelerates | +| Automated capitalism loss vs. baseline | −0.099 → −0.047 | largest at B1, where the baseline itself does best | +| Lineage lever effect | +0.164 → +0.098 | the lever weakens as learning with use accelerates (P2: the critical lineage diffusion rises above the tested L = 0.8) | +| Membrane lever effect | +0.109 → +0.066 | as above | +| P3 effect size | −0.018 … −0.055 | small throughout | + +### 2.3 Qualitative breaks + +Recorded in `research/BreakRegister.md`. + +1. **Regimes that bound domination only under conservative adoption.** + Dividend abundance and the commons-rich economy keep P under its 0.7 + ceiling at B1, and breach it from B2 onward. +2. **Thresholds crossed with faster adoption.** Concentrated lineages breach + the domination ceiling from B3. Attention extraction breaches the attention + floor from B3, and the attention oligopoly breaches it at B4. +3. **Aggressive self-enhancement changes the structure of domination.** At + B4, lineage control becomes the dominant domination channel even in the + generative regime and its attention-extraction variant (B1–B3: market, + or discovery). + +### 2.4 Readings + +1. **The program's core claims hold across the band.** What changes is + *which policies are sufficient*: under conservative adoption, moderate + reforms (dividends, commons) keep domination bounded. Under central to + aggressive adoption, only the full generative package does. +2. **This bears directly on the "Europe lags" hypothesis.** A jurisdiction + that adopts slowly (B1-like) can get by with moderate reforms. A fast + adopter needs organism-specific governance early. Whether lagging is + worse or better then depends on whether the slow adopter later imports + B3/B4-speed organisms through foreign lineages. That needs open-economy + structure the model does not have (ASSEMBLY-WP-0009-T04 / later). +3. **B4 needs lineage governance beyond the current lever range.** Under + self-enhancement, even L = 0.8 and m = 0.8 leave lineage control dominant. + Candidate mechanisms that GADM does not yet represent: public or commons + lineages, compute commons, mandated lineage interoperability. This is a + structural question, and the first candidate for "qualitatively different + model" (break register entry BR-003). diff --git a/models/README.md b/models/README.md index 837f41e..c13789b 100644 --- a/models/README.md +++ b/models/README.md @@ -14,6 +14,7 @@ exploratory: they generate hypotheses and are not established results. | [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) | GADM-0.4 | durable capability, grounded organism depreciation, global sensitivity, equilibrium start, cohort agency (ASSEMBLY-WP-0006) | | [GADM-Sectors-Scope.md](GADM-Sectors-Scope.md) | scoping | rival/non-rival goods, ecological classes, sectors, selection mechanisms (ASSEMBLY-WP-0006-T06 → ASSEMBLY-WP-0007) | +| [AdoptionBand.md](AdoptionBand.md) | v0.1 | adoption band B1–B4 and probe of all scenarios across it (ASSEMBLY-WP-0009) | | [ParameterGrounding.md](ParameterGrounding.md) | v0.2 | 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) | diff --git a/research/BreakRegister.md b/research/BreakRegister.md new file mode 100644 index 0000000..93cfc90 --- /dev/null +++ b/research/BreakRegister.md @@ -0,0 +1,19 @@ + + +# Break Register + +A **qualitative break** means a reading changes sign, ranking or regime +within the adoption band. Each entry records where the break occurs, what it +suggests, and whether the model needs a qualitatively different structure in +that part of the band. + +| ID | Found | Reading | Where | Interpretation | Model consequence | Status | +|---|---|---|---|---|---|---| +| BR-001 | 2026-10-12 (WP-0009-T02) | Dividend abundance and commons-rich economy keep P ≤ 0.7 | holds at B1, breaks from B2 | moderate reforms suffice only under conservative adoption | none structural; policy sufficiency is band-dependent | open: report per anchor | +| BR-002 | 2026-10-12 (WP-0009-T02) | Floors under concentrated lineages (P) and attention extraction (A) | breach from B3; attention oligopoly breaches A at B4 | threshold crossings scale with adoption speed | none structural; checkpoints should watch these floors first | open: report per anchor | +| BR-003 | 2026-10-12 (WP-0009-T02) | Dominant domination channel in the generative regime | market at B1–B3 → lineage at B4 | under self-enhancement, the available lineage levers (L, m ≤ 0.8) no longer bound lineage control | **structural candidate:** public/commons lineages, compute commons, mandated lineage interoperability; possibly open-economy lineage import | open: candidate for a qualitatively different model | +| BR-004 | 2026-10-12 (WP-0009-T01) | K_Ω trajectory shape | peak-and-decline for selfenh ≤ 3; saturation at selfenh ≥ 6 | a stronger inner loop escapes the demand/domination brake | check the shape against data (WP-0010); the saturating regime may need different demand dynamics | open | diff --git a/simulations/README.md b/simulations/README.md index 86d57cb..6d9bf7d 100644 --- a/simulations/README.md +++ b/simulations/README.md @@ -9,7 +9,7 @@ model version it implements. | `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: durable capability, grounded dO, equilibrium start, cohort agency (`models/GADM-0.4.md`) | `life_cycle.py --model gadm04`, `robustness.py`, `agency.py`, `grounded_readings.py`, `test_gadm04.py` | -| `gadm02/grounding.py` | evidence-grounded parameter sets for GADM-0.4 (`models/ParameterGrounding.md`) | `variant("central" \| "slow")` | +| `gadm02/grounding.py` | evidence-grounded parameter sets and adoption band B1–B4 (`models/ParameterGrounding.md`, `models/AdoptionBand.md`) | `variant("slow" \| "central" \| "fast" \| "aggressive")`, `band_probe.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. diff --git a/simulations/gadm02/band_probe.py b/simulations/gadm02/band_probe.py new file mode 100644 index 0000000..47dfa05 --- /dev/null +++ b/simulations/gadm02/band_probe.py @@ -0,0 +1,139 @@ +"""Probe scenarios across the adoption band B1-B4 (ASSEMBLY-WP-0009-T02). + +For every scenario and band anchor, compute key readings and classify each as +robust, quantitative shift or qualitative break (research/ScenarioBandMethod.md +§ 5). + +Usage: python3 -B simulations/gadm02/band_probe.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 +import grounding as gr # noqa: E402 +from scenarios import load_all # noqa: E402 + +OUT = Path(__file__).resolve().parent / "results" +ANCHORS = list(gr.BAND) # B1..B4 +FLOORS = {"G": (">=", 0.2), "E": (">=", 0.2), "P": ("<=", 0.7), "A": (">=", 0.2)} +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 classify(values: list, kind: str) -> str: + """kind: 'sign' (numbers), 'label' (categorical), 'bool'.""" + if kind == "label" or kind == "bool": + return "robust" if len(set(values)) == 1 else "QUALITATIVE BREAK" + signs = {(v > 0) - (v < 0) for v in values} + if len(signs) > 1: + return "QUALITATIVE BREAK" + lo, hi = min(abs(v) for v in values), max(abs(v) for v in values) + return "quantitative shift" if lo > 0 and hi / lo > 1.5 else "robust" + + +def shape(traj: list[float]) -> str: + peak = max(traj) + if traj[-1] >= 0.9 * peak: + return "saturating" + return "peak-and-decline" + + +def main() -> None: + OUT.mkdir(exist_ok=True) + scs = load_all() + names = list(scs) + var = {a: gr.variant(gr.BAND[a]) for a in ANCHORS} + runs = {a: {n: g.simulate({**scs[n]["params"], **var[a][0]}, {**scs[n]["init"], **var[a][1]}) + for n in names} for a in ANCHORS} + fin = {a: {n: runs[a][n][-1] for n in names} for a in ANCHORS} + + lines = [f"# {g.MODEL_VERSION}: scenarios across the adoption band", "", + "Generated by `simulations/gadm02/band_probe.py`. Anchors B1–B4 from", + "`grounding.py` (`research/ScenarioBandMethod.md` § 2). t = 100 years unless noted.", "", + "## K_Ω path per anchor (baseline)", "", "| Anchor | t 5 | t 10 | t 25 | t 50 | t 100 | shape |", + "|---|---|---|---|---|---|---|"] + shapes = [] + for a in ANCHORS: + tr = [r["Ko"] for r in runs[a]["baseline"]] + shapes.append(shape(tr)) + lines.append(f"| {a} ({gr.BAND[a]}) | " + " | ".join(f"{tr[t]:.2f}" for t in (5, 10, 25, 50, 100)) + + f" | {shapes[-1]} |") + + lines += ["", "## Scenario VFAC / P per anchor", "", + "| Scenario | " + " | ".join(ANCHORS) + " |", "|---|" + "---|" * len(ANCHORS)] + for n in names: + lines.append(f"| {scs[n]['title']} | " + " | ".join( + f"{fin[a][n]['VFAC']:.3f} / {fin[a][n]['P']:.2f}" for a in ANCHORS) + " |") + + readings = [] + + def add(name, values, kind, fmt=lambda v: f"{v:+.3f}" if isinstance(v, float) else str(v)): + readings.append((name, [fmt(v) for v in values], classify(values, kind))) + + order = {a: sorted(names, key=lambda n: -fin[a][n]["VFAC"]) for a in ANCHORS} + add("best scenario", [scs[order[a][0]]["title"] for a in ANCHORS], "label") + add("worst scenario", [scs[order[a][-1]]["title"] for a in ANCHORS], "label") + add("lowest domination", [scs[min(names, key=lambda n: fin[a][n]["P"])]["title"] for a in ANCHORS], "label") + for n in names: + if n != "baseline": + add(f"VFAC {scs[n]['title']} − baseline", + [fin[a][n]["VFAC"] - fin[a]["baseline"]["VFAC"] for a in ANCHORS], "sign") + for n in names: + dom = [] + for a in ANCHORS: + ch = max(g3.CHANNELS, key=lambda k: fin[a][n][k]) + dom.append(g3.CHANNEL_NAMES[ch]) + add(f"dominant domination channel: {scs[n]['title']}", dom, "label") + for n in names: + viol = [] + for a in ANCHORS: + v = [k for k, (op, lim) in FLOORS.items() + if (fin[a][n][k] < lim if op == ">=" else fin[a][n][k] > lim)] + viol.append(",".join(v) or "none") + add(f"floor violations at t 100: {scs[n]['title']}", viol, "label") + eff = {a: [] for a in ANCHORS} + for a in ANCHORS: + out = {} + for lv in itertools.product((0, 1), repeat=3): + ex = {} + for ax, l in zip(GRID, lv): + ex.update(GRID[ax][l]) + out[lv] = g.simulate({**scs["baseline"]["params"], **var[a][0], **ex}, + {**scs["baseline"]["init"], **var[a][1]})[-1]["VFAC"] + eff[a] = [sum((1 if lv[i] else -1) * v for lv, v in out.items()) / 4 for i in range(3)] + for i, ax in enumerate(GRID): + add(f"organism lever effect: {ax}", [eff[a][i] for a in ANCHORS], "sign") + add("lever order lineage > membrane > attention", + [eff[a][0] > eff[a][1] > eff[a][2] > 0 for a in ANCHORS], "bool") + mem = scs["generative_concentrated_lineages"] + p3 = [] + for a in ANCHORS: + lo = g.simulate({**mem["params"], **var[a][0], "wtax": 0.0}, {**mem["init"], **var[a][1]})[-1]["P"] + hi = g.simulate({**mem["params"], **var[a][0], "wtax": 1.0}, {**mem["init"], **var[a][1]})[-1]["P"] + p3.append(hi - lo) + add("P3: wealth tax ΔP (membrane-dominated)", p3, "sign") + add("P3 holds (|ΔP| < 0.06)", [abs(x) < 0.06 for x in p3], "bool") + add("K_Ω trajectory shape (baseline)", shapes, "label") + + lines += ["", "## Readings and robustness class", "", + "| Reading | " + " | ".join(ANCHORS) + " | class |", "|---|" + "---|" * (len(ANCHORS) + 1)] + for name, vals, cls in readings: + lines.append(f"| {name} | " + " | ".join(vals) + f" | {cls} |") + n_break = sum(1 for _n, _v, c in readings if c == "QUALITATIVE BREAK") + n_shift = sum(1 for _n, _v, c in readings if c == "quantitative shift") + lines += ["", f"{len(readings)} readings: {len(readings) - n_break - n_shift} robust, " + f"{n_shift} quantitative shifts, {n_break} qualitative breaks.", ""] + (OUT / "band_probe.md").write_text("\n".join(lines)) + print("\n".join(lines)) + + +if __name__ == "__main__": + main() diff --git a/simulations/gadm02/gadm04.py b/simulations/gadm02/gadm04.py index b5e6bcf..4446a24 100644 --- a/simulations/gadm02/gadm04.py +++ b/simulations/gadm02/gadm04.py @@ -62,6 +62,10 @@ PARAMS.update({ "g3s": 0.5, # seniors' restartability weight (relative to working age) "b2s": 1.5, # seniors' exposure to operator lock-in (digital exclusion) "gcare": 0.02, # care support (relief from participation claims) raising senior agency + # WP-0009: self-enhancement of organism capability (AI accelerating its own + # development); scales organism investment and learning by (1 + selfenh * K_Omega). + # 0 = off (default); used by the aggressive band anchor B4. + "selfenh": 0.0, }) @@ -109,6 +113,10 @@ def derivatives(s: dict, p: dict) -> tuple[dict, dict]: # macro feedback must see effective capability: recompute non-capability flows d_eff, a = c.derivatives(sc, p) d = {k: v for k, v in d_eff.items() if not (k.startswith("H") and k[1:] in COHORTS)} + if p["selfenh"]: + Ko = s["Ko"] + grow = (p["aO"] * a["Vsel"] * a["dem"] + p["ell"] * Ko * a["dem"] * s["Q"]) * (1 - Ko) + d["Ko"] += p["selfenh"] * Ko * grow n = c.shares(s) flow = {"ch": c.AGE_RATE["ch"] * s["Nch"], "w": c.AGE_RATE["w"] * s["Nw"], "s": c.AGE_RATE["s"] * s["Ns"]} diff --git a/simulations/gadm02/grounding.py b/simulations/gadm02/grounding.py index 7b8b739..8f9bf3e 100644 --- a/simulations/gadm02/grounding.py +++ b/simulations/gadm02/grounding.py @@ -22,10 +22,17 @@ import gadm04 as g # noqa: E402 # T01: organism adoption. The default reaches K_Omega = 0.50 by year 10, faster # than even the LLM+tooling exposure ceiling (47-56 % of tasks, Eloundou et al. # 2023) could plausibly be adopted. Central path: ~0.27 at year 10, ~0.29 at 25. +SELFENH = 3.0 # B4: tuned so K_Omega reaches ~0.8 within about 10 years + ADOPTION = { "central": {"aO": 0.25, "ell": 0.415, "oseed": 0.0165}, # x0.5 of default "slow": {"aO": 0.10, "ell": 0.166, "oseed": 0.0066}, # x0.2, towards Acemoglu (2024) + # adoption band (research/ScenarioBandMethod.md § 2): B3 fast = GADM-0.4 + # adoption defaults; B4 aggressive = B3 plus the self-enhancement loop + "fast": {"aO": 0.50, "ell": 0.83, "oseed": 0.033}, + "aggressive": {"aO": 0.50, "ell": 0.83, "oseed": 0.033, "selfenh": SELFENH}, } +BAND = {"B1": "slow", "B2": "central", "B3": "fast", "B4": "aggressive"} # T03: leader persistence rose since 2000 with proprietary software and # intangibles (Bessen et al.); learning-by-doing superstars (Ma, Pugsley, # Zimmermann): digital channels self-reinforce more strongly than the market. @@ -43,7 +50,7 @@ EQ_KEYS = ("W", "Aw", "As", "Gw", "Gs") def variant(name: str = "central") -> tuple[dict, dict]: - """(params, init) for a grounded variant: 'central' or 'slow' adoption.""" + """(params, init) for a grounded variant: 'slow', 'central', 'fast' or 'aggressive'.""" params = {**ADOPTION[name], **POWER, **CARE, **ATTENTION} init = g.equilibrium_init(EQ_KEYS, steps=4000, h=0.25, params=params) params.update(g.calibrate(params, init)) diff --git a/simulations/gadm02/results/band_probe.md b/simulations/gadm02/results/band_probe.md new file mode 100644 index 0000000..17c7976 --- /dev/null +++ b/simulations/gadm02/results/band_probe.md @@ -0,0 +1,70 @@ +# GADM-0.4: scenarios across the adoption band + +Generated by `simulations/gadm02/band_probe.py`. Anchors B1–B4 from +`grounding.py` (`research/ScenarioBandMethod.md` § 2). t = 100 years unless noted. + +## K_Ω path per anchor (baseline) + +| Anchor | t 5 | t 10 | t 25 | t 50 | t 100 | shape | +|---|---|---|---|---|---|---| +| B1 (slow) | 0.09 | 0.10 | 0.12 | 0.12 | 0.07 | peak-and-decline | +| B2 (central) | 0.20 | 0.27 | 0.28 | 0.20 | 0.16 | peak-and-decline | +| B3 (fast) | 0.39 | 0.49 | 0.46 | 0.36 | 0.34 | peak-and-decline | +| B4 (aggressive) | 0.70 | 0.80 | 0.72 | 0.65 | 0.64 | peak-and-decline | + +## Scenario VFAC / P per anchor + +| Scenario | B1 | B2 | B3 | B4 | +|---|---|---|---|---| +| Baseline (current trends) | 0.396 / 0.73 | 0.328 / 0.79 | 0.298 / 0.81 | 0.263 / 0.84 | +| Automated capitalism | 0.297 / 0.86 | 0.278 / 0.87 | 0.250 / 0.88 | 0.216 / 0.90 | +| Dividend abundance | 0.434 / 0.64 | 0.346 / 0.77 | 0.311 / 0.80 | 0.275 / 0.83 | +| Universal venture access | 0.407 / 0.73 | 0.349 / 0.79 | 0.316 / 0.81 | 0.278 / 0.83 | +| Commons-rich economy | 0.513 / 0.60 | 0.446 / 0.70 | 0.404 / 0.74 | 0.358 / 0.77 | +| Attention oligopoly | 0.329 / 0.79 | 0.281 / 0.86 | 0.255 / 0.87 | 0.222 / 0.89 | +| Generative regime | 0.684 / 0.06 | 0.658 / 0.09 | 0.637 / 0.13 | 0.570 / 0.36 | +| Generative regime, concentrated lineages | 0.527 / 0.59 | 0.472 / 0.66 | 0.421 / 0.72 | 0.382 / 0.75 | +| Generative regime, attention extraction | 0.587 / 0.27 | 0.554 / 0.29 | 0.527 / 0.32 | 0.452 / 0.54 | + +## Readings and robustness class + +| Reading | B1 | B2 | B3 | B4 | class | +|---|---|---|---|---|---| +| best scenario | Generative regime | Generative regime | Generative regime | Generative regime | robust | +| worst scenario | Automated capitalism | Automated capitalism | Automated capitalism | Automated capitalism | robust | +| lowest domination | Generative regime | Generative regime | Generative regime | Generative regime | robust | +| VFAC Automated capitalism − baseline | -0.099 | -0.050 | -0.048 | -0.047 | quantitative shift | +| VFAC Dividend abundance − baseline | +0.038 | +0.019 | +0.013 | +0.013 | quantitative shift | +| VFAC Universal venture access − baseline | +0.011 | +0.021 | +0.018 | +0.016 | quantitative shift | +| VFAC Commons-rich economy − baseline | +0.117 | +0.118 | +0.106 | +0.096 | robust | +| VFAC Attention oligopoly − baseline | -0.067 | -0.047 | -0.043 | -0.040 | quantitative shift | +| VFAC Generative regime − baseline | +0.288 | +0.330 | +0.339 | +0.308 | robust | +| VFAC Generative regime, concentrated lineages − baseline | +0.131 | +0.144 | +0.123 | +0.119 | robust | +| VFAC Generative regime, attention extraction − baseline | +0.191 | +0.226 | +0.229 | +0.190 | robust | +| dominant domination channel: Baseline (current trends) | lineage | lineage | lineage | lineage | robust | +| dominant domination channel: Automated capitalism | lineage | lineage | lineage | lineage | robust | +| dominant domination channel: Dividend abundance | lineage | lineage | lineage | lineage | robust | +| dominant domination channel: Universal venture access | lineage | lineage | lineage | lineage | robust | +| dominant domination channel: Commons-rich economy | lineage | lineage | lineage | lineage | robust | +| dominant domination channel: Attention oligopoly | membrane | membrane | membrane | membrane | robust | +| dominant domination channel: Generative regime | market | market | market | lineage | QUALITATIVE BREAK | +| dominant domination channel: Generative regime, concentrated lineages | lineage | lineage | lineage | lineage | robust | +| dominant domination channel: Generative regime, attention extraction | discovery/attention | discovery/attention | discovery/attention | lineage | QUALITATIVE BREAK | +| floor violations at t 100: Baseline (current trends) | P | P | P | P | robust | +| floor violations at t 100: Automated capitalism | P | P | P | P | robust | +| floor violations at t 100: Dividend abundance | none | P | P | P | QUALITATIVE BREAK | +| floor violations at t 100: Universal venture access | P | P | P | P | robust | +| floor violations at t 100: Commons-rich economy | none | P | P | P | QUALITATIVE BREAK | +| floor violations at t 100: Attention oligopoly | P | P | P | P,A | QUALITATIVE BREAK | +| floor violations at t 100: Generative regime | none | none | none | none | robust | +| floor violations at t 100: Generative regime, concentrated lineages | none | none | P | P | QUALITATIVE BREAK | +| floor violations at t 100: Generative regime, attention extraction | none | none | A | A | QUALITATIVE BREAK | +| organism lever effect: lineage | +0.164 | +0.122 | +0.105 | +0.098 | quantitative shift | +| organism lever effect: membrane | +0.109 | +0.094 | +0.076 | +0.066 | quantitative shift | +| organism lever effect: attention | +0.039 | +0.045 | +0.047 | +0.047 | robust | +| lever order lineage > membrane > attention | True | True | True | True | robust | +| P3: wealth tax ΔP (membrane-dominated) | -0.018 | -0.055 | -0.013 | -0.007 | quantitative shift | +| P3 holds (|ΔP| < 0.06) | True | True | True | True | robust | +| K_Ω trajectory shape (baseline) | peak-and-decline | peak-and-decline | peak-and-decline | peak-and-decline | robust | + +36 readings: 22 robust, 7 quantitative shifts, 7 qualitative breaks. diff --git a/simulations/gadm02/results/grounded_readings.md b/simulations/gadm02/results/grounded_readings.md index 36fc7ec..a45ded3 100644 --- a/simulations/gadm02/results/grounded_readings.md +++ b/simulations/gadm02/results/grounded_readings.md @@ -1,4 +1,4 @@ -# GADM-0.4-dev: readings under grounded parameters +# GADM-0.4: readings under grounded parameters Generated by `simulations/gadm02/grounded_readings.py`. t = 100 years. Grounded sets: `simulations/gadm02/grounding.py`; justification in diff --git a/simulations/gadm02/test_gadm04.py b/simulations/gadm02/test_gadm04.py index 2e28fda..fcde450 100644 --- a/simulations/gadm02/test_gadm04.py +++ b/simulations/gadm02/test_gadm04.py @@ -60,6 +60,14 @@ class TestGrounding(unittest.TestCase): for k in gr.EQ_KEYS + ("Pm", "Pi", "Pd", "Pmem", "Plin", "Ppol"): self.assertLess(abs(d[k]), 1e-3, (name, k)) + def test_band_is_ordered_by_adoption_speed(self): + import grounding as gr + ko = [g.simulate(*gr.variant(gr.BAND[a]))[10]["Ko"] for a in ("B1", "B2", "B3", "B4")] + self.assertEqual(ko, sorted(ko)) + + def test_self_enhancement_off_by_default(self): + self.assertEqual(g.PARAMS["selfenh"], 0.0) + def test_grounded_adoption_is_slower_than_default(self): import grounding as gr p, i = gr.variant("central") diff --git a/workplans/ASSEMBLY-WP-0009-adoption-band-jurisdictions.md b/workplans/ASSEMBLY-WP-0009-adoption-band-jurisdictions.md index 0745359..ce42c22 100644 --- a/workplans/ASSEMBLY-WP-0009-adoption-band-jurisdictions.md +++ b/workplans/ASSEMBLY-WP-0009-adoption-band-jurisdictions.md @@ -25,7 +25,7 @@ jurisdiction archetypes. ```task id: ASSEMBLY-WP-0009-T01 -status: todo +status: done priority: high state_hub_task_id: "f0e01f88-cfc3-59a4-aab0-b958eb18f68b" ``` @@ -39,7 +39,7 @@ recalibrated channels. ```task id: ASSEMBLY-WP-0009-T02 -status: todo +status: done priority: high state_hub_task_id: "48054e06-70f6-5d2f-b679-8aeb613ccab7" ```