Skip to content

docs(transgenerational): M6.13 campaign close-out — STOP verdict + GC fix + logbook 020 + archive - #169

Merged
chrisjz merged 8 commits into
mainfrom
feat/m613-tei-prior-campaign-exec
May 21, 2026
Merged

docs(transgenerational): M6.13 campaign close-out — STOP verdict + GC fix + logbook 020 + archive#169
chrisjz merged 8 commits into
mainfrom
feat/m613-tei-prior-campaign-exec

Conversation

@chrisjz

@chrisjz chrisjz commented May 21, 2026

Copy link
Copy Markdown
Member

Summary

Closes the M6.13 (TEI-as-prior-on-Lamarckian) milestone with a decisive STOP verdict. Combined with the M6.9+ STOP on pure-TEI K=0, the M6 transgenerational-memory thread closes coherently — TEI doesn't transfer in either form on this LSTMPPO substrate. Logbook 020 captures the verdict + future-directions for a possible Phase 6 quantum re-evaluation arc.

  • Campaign verdict: 4 pilots at K ∈ {1000, 500, 200, 200-F0-matched}. Cross-arm tei_weights − weights_only F1-F3 delta is +0.00pp at K=1000 (substrate inert) and −9.33pp at K=200 (substrate INTERFERES) under fair-F0 comparison. The K-sweep apparent dose-response (+0.00 → +4.00 → +5.33pp) was the F0 confound — disambiguation inverted the sign. Mechanism diagnosis: action-distribution-bias substrate is the wrong abstraction for the wet-lab single-circuit excitability shift.
  • Production fix: loop.py:_gc_inheritance_dir was deleting F0 substrate .tei.pt files because Path.glob("genome-*.pt") matched substrate files too, and Path.stem strips only one suffix so the extracted gid ended in .tei. Pre-existing bug from M3's initial Lamarckian GC implementation; only surfaced under composed mode. Fix + regression test in b78cdbb5. Preemptive sibling guard added to coevolution.py:_gc_inheritance_dir against future composed-coevolution arcs.
  • Documentation: logbook 020 (236 lines) covers framework + GC fix + 4-pilot retention tables + F0-confound disambiguation + mechanism diagnosis + adversarial-critique findings + future-directions (Ideas B/C/D). 21 small artefacts (84KB total) stashed under artifacts/logbooks/020-tei-prior-on-lamarckian/. phase5-tracking M6.13 row ticked with STOP verdict; docs/roadmap.md gains a new M6.13 row.
  • OpenSpec archived: add-tei-prior-on-m3 moved to archive/2026-05-21-add-tei-prior-on-m3/ via git mv (history preserved). Spec sync intentionally skipped per the M6.9+ STOP-archive precedent — the delta specs describe an architectural contract M6.13 falsified; promoting them would commit the repo to a known-null choice.
  • M6.14 frequency-prior ablation NOT triggered per pre-registered criterion.

Commits

Commit Purpose
e7223c15 chore: housekeeping (drop self-blocking tasks 6.10/6.11; M6.12 tick + forward-pointer)
21919c8b chore(configs): land K_test=1000 from pass-1 calibration smoke
b78cdbb5 fix(loop): preserve F0 substrate .tei.pt through Lamarckian GC under composed mode
04ede558 docs: logbook 020 + artefact stash + tracker close-out — STOP verdict
2c4744d6 docs(openspec): reconcile M6.13 design with shipped main-loop GC fix
99600f55 chore(openspec): archive add-tei-prior-on-m3 (no main-spec sync per STOP precedent)
31378d51 fix: three pre-push review findings (sibling GC + label leak + stale archive refs)

Test plan

  • 469 evolution tests pass (no regressions from production fix or coevolution preemptive guard)
  • 71 M6.13-touched tests pass under default not smoke and not nightly marker selection
  • Pre-commit clean on all touched files: ruff + ruff-format + pyright + mdformat + markdownlint-cli2 + check-yaml + end-of-file-fixer
  • Launcher parity check passes against K=1000 production YAMLs (fsw=1.0, fm=survival_rate, env + K alignment all enforced)
  • Numerical cross-check: retention tables in logbook 020 ↔ aggregator CSVs ↔ roadmap row ↔ tracker tick reconcile to 4dp
  • OpenSpec validate strict: archived change directory still validates ✓; phase5-tracking validates ✓
  • No home-dir path leaks in committed artefacts
  • No stale openspec/changes/add-tei-prior-on-m3/ (non-archive) refs remain in production code or tests
  • Bridge script /tmp/build_pilot_per_gen_from_eval_diag.py intentionally NOT committed (logbook 020 explains)

