Repository navigation
D-PEARL-IO-0: Pearl's ladder executed in and out of CausalEdge64 - #1390
Conversation
Bits 40..42 select an existing operator; the measurement decides whether bits 59..63 change. - SO: P7a observational folds (certify_observational). - PO: P7a executed randomized arms (Model::causes). - SPO: dismech counterfactual_replay with one route cut. - SP: SO vs PO direction through CausalMask::simpsons_paradox_risk. revise() only raises certification to what the operator earned and writes bits 59..63 only. hydrate() moves IndirectUnknown to IndirectKnown only when both bindings A->B and B->Y are sealed. The P7a model, folds and fixture builder move unchanged into examples/shared/certification_model.rs; certify() now delegates to a new certify_observational() after the Causes check (P7a's 13 tests unchanged). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0177nSSyQaXqbNuGR1vMXXN6
- entries/2026-10-07-pearl-io-0-ladder-in-and-out-of-ce64.md: inventory, the seam, the measured CUI BONO script, the 12 disable runs, open items. - STATUS_BOARD row D-PEARL-IO-0 (In PR); entries index regenerated. - relational_certification_probe: test-only imports behind cfg(test) after the model move; pearl probe: drop a same-type cast. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0177nSSyQaXqbNuGR1vMXXN6
|
Important Draft PR not reviewedDraft PRs are not automatically reviewed by default.
To automatically review draft PRs, update your CodeRabbit configuration: reviews:
auto_review:
drafts: true
Warning Billing warning: we have not been able to collect payment for this subscription for more than 72 hours. Please update the payment method or pay any pending invoices in Billing to avoid service interruption. Comment |
…e code Adds the operator's diagram of bits 40..63 (Pearl ladder, orientation, activation, entropy, belief-state update, epistemic state) with a band-by- band table against layout.rs and epistemic_state5. Bands 0..42 and 59..63 match; 43..45, 46..49 and 50..52 are read differently in code (direction triad, inference mantissa, plasticity); 53..58 holds one witness handle, not a history. Marked WORKING-MODEL; no code change. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0177nSSyQaXqbNuGR1vMXXN6
Short section before Workspace: what the register packs, the diagram, and the one-paragraph caveat that it is a working model (bits 43..58 differ from the code), linking the band-by-band page. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0177nSSyQaXqbNuGR1vMXXN6
The image now sits under the badges as the page's picture and links to the section that explains it; the section keeps the working-model caveat. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0177nSSyQaXqbNuGR1vMXXN6
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
|
Add Carrot credits or activate Agent usage billing to use Autopilot |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: fec061392b
ℹ️ 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".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| pub fn reason(edge: CausalEdge64, ev: &Evidence<'_>, edit: Edit) -> Measured { | ||
| let op = Operation::of(edge.causal_mask()); | ||
| let mut out = Measured::new(op); | ||
| let m = ev.model; |
There was a problem hiding this comment.
Bind evidence to the edge being certified
When a caller pairs a PO edge for one relation with a Model built from another relation's positive trial, Model contains no subject, predicate, or outcome identity and this code never compares it with edge; m.causes() can therefore produce a measurement that upgrades the unrelated edge to Causes. The sealed evidence needs to identify the relation it measures, and reason should reject a mismatch before earning certification.
Useful? React with 👍 / 👎.
| let has = |s: u8, o: u8| sealed.iter().any(|(_, e)| e.s_idx() == s && e.o_idx() == o); | ||
| let found = match (has(a, b), has(b, y)) { | ||
| (true, true) => Hydration::Hydrated, | ||
| (false, false) => Hydration::ProposedOnly, | ||
| _ => Hydration::Partial, |
There was a problem hiding this comment.
Require the bindings to form an ordered chain
If the sealed steps contain B → Y before A → B, these two independent any searches still return Hydrated and promote the topology to IndirectKnown, even though traversing the recorded chain never yields A → B → Y. Check the bindings in chain order (and on the same applicable route) rather than merely checking that both endpoint pairs occur somewhere in the slice.
Useful? React with 👍 / 👎.
| Operation::Association => match m.sourced() { | ||
| Err(e) => out.ungrounded = Some(Ungrounded::Model(e)), | ||
| Ok(()) => { | ||
| let c = m.certify_observational(); | ||
| if c != Contract::Open { | ||
| out.earned = Some(c.certification()); |
There was a problem hiding this comment.
Preserve ungrounded observational results
For an observational model with two valid source receipts but empty comparison arms, m.sourced() succeeds, while every fold inside certify_observational() returns Err(EmptyArm) or Err(NoDeclaredStratum) and the helper collapses those errors to Contract::Open. This leaves both earned and ungrounded unset, incorrectly reporting a grounded negative result instead of the documented Ungrounded::Model; the observational evaluation needs to retain the fold error when no rung is grounded.
Useful? React with 👍 / 👎.
…ords - entries/2026-10-07-pearl-prod-0-production-wiring.md: placement, the CI coverage change, open items (no runtime caller yet; 64-unit cap). - STATUS_BOARD: D-PEARL-PROD-0 (In PR); D-PEARL-IO-0 Shipped (#1390); D-PUZZLE-0 step 3 merged (#1387). - LATEST_STATE: #1387/#1390 merged; contract delta certification.rs. - PR_ARC_INVENTORY: #1390 and #1387 entries. - docs/architecture/ce64-semantic-upper-half.md points at the production modules. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0177nSSyQaXqbNuGR1vMXXN6
…eduler run_with(opts): heap scheduler (lazy stamps), FIFO worklist baseline, wall-clock window budget with continuation, Forget arms at window boundaries (belief, question bits, register, evidence, attention), #1390 Simpson+trial population, fold quadrants, polarity, end attractors, productive/redundant/rejected accounting, dense 1k..1M fold windows. Comparative tests now pool three seeds. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0177nSSyQaXqbNuGR1vMXXN6
A
CausalEdge64enters with oneEpistemicState5. Its Pearl projection (bits 40..42) selects an existing operator, and the edge leaves with a different state only where the measurement earned it.Inventory first
Almost everything already existed; nothing connected it.
CausalMask,simpsons_paradox_riskModelfolds (#1369)examples/shared/certification_model.rs.certifynow checkscauses, then delegates to a newcertify_observational. The 13 P7a tests are unchanged.dismech_counterfactual::counterfactual_replayEpistemicState5,project_state5,stampThe missing seam, now in the probe:
pearl::reasondispatches on bits 40..42 and nothing else of the edge.pearl::revisewrites the measurement back.pearl::hydrateis the topology gate.There is no contract change.
Operators
CausalCandidate, and it ignores trial data even when the model holds it.causeson the executed randomized arms. This is the only path toCauses.counterfactual_replaywith one route cut. It returns a reaction (load-bearing, truth-only or inert, with both frequencies) and never a certification.Measuredhas private fields, so only an operator can produce one.reviseraises the certification to what was earned and never lowers it. It writes bits 59..63 only.hydratemovesIndirectUnknowntoIndirectKnownonly when both bindingsA → BandB → Yexist in the sealed chain. Proposing a candidate changes nothing.CUI BONO, measured
IndirectUnknown × RelatedA → B → YIndirectKnown × RelatedIndirectKnown × CausesB → YA → BTwo findings:
Causes. The chain replay is linear and cannot express the OR, so the contingency is a mask over the unit population.Falsifiers (14 tests; 12 disable runs, each red)
Each disable makes the forbidden thing possible, and the named test fails:
Causesby reading the trial data.Causes.Causes.Causes.Gates: clippy
-D warningsand fmt are clean. The probe passes 14/14, the P7a probe 13/13, and the epistemic reading-conflict probe 9/9.Documentation
docs/architecture/ce64-semantic-upper-half.mdembeds the semantic upper-half diagram of bits 40..63 (docs/architecture/img/ce64-semantic-upper-half.png) and compares it with the code, band by band. The page is marked WORKING-MODEL.No code changes in this part.
Open
reason,reviseandhydratelive in production.Entry:
.claude/board/entries/2026-10-07-pearl-io-0-ladder-in-and-out-of-ce64.md.🤖 Generated with Claude Code
https://claude.ai/code/session_0177nSSyQaXqbNuGR1vMXXN6