Skip to content

D-STAUNEN-5: resident recursive plasticity, plan + P0/P1 - #1914

Merged
AdaWorldAPI merged 4 commits into
mainfrom
ccr-85acaff0-oszq40-staunen5
Nov 1, 2026
Merged

AdaWorldAPI merged 4 commits into
mainfrom
ccr-85acaff0-oszq40-staunen5

Conversation

@AdaWorldAPI

@AdaWorldAPI AdaWorldAPI commented Nov 1, 2026 •

Copy link
Copy Markdown
Owner

The plan for D-STAUNEN-5, and its first two phases, P0 and P1. P2–P7 stay gated.

Question: can a novel stimulus trigger a local structural adaptation that changes a recursively computed prediction, and can the system then learn when that adaptation was useful?

Plan

  • One binary relation edge over at most 64 ids; its closure reach is the prediction.
  • A declared set of dormant candidate edges is the only structural freedom.
  • A novel stimulus (an observed pair reach misses) licenses one activation, under the contract it shares with Atlas's update_mask (brian2-atlas dev 9ec52f9): fixed mask shape, 0/1 entries, committed state.
  • NotACandidate, InsideRound, Stale, NoClosingCandidate and novelty gating are the cube's own rules. P7 never demands them from Atlas.
  • Two competing hypotheses, scored on held-out pairs from a hidden graph G*: H1 parsimony, H2 novelty × eligibility.
  • Later evidence consolidates or reverts each update. A selector is judged against the best fixed hypothesis under a pre-registered paired criterion.

Inherited kill condition (from the EXO-50 board references). D-CE64-STAUNEN-0 (#1395) measured that raw surprise is captured by noise: 0.649 resolved against round-robin's 0.964. So:

  • H2 runs raw and habituated, and raw is expected to lose;
  • a round-robin arm is added, and any policy that does not beat it on held-out pairs has failed;
  • outcomes are pooled as NARS revision over root-disjoint proofs (nars::support::DerivationLedger), not Fisher-Z addition.

Open with the operator: is a source root the observer or one report?

P0: fixtures and oracle

  • A breadth-first reference closure that shares no code with the cube.
  • A seeded episode generator. G* lives only in World; the Episode that later phases hand to the policies has no field for it.
  • The oracle labels every novel stimulus one-edge-closable (and lists the candidates that close it) or not. Every stream carries a planted pair that needs two withheld edges, for P3's NoClosingCandidate.
  • Observation noise: pairs G* does not reach, presented exactly like real stimuli and labelled only in World. They include distractor traps (closable by one distractor alone) in at least 35 of 39 seeded streams.

P1: resident closure, Cube::closure

  • Semi-naive over row masks built from the relation's resident lanes: delta' = (delta ∘ edge) andnot full, then full |= delta'.
  • The difference is mask_andnot in the cube. Nothing is added to the cube (CubeStats::relations_added stays 0) and no tuple is built.
  • Refuses a map wider than 64 (ClosureWidth) and a fixpoint that does not empty its delta within n+1 rounds (FixpointBound).

Tests (tests/staunen5.rs, 9):

  • The fixed fixture {(0,1),(1,2),(2,0),(2,3)} has exactly 12 pairs: (0,0), (1,1), (2,2) in, (3,3) out.
  • 400 random cyclic and acyclic graphs up to local position 63, bit for bit against the oracle.
  • The longest chain and the 64-ring.
  • In every case, rows composed equals |edge⁺|: each closure pair enters the delta exactly once.
  • P0 generator checks, including the noise labels.

Guards broken on purpose, each turning the suite red:

Change How it fails
D1: drop andnot FixpointBound on cycles
D2: compose from full same closure, but 24 rows composed against 12, so caught on work, not rounds
D3: drop the union wrong closure
D4: stop counting added relations the counter test
D5: drop noise generation the noise-label test

Third comparator: xlog-cube's closure needed a nonempty r(V,V) fixture first. That is AdaWorldAPI/xlog#5. Comparing all three closures on the same graphs, which completes P1's acceptance, follows once this PR and xlog#5 are on their main branches.

Board: INTEGRATION_PLANS.md and STATUS_BOARD.md.

🤖 Generated with Claude Code

https://claude.ai/code/session_01XAqKMNZqKXSaeb9g2ypywF

First closed learning loop on the XLOG-on-cube foundation: a novel
stimulus licenses one activation of a declared candidate edge under the
contract of Atlas's update_mask, the delta stays in the cube as mask
words, and two competing policies (parsimony, novelty x eligibility) are
scored on held-out pairs and learned from later evidence. Also records
the xlog-cube coverage order and that 140/230 measures admission, not
checked answers. Board: INTEGRATION_PLANS, STATUS_BOARD (D-XLOG-NATIVE-8
shipped in #1913).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XAqKMNZqKXSaeb9g2ypywF
@coderabbitai

coderabbitai Bot commented Nov 1, 2026 •

Copy link
Copy Markdown

Important

  • Trigger review

This repository does not receive automatic reviews because it has fewer than 10 stars.

Run configuration
  • Source mode: Auto
  • Repository: Unavailable
  • Branch: Unavailable
  • File: No configuration file from this repository applied
  • Commit: Unavailable
  • Layers: Organization UI
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 1c4ac718-05c8-4e48-91f1-39caf3c35449
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

Share

Cube::closure computes edge+ of one binary relation from its resident lanes:
row masks over local positions, delta' = (delta o edge) andnot full,
full |= delta', until the delta is empty. The difference is mask_andnot in
the cube; nothing is added to the cube and no tuple is built. Refuses maps
wider than 64 and a fixpoint that does not empty within n+1 rounds.
ClosureStats counts rounds and rows composed (equal to |edge+| in semi-naive
evaluation); CubeStats gains relations_added.

tests/staunen5.rs: a BFS oracle sharing no code with the cube; the fixed
12-pair cycle; 400 random cyclic and acyclic graphs up to position 63, bit
for bit; the longest chain and ring; the P0 episode generator (G* in World
only) with oracle-classified one-edge-closable and impossible stimuli.
Plan: the reviewer's four corrections, the P1 acceptance gate, the paired
P6 criterion.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XAqKMNZqKXSaeb9g2ypywF
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XAqKMNZqKXSaeb9g2ypywF
@AdaWorldAPI AdaWorldAPI changed the title plan: D-STAUNEN-5 resident recursive plasticity D-STAUNEN-5: resident recursive plasticity, plan + P0/P1 Nov 1, 2026
EXO-50 board references, read after the first draft: D-CE64-STAUNEN-0 measured
that raw surprise is captured by noise (0.649 vs round-robin 0.964), and the
co-research map parks novelty gating until it inherits that condition. P0's
generator now carries observation noise (pairs G* does not reach, labelled
only in World), including distractor traps; the plan adds raw vs habituated
H2 and a round-robin arm, and pools outcomes as NARS revision over
root-disjoint proofs via DerivationLedger, not Fisher-Z addition.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XAqKMNZqKXSaeb9g2ypywF
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Nov 1, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-11-01T11:44:50.497374Z 729e802 Draft marked ready
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@AdaWorldAPI
AdaWorldAPI merged commit d38c850 into main Nov 1, 2026
13 checks passed
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.

2 participants