Skip to content

docs(D-CFA-0): counterfactual flow analysis capstone + thought dependency scratchpad - #1813

Merged
AdaWorldAPI merged 3 commits into
mainfrom
docs/cfa-00-map-20261027
Oct 28, 2026
Merged

AdaWorldAPI merged 3 commits into
mainfrom
docs/cfa-00-map-20261027

Conversation

@AdaWorldAPI

Copy link
Copy Markdown
Owner

First-round preregistration; no implementation

Creates the D-CFA research entrypoint and a Mermaid thought-chain scratchpad for DT64 ON×WHEN×DO → Thought-Git 0+63 ablations → ARM/logic discovery → optional NSL/ONNX prioritization → cold Egglog/DialEgg candidate verification.

Scope: docs only; not a new ABI/executor, no tests run, no benchmark or rule admission. Later stacked PRs are research proposals pending operator review. Next-turn details intentionally deferred.

@coderabbitai

coderabbitai Bot commented Oct 27, 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: 80516707-2d02-4ef7-8bc2-9513966b7eb0
  • 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

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

Copy link
Copy Markdown
Owner Author

Cross-session review note (2026-10-27; coordination only, no implementation or merge authorization). GitHub status has advanced since the earlier EXO-50 handoffs: D-NAM #1778–#1783, D-ONNX intake S0 #1802/#1808, DT64 #1794–#1799 and TANH evidence index #1810 are merged documentation/specs, not native runtime or dynamic learning execution. The mainline STATUS_BOARD D-NAM heading still describes the six D-NAM docs as draft/unmerged and needs one small dated supersession.

Boundary request for D-CFA #1813–#1818 owners: CFA-4's optional NSL→ONNX prediction leaf must not become the owner of ONNX importer normalization or numerical receipts. Those remain D-ONNX-INTAKE / D-NAM / EXO-152; the next proposed independent cold Tract microgate is provenance of raw source → InferenceModel/TypedModel → declutter, refusing transformed identities without source witness. FamilyGamma learning-time generation is a separate proposed two-generation stale-receipt LAB gate, preserving its 8-byte wire format and cross-referencing EXO-139 saturation / EXO-137 CI. D-CFA's counterfactual interventions/Thought-Git/ARM remain their own research scope, with no DR³ physical or source-write admission.

Please ACK boundary overlap or point to an existing PR/plan that already owns these exact gates; avoid opening duplicate D-NAM or ONNX runtimes. Full coordination note: https://linear.app/exo-red/issue/EXO-50 and owner index https://linear.app/exo-red/issue/EXO-152. Some sessions cannot read the connected Linear account; this GitHub comment is the accessible cross-account mirror. No new work is delegated.

Copy link
Copy Markdown
Owner Author

Cross-session dependency check (review request only, not permission to merge or implement): I verified #1812 is a separate open executable one-hop SAG workbench lab; #1792 and DT64 docs #1794–#1799 are already merged. Canonical D-DT64-Q0 remains source binding -> borrowed Quack, NOT ON×WHEN×DO execution or production physical DR³. CFA-0 through CFA-5 #1813 #1814 #1815 #1816 #1817 #1818 are six stacked draft documentation PRs, not executed gates.

Minimal independent next gate after reviewing CFA-0/CFA-1: operator selects ONE source-shaped method family; preserve two MethodIds in one cell, unknown guard/permission as UNKNOWN/REFUSED and source revision identity, then compare harvested source methods to an independent typed/oracle view. Do not begin ablation/ARM/NSL/equality proof until the input/observable-boundary contract is sound. #1812 may furnish a reusable testing pattern, not the semantics or source attestation for this gate. Thought-Git protected intermediate replay and durable ids remain separately bounded by EXO-148, not solved by 64 thought-slot vocabulary.

Stack hygiene: #1818's evidence parent is CFA-3 (#1816), but its current GitHub base is CFA-4 (#1817), an optional neural arm. If CFA-4 is deferred, rebase/retarget CFA-5 cleanly onto CFA-3 after prior-stage review; do not let a mandatory merge chain silently make ONNX/NSL mandatory. Compare compiler rewrites only with independently checked source/effect/numeric semantics under D-DRMC/D-NAM (EXO-152); no learned causal/equivalence promotion. Coordinate with the #1812 SAG owner through GitHub rather than assuming the separate CC session can read EXO-50.

Copy link
Copy Markdown
Owner Author

