OverviewFilesCommitsIssuesDocsReleasesPeers

basal-agent commits / 340e9e4

basal-agent: partition.c at matched partitioning — substance survives, attribution does not
The cold read flagged partition.c's "partitioning and gating are anti-correlated" as causally unverified: maintenance cost moved both variables in the original sweep. Ran the check — cost held FIXED, graph fragmented EXOGENOUSLY by severing a random fraction of edges, blind to cost, willingness and quality. cost 0.00: sever | gating | shuffled | largest comp | gain 0.00 | 5.79 | 5.58 | 99.7% | +0.21 0.20 | 5.78 | 5.74 | 99.5% | +0.05 0.40 | 5.77 | 5.75 | 95.3% | +0.02 0.60 | 5.77 | 5.76 | 51.3% | +0.02 0.80 | 5.78 | 5.76 | 0.4% | +0.03 same shape at cost 0.10: gain +0.14 -> +0.00 NOT A COST ARTIFACT — unlike Test B's T4, severing edges at constant cost really does destroy gating. The substance survives. BUT THE ATTRIBUTION IS WRONG, and it is the same error a fourth time. 76% of the gain is gone by 20% severing while the largest component is still 99.5% — the effect is complete long before the graph partitions at all. What kills gating is having fewer live edges to gate; component structure is downstream and largely irrelevant. A real effect was attributed to the interesting variable (partitioning) when a duller one (edge availability) explains it. The conclusion that mattered is unchanged: you cannot exclude parasites by cutting connections, because cutting connections is what gating runs on. But it is about CONNECTIVITY, not TOPOLOGY. Heading, summary table and proven/open all restated. Running tally of claims checked against matched conditions: Test A survived, Test B's T4 retracted, chemoton's C3 downgraded, partition.c survives with a corrected mechanism. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
340e9e48d5e7229642169c073952fdb918f4ffec
by plankatron <fleeky@gmail.com> · 2026-08-01T00:45:01.000Z

Changed files (2) +71 -66