Next milestone

Per discussion: skip both the proposed M6.14 substrate-extraction diagnostic AND the M7 NEAT optional milestone. Go directly to M8 (Phase 5 synthesis logbook) as the next milestone — synthesise M2/M3 GO + M4/M5/M6 STOPs with substrate-grounded diagnoses, cross-cite 2024-2026 literature (Resendez Prado, Mougi, Chen, Kaletsky, mammalian-TEI), and recommend Phase 6 priorities. M7 NEAT remains OPTIONAL in the tracker (architecture-symmetry hypothesis deferred to Phase 6 quantum re-evaluation by other means).

🤖 Generated with Claude Code

Summary by CodeRabbit

  • Bug Fixes

    • Fixed garbage collection in composed inheritance mode to avoid deleting substrate checkpoint files during cleanup.
  • Documentation

    • Added a comprehensive Phase‑5 logbook and multiple pilot/summary reports documenting calibration smokes, per‑arm verdicts, and a cross‑arm STOP outcome.
    • Updated roadmap, task tracker, and config inline docs clarifying calibration‑locked values and next steps; added a logbook reading guide.
    • Extended design notes to require preserving substrate checkpoints during GC.
  • Tests

    • Added a regression test ensuring GC preserves substrate checkpoint files.

Review Change Stack

chrisjz and others added 7 commits May 20, 2026 21:54
- add-tei-prior-on-m3/tasks.md: drop the previously-planned § 6.10
  (archive) and § 6.11 (push) tasks. Both would self-block the
  archive precondition (`openspec-archive-change` requires every
  task ticked) and the push step is user-sign-off gated per
  `feedback_ask_before_push_and_pr.md`. Inlined a short note clarifying
  that both operator-side steps happen after § 6.9 is ticked.
- phase5-tracking/tasks.md M6.12: tick with a verdict-bearing
  description. M6.12 (`transgenerational+weights`) was NOT TRIGGERED
  per the PR-A null-floor pre-registered criterion and is now
  superseded by M6.13 (the wet-lab-aligned reframe of the same
  composed-inheritance mechanism). Matches the M4.6.5 / M5.9 / M6.8
  precedent where ticks mean "decision recorded and propagated", not
  "experiment ran". Unblocks the eventual M8.7 phase5-tracking
  archive without leaving a stale [ ] M6.12 row behind.
- Forward-pointer note on M6.12 → M6.13 added so a reader of the M6
  thread doesn't read the NOT TRIGGERED row as the question being
  dropped — it was reframed, not abandoned.

`openspec validate add-tei-prior-on-m3 --strict` clean. `openspec
validate phase5-tracking --strict` clean. Docs-only — SKIP=tests on
pre-commit since no Python changed.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Calibration smoke pass 1 (2026-05-20T11:56:58Z, single seed=42 ×
pop 6 × 2 gens × weights_only arm only, ~10m 28s wall) measured:

- F0 mean survival_rate = 0.407 (pop 6: 0.04 / 0.44 / 0.72 / 0.24 / 0.52 / 0.48)
- F1 mean survival_rate = 0.600 (pop 6: 0.44 / 0.48 / 0.64 / 0.80 / 0.56 / 0.68)
- Lamarckian lift F0 → F1 = +19.3pp in one generation at K=1000

Tripwire verdict (the two the smoke can measure on weights_only):
- T1' F0 envelope: 0.30 ≤ 0.407 ≤ 0.70 → PASS
- T3' high-end:    F1=0.600 > 0.95×F0=0.387 → PASS (no saturation)
- T3' low-end:     F1=0.600 ≥ 0.80×F0=0.326 → PASS (above floor)

T3' beats-control leg (F1 ≥ 1.2×control_F1) is structurally deferred
to pilot time per design.md § D5 — the smoke runs weights_only only.

YAML changes:
- tei_weights.yml: lawn_schedule F1+ entry annotation 'K_test
  placeholder' → 'K_test (calibration-locked 2026-05-20)';
  header note + transgenerational block comment cite the smoke
  session ID and the observed F0/F1 numbers.
- weights_only.yml + control.yml: header + inline learn_episodes_per_eval
  comment note that K=1000 was calibration-locked on 2026-05-20.

The numeric K=1000 is unchanged across all three arms — this is a
comment-only commit that converts "placeholder" to "locked-in" so
future readers see why K=1000 is the campaign value. Launcher parity
check still passes (tei_weights F1+ K=[1000] == weights_only
learn=1000 == control learn=1000).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…composed mode

