| … | … | @@ -0,0 +1,132 @@ |
| 1 | # Post-mortem — 2026-07-31 |
| 2 | |
| 3 | **Repo:** `basal-agent` (own repo, `~/git-repos/basal-agent.git`; also a subtree of `hypercore-kb`). |
| 4 | **Org:** **atomspace** — alongside `opencog-atomspace`, `learn`, `matrix`, `sensory`. |
| 5 | **Session:** ~30 experiments in one sitting. Record: `SYNTHESIS.md` Parts C and D. |
| 6 | |
| 7 | --- |
| 8 | |
| 9 | ## What went right |
| 10 | |
| 11 | **1. A law was derived, and then transferred to a different rung.** Law 2 — *a boundary that must be |
| 12 | maintained is a strategy and gets invaded; a structural one cannot be* — came out of the 1→2 boundary |
| 13 | work (`signal.c`, measured invasion from every starting condition). It then **predicted the fix for |
| 14 | 4→5**, a rung it was not derived from: removing the retreat-to-generalist flipped selection's effect |
| 15 | on division of labour from **−4.8% to +7.5%**. Transfer across rungs is the strongest intellectual |
| 16 | result of the day. |
| 17 | |
| 18 | **2. One substrate now expresses all five rungs**, and independently recovers five prior results — |
| 19 | `rung1.c`'s percolation threshold, `polymer.c`'s bootstrap paradox, `ribozyme.c`'s compartment |
| 20 | ordering, `byproduct.c`'s isolation control, and **Eigen's ln(σ)/L to within 0.011**. That last one |
| 21 | matters most: it is an analytic value the substrate was never told about. |
| 22 | |
| 23 | **3. One replicated cross-rung effect.** `chain12.c` — an autocatalytic set preferentially sustains |
| 24 | self-templating species, **1.25× over 484 networks and an 8× density sweep**, permutation control |
| 25 | pinned at chance. It survived the exact check that retracted three other claims the same day. |
| 26 | |
| 27 | **4. Every invalid experiment was caught by a pre-registered guard, not discovered later.** |
| 28 | `partition.c`'s non-partitioning first run, `byproduct.c`'s failed positive control, `fidfloor.c`'s |
| 29 | broken baseline, three `threecarrier` voids. All caught by a "did the test actually run?" check |
| 30 | written before the run. |
| 31 | |
| 32 | **5. Retractions were committed as retractions.** Three retractions, one downgrade, four voids — all |
| 33 | in the record, struck in place in SYNTHESIS, none quietly dropped or rewritten into successes. |
| 34 | |
| 35 | --- |
| 36 | |
| 37 | ## What went wrong |
| 38 | |
| 39 | **One mistake, made repeatedly, in three flavours.** |
| 40 | |
| 41 | ### (a) One knob moving two variables — 4 instances |
| 42 | |
| 43 | | claim | the confound | outcome | |
| 44 | |---|---|---| |
| 45 | | Test A, variance beats size | propagule mode changed variance **and** realized size | **survived** the check | |
| 46 | | Test B T4, variance destroys closure | same | **retracted** | |
| 47 | | `chemoton` C3, reproduces the decree | division threshold changed the comparison **and** realized size | **downgraded** | |
| 48 | | `partition`, partitioning kills gating | cost moved fragmentation **and** everything else | **mechanism corrected** | |
| 49 | |
| 50 | One in four survived. Every failure had the identical shape, and the fix was always the same: hold |
| 51 | the confounded variable fixed, or interpolate onto it. |
| 52 | |
| 53 | ### (b) The wrong statistic for the question — 3 instances |
| 54 | `linkage.c` used an absolute bar on a control in a two-arm experiment. `ladder35.c` located a |
| 55 | threshold by largest *absolute* drop, which on a monotone curve always finds the steep start rather |
| 56 | than the transition. And **template abundance was used three times** as a measure of memory paying — |
| 57 | when reading *consumes* templates, so abundance measures them **not being used**. |
| 58 | |
| 59 | ### (c) A control calibrated to its own arm — 2 instances |
| 60 | `replicase.c`'s `PFLIP` guessed at 0.60 when the real frequency was 3–13%. `threecarrier`'s K1 gave |
| 61 | growth arithmetically **identical** to the arm it was controlling. |
| 62 | |
| 63 | ### (d) Repeating a documented diagnosis — 2 instances |
| 64 | The template-abundance error was diagnosed in `genome.c`, written into `genome.md` in plain language, |
| 65 | and then rebuilt in `replicase.c` and again in the fluctuation run. **A written diagnosis did not |
| 66 | survive context pressure.** |
| 67 | |
| 68 | --- |
| 69 | |
| 70 | ## Lessons |
| 71 | |
| 72 | 1. **Pre-registration catches encoded answers. It does not catch confounded comparisons.** The |
| 73 | arc's standing rule ("never encode the answer in the update rule") was followed throughout and |
| 74 | caught nothing here — a model can be perfectly honest about what it supplies and still credit its |
| 75 | effect to the wrong variable. Matched-condition checking is a **separate discipline**. |
| 76 | 2. **Ask at design time: what else changes when I move this knob?** Every one of the four confounds |
| 77 | was visible in the design, not just in hindsight. |
| 78 | 3. **Ask: is this statistic the right one for this question?** Absolute bars, absolute drops and raw |
| 79 | counts were wrong three times. A two-arm experiment wants a *separation*; a threshold wants a |
| 80 | *crossing*; a consumed resource cannot be measured by its *abundance*. |
| 81 | 4. **A "did the test run?" guard is worth more than the test.** It caught four invalid experiments, |
| 82 | including one that had printed a confident false headline. |
| 83 | 5. **Error rate is the stopping signal, not effort.** The last five experiments each had a fault the |
| 84 | previous had not. Three voids in a row, each fix exposing a deeper flaw, means the model of the |
| 85 | problem is behind the model of the code. |
| 86 | |
| 87 | --- |
| 88 | |
| 89 | ## Where the ladder actually stands |
| 90 | |
| 91 | | transition | status | |
| 92 | |---|---| |
| 93 | | **1→2** | **open** — four measured constraints, not a wall | |
| 94 | | 2→3 | jumped (`linkage.c`), separate model | |
| 95 | | 3→4 | jumped (`rung34.c`), separate model | |
| 96 | | 4→5 | **partial** — 38.8%, irreversibility *supplied* | |
| 97 | | chaining | one weak cross-rung effect (`chain12`); no rung *produces* the next | |
| 98 | |
| 99 | **The four constraints on 1→2**, all measured here: fidelity must get cheap before a replicase exists |
| 100 | (`polymer.c`, and `bridges.c` closed the environmental-floor escape); information must be expensive |
| 101 | to rediscover (`genome.c`); the replicase must privatise below compartment scale (`replicase.c`, |
| 102 | `replisome.c`); and compartments must stop costing more sequence maintenance than they buy |
| 103 | (`fidfloor.c`). A fifth emerged tonight: **memory cannot pay under instantaneous selection.** |
| 104 | |
| 105 | --- |
| 106 | |
| 107 | ## Next steps, ranked |
| 108 | |
| 109 | 1. **Re-run the fluctuating-environment test scored on function, not template count.** The design is |
| 110 | right and the effect is probably real — under fluctuation, reading raised the working fraction |
| 111 | 0.294 → 0.478 and function 1.27 → 1.47. Only the metric needs fixing. Cheapest, highest value. |
| 112 | 2. **`chain12` robustness** — longer runs, other network sizes, `NRXN`/`NSPEC` variation. It is the |
| 113 | one replicated cross-rung result and everything else would build on it. |
| 114 | 3. **`threecarrier` with correct metrics** — all four attempts' faults are in the file header. |
| 115 | 4. **Does an irreversibility ratchet *evolve*?** 4→5 currently *supplies* it. Gene loss is the |
| 116 | biological analogue and plausibly the same structural, non-discretionary commitment `linkage.c` |
| 117 | found at 2→3. |
| 118 | |
| 119 | ## Research ideas |
| 120 | |
| 121 | - **Deferred vs instantaneous selection as a general obstacle to memory.** Tonight's fifth |
| 122 | constraint may not be about origins at all — anything scored on current state cannot afford |
| 123 | storage. That is a claim about learning systems as much as chemical ones, and it touches the |
| 124 | agent line (`belief_field_agent.c`) directly. |
| 125 | - **"Small compartments correct but forget"** appeared *four* independent times. Is that a general |
| 126 | theorem about units of selection rather than a feature of our models? |
| 127 | - **Byproduct walls beat supplied ones** (11.39 vs 10.78 in `byproduct.c`) — self-sealing where |
| 128 | activity is high while low-activity regions re-mix recycles failed regions better than a permanent |
| 129 | box. Undertested and interesting. |
| 130 | - **Assortment variance, not size**, is the operative variable (Test A, the one that survived). Our |
| 131 | compartment-size threshold and the single-cell bottleneck of every obligate multicellular lineage |
| 132 | may be the same mechanism at different scales. |