SYNTHESIS.md +31 -10
……@@ -502,7 +502,7 @@ compartments, which is their subject. Only the first three are cross-comparable
502502|---|---|---|
503503| reciprocal **wiring** | `coupling.c` | real and selected-for, **insufficient** — φ falls |
504504| inherited wiring (**persistence**) | `coupling.c` | **falsified by its own control** |
505| **topology** (breakable graph) | `partition.c` | partitioning and gating **anti-correlated** |
505| **topology** (breakable graph) | `partition.c` | cutting connections kills gating — **edge loss, not partitioning** |
506506| **verification** (costly signal) | `signal.c` | **first rise above neutral** — but invadable |
507507| **concatenation** (linkage) | `linkage.c` | **EMERGES** — a crossing on rung 2→3 |
508508| **precipitation** (byproduct wall) | `byproduct.c` | free and non-discretionary, and **the wrong half** |
……@@ -547,13 +547,31 @@ partitioning real, and then:
547547| 0.30 | 5.78 | 5.74 | **50.1%** | +0.05 |
548548| 0.40 | 5.76 | 5.76 | **0.3%** | **+0.00** |
549549
550**Partitioning and gating are anti-correlated.** Exactly as the graph fragments, gating's advantage
551collapses to zero. ⚠️ **Unverified causally, and flagged by a later cold read as the likeliest
552surviving claim to break.** Maintenance cost moves *both* variables in this sweep — partitioning was
553never varied independently of it. The gain-vs-control comparison does cancel cost effects (the
554control carries the same cost), which puts this on better footing than Test B's T4; but T4 and
555chemoton's C3 were both exactly this shape and both fell when checked at matched conditions. This
556one has not had that check. Breaking the network to exclude parasites also cuts catalysts off from each
550**Breaking connections destroys gating — but it is edge loss, not partitioning.** The cold read
551flagged that maintenance cost moved both variables in the sweep above, so the check was run: cost
552held **fixed**, and the graph fragmented **exogenously** by severing a random fraction of edges,
553blind to cost, willingness and quality.
554
555| severing | k=1 gating | shuffled | largest comp | **gain** |
556|---|---|---|---|---|
557| 0.00 | 5.79 | 5.58 | 99.7% | **+0.21** |
558| 0.20 | 5.78 | 5.74 | **99.5%** | **+0.05** |
559| 0.40 | 5.77 | 5.75 | 95.3% | +0.02 |
560| 0.60 | 5.77 | 5.76 | 51.3% | +0.02 |
561| 0.80 | 5.78 | 5.76 | 0.4% | +0.03 |
562
563*(cost 0.00; the same shape at cost 0.10, gain +0.14 → +0.00.)*
564
565**The substance survives, the attribution does not.** Severing edges at constant cost genuinely
566destroys gating, so this is not a cost artifact the way Test B's T4 was. But **76% of the gain is
567gone by 20% severing, while the graph is still 99.5% one component** — the effect is complete long
568before anything partitions. What kills gating is simply **having fewer live edges to gate**;
569component structure is downstream and largely irrelevant.
570
571So the original heading was the same error a fourth time: a real effect attributed to the
572interesting variable (partitioning) when a duller one (edge availability) explains it. The
573conclusion that mattered is unchanged — you cannot exclude parasites by cutting connections, because
574cutting connections is what gating runs on — but it is about connectivity, not topology. Breaking the network to exclude parasites also cuts catalysts off from each
557575other; selective edge-deletion cannot keep the in-group connected while severing the out-group
558576without already knowing which is which — the thing that was supposed to emerge. And k never evolves
559577to 1, settling at ≈0.32–0.36 at every cost: selection feels the trade-off directly.
……@@ -866,8 +884,11 @@ transfer to 1→2 on its own — only Law 2 does.
866884 coordination trap), while `linkage.c` emerges un-forced against a strict length penalty with a
867885 pool-draw control at length 1. ✓
868886- **Rung 2→3 (independent replicators → linkage) emerges.** ✓ — the easy rung, but genuinely tested.
869- **A boundary made of edges does not substitute for one made of walls** (`partition.c`) —
870 partitioning and gating are anti-correlated, so exclusion and mutual access cannot be had at once. ✓
887- **A boundary made of edges does not substitute for one made of walls** (`partition.c`) — exclusion
888 and mutual access cannot be had at once. ✓ Verified causally at **fixed cost** with exogenous edge
889 severing (gain +0.21 → +0.03), so not a cost artifact — **but the mechanism is edge loss, not
890 partitioning**: 76% of the gain is gone by 20% severing while the graph is still 99.5% one
891 component. Claim restated as connectivity, not topology.
871892- **Isolation is not compartmentalization** (`byproduct.c`) — supplied total isolation achieves
872893 nothing (5.65) without differential reproduction of the compartments (10.78). ✓
873894- **Compartment-level selection need not be supplied** (`chemoton.c`) — coupling growth to the
partition.c +40 -56
……@@ -88,6 +88,7 @@ static double recv[TOTAL], fid[TOTAL], cumw[TOTAL];
8888static int phic[TOTAL];
8989
9090static int ea[NEMAX], eb[NEMAX]; /* undirected edges */
91static unsigned char sev[NEMAX]; /* 1 = severed this generation (exogenous fragmentation) */
9192static double ua[NEMAX], ub[NEMAX]; /* each endpoint's own willingness */
9293static double qa[NEMAX], qb[NEMAX]; /* observed yield per unit channel */
9394static int stub[NSTUB];
……@@ -116,7 +117,7 @@ static int build_graph(void)
116117}
117118
118119/* returns final mean phi; reports k, fidelity, largest-component fraction, phi in/out of it */
119static double run(int evolve_k,double kfix,int shuffled,double cost,
120static double run(int evolve_k,double kfix,int shuffled,double cost,double frag,
120121 double *k_end,double *f_end,double *phi_start,
121122 double *lcc_frac,double *phi_in,double *phi_out)
122123{
……@@ -130,11 +131,15 @@ static double run(int evolve_k,double kfix,int shuffled,double cost,
130131 for(int g=0;g<GEN;g++){
131132 for(int i=0;i<TOTAL;i++) phic[i]=phi(seq[i]);
132133 ne=build_graph();
134 /* EXOGENOUS FRAGMENTATION: sever a random fraction of edges, independent of cost and of
135 anyone's willingness. This is the knob that varies partitioning WITHOUT varying cost. */
136 for(int e=0;e<ne;e++) sev[e] = (urand()<frag)?1:0;
133137 for(int i=0;i<TOTAL;i++) recv[i]=0.0;
134138
135139 double costg=cost;
136140 for(int r=0;r<TROUND;r++){
137141 for(int e=0;e<ne;e++){
142 if(sev[e]){ qa[e]=0; qb[e]=0; continue; }
138143 int a=ea[e], b=eb[e];
139144 double gc=ua[e]*ub[e]; /* BILATERAL: both must open */
140145 double a2b=((double)phic[a]/PHIMAX)*gc;
……@@ -198,7 +203,7 @@ static double run(int evolve_k,double kfix,int shuffled,double cost,
198203
199204 /* Q5: did the effective graph actually partition? */
200205 for(int i=0;i<TOTAL;i++){ uf[i]=i; csz[i]=0; }
201 for(int e=0;e<ne;e++) if(ua[e]*ub[e] > EPS) uni(ea[e],eb[e]);
206 for(int e=0;e<ne;e++) if(!sev[e] && ua[e]*ub[e] > EPS) uni(ea[e],eb[e]);
202207 for(int i=0;i<TOTAL;i++) csz[find(i)]++;
203208 int best=0,bi=0;
204209 for(int i=0;i<TOTAL;i++) if(csz[i]>best){ best=csz[i]; bi=i; }
……@@ -219,69 +224,48 @@ static double run(int evolve_k,double kfix,int shuffled,double cost,
219224
220225int main(void)
221226{
222 unsigned long long seeds[10];
227 unsigned long long seeds[8];
223228 seeds[0]=0x9e3779b97f4a7c15ULL; seeds[1]=0xd1b54a32d192ed03ULL; seeds[2]=0x2545f4914f6cdd1dULL;
224 for(int i=3;i<10;i++) seeds[i]=0x9e3779b97f4a7c15ULL ^ (0x100000001b3ULL*(unsigned long long)(i+1));
225 int NS=10;
229 for(int i=3;i<8;i++) seeds[i]=0x9e3779b97f4a7c15ULL ^ (0x100000001b3ULL*(unsigned long long)(i+1));
230 int NS=8;
226231
227 printf("=== PARTITION: bilateral junctions that can CLOSE — can the network break apart\n");
228 printf(" and privatize catalysis with no container? ===\n");
229 printf(" Junction conductance g = u_a * u_b (BOTH ends must open; either can close).\n");
230 printf(" Willingness is NOT renormalised, so edges can vanish and the graph can fragment.\n");
231 printf(" A unit updates toward yield-per-unit-channel-opened; no type information anywhere.\n");
232 printf(" No compartments, no space, no assortment, no group selection. %d units, %d gens.\n",TOTAL,GEN);
233 printf(" REFERENCE: ribozyme well-mixed 5.99->5.50; coupling FRESH k=0 4.69, k=1 5.36.\n\n");
232 printf("=== PARTITION CHECK AT MATCHED PARTITIONING ===\n");
233 printf(" The original claim -- \"partitioning and gating are anti-correlated\" -- came from a sweep\n");
234 printf(" where MAINTENANCE COST moved both variables at once. Partitioning was never varied\n");
235 printf(" independently. Here cost is held FIXED and the graph is fragmented EXOGENOUSLY by\n");
236 printf(" severing a random fraction of edges, which is blind to cost, willingness and quality.\n");
237 printf(" If gating's advantage over the shuffled control falls as fragmentation rises at CONSTANT\n");
238 printf(" cost, the causal claim holds. If it stays flat, the original correlation was cost.\n\n");
234239
235 printf(" arm | mean phi (start->end of %2d) | k end | largest comp | phi in / out\n",PHIMAX);
236 printf(" -------------------------+-----------------------------+-------+--------------+--------------\n");
237
238 double costs[]={0.0,0.10,0.20,0.30,0.40,0.50};
239 int NC=(int)(sizeof(costs)/sizeof(costs[0]));
240 struct { const char*name; int ev; double kf; int sh; } arms[]={
241 {"k=0 public good ", 0, 0.0, 0},
242 {"k=1 gating ", 0, 1.0, 0},
243 {"k=1 SHUFFLED ", 0, 1.0, 1},
244 {"k free (0.10) ", 1, 0.0, 0},
245 };
246 int NA=4;
247 double bestrise=-1e9; double bestcost=-1; int partitioned_anywhere=0;
240 double costs[]={0.00,0.10};
241 double frags[]={0.00,0.20,0.40,0.60,0.80};
242 int NC=2, NF=5;
248243
249244 for(int c=0;c<NC;c++){
250 printf(" --- maintenance cost = %.2f ---\n",costs[c]);
251 double e_k0=0,e_k1=0,e_sh=0;
252 for(int a=0;a<NA;a++){
253 double S=0,E=0,K=0,F=0,Lc=0,Pi=0,Po=0; double ev[16];
245 printf(" --- maintenance cost held at %.2f ---\n",costs[c]);
246 printf(" sever frac | k=1 gating | shuffled | largest comp | GAIN vs shuffled\n");
247 printf(" -----------+------------+----------+--------------+-----------------\n");
248 double g0=0,gl=0; int nrow=0;
249 for(int f=0;f<NF;f++){
250 double eg=0,es=0,lc=0;
254251 for(int s=0;s<NS;s++){
255 double ke,fe,ps,lf,pi,po; RNG=seeds[s];
256 double e=run(arms[a].ev,arms[a].kf,arms[a].sh,costs[c],&ke,&fe,&ps,&lf,&pi,&po);
257 ev[s]=e; E+=e; S+=ps; K+=ke; F+=fe; Lc+=lf; Pi+=pi; Po+= isnan(po)?pi:po;
252 double ke,fe,ps,lf,pi,po;
253 RNG=seeds[s]; eg+=run(0,1.0,0,costs[c],frags[f],&ke,&fe,&ps,&lf,&pi,&po); lc+=lf;
254 RNG=seeds[s]; es+=run(0,1.0,1,costs[c],frags[f],&ke,&fe,&ps,&lf,&pi,&po);
258255 }
259 S/=NS;E/=NS;K/=NS;F/=NS;Lc/=NS;Pi/=NS;Po/=NS;
260 double sd=0; for(int s=0;s<NS;s++) sd+=(ev[s]-E)*(ev[s]-E); sd=sqrt(sd/(NS-1));
261 printf(" %s | %.2f -> %5.2f +- %.2f | k %.3f | largest comp %5.1f%% | phi in/out %.2f/%.2f\n",
262 arms[a].name,S,E,sd,K,100.0*Lc,Pi,Po);
263 if(a==0) e_k0=E; if(a==1){ e_k1=E; if(Lc<0.90) partitioned_anywhere=1;
264 if(E-S>bestrise){ bestrise=E-S; bestcost=costs[c]; } }
265 if(a==2) e_sh=E;
256 eg/=NS;es/=NS;lc/=NS;
257 double gain=eg-es;
258 printf(" %.2f | %5.2f | %5.2f | %5.1f%% | %+.2f\n",
259 frags[f],eg,es,100.0*lc,gain);
260 if(f==0) g0=gain;
261 gl=gain; nrow++;
266262 }
267 printf(" gating gain over public good %+.2f | over shuffled %+.2f\n\n", e_k1-e_k0, e_k1-e_sh);
263 printf(" gain at 0%% severing %+.2f -> at 80%% severing %+.2f (change %+.2f)\n\n", g0, gl, gl-g0);
268264 }
269265
270 printf(" Q5 did the graph EVER partition (largest comp <90%%)? %s\n", partitioned_anywhere?"YES":"NO");
271 printf(" best phi change from start, k=1 arm: %+.2f at cost %.2f\n\n", bestrise, bestcost);
272 if(!partitioned_anywhere)
273 printf(" => THE TEST STILL DID NOT RUN. Across the whole cost sweep the effective graph stayed\n"
274 " one giant component. Partitioning was never achieved, so nothing here speaks to\n"
275 " whether a partitioned network could privatize catalysis. Report as an invalid\n"
276 " experiment, NOT as a null.\n");
277 else if(bestrise>0.5)
278 printf(" => phi ROSE above its random start somewhere in the sweep, in a partitioning regime.\n"
279 " Check the shuffled control at that cost before claiming a crossing.\n");
280 else
281 printf(" => HONEST NULL, AND IT IS THE THIRD. The graph does partition somewhere in the sweep,\n"
282 " and catalysis is STILL not privatized: phi never rises above its random start.\n"
283 " Wiring, persistence and now a partitionable bilateral network with closing costs\n"
284 " all fail. That convergence is the result -- nothing privatizes a catalytic public\n"
285 " good without a supplied unit of selection.\n");
266 printf(" READ: if GAIN collapses toward zero as severing rises while cost is constant, the\n");
267 printf(" original causal claim is supported. If GAIN is roughly flat across the severing sweep,\n");
268 printf(" fragmentation per se does NOT destroy gating and the original anti-correlation was\n");
269 printf(" driven by maintenance cost -- the same confound that retracted Test B's T4.\n");
286270 return 0;
287271}