The M6.13 pilot (1 seed × pop 8 × 4 gens × tei_weights arm) crashed
at F2 dispatch on 2026-05-20 with FileNotFoundError on the F0
substrate path. F0 + F1 had completed cleanly; the gen-000/ directory
was empty when F2 children tried to load F0's substrate for the
decay-cascade application.

Root cause at loop.py:_gc_inheritance_dir (pre-existing on main from
M3's initial Lamarckian GC implementation):

    for path in gen_dir.glob("genome-*.pt"):
        gid = path.stem.removeprefix("genome-")
        if gid not in keep:
            path.unlink(missing_ok=True)

Path.glob("genome-*.pt") matches BOTH weight checkpoints (genome-X.pt)
AND substrate files (genome-X.tei.pt). Path.stem strips only ONE
suffix, so for a genome-X.tei.pt file the extracted gid is X.tei
(not X), never matches keep_ids, and the substrate gets deleted.

Why this only surfaced now:
- M3 (lamarckian): only .pt files in the GC'd directory; .tei never
  appears.
- M6.9+ (transgenerational): _inheritance_active() returns False, so
  this main-loop GC doesn't fire. Substrate cleanup is owned by the
  inline GC inside _run_f0_substrate_extraction which knows about
  .tei.pt.
- M6.13 (weights+transgenerational, composed): both file types coexist
  AND the main-loop GC fires. Bug surfaces immediately at end of F0
  on the very first cleanup pass.

The cascade case (F2/F3 children inheriting F0's substrate with
decay_factor^2/decay_factor^3) makes the impact load-bearing: the
substrate must survive every main-loop GC pass for the whole campaign,
not just the F0→F1 transition.

Fix: skip .tei.pt entries in the main-loop GC entirely. Substrate
file lifecycle is owned by the F0 substrate-extraction pipeline (the
inline GC at _run_f0_substrate_extraction is already correctly
skipped under composed mode via _combined_inheritance_active()); the
main-loop GC now matches that contract.

Regression test: test_main_loop_gc_preserves_substrate_tei_pt seeds
a gen-000/ with two .pt files + one .tei.pt, calls
_gc_inheritance_dir(generation=0, keep_ids=['elite']), and asserts
the elite .pt survives, the non-elite .pt is GC'd, and the
substrate .tei.pt survives unconditionally.

Verification:
- 469 evolution tests pass (no regressions on M3 / Baldwin / M6.9+
  pure-TEI / M6.13 composed paths).
- 11 m613-smoke tests pass including the new GC regression.
- ruff + pyright clean.

Pilot will be re-dispatched after this commit lands.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…erdict

M6.13 campaign-execution closes. Four pilots at K ∈ {1000, 500, 200,
200-F0-matched} all rule against the substrate-accelerates-Lamarckian-
retraining hypothesis. Under fair-F0 comparison, cross-arm
`tei_weights − weights_only` F1-F3 delta is +0.00pp at K=1000
(substrate inert) and −9.33pp at K=200 (substrate INTERFERES). The
K-sensitivity sweep apparent dose-response (Δ 0.00→4.00→5.33pp as K
decreased) was the F0 confound — tei_weights F0 held at K=2000 across
the sweep while weights_only/control F0 matched the swept K.
Disambiguation pilot inverted the sign under fair F0.

Logbook 020: docs/experiments/logbooks/020-tei-prior-on-lamarckian.md
(renamed from 020-tei-prior-on-m3.md to match the other logbooks'
no-milestone-label naming convention — 013/018/019 don't carry M3/M6
prefixes either). Documents the four pilots' retention tables, the
methodological audit of the broken post-hoc per-gen-eval script, the
mechanism diagnosis (action-distribution-bias substrate vs sensory-
excitability shift mismatch), the adversarial-critique findings, and
a substantive future-directions section for the three substrate-
redesign ideas (B/C/D) flagged for a possible Phase 6 quantum re-
evaluation arc. M6.14 frequency-prior ablation NOT triggered per
pre-registered criterion.

Artefacts stashed under artifacts/logbooks/020-tei-prior-on-lamarckian/
following the logbook 019 convention — only the aggregator outputs
per pilot (pilot_pivot_decision.md / retention_table.csv /
summary.md / decision_gate.csv / cross_arm_verdict.csv) plus a smoke
summary. 21 files, 84 KB total, no .pt weights or full diagnostics.
No absolute home paths; LFS rules cover the CSVs at no overhead.

phase5-tracking M6.13 row ticked [x] with the STOP verdict +
mechanism diagnosis + M6 thread-close framing. docs/roadmap.md gains
a new M6.13 row between M6.9+ and M7.

add-tei-prior-on-m3/tasks.md execution tasks 6.1-6.9 all ticked off
with verdict-bearing descriptions matching the M4.6.5 / M5.9 / M6.8
"checkbox = decision recorded and propagated" precedent. OpenSpec
change validates clean (`openspec validate add-tei-prior-on-m3
--strict`); phase5-tracking validates clean.

Docs-only commit; pre-commit hooks clean (SKIP=tests since no Python
changed).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
The OpenSpec change drafted § D3 documenting only the inline-GC
suppression at _run_f0_substrate_extraction (loop.py:~863-866). That
covered the gen-0 substrate-extraction tail path, but missed the
SECOND GC site — the main-loop GC at loop.py:~1649 that runs
end-of-each-gen via _gc_inheritance_dir.

Under composed mode, F0's gen-000/ holds both the elite's weights
.pt AND its substrate .tei.pt. The main-loop GC globbed
"genome-*.pt", which matched both files; Path.stem strips only one
suffix so the extracted gid for genome-<elite>.tei.pt was
"genome-<elite>.tei" (with the trailing .tei still attached), which
never matches the elite-id keep-set, and the substrate got deleted.
This was a pre-existing bug from M3's initial GC implementation but
only surfaced under composed mode because M3-only never produces
.tei.pt files and pure-TEI's main-loop GC doesn't fire (because
_inheritance_active() is False under kind=transgenerational).

The bug was caught + fixed during campaign execution at commit
b78cdbb (logbook 020 § audit; tasks.md § 6.4 acknowledgment) with
the test_main_loop_gc_preserves_substrate_tei_pt regression test.
This commit adds the missing § D3.5 paragraph to design.md so the
spec accurately reflects the as-shipped contract.

`openspec validate add-tei-prior-on-m3 --strict` clean. Docs-only
commit; SKIP=tests since no Python changed. Other drift-audit
findings (verdict claims, test counts, K_test contract, M6.14
trigger conditions, per-gen-eval bridge) all OK as-is — the
forward-looking spec correctly pre-declared both GO and STOP
outcomes and the framework shipped as-spec'd.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Archived to openspec/changes/archive/2026-05-21-add-tei-prior-on-m3/
via `git mv` so history is preserved. All 47 tasks ticked; all 4
artefacts (proposal / design / specs / tasks) complete per
`openspec status --json`.

Spec sync intentionally SKIPPED per the M6.9+ STOP-archive precedent
(`2026-05-19-add-transgenerational-memory-redesign` also archived
without main-spec promotion). The delta specs describe an
action-logit-bias substrate contract that M6.13's four pilots
decisively falsified; promoting them to main `evolution-framework/`
and `configuration-system/` specs would commit the repo to a
known-null architectural choice. Logbook 020 + this archived change
directory remain the canonical reference for the framework
scenarios + the STOP verdict + the future-work substrate-redesign
directions (Ideas B/C/D for a possible Phase 6 quantum re-evaluation
arc).

After this commit, the only active OpenSpec change is
`phase5-tracking` (the long-running Phase 5 milestone tracker; will
archive at M8.7 alongside the M8 synthesis change).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
… stale archive refs

Independent pre-push review of the M6.13 close-out branch surfaced
three issues worth fixing before remote-state mutation:

F1 (should-fix, latent footgun): coevolution.py:2186-2189 has the
same Path.stem suffix-stripping anti-pattern that b78cdbb fixed in
EvolutionLoop._gc_inheritance_dir. Coevolution currently never
writes .tei.pt files (no per-side substrate machinery), but a
future composed-coevolution arc would silently re-introduce the
bug. Added the same .name.endswith(".tei.pt") guard preemptively
with a comment cross-referencing the loop.py fix.

F2 (should-fix, project-convention violation): the new GC
regression test in test_loop_m613_smoke.py:486-487 introduced fresh
"M3 / pure-TEI" milestone labels in the docstring. Commit 2371d45
on the parent branch had just scrubbed exactly these refs from the
same file. Replaced with behavioural names "lamarckian-only /
pure-transgenerational" per `feedback_no_milestone_refs_in_code`.

F3 (note, post-archive cleanup): three docstring/comment refs to
`openspec/changes/add-tei-prior-on-m3/` (no archive/ prefix)
predated this branch but pointed to a nonexistent path after the
archive commit (99600f5) moved the directory to
`openspec/changes/archive/2026-05-21-add-tei-prior-on-m3/`. Updated
the refs in `evolution/lamarckian_transgenerational_inheritance.py`,
`evolution/inheritance.py`, and the
`test_aggregate_m613_pilot.py` module docstring to point at the
archive location.

Verification:
- 469 evolution tests pass (no regressions from coevolution.py
  defensive guard).
- 71 touched tests pass under default marker selection.
- ruff + ruff-format + pyright clean on all 5 touched files.
- No remaining non-archive `openspec/changes/add-tei-prior-on-m3/`
  refs in the tree.
- No M3/PR-A/PR-B milestone labels in test_loop_m613_smoke.py or
  coevolution.py's new lines (pre-existing M3 mentions at
  coevolution.py:162 + 2720 predate this branch).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented May 21, 2026