Review of the D-CFA stack (#1813–#1818), read alongside #1819 and the three probes merged today (odoo-rs #44, odoo-rs #45, OGAR #363). This review is on #1813 because it is the root of the stack; each finding names the document it applies to.

1. The 64³ shape does not fit the measured registry (README, CFA-1)

The README describes the incidence space as 64³ (262,144 cells, 32 KiB dense). The slice-1 registry in odoo-rs #44 measures ON 194 × WHEN 5 × DO 219, so ON and DO each need four 64-wide blocks (docs/DT64-ON-WHEN-DO-REGISTRY.md §10). A first real fixture will not fit one register per axis.

Suggestion: say that 64 is a block width rather than an axis size, as #44 does for relcomp, or use #1819's 256 padding.

2. #1819 is the physical form of CFA-1's WHEN

CFA-1 defines WHEN as "a reference to a typed guard expression with 3-valued result … not one Boolean atom". #1819 builds on exactly that: it takes WHEN out of the cube, keeps an ON×DO presence bitmap, and evaluates guards as Quack WHERE populations.

Neither document cites the other. Linking them would give CFA-1 a physical layer and give #1819 the meaning it has to preserve.

3. One falsifier table, not two

Several of the preregistered tests here duplicate #1819's red/green disables. It would be better to keep one table on one fixture, the #44 cube (odoo-rs/crates/od-ontology/tests/common/cube.rs, now on main):

#1819 disable Same test here
1: remove method multiplicity on a bit I01, K5, A09
2: treat an unattested WHEN as true I03, I04
3: flip UNKNOWN to FALSE K6
4: reuse a stale Keep (#1792) A11, C10
7: losing one support path clears the other A03, L04
8: mix sibling worlds CFA-2's world isolation

4. Falsifiers marked "not run" that already have measured instances

The documents say no tests were run. Today's merged probes already cover several of the preregistered cases, and citing them would ground the stack:

5. How unknown guards are treated (CFA-2)

#45 handles unknown guards by branching on them and folding the branches with NarsTruth::revision at equal weights. #1819 says #45 is not permission to read probabilities as guard facts, and I04/K6 require UNKNOWN or REFUSED.

These are compatible only if the revised truth stays a labelled summary across worlds and never feeds a WHEN verdict. CFA-2 should say so explicitly.

6. Stack mechanics


Generated by Claude Code

Copy link
Copy Markdown
Owner Author

Correction to my review above (2026-10-27), after the operator's ruling on #1814, #1815 and #1819. This comment adds to that review and supersedes the parts named below; it does not edit it.

What I withdraw

  • "Suppressing a single MethodId is still untested." That framed MethodId suppression as an intervention still to run. Under the operator's model, methods are typed mappings onto shared algebra, so the intervention is to vary eligibility: guards, source populations, bindings, subrule parameters, routing conditions. Removing a mapping is not an intervention.
  • Disable 7 ↔ A03/L04. These test different properties. Disable 7 is about population membership surviving the loss of one support path (dir-rmap-probe::pop::Pop::repair, dir-rmap-probe: IAM nested groups as a DR256 register, versioned populations and method folds (arm Q) #1666). A03/L04 are about output-level joint sufficiency. They belong under separate invariants with separate oracles.
  • feat(planner): dynamic elevation — cost model that smells resistance #45 as evidence for A03/A04 and K7/A06. It covers change-WHEN branching over 4 guards and XOR divergence decoding within a 64-bit block. That falls well short of either.

New source facts relevant to the stack

  1. The fix(cam_pq): add missing arrow::array::Array import in udf.rs #44 cube loses the ON dimension for every non-compute method. registry() in odoo-rs/crates/od-ontology/tests/common/cube.rs gives every method whose class is not Compute the ON position unattested; that covers inverses, onchanges and checks. The 8 multi-method cells of §10 P5 are therefore partly that collapse, not real ambiguities. Live does keep every mapping per (class, cell). There are still gaps:

    • no recipe or polyfill reference;
    • no scope;
    • no destination identity;
    • Cube::dispatch is a two-valued OR of guard atoms, so WHEN cannot be K3 or conjunctive there.

    That supports CFA-1 and docs(research): factor ON×DO dispatch through witnessed Quack WHERE populations #1819 keeping WHEN out of the presence bitmap.

  2. feat(planner): dynamic elevation — cost model that smells resistance #45 lands sibling worlds as one Version. fork_and_land calls thought-git next_version on all 16 branch thoughts. Cells where every world agrees land; disagreements become Divergence entries. The result is a comparison instrument, and should never be read as a committed world.

  3. feat(planner): dynamic elevation — cost model that smells resistance #45's revision weights hypothetical worlds as evidence. Its revised confidence of 16/17 counts each hypothetical branch as an independent unit of evidence. That is the duplicate-root hazard of K8/A07/L06, measured in a test-local example, and the test should be reported as such. I wrote that probe; this limitation is mine to record.

  4. The corpus already holds a source-harvested convergence and routing family in odoo-rs/data/slice_2.spo.ndjson:

    • account_move_line.balance is emitted by _compute_balance, _inverse_amount_currency, _inverse_credit and _inverse_debit. That is four mappings onto one field.
    • _compute_debit_credit emits both debit and credit: one determination routed to two typed destinations.
    • _inverse_credit and _inverse_debit read account_move.is_storno, a qualifying subrule.

    It is double entry, not tax or dual ledger, and it has gaps:

    • the inverse triggers are not attested (no inverse_name facts for these fields);
    • the combination law (debit, credit, balance) is not in the facts;
    • account_move_line.py is not in the repository, so an oracle needs that source pinned first.

Corrected evidence matrix (replaces my earlier table)

Invariant Test IDs Evidence Status
distinct mappings at one cell are kept K5, I01, A09 (reframed), #1819 d1 #44 Live + P3; #45 keeps the currency_id writers in 16 worlds PARTIAL: ON collapse, no recipe reference
unknown or unattested WHEN is neither true nor false I03, I04, K6, #1819 d2/d3 Quack K3 (#1334/#1677/#1687) exists, but not on this registry UNTESTED here
conjunctive WHEN I03 cube ORs guard atoms BLOCKED in the cube; belongs on the WHERE path
stale population or Keep is refused A11, C10, I08, K9, #1819 d4/d6 #1792: 1,032 stale rows vs 31 fresh MEASURED for Quack only
population repair keeps other support paths #1819 d7 #1666 Pop::repair PARTIAL: roles, not registry populations
output joint sufficiency or conjunction K2, K3, A03, A04, L04, L05 none UNTESTED
sibling worlds stay isolated #1819 d8, CFA-2 #45 divergences + parent/child vs sibling test PARTIAL: agreements still land as one Version
intermediates survive squash K7, A06, A12, C02 thought-git protected_squash (#1739); #45 XOR PARTIAL
evidence roots are counted once K8, A07, L06, N04 #45 is a counterexample (equal-weight revision) UNTESTED as a guard
multi-emitter is a bag, not a set L11 #44 relcomp parity: RecomputeDag last-wins drops edges MEASURED; behaviour change not authorized
lawful many→one convergence #1819 d11 balance family above (source facts only) UNTESTED
one→many typed routing #1819 d12 _compute_debit_credit; Report destination binding open in ISS-REPORT-NO-COMPOSITE-KEY-GROUP-FOLD UNTESTED
cross-frame identity I02, K9, L12, N05, C11, C13 OGAR #363: consistsOf/isPartOf asymmetry PARTIAL: shows the hazard, does not pass a witness test
landing is order-independent #1819 d9 #45 reversed and rotated landings MEASURED
T0 sealed; at most 63 slots A01, A02 thought-git-probe Lane::new asserts 1..=63 PARTIAL: no stale-token test
effects stay inert A10, N08 no effects in any probe NOT APPLICABLE so far
candidates are never promoted L08, N01, N09, C09, C12, C14 none UNTESTED
equivalence requires effect parity C02–C07 none UNTESTED

One OGAR #363 caveat. Its typed tests draw the named verbs' relations from the same extraction as the enumeration they are compared against, so the extraction is not independently checked. The PR states this, and the GPT EXO-50 audit flags it as well.

Stack recipe for #1818 (dry-run locally, nothing pushed)

Cherry-picking 4774d34 onto docs/cfa-03-arm-logic-20261027 (e56c87d) applies cleanly. It adds exactly 2 files, +99 lines: cfa-5-compiler-analysis.md and stack-receipts.md.

Changing only #1818's GitHub base, without that rebase, would wrongly add cfa-4-nsl-onnx.md to its diff.

After the move, two references to CFA-4 point at a file that does not yet exist on that branch: the status line of cfa-5-compiler-analysis.md and the CFA-4 row of stack-receipts.md. Both should be reworded to say "optional sibling".

The force-with-lease push on that branch is the branch owner's call.


Generated by Claude Code

@chatgpt-codex-connector

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 🔄 Running since 2026-10-27T21:51:20.487263Z 43a726c 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.

@coderabbitai

coderabbitai Bot commented Oct 27, 2026

Copy link
Copy Markdown

Add Carrot credits or activate Agent usage billing to use Autofix

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