ASSEMBLY-WP-0007 finished: T04 two-good demand split (genuine decoupling in the generative regime, sinks breach postponed; BR-010 resolved); residuals to WP-0018

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

Assistant: claude-code
Assistant-Model: opus
Assistant-Process: 14913@bnt-lap001
Assistant-Session: add7ef69-b901-4756-9a67-34cf1125d96f
This commit is contained in:
tegwick 2026-10-13 23:17:36 +02:00
parent 80055bc700
commit 509a50eb04
8 changed files with 316 additions and 13 deletions

View file

@ -42,6 +42,7 @@ cd simulations/gadm02 && python3 -B exports.py # export channel and the "Argen
cd simulations/gadm02 && python3 -B nonrival.py # GADM-0.5-dev rival vs. non-rival output across the band
cd simulations/gadm02 && python3 -B eco_classes.py # GADM-0.5-dev ecological resource classes
cd simulations/gadm02 && python3 -B selection.py # GADM-0.5-dev endogenous selection weights
cd simulations/gadm02 && python3 -B demand.py # GADM-0.5-dev two-good demand split (dematerialization)
cd simulations/gadm02 && python3 -B matching.py && python3 -B matching.py --imm # model matching; IMM flip-detection acceptance test (~6 min)
```

View file

@ -157,11 +157,52 @@ Readings:
candidate change. It is recorded here and not implemented, because no
reading depends on it yet.
## 4. Open: demand composition (T04, refined)
## 4. Two-good demand split: dematerialization (T04)
T01 found no genuine decoupling, because non-rival output only adds to rival
consumption (BR-010). T02 locates the generative regime's ecological cost in
the sinks. Both point to the same missing structure: a **two-good demand
split**, rival and non-rival consumption, with substitution between them
(dematerialization). This is narrower than the four-sector option in the scope
note, and it is the question that opens T04.
### 4.1 Structure
`gadm05.simulate_eco(..., demand=...)` adds a slow state Cr, the rival share
of demand relative to its start (Cr0 = 1). Cr relaxes (rate `dm_lam`) toward
`1 − dm_eps · (qn − qn0)`, where `qn = (Y_n / Y*) · √(X Q)` is the
quality-weighted non-rival offer. Physical throughput intensity `thr` and
physical investment `aK` scale with Cr. The same capital then serves
dematerialized demand with less physical load. `dm_lam = 0` switches it off.
Priors: λ 0.05 per year, ε 2; strong case λ 0.1, ε 4.
### 4.2 Results (`demand.py`, `results/demand.md`; material replenishment at rest)
| Generative regime | B1 | B2 | B3 | B4 |
|---|---|---|---|---|
| decoupled decades, no split → split → strong | 0 → 0 → 0 | 0 → 0.45 → 0.89 | 0 → 0.71 → 0.75 | 0 → 0.22 → 0.34 |
| sinks breach, no split → split → strong | t 83 → none → none | t 49 → 98 → none | t 37 → 61 → none | t 29 → 40 → none |
| VFAC t 100, no split → split | 0.607 → 0.613 | 0.583 → 0.598 | 0.564 → 0.585 | 0.509 → 0.533 |
A *decoupled decade* has VFAC rising, physical throughput falling and K_Ω not
falling, which excludes the artifact of § 1.3. Baseline: decoupled decades
0–0.09, and no sinks breach with or without the split.
Calibration check: throughput per unit of output falls by 0.1–0.5 % per year
in the first decade (split cases included). Observed EU dematerialization is
about 1.6 % per year (resource productivity, 2000–2022). The observed trend
includes efficiency gains that GADM does not model.
### 4.3 Readings
1. **Genuine decoupling needs demand composition.** With the split, the
generative regime decouples welfare from throughput in most decades at
B2–B3, while organism capability keeps growing. BR-010 is resolved
structurally: non-rival output must replace rival consumption, not only add
to it.
2. **Decoupling is band-dependent (qualitative break).** It needs a non-rival
offer of sufficient quality, which B1 adoption does not build. At B4,
physical and compute growth outpace substitution, and decoupling is rarer
(22 %).
3. **The generative regime's sinks breach becomes avoidable.** The default
split moves it 15–50 years later. The strong split removes it within the
horizon at every anchor. Together with low-carbon electricity (§ 2.3), this
is the second lever on the regime's ecological cost.
4. **The readings are conservative against data.** Observed
dematerialization (−1.6 % per year) is three to sixteen times the modeled
intensity decline, because GADM has no autonomous efficiency trend.
Calibrating ε, λ and an efficiency trend to the observed series is the next
step (ASSEMBLY-WP-0018).

View file

@ -22,4 +22,4 @@ that part of the band.
| BR-007 | 2026-10-13 (WP-0013-T04) | Rights-first levers bound domination | holds when switching to J1 levers (US: P 0.64 → 0.54) → fails for a jurisdiction already at J1 levers (EU: P 0.65 → 0.77) | calibrated domination comes from levels set abroad that local levers cannot reach | **structural:** cross-border coupling (ASSEMBLY-WP-0011) | open |
| BR-008 | 2026-10-13 (WP-0011-T05) | Which levers bound domination (BR-007 follow-up) | closed model: host rights levers → coupled model: only host access rules on foreign operators and the home's levers reach the foreign-run channels | measured channels (Pd, Pmem, Plin, Pi) are operated from the US for EU and AR hosts | **structural, implemented:** cross-border coupling (`world.py`); observed DMA effect on search ≈ 0 (at most a 0.006/yr) | update 2026-10-13 (WP-0016-T01): a host lineage access rule does reach imported-lineage concentration (EU Plin 0.91 → 0.19 at a 0.15); portability needs the domestic lineage market's concentration (CB3) |
| BR-009 | 2026-10-13 (WP-0012) | Sentiment dynamics of the legitimacy loop | Σ relaxes toward 0.5 + gain × Δ(perceived benefit), so from the measured US Σ 0.285 it rises → measured US sentiment fell 2021–2026 (0.405 → 0.285) while adoption grew fast | the neutral reference 0.5 is an assumption; US adoption also shows no braking by low sentiment (all loop-on candidates fail the US match) | **resolved 2026-10-13 (WP-0017-T01):** parameter `sig_ref`; calibrated runs anchor Σ at its measured level, and adoption and legislation respond to changes relative to it. Default (None = 0.5) keeps earlier results. R1–R4 and H1/H2 verdicts unchanged; the matching loop weights become ≈ 0.5 | resolved; `sig_adopt` not yet identified |
| BR-010 | 2026-10-13 (WP-0007-T01) | Non-rival growth decouples welfare from throughput (core hypothesis, GADM-0.1 § 14) | output split rival / non-rival (GADM-0.5-dev): no genuine decoupling in any anchor; the generative regime's ecological cost unchanged | GADM has no demand composition: non-rival output adds to, but never replaces, rival consumption | **structural candidate:** demand substitution (dematerialization) and ecological classes (WP-0007-T02, T04) | open |
| BR-010 | 2026-10-13 (WP-0007-T01) | Non-rival growth decouples welfare from throughput (core hypothesis, GADM-0.1 § 14) | output split rival / non-rival (GADM-0.5-dev): no genuine decoupling in any anchor; the generative regime's ecological cost unchanged | GADM has no demand composition: non-rival output adds to, but never replaces, rival consumption | **resolved 2026-10-13 (WP-0007-T04):** two-good demand split; the generative regime decouples in 45–71 % of decades at B2–B3, and its sinks breach moves 15–50 years later; band-dependent (none at B1) | resolved; calibration to observed dematerialization open (WP-0018) |

View file

@ -0,0 +1,93 @@
"""Two-good demand split: dematerialization and decoupling (ASSEMBLY-WP-0007-T04).
Tests (workplan T04):
1. Can VFAC rise while physical throughput falls, for reasons other than organism decline?
2. Does the generative regime's sink breach move out of the 100-year horizon?
Calibration check: throughput intensity per unit of output should fall by roughly the observed
dematerialization (EU resource productivity +1.6 %/year, 2000-2022, Eurostat).
Usage: python3 -B simulations/gadm02/demand.py
"""
from __future__ import annotations
import sys
from pathlib import Path
sys.dont_write_bytecode = True
import band_probe as bp # noqa: E402
import gadm05 as g5 # 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)
CASES = {"no demand split": {"dm_lam": 0.0}, "split (λ 0.05, ε 2)": {"dm_lam": 0.05, "dm_eps": 2.0},
"split, strong (λ 0.1, ε 4)": {"dm_lam": 0.1, "dm_eps": 4.0}}
def decoupled_windows(rows: list[dict], step: int = 1) -> float:
"""Share of 10-year windows with VFAC up, throughput down and K_Omega not falling."""
hits = n = 0
for i in range(0, len(rows) - step, step):
a, b = rows[i], rows[i + step]
n += 1
hits += b["VFAC"] > a["VFAC"] and b["thru"] < a["thru"] and b["Ko"] >= a["Ko"] - 1e-6
return hits / n
def intensity_trend(rows: list[dict], years: int = 10) -> float:
"""Average yearly change of throughput per unit of output over the first `years`."""
a, b = rows[0], rows[years // 10]
ia, ib = a["thru"] / a["Ystar"], b["thru"] / b["Ystar"]
return (ib / ia) ** (1 / years) - 1
def main() -> None:
OUT.mkdir(exist_ok=True)
scs = load_all()
var = {a: gr.variant(gr.BAND[a]) for a in ANCHORS}
res = {}
for sc in ("baseline", "generative_regime"):
for a in ANCHORS:
for cn, cd in CASES.items():
rows = g5.simulate_eco({**scs[sc]["params"], **var[a][0]}, {**scs[sc]["init"], **var[a][1]},
eco={"rm": "rest"}, demand=cd)
sink = next((r["t"] for r in rows if r["Es"] < g5.ECO_PARAMS["eco_floor"]), None)
res[(sc, a, cn)] = {"V": rows[-1]["VFAC"], "Cr": rows[-1]["Cr"], "dec": decoupled_windows(rows),
"sink": sink, "Es": rows[-1]["Es"], "it": intensity_trend(rows),
"thru": rows[-1]["thru"]}
lines = ["# GADM-0.5-dev: two-good demand split (dematerialization)", "",
"Generated by `simulations/gadm02/demand.py` (ASSEMBLY-WP-0007-T04). Ecological classes with",
"material replenishment at rest. Decoupled windows: 10-year windows with VFAC rising, throughput",
"falling and K_Ω not falling. Intensity trend: yearly change of throughput per unit of output,",
"years 0–10 (observed EU dematerialization ≈ −1.6 %/year).", "",
"| Scenario | Anchor | Case | VFAC t100 | rival demand share Cr t100 | intensity trend | decoupled windows | sinks breach | Es t100 |",
"|---|---|---|---|---|---|---|---|---|"]
for sc in ("baseline", "generative_regime"):
for a in ANCHORS:
for cn in CASES:
r = res[(sc, a, cn)]
lines.append(f"| {scs[sc]['title']} | {a} | {cn} | {r['V']:.3f} | {r['Cr']:.2f} | {100 * r['it']:+.1f} % | "
f"{r['dec']:.2f} | {('t ' + format(r['sink'], '.0f')) if r['sink'] is not None else '—'} | {r['Es']:.2f} |")
readings = []
for sc in ("baseline", "generative_regime"):
t = scs[sc]["title"]
readings.append((f"decoupled windows, split − none: {t}",
[res[(sc, a, 'split (λ 0.05, ε 2)')]["dec"] - res[(sc, a, 'no demand split')]["dec"] for a in ANCHORS]))
readings.append((f"ΔVFAC split − none: {t}",
[res[(sc, a, 'split (λ 0.05, ε 2)')]["V"] - res[(sc, a, 'no demand split')]["V"] for a in ANCHORS]))
readings.append((f"ΔEs t100 split − none: {t}",
[res[(sc, a, 'split (λ 0.05, ε 2)')]["Es"] - res[(sc, a, 'no demand split')]["Es"] for a in ANCHORS]))
lines += ["", "## Readings and robustness class", "", "| Reading | " + " | ".join(ANCHORS) + " | class |",
"|---|" + "---|" * (len(ANCHORS) + 1)]
for name, vals in readings:
lines.append(f"| {name} | " + " | ".join(f"{v:+.3f}" for v in vals) + f" | {bp.classify(vals, 'sign')} |")
lines.append("")
(OUT / "demand.md").write_text("\n".join(lines))
print("\n".join(lines))
if __name__ == "__main__":
main()

View file

@ -79,9 +79,21 @@ def _draws(s: dict, a: dict, p: dict, q: dict) -> tuple[float, float, float]:
return dr, dm, ds
# --- ASSEMBLY-WP-0007-T04: two-good demand split (dematerialization) -------------------------------
# Cr = rival share of demand, relative to its start (Cr0 = 1). It relaxes at dm_lam toward
# 1 - dm_eps * (qn - qn0), where qn = (Y_n / Y*) * sqrt(X * Q) is the quality-weighted non-rival
# offer. Physical throughput intensity thr and physical investment aK scale with Cr: the same
# capital stock serves dematerialized demand with less physical load. dm_lam = 0 switches it off.
DEM_PARAMS = {"dm_lam": 0.0, "dm_eps": 2.0}
def nonrival_quality(s: dict, a: dict) -> float:
return (a["Yn"] / a["Ystar"] if a["Ystar"] else 0.0) * (max(0.0, s["X"]) * max(0.0, s["Q"])) ** 0.5
def simulate_eco(params: dict | None = None, init: dict | None = None, eco: dict | None = None,
T: float = 100.0, dt: float = 0.1, record_every: int = 10) -> list[dict]:
"""GADM-0.5 with ecological classes. Same loop as gadm04.simulate; E follows the classes."""
T: float = 100.0, dt: float = 0.1, record_every: int = 10, demand: dict | None = None) -> list[dict]:
"""GADM-0.5 with ecological classes (and optionally the demand split). E follows the classes."""
q = {**ECO_PARAMS, **(eco or {})}
p = {**PARAMS, **(params or {})}
s = {**g4.INIT, **(init or {})}
@ -95,9 +107,14 @@ def simulate_eco(params: dict | None = None, init: dict | None = None, eco: dict
rr = q["rr"] if q["rr"] is not None else dr0 * s["Er"] / (1 - s["Er"])
rs = q["rs"] if q["rs"] is not None else ds0 * s["Es"] / (1 - s["Es"])
rm = _dm0 * s["Ed"] / (1 - s["Ed"]) if q["rm"] == "rest" else q["rm"]
qd = {**DEM_PARAMS, **(demand or {})}
thr0, aK0, cr = p["thr"], p["aK"], 1.0
qn0 = nonrival_quality(s, a0)
rows = []
steps = int(round(T / dt))
for i in range(steps + 1):
if qd["dm_lam"]:
p = {**p, "thr": thr0 * cr, "aK": aK0 * cr}
d, a = g4.derivatives(s, p)
dr, dm, ds = _draws(s, a, p, q)
d["Er"] = rr * (1 - s["Er"]) - dr * s["Er"]
@ -106,10 +123,14 @@ def simulate_eco(params: dict | None = None, init: dict | None = None, eco: dict
d["E"] = 0.0
if i % record_every == 0:
row = {"t": round(i * dt, 6), **s, "P": g4.g3.total_p(s), "G": a["Gagg"],
**{k: a[k] for k in ("H", "A", "Ystar", "Yr", "Yn", "dem", "B", "V", "Vsel")}}
**{k: a[k] for k in ("H", "A", "Ystar", "Yr", "Yn", "dem", "B", "V", "Vsel")}, "Cr": cr,
"thru": p["e1"] * s["Kp"] * a["dem"] * p["thr"] + p["e2"] * s["Ko"]}
row["VFAC"] = g4.g2.vfac(row)
rows.append(row)
if i < steps:
if qd["dm_lam"]:
target = max(0.05, 1 - qd["dm_eps"] * (nonrival_quality(s, a) - qn0))
cr += dt * qd["dm_lam"] * (target - cr)
s = {k: (max(0.0, s[k] + dt * d[k]) if k.startswith("N")
else min(1.0, max(0.0, s[k] + dt * d[k]))) for k in STOCKS_ECO}
s["E"] = eco_E(s)

View file

@ -0,0 +1,44 @@
# GADM-0.5-dev: two-good demand split (dematerialization)
Generated by `simulations/gadm02/demand.py` (ASSEMBLY-WP-0007-T04). Ecological classes with
material replenishment at rest. Decoupled windows: 10-year windows with VFAC rising, throughput
falling and K_Ω not falling. Intensity trend: yearly change of throughput per unit of output,
years 0–10 (observed EU dematerialization ≈ −1.6 %/year).
| Scenario | Anchor | Case | VFAC t100 | rival demand share Cr t100 | intensity trend | decoupled windows | sinks breach | Es t100 |
|---|---|---|---|---|---|---|---|---|
| Baseline (current trends) | B1 | no demand split | 0.377 | 1.00 | +0.0 % | 0.00 | — | 0.32 |
| Baseline (current trends) | B1 | split (λ 0.05, ε 2) | 0.381 | 0.93 | +0.0 % | 0.28 | — | 0.34 |
| Baseline (current trends) | B1 | split, strong (λ 0.1, ε 4) | 0.387 | 0.84 | +0.0 % | 0.44 | — | 0.36 |
| Baseline (current trends) | B2 | no demand split | 0.321 | 1.00 | -0.1 % | 0.00 | — | 0.35 |
| Baseline (current trends) | B2 | split (λ 0.05, ε 2) | 0.326 | 0.73 | -0.1 % | 0.00 | — | 0.37 |
| Baseline (current trends) | B2 | split, strong (λ 0.1, ε 4) | 0.333 | 0.29 | -0.1 % | 0.00 | — | 0.41 |
| Baseline (current trends) | B3 | no demand split | 0.305 | 1.00 | -0.2 % | 0.04 | — | 0.29 |
| Baseline (current trends) | B3 | split (λ 0.05, ε 2) | 0.311 | 0.56 | -0.2 % | 0.09 | — | 0.31 |
| Baseline (current trends) | B3 | split, strong (λ 0.1, ε 4) | 0.319 | 0.05 | -0.3 % | 0.08 | — | 0.34 |
| Baseline (current trends) | B4 | no demand split | 0.278 | 1.00 | -0.3 % | 0.34 | — | 0.21 |
| Baseline (current trends) | B4 | split (λ 0.05, ε 2) | 0.285 | 0.45 | -0.3 % | 0.37 | — | 0.23 |
| Baseline (current trends) | B4 | split, strong (λ 0.1, ε 4) | 0.290 | 0.05 | -0.3 % | 0.17 | — | 0.24 |
| Generative regime | B1 | no demand split | 0.607 | 1.00 | +0.1 % | 0.00 | t 83 | 0.19 |
| Generative regime | B1 | split (λ 0.05, ε 2) | 0.613 | 0.89 | +0.0 % | 0.00 | — | 0.21 |
| Generative regime | B1 | split, strong (λ 0.1, ε 4) | 0.622 | 0.74 | +0.0 % | 0.00 | — | 0.23 |
| Generative regime | B2 | no demand split | 0.583 | 1.00 | -0.1 % | 0.00 | t 49 | 0.17 |
| Generative regime | B2 | split (λ 0.05, ε 2) | 0.598 | 0.70 | -0.1 % | 0.45 | t 98 | 0.20 |
| Generative regime | B2 | split, strong (λ 0.1, ε 4) | 0.640 | 0.05 | -0.1 % | 0.89 | — | 0.30 |
| Generative regime | B3 | no demand split | 0.564 | 1.00 | -0.3 % | 0.00 | t 37 | 0.15 |
| Generative regime | B3 | split (λ 0.05, ε 2) | 0.585 | 0.53 | -0.3 % | 0.71 | t 61 | 0.19 |
| Generative regime | B3 | split, strong (λ 0.1, ε 4) | 0.614 | 0.05 | -0.4 % | 0.75 | — | 0.25 |
| Generative regime | B4 | no demand split | 0.509 | 1.00 | -0.4 % | 0.00 | t 29 | 0.14 |
| Generative regime | B4 | split (λ 0.05, ε 2) | 0.533 | 0.31 | -0.4 % | 0.22 | t 40 | 0.19 |
| Generative regime | B4 | split, strong (λ 0.1, ε 4) | 0.546 | 0.05 | -0.5 % | 0.34 | — | 0.21 |
## Readings and robustness class
| Reading | B1 | B2 | B3 | B4 | class |
|---|---|---|---|---|---|
| decoupled windows, split − none: Baseline (current trends) | +0.280 | +0.000 | +0.050 | +0.030 | QUALITATIVE BREAK |
| ΔVFAC split − none: Baseline (current trends) | +0.004 | +0.005 | +0.006 | +0.006 | quantitative shift |
| ΔEs t100 split − none: Baseline (current trends) | +0.014 | +0.026 | +0.025 | +0.017 | quantitative shift |
| decoupled windows, split − none: Generative regime | +0.000 | +0.450 | +0.710 | +0.220 | QUALITATIVE BREAK |
| ΔVFAC split − none: Generative regime | +0.006 | +0.015 | +0.021 | +0.024 | quantitative shift |
| ΔEs t100 split − none: Generative regime | +0.015 | +0.032 | +0.041 | +0.045 | quantitative shift |

View file

@ -4,7 +4,7 @@ type: workplan
title: "GADM: rival/non-rival goods, ecological classes, selection mechanisms"
domain: communication
repo: assembly-economics
status: active
status: finished
flavor: implementation
depends_on: [ASSEMBLY-WP-0006, ASSEMBLY-WP-0009]
owner: claude-code
@ -84,11 +84,17 @@ and governance levers. Test capture of selection (scoping note § 4).
```task
id: ASSEMBLY-WP-0007-T04
status: todo
status: done
priority: low
state_hub_task_id: "c3dbbe24-4378-55cf-91c1-9e2788646728"
```
**Done 2026-10-13:** two-good demand split (`gadm05`, `demand.py`,
`models/GADM-0.5.md` § 4). The generative regime decouples in 45–71 % of
decades at B2–B3, and its sinks breach moves 15–50 years later (strong case:
none). BR-010 resolved. The readings are conservative against observed
dematerialization, so calibration goes to WP-0018.
Only if T01–T03 raise a question that needs sector composition (scoping
note § 3).
@ -106,3 +112,12 @@ implement the full four-sector model. Tests:
Ground the elasticity in dematerialization evidence, for example the material
footprint per unit of GDP over time (Eurostat env_ac_rme, UNEP IRP).
## Close-out 2026-10-13
T01–T04 are done: GADM-0.5-dev (`gadm05.py`, `models/GADM-0.5.md`). All three
grounding tests in `ParameterGrounding.md` § 3 passed. BR-010 was raised and
resolved structurally. The residuals are handed off to ASSEMBLY-WP-0018:
calibrating dematerialization and the efficiency trend, grounding the
ecological classes, the non-rival parameters and the selection weights, and
deciding whether GADM-0.5 becomes the reference model.

View file

@ -0,0 +1,88 @@
---
id: ASSEMBLY-WP-0018
type: workplan
title: "GADM-0.5 grounding: dematerialization, ecological classes, non-rival output"
domain: communication
repo: assembly-economics
status: proposed
flavor: residual
depends_on: [ASSEMBLY-WP-0007]
owner: claude-code
topic_slug: coulomb-social
created: "2026-10-13"
updated: "2026-10-13"
---
# GADM-0.5 grounding
Residuals of ASSEMBLY-WP-0007 (`models/GADM-0.5.md`). The structural
extensions work and pass their grounding tests, but most of their parameters
are priors. This workplan grounds them in data, and then decides whether
GADM-0.5 replaces GADM-0.4 as the reference model.
## Dematerialization: demand split and efficiency trend
```task
id: ASSEMBLY-WP-0018-T01
status: todo
priority: high
```
Modeled throughput intensity falls 0.1–0.5 % per year; observed EU
dematerialization is about 1.6 % per year (resource productivity, Eurostat
env_ac_rp / env_ac_mfa, 2000–2022; UNEP IRP for US and AR). Add an autonomous
efficiency trend for `thr`, and fit it with `dm_eps` and `dm_lam` to the
observed intensity series per jurisdiction. Re-run `demand.py`. Do the
decoupling and sinks-breach readings survive?
## Ecological classes: starting levels, loads, replenishment
```task
id: ASSEMBLY-WP-0018-T02
status: todo
priority: high
```
Ground the class starting levels (per-boundary control variables, Planetary
Health Check), the load shares by class (energy, material and emission
intensities of physical capital vs. compute; IEA for data centers), and
material replenishment (reserve-to-production ratios over time, USGS). Which
class binds next depends on the replenishment.
## Non-rival output parameters
```task
id: ASSEMBLY-WP-0018-T03
status: todo
priority: medium
```
Ground φ_r (rival share of organism output; task-level data from the
Anthropic Economic Index, L4) and xn (commons feed; open-licensing shares of
AI-generated output, for example code on public repositories).
## Selection weights: speed and links
```task
id: ASSEMBLY-WP-0018-T04
status: todo
priority: low
```
Ground the weight adjustment speed (0.05 per year) and the capture
strengths. Test the candidate link `O = Q (1 − Pd)` (organism selection
quality falls with discovery concentration). Only that would make capture of
selection material for VFAC.
## GADM-0.5 as reference model
```task
id: ASSEMBLY-WP-0018-T05
status: todo
priority: medium
```
After T01–T03, decide whether GADM-0.5 (classes, demand split, non-rival
output) becomes the reference model for the band probe, the calibration
(WP-0013/0015) and the cross-border world (WP-0011/0016). Re-run the key
readings and record what changes in the break register.