Copy link
Copy Markdown

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 24767596-b28e-4023-872d-18f331bd17ac

📥 Commits

Reviewing files that changed from the base of the PR and between 31378d5 and d8bc0de.

📒 Files selected for processing (2)
  • artifacts/logbooks/020-tei-prior-on-lamarckian/README.md
  • artifacts/logbooks/020-tei-prior-on-lamarckian/smoke/calibration_smoke_K1000.md
✅ Files skipped from review due to trivial changes (1)
  • artifacts/logbooks/020-tei-prior-on-lamarckian/smoke/calibration_smoke_K1000.md

📝 Walkthrough

Walkthrough

This PR closes the M6.13 experiment (TEI-as-prior-on-Lamarckian reframe) with a STOP outcome, delivering a GC substrate-preservation fix, four pilot runs with decision records, configuration documentation updates, and a comprehensive logbook with mechanistic diagnosis of the null result.

Changes

M6.13 Experiment Delivery and GC Fix

Layer / File(s) Summary
GC substrate preservation fix for composed mode
packages/quantum-nematode/quantumnematode/evolution/coevolution.py, packages/quantum-nematode/quantumnematode/evolution/loop.py, packages/quantum-nematode/quantumnematode/evolution/inheritance.py, packages/quantum-nematode/quantumnematode/evolution/lamarckian_transgenerational_inheritance.py, packages/quantum-nematode/tests/quantumnematode_tests/evolution/test_loop_m613_smoke.py, packages/quantum-nematode/tests/quantumnematode_tests/campaigns/test_aggregate_m613_pilot.py
Garbage-collection loops in EvolutionLoop and CoevolutionLoop now skip deleting files ending in .tei.pt during inheritance cleanup, preventing accidental substrate removal in composed mode. Docstrings updated to document the mismatch risk, and a new regression test test_main_loop_gc_preserves_substrate_tei_pt verifies that elite weights and substrate .tei.pt files survive GC while non-elite weights are removed.
Configuration documentation: K_test calibration lockdown
configs/evolution/tei_prior_m613_control.yml, configs/evolution/tei_prior_m613_tei_weights.yml, configs/evolution/tei_prior_m613_weights_only.yml
Three arm configuration files updated with clarified comments: K_test is calibration-locked at 1000 (2026-05-20 pass-1 smoke), no warm-start inheritance semantics explained, and required parity checks for launcher alignment across arms and F1+ entries documented.
Pilot calibration and execution results
artifacts/logbooks/020-tei-prior-on-lamarckian/smoke/calibration_smoke_K1000.md, artifacts/logbooks/020-tei-prior-on-lamarckian/pilot_k1000/*, artifacts/logbooks/020-tei-prior-on-lamarckian/pilot_k200/*, artifacts/logbooks/020-tei-prior-on-lamarckian/pilot_k200_f0matched/*, artifacts/logbooks/020-tei-prior-on-lamarckian/pilot_k500/*
Four pilot runs across K settings (K=1000, K=200, K=200 F0-matched, K=500) each recorded with decision markdown (per-arm verdicts, pivot classification per design.md § D6, observed metrics) and aggregator summary (cross-arm verdict breakdown, pairwise statistics with Wilcoxon p-values and 80% CIs). Calibration smoke at K=1000 passed envelope and substrate checks, committing K_test=1000 for production.
Logbook 020: M6.13 experiment documentation and diagnosis
docs/experiments/logbooks/020-tei-prior-on-lamarckian.md, artifacts/logbooks/020-tei-prior-on-lamarckian/README.md
Comprehensive logbook documenting composed-inheritance framework delivery, GC substrate-preservation fix, calibration results, four pilot runs with STOP outcome under fair F0 comparison, audit of bridge vs. broken post-hoc evaluation methodology, mechanistic diagnosis (bias-network logit-prior misaligned with wet-lab excitability-shift framing), compute accounting, and Phase 6 future-work substrate redesign recommendations (Ideas B–D).
Experiment closure and roadmap tracking updates
docs/roadmap.md, openspec/changes/archive/2026-05-21-add-tei-prior-on-m3/design.md, openspec/changes/archive/2026-05-21-add-tei-prior-on-m3/tasks.md, openspec/changes/phase5-tracking/tasks.md
Phase 5 roadmap row M6.13 added with STOP verdict and mechanistic summary; design.md § D3 extended with .tei.pt preservation requirement and regression test reference; archive task list marked 6.1–6.9 complete with concrete outcomes and non-blocking operational steps; phase5-tracking M6 iteration updated to STOP on both pure-TEI and substrate-accelerates-Lamarckian hypotheses, with remaining extraction redesign deferred to Phase 6.

🎯 3 (Moderate) | ⏱️ ~20 minutes

Possibly Related PRs

  • SyntheticBrains/nematode#138: Earlier PR that extends the same EvolutionLoop and CoevolutionLoop._gc_inheritance_dir methods with *.tei.pt substrate checkpoint preservation, which is the direct foundation for this PR's GC fix.
  • SyntheticBrains/nematode#168: Prior PR implementing composed-mode loop integration (suppressing F0 GC for TEI substrates), which this PR's .tei.pt preservation guard directly complements and documents.

Poem

A rabbit hops through code and data streams,
GC guards now shield the substrate dreams 🧬
Four pilots ran; STOP sang the logbook true—
The prior didn't speed retraining, who knew?
Phase Six readies a redesign for view.

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately captures the main outcome (STOP verdict) and primary changes (GC fix, logbook creation, archiving) of this comprehensive M6.13 campaign close-out PR.
Docstring Coverage ✅ Passed Docstring coverage is 100.00% which is sufficient. The required threshold is 80.00%.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/m613-tei-prior-campaign-exec

Comment @coderabbitai help to get the list of available commands and usage tips.

@chrisjz
chrisjz marked this pull request as ready for review May 21, 2026 10:59

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In
`@artifacts/logbooks/020-tei-prior-on-lamarckian/pilot_k200/pilot_pivot_decision.md`:
- Around line 5-13: The decision text ("Pilot signal: clean GO at K_test" and
"Pivot: NONE") conflicts with the observed metrics (`tei_weights` per-arm
verdict: STOP, per-arm gate pass: False, Wilcoxon p-threshold met: False,
cross-arm mean delta +5.33pp); update the narrative to match the metrics by
changing the pilot outcome and pivot statement to reflect a STOP/REJECT decision
(or alternately adjust the metrics to show GO/Pass if that was intended), and
ensure the artifact uses the same identifiers (`tei_weights`, `weights_only`,
"Per-arm verdict", "Per-arm gate pass", "Wilcoxon p-threshold met", and "Pivot")
so the reported decision and listed metrics are consistent.

In
`@artifacts/logbooks/020-tei-prior-on-lamarckian/smoke/calibration_smoke_K1000.md`:
- Line 7: The T3' Lamarckian-headroom line is inconsistent: with F1=0.600 and
thresholds 0.387/0.326 the condition "F1 ≤ 0.95×F0 AND F1 ≥ 0.80×F0" cannot be
true, so update the record for T3' Lamarckian-headroom to be self-consistent by
either flipping the PASS to FAIL or adjusting the inequality to match the
intended check; specifically, for the existing numeric values (F1=0.600;
thresholds 0.387/0.326) change the "PASS" to "FAIL" for T3' or rewrite the
condition so that it correctly reflects that F1 is greater than both thresholds.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: c72a6e42-a908-4dc9-b2f4-a652f892c24d

📥 Commits

Reviewing files that changed from the base of the PR and between a4a0386 and 31378d5.

⛔ Files ignored due to path filters (12)
  • artifacts/logbooks/020-tei-prior-on-lamarckian/pilot_k1000/cross_arm_verdict.csv is excluded by !**/*.csv
  • artifacts/logbooks/020-tei-prior-on-lamarckian/pilot_k1000/decision_gate.csv is excluded by !**/*.csv
  • artifacts/logbooks/020-tei-prior-on-lamarckian/pilot_k1000/retention_table.csv is excluded by !**/*.csv
  • artifacts/logbooks/020-tei-prior-on-lamarckian/pilot_k200/cross_arm_verdict.csv is excluded by !**/*.csv
  • artifacts/logbooks/020-tei-prior-on-lamarckian/pilot_k200/decision_gate.csv is excluded by !**/*.csv
  • artifacts/logbooks/020-tei-prior-on-lamarckian/pilot_k200/retention_table.csv is excluded by !**/*.csv
  • artifacts/logbooks/020-tei-prior-on-lamarckian/pilot_k200_f0matched/cross_arm_verdict.csv is excluded by !**/*.csv
  • artifacts/logbooks/020-tei-prior-on-lamarckian/pilot_k200_f0matched/decision_gate.csv is excluded by !**/*.csv
  • artifacts/logbooks/020-tei-prior-on-lamarckian/pilot_k200_f0matched/retention_table.csv is excluded by !**/*.csv
  • artifacts/logbooks/020-tei-prior-on-lamarckian/pilot_k500/cross_arm_verdict.csv is excluded by !**/*.csv
  • artifacts/logbooks/020-tei-prior-on-lamarckian/pilot_k500/decision_gate.csv is excluded by !**/*.csv
  • artifacts/logbooks/020-tei-prior-on-lamarckian/pilot_k500/retention_table.csv is excluded by !**/*.csv
📒 Files selected for processing (27)
  • artifacts/logbooks/020-tei-prior-on-lamarckian/pilot_k1000/pilot_pivot_decision.md
  • artifacts/logbooks/020-tei-prior-on-lamarckian/pilot_k1000/summary.md
  • artifacts/logbooks/020-tei-prior-on-lamarckian/pilot_k200/pilot_pivot_decision.md
  • artifacts/logbooks/020-tei-prior-on-lamarckian/pilot_k200/summary.md
  • artifacts/logbooks/020-tei-prior-on-lamarckian/pilot_k200_f0matched/pilot_pivot_decision.md
  • artifacts/logbooks/020-tei-prior-on-lamarckian/pilot_k200_f0matched/summary.md
  • artifacts/logbooks/020-tei-prior-on-lamarckian/pilot_k500/pilot_pivot_decision.md
  • artifacts/logbooks/020-tei-prior-on-lamarckian/pilot_k500/summary.md
  • artifacts/logbooks/020-tei-prior-on-lamarckian/smoke/calibration_smoke_K1000.md
  • configs/evolution/tei_prior_m613_control.yml
  • configs/evolution/tei_prior_m613_tei_weights.yml
  • configs/evolution/tei_prior_m613_weights_only.yml
  • docs/experiments/logbooks/020-tei-prior-on-lamarckian.md
  • docs/roadmap.md
  • openspec/changes/archive/2026-05-21-add-tei-prior-on-m3/.openspec.yaml
  • openspec/changes/archive/2026-05-21-add-tei-prior-on-m3/design.md
  • openspec/changes/archive/2026-05-21-add-tei-prior-on-m3/proposal.md
  • openspec/changes/archive/2026-05-21-add-tei-prior-on-m3/specs/configuration-system/spec.md
  • openspec/changes/archive/2026-05-21-add-tei-prior-on-m3/specs/evolution-framework/spec.md
  • openspec/changes/archive/2026-05-21-add-tei-prior-on-m3/tasks.md
  • openspec/changes/phase5-tracking/tasks.md
  • packages/quantum-nematode/quantumnematode/evolution/coevolution.py
  • packages/quantum-nematode/quantumnematode/evolution/inheritance.py
  • packages/quantum-nematode/quantumnematode/evolution/lamarckian_transgenerational_inheritance.py
  • packages/quantum-nematode/quantumnematode/evolution/loop.py
  • packages/quantum-nematode/tests/quantumnematode_tests/campaigns/test_aggregate_m613_pilot.py
  • packages/quantum-nematode/tests/quantumnematode_tests/evolution/test_loop_m613_smoke.py

Comment on lines +5 to +13
**Pilot signal: clean GO at K_test (D6 row 2).** `tei_weights > weights_only` by ≥ 5pp — substrate prior accelerates Lamarckian retraining at K_test. The substrate-accelerates-retraining hypothesis is supported.
Pivot: NONE. Proceed to full campaign at K_test only (no K sweep — the test-point selection was made at calibration time).

Observed metrics:

- `tei_weights` per-arm verdict: **STOP**
- Cross-arm mean delta (tei_weights - weights_only): +5.33pp
- Per-arm gate pass (tei_weights): False
- Wilcoxon p-threshold met: False

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major | ⚡ Quick win

Align the pivot narrative with the listed observed metrics.

The "clean GO / Pivot: NONE" statement conflicts with the recorded metrics (STOP, gate False, Wilcoxon False).
Please update the decision text (or the metrics) so this artifact reports a single consistent outcome.

🧰 Tools
🪛 LanguageTool

[grammar] ~5-~5: Ensure spelling is correct
Context: ...2).** tei_weights > weights_only by ≥ 5pp — substrate prior accelerates Lamarckian retraining...

(QB_NEW_EN_ORTHOGRAPHY_ERROR_IDS_1)

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@artifacts/logbooks/020-tei-prior-on-lamarckian/pilot_k200/pilot_pivot_decision.md`
around lines 5 - 13, The decision text ("Pilot signal: clean GO at K_test" and
"Pivot: NONE") conflicts with the observed metrics (`tei_weights` per-arm
verdict: STOP, per-arm gate pass: False, Wilcoxon p-threshold met: False,
cross-arm mean delta +5.33pp); update the narrative to match the metrics by
changing the pilot outcome and pivot statement to reflect a STOP/REJECT decision
(or alternately adjust the metrics to show GO/Pass if that was intended), and
ensure the artifact uses the same identifiers (`tei_weights`, `weights_only`,
"Per-arm verdict", "Per-arm gate pass", "Wilcoxon p-threshold met", and "Pivot")
so the reported decision and listed metrics are consistent.

Comment thread artifacts/logbooks/020-tei-prior-on-lamarckian/smoke/calibration_smoke_K1000.md Outdated
Two findings from PR #169 inline review:

(1) [FIX] smoke/calibration_smoke_K1000.md T3' line was internally
inconsistent: it claimed "F1 ≤ 0.95×F0 AND F1 ≥ 0.80×F0: PASS"
but with F1=0.600 and 0.95×F0=0.387, the first conjunct is False
and the conjunction cannot be True. The PASS verdict itself is
correct (Lamarckian grew F1 from 0.407 to 0.600, well past
F0+0.05=0.457 — design.md § D5's "clear headroom" PASS clause).
The wrong text was a tripwire-table-style summary glommed onto a
procedural-rule outcome. Rewrote the line to cite the actual
procedural PASS trigger (F1 > F0 + 0.05) and note both bands were
cleared in the upward direction.

(2) [DECLINE] pilot_k200/pilot_pivot_decision.md narrative
("clean GO ... proceed to full campaign") superficially conflicts
with its own observed-metrics list (per-arm verdict STOP, gate
False, Wilcoxon False). The file is a verbatim capture of
aggregate_m613_pilot.py output, not hand-written narrative —
editing it would falsify the forensic record showing how the
F0-confound was discovered (K-sweep apparent GO → disambiguation
flipped sign). The two-channel structure (pivot-row classification
vs full GO-gate metric list) is a deliberate aggregator feature so
operators see exactly which signal a pivot decision is keyed to.

Mitigation for (2): added a README at the artefacts stash root
explaining the two-channel reporting structure, why these files
are forensic captures rather than narrative documents, and why the
F0-confound disambiguation pilot supersedes the K-sweep pivot-row
classifications for M6.13's actual verdict. Future readers see the
reconciliation guidance immediately on entering the artefact dir.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@chrisjz
chrisjz merged commit e10a013 into main May 21, 2026
3 checks passed
@chrisjz
chrisjz deleted the feat/m613-tei-prior-campaign-exec branch May 21, 2026 11:13
@codecov

codecov Bot commented May 21, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 50.00000% with 2 lines in your changes missing coverage. Please review.

Files with missing lines Patch % Lines
...-nematode/quantumnematode/evolution/coevolution.py 0.00% 2 Missing ⚠️

📢 Thoughts on this report? Let us know!

@chrisjz chrisjz changed the title M6.13 campaign close-out — STOP verdict + GC fix + logbook 020 + archive docs: M6.13 campaign close-out — STOP verdict + GC fix + logbook 020 + archive May 23, 2026
@chrisjz chrisjz changed the title docs: M6.13 campaign close-out — STOP verdict + GC fix + logbook 020 + archive docs(transgenerational): M6.13 campaign close-out — STOP verdict + GC fix + logbook 020 + archive May 23, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant