From 862f095148b0b20d7db9089de731f383b20adc0b Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 11 Nov 2026 09:30:05 +0000 Subject: [PATCH 1/4] wip(cg-beh-2): ON/WHEN/DO facts probe, change query, falsifiers --- .../2026-11-11-cg-beh-2/disable_runs.py | 108 +++ .../probes/2026-11-11-cg-beh-2/dispatch.tsv | 27 + .../2026-11-11-cg-beh-2/foundry.facts.tsv | 693 ++++++++++++++++++ .../probes/2026-11-11-cg-beh-2/lab.facts.tsv | 32 + crates/cg-beh-probe/Cargo.toml | 41 ++ crates/cg-beh-probe/src/bin/facts.rs | 58 ++ crates/cg-beh-probe/src/dispatch.rs | 167 +++++ crates/cg-beh-probe/src/facts.rs | 480 ++++++++++++ crates/cg-beh-probe/src/fixture.rs | 304 ++++++++ crates/cg-beh-probe/src/lib.rs | 87 +++ crates/cg-beh-probe/src/query.rs | 450 ++++++++++++ .../cg-beh-probe/tests/integration/common.rs | 71 ++ .../cg-beh-probe/tests/integration/gate_a.rs | 172 +++++ .../cg-beh-probe/tests/integration/gate_b.rs | 240 ++++++ .../cg-beh-probe/tests/integration/gate_c.rs | 259 +++++++ crates/cg-beh-probe/tests/integration/main.rs | 6 + 16 files changed, 3195 insertions(+) create mode 100644 .claude/probes/2026-11-11-cg-beh-2/disable_runs.py create mode 100644 .claude/probes/2026-11-11-cg-beh-2/dispatch.tsv create mode 100644 .claude/probes/2026-11-11-cg-beh-2/foundry.facts.tsv create mode 100644 .claude/probes/2026-11-11-cg-beh-2/lab.facts.tsv create mode 100644 crates/cg-beh-probe/Cargo.toml create mode 100644 crates/cg-beh-probe/src/bin/facts.rs create mode 100644 crates/cg-beh-probe/src/dispatch.rs create mode 100644 crates/cg-beh-probe/src/facts.rs create mode 100644 crates/cg-beh-probe/src/fixture.rs create mode 100644 crates/cg-beh-probe/src/lib.rs create mode 100644 crates/cg-beh-probe/src/query.rs create mode 100644 crates/cg-beh-probe/tests/integration/common.rs create mode 100644 crates/cg-beh-probe/tests/integration/gate_a.rs create mode 100644 crates/cg-beh-probe/tests/integration/gate_b.rs create mode 100644 crates/cg-beh-probe/tests/integration/gate_c.rs create mode 100644 crates/cg-beh-probe/tests/integration/main.rs diff --git a/.claude/probes/2026-11-11-cg-beh-2/disable_runs.py b/.claude/probes/2026-11-11-cg-beh-2/disable_runs.py new file mode 100644 index 000000000..d962295c8 --- /dev/null +++ b/.claude/probes/2026-11-11-cg-beh-2/disable_runs.py @@ -0,0 +1,108 @@ +#!/usr/bin/env python3 +"""Disable runs for crates/cg-beh-probe: remove one guard, the named test must fail. + +Run from the repository root on a clean tree (the restore is `git checkout`): + python3 -I .claude/probes/2026-11-11-cg-beh-2/disable_runs.py +A case counts only when the patch applied exactly once, the test binary was +built and ran, and the named test is in its failure list. +""" +import os +import subprocess +import sys + +CRATE = "crates/cg-beh-probe" +FACTS, QUERY, DISPATCH = (f"{CRATE}/src/{n}.rs" for n in ("facts", "query", "dispatch")) + +CASES = [ + ("issuer check", FACTS, + "let binding = store.admit(r).map_err(Missing::Admit)?;", + "let binding = match store.admit(r) { Ok(b) => b, Err(e) => store.resolve(view, r.class, read.schema_rev).ok().and_then(|x| x.methods.iter().find(|m| m.id == r.method)).ok_or(Missing::Admit(e))? };", + "gate_c::a_reference_from_another_issuer_yields_no_facts"), + ("guard dependency must be a registered read", FACTS, + ".filter(|p| binding.reads.has(*p))", "", + "gate_a::a_guard_dependency_outside_the_registered_reads_stays_unknown"), + ("source revision required", FACTS, + 'if rev.is_empty() || rev.eq_ignore_ascii_case("unknown") {', "if false {", + "gate_a::a_snapshot_without_a_source_revision_is_refused"), + ("lens revision required", FACTS, + "read.lens_rev.ok_or(Missing::LensRevision { lens })?", "read.lens_rev.unwrap_or(SchemaRev(1))", + "gate_a::do_steps_are_not_read_without_the_lens_they_were_bound_at"), + ("basis read through the witnessed resolve", FACTS, + " let resolved = store\n .resolve(view, class, schema_rev)\n .map_err(Missing::Basis)?;\n let mut h", + " let resolved = store\n .resolve_algebra(view, class, schema_rev)\n .or_else(|_| Ok::<_, Missing>(lance_graph_dt64::Resolved { class, schema: Box::leak(Box::new(lance_graph_dt64::ClassSchema { schema_rev, field_count: 0, extent: lance_graph_dt64::dr::Extent::DR64_CUBE })), fields: view.fields(lance_graph_dt64::view_class(class)), methods: &[], derived_from: None }))?;\n let mut h", + "gate_c::a_basis_altered_at_the_same_field_count_is_refused_not_read"), + ("witness, not spelling, decides WHEN", QUERY, + "if witness(b) != witness(a) {", "if spelling(b) != spelling(a) {", + "gate_b::a_respelled_guard_keeps_its_witness_and_makes_nothing_stale"), + ("basis component", QUERY, + "if basis_b != basis_a {", "if false {", + "gate_b::a_changed_field_basis_reaches_every_method_of_the_class"), + ("DO order", QUERY, + " m.steps\n .iter()\n .map(|s| {", + " let mut steps: Vec<_> = m.steps.iter().collect();\n steps.sort_by_key(|s| s.word);\n steps\n .into_iter()\n .map(|s| {", + "gate_c::reversing_independent_do_steps_is_a_do_change_and_nothing_else"), + ("digest moved alone", QUERY, + "if binding_changed && !covered {", "if false {", + "gate_c::facts_that_contradict_the_binding_digest_are_refused"), + ("covered component moved alone", QUERY, + "if covered && !binding_changed {", "if false {", + "gate_c::facts_that_contradict_the_binding_digest_are_refused"), + ("dispatch witness", QUERY, + "if current != dispatch.file_fnv {", "if false {", + "gate_c::a_dispatch_reading_from_other_source_text_is_refused"), + ("arm that names no word", QUERY, + "if words.is_empty() {", "if false {", + "gate_c::a_line_outside_the_word_arms_has_no_behaviour_edge"), + ("no stale parity without a user", QUERY, + "let stale = if users.is_empty() {", "let stale = if false {", + "gate_b::an_arm_shared_by_three_opcodes_reaches_all_three_words"), + ("word without an arm", DISPATCH, + "self.arms.iter().find(|a| a.names.iter().any(|n| n == name))", + "self.arms.iter().find(|a| a.names.iter().any(|n| n == name)).or(self.arms.first())", + "gate_c::a_removed_dispatch_mapping_makes_its_word_unknown_and_no_other"), + ("ON read from the binding", FACTS, + 'let on = positions(&binding.on)', 'let on = positions(&binding.reads)', + "gate_a::the_lab_method_is_read_part_by_part"), +] + + +def run_tests(): + env = dict(os.environ, CARGO_PROFILE_DEV_DEBUG="0", CARGO_PROFILE_TEST_DEBUG="0", CARGO_INCREMENTAL="0") + env.pop("RUSTFLAGS", None) + p = subprocess.run( + ["cargo", "test", "--release", "--manifest-path", f"{CRATE}/Cargo.toml", "--test", "integration"], + capture_output=True, text=True, env=env) + return p.returncode, p.stdout + p.stderr + + +def main(): + if subprocess.run(["git", "status", "--porcelain", CRATE], capture_output=True, text=True).stdout.strip(): + sys.exit("the crate has uncommitted changes; commit before disabling") + code, out = run_tests() + if code != 0: + sys.exit("baseline is not green") + bad = 0 + for name, path, old, new, test in CASES: + src = open(path).read() + if src.count(old) != 1: + print(f"ANCHOR {name}: found {src.count(old)} times") + bad += 1 + continue + open(path, "w").write(src.replace(old, new)) + try: + code, out = run_tests() + finally: + subprocess.run(["git", "checkout", "--", path], check=True) + ran = "test result:" in out + failed = f"test {test} ... FAILED" in out + verdict = "RED" if (code != 0 and ran and failed) else ("NOT-BUILT" if not ran else "GREEN") + if verdict != "RED": + bad += 1 + print(out[-1500:]) + print(f"{verdict:9} {name} -> {test}") + print(f"{len(CASES) - bad}/{len(CASES)} disable runs red") + sys.exit(1 if bad else 0) + + +if __name__ == "__main__": + main() diff --git a/.claude/probes/2026-11-11-cg-beh-2/dispatch.tsv b/.claude/probes/2026-11-11-cg-beh-2/dispatch.tsv new file mode 100644 index 000000000..c9c1875ec --- /dev/null +++ b/.claude/probes/2026-11-11-cg-beh-2/dispatch.tsv @@ -0,0 +1,27 @@ +H cg-beh.dispatch.v1 b60ac87550156f8b +ARM FnIndex::NUMBER NOT_A_WORD 860 863 +ARM LOAD NOT_A_WORD 864 886 +ARM VIA NOT_A_WORD 887 903 +ARM INT_EQUAL 4 904 974 +ARM INT_LESS NOT_A_WORD 975 975 +ARM INT_LESS_EQUAL NOT_A_WORD 975 975 +ARM INT_S_LESS 5 976 1018 +ARM INT_AND 6 1019 1085 +ARM INT_OR 7 1086 1113 +ARM INT_XOR 8 1114 1144 +ARM INT_ADD 0 1145 1162 +ARM INT_MULT 2 1145 1162 +ARM INT_S_DIV 3 1145 1162 +ARM INT_SUB 1 1163 1175 +ARM POP_COUNT 10 1176 1194 +ARM KEY_RUNS 16 1195 1213 +ARM ANY 14 1214 1226 +ARM ALL 15 1214 1226 +ARM SUM 11 1227 1246 +ARM MIN 12 1247 1274 +ARM MAX 13 1247 1274 +ARM GROUP_SUM NOT_A_WORD 1275 1314 +ARM INT_NOT 9 1315 1347 +ARM RANGE NOT_A_WORD 1348 1359 +ARM KEEP NOT_A_WORD 1360 1368 +ARM other NOT_A_WORD 1369 1369 diff --git a/.claude/probes/2026-11-11-cg-beh-2/foundry.facts.tsv b/.claude/probes/2026-11-11-cg-beh-2/foundry.facts.tsv new file mode 100644 index 000000000..cd5526a3b --- /dev/null +++ b/.claude/probes/2026-11-11-cg-beh-2/foundry.facts.tsv @@ -0,0 +1,693 @@ +H cg-beh.facts.v1 317c4ffc04cb557d1142fd1331a0ccaedcd286de foundry-parity-lab CanCook +CLASS 0x51160001 1 211 06c0587ab340e179 +BASIS 0x51160001 0 ops:stock/0 +BASIS 0x51160001 1 ops:stock/1 +BASIS 0x51160001 2 ops:stock/2 +BASIS 0x51160001 3 ops:stock/3 +BASIS 0x51160001 4 ops:stock/4 +BASIS 0x51160001 5 ops:stock/5 +BASIS 0x51160001 6 ops:stock/6 +BASIS 0x51160001 7 ops:stock/7 +BASIS 0x51160001 8 ops:stock/8 +BASIS 0x51160001 9 ops:stock/9 +BASIS 0x51160001 10 ops:stock/10 +BASIS 0x51160001 11 ops:stock/11 +BASIS 0x51160001 12 ops:stock/12 +BASIS 0x51160001 13 ops:stock/13 +BASIS 0x51160001 14 ops:stock/14 +BASIS 0x51160001 15 ops:stock/15 +BASIS 0x51160001 16 ops:stock/16 +BASIS 0x51160001 17 ops:stock/17 +BASIS 0x51160001 18 ops:stock/18 +BASIS 0x51160001 19 ops:stock/19 +BASIS 0x51160001 20 ops:stock/20 +BASIS 0x51160001 21 ops:stock/21 +BASIS 0x51160001 22 ops:stock/22 +BASIS 0x51160001 23 ops:stock/23 +BASIS 0x51160001 24 ops:stock/24 +BASIS 0x51160001 25 ops:stock/25 +BASIS 0x51160001 26 ops:stock/26 +BASIS 0x51160001 27 ops:stock/27 +BASIS 0x51160001 28 ops:stock/28 +BASIS 0x51160001 29 ops:stock/29 +BASIS 0x51160001 30 ops:stock/30 +BASIS 0x51160001 31 ops:stock/31 +BASIS 0x51160001 32 ops:stock/32 +BASIS 0x51160001 33 ops:stock/33 +BASIS 0x51160001 34 ops:stock/34 +BASIS 0x51160001 35 ops:stock/35 +BASIS 0x51160001 36 ops:stock/36 +BASIS 0x51160001 37 ops:stock/37 +BASIS 0x51160001 38 ops:stock/38 +BASIS 0x51160001 39 ops:stock/39 +BASIS 0x51160001 40 ops:stock/40 +BASIS 0x51160001 41 ops:stock/41 +BASIS 0x51160001 42 ops:stock/42 +BASIS 0x51160001 43 ops:stock/43 +BASIS 0x51160001 44 ops:stock/44 +BASIS 0x51160001 45 ops:stock/45 +BASIS 0x51160001 46 ops:stock/46 +BASIS 0x51160001 47 ops:stock/47 +BASIS 0x51160001 48 ops:stock/48 +BASIS 0x51160001 49 ops:stock/49 +BASIS 0x51160001 50 ops:stock/50 +BASIS 0x51160001 51 ops:stock/51 +BASIS 0x51160001 52 ops:stock/52 +BASIS 0x51160001 53 ops:stock/53 +BASIS 0x51160001 54 ops:stock/54 +BASIS 0x51160001 55 ops:stock/55 +BASIS 0x51160001 56 ops:stock/56 +BASIS 0x51160001 57 ops:stock/57 +BASIS 0x51160001 58 ops:stock/58 +BASIS 0x51160001 59 ops:stock/59 +BASIS 0x51160001 60 ops:stock/60 +BASIS 0x51160001 61 ops:stock/61 +BASIS 0x51160001 62 ops:stock/62 +BASIS 0x51160001 63 ops:stock/63 +BASIS 0x51160001 64 ops:stockKnown/0 +BASIS 0x51160001 65 ops:stockKnown/1 +BASIS 0x51160001 66 ops:stockKnown/2 +BASIS 0x51160001 67 ops:stockKnown/3 +BASIS 0x51160001 68 ops:stockKnown/4 +BASIS 0x51160001 69 ops:stockKnown/5 +BASIS 0x51160001 70 ops:stockKnown/6 +BASIS 0x51160001 71 ops:stockKnown/7 +BASIS 0x51160001 72 ops:stockKnown/8 +BASIS 0x51160001 73 ops:stockKnown/9 +BASIS 0x51160001 74 ops:stockKnown/10 +BASIS 0x51160001 75 ops:stockKnown/11 +BASIS 0x51160001 76 ops:stockKnown/12 +BASIS 0x51160001 77 ops:stockKnown/13 +BASIS 0x51160001 78 ops:stockKnown/14 +BASIS 0x51160001 79 ops:stockKnown/15 +BASIS 0x51160001 80 ops:stockKnown/16 +BASIS 0x51160001 81 ops:stockKnown/17 +BASIS 0x51160001 82 ops:stockKnown/18 +BASIS 0x51160001 83 ops:stockKnown/19 +BASIS 0x51160001 84 ops:stockKnown/20 +BASIS 0x51160001 85 ops:stockKnown/21 +BASIS 0x51160001 86 ops:stockKnown/22 +BASIS 0x51160001 87 ops:stockKnown/23 +BASIS 0x51160001 88 ops:stockKnown/24 +BASIS 0x51160001 89 ops:stockKnown/25 +BASIS 0x51160001 90 ops:stockKnown/26 +BASIS 0x51160001 91 ops:stockKnown/27 +BASIS 0x51160001 92 ops:stockKnown/28 +BASIS 0x51160001 93 ops:stockKnown/29 +BASIS 0x51160001 94 ops:stockKnown/30 +BASIS 0x51160001 95 ops:stockKnown/31 +BASIS 0x51160001 96 ops:stockKnown/32 +BASIS 0x51160001 97 ops:stockKnown/33 +BASIS 0x51160001 98 ops:stockKnown/34 +BASIS 0x51160001 99 ops:stockKnown/35 +BASIS 0x51160001 100 ops:stockKnown/36 +BASIS 0x51160001 101 ops:stockKnown/37 +BASIS 0x51160001 102 ops:stockKnown/38 +BASIS 0x51160001 103 ops:stockKnown/39 +BASIS 0x51160001 104 ops:stockKnown/40 +BASIS 0x51160001 105 ops:stockKnown/41 +BASIS 0x51160001 106 ops:stockKnown/42 +BASIS 0x51160001 107 ops:stockKnown/43 +BASIS 0x51160001 108 ops:stockKnown/44 +BASIS 0x51160001 109 ops:stockKnown/45 +BASIS 0x51160001 110 ops:stockKnown/46 +BASIS 0x51160001 111 ops:stockKnown/47 +BASIS 0x51160001 112 ops:stockKnown/48 +BASIS 0x51160001 113 ops:stockKnown/49 +BASIS 0x51160001 114 ops:stockKnown/50 +BASIS 0x51160001 115 ops:stockKnown/51 +BASIS 0x51160001 116 ops:stockKnown/52 +BASIS 0x51160001 117 ops:stockKnown/53 +BASIS 0x51160001 118 ops:stockKnown/54 +BASIS 0x51160001 119 ops:stockKnown/55 +BASIS 0x51160001 120 ops:stockKnown/56 +BASIS 0x51160001 121 ops:stockKnown/57 +BASIS 0x51160001 122 ops:stockKnown/58 +BASIS 0x51160001 123 ops:stockKnown/59 +BASIS 0x51160001 124 ops:stockKnown/60 +BASIS 0x51160001 125 ops:stockKnown/61 +BASIS 0x51160001 126 ops:stockKnown/62 +BASIS 0x51160001 127 ops:stockKnown/63 +BASIS 0x51160001 128 ops:unitCost/0 +BASIS 0x51160001 129 ops:unitCost/1 +BASIS 0x51160001 130 ops:unitCost/2 +BASIS 0x51160001 131 ops:unitCost/3 +BASIS 0x51160001 132 ops:unitCost/4 +BASIS 0x51160001 133 ops:unitCost/5 +BASIS 0x51160001 134 ops:unitCost/6 +BASIS 0x51160001 135 ops:unitCost/7 +BASIS 0x51160001 136 ops:unitCost/8 +BASIS 0x51160001 137 ops:unitCost/9 +BASIS 0x51160001 138 ops:unitCost/10 +BASIS 0x51160001 139 ops:unitCost/11 +BASIS 0x51160001 140 ops:unitCost/12 +BASIS 0x51160001 141 ops:unitCost/13 +BASIS 0x51160001 142 ops:unitCost/14 +BASIS 0x51160001 143 ops:unitCost/15 +BASIS 0x51160001 144 ops:unitCost/16 +BASIS 0x51160001 145 ops:unitCost/17 +BASIS 0x51160001 146 ops:unitCost/18 +BASIS 0x51160001 147 ops:unitCost/19 +BASIS 0x51160001 148 ops:unitCost/20 +BASIS 0x51160001 149 ops:unitCost/21 +BASIS 0x51160001 150 ops:unitCost/22 +BASIS 0x51160001 151 ops:unitCost/23 +BASIS 0x51160001 152 ops:unitCost/24 +BASIS 0x51160001 153 ops:unitCost/25 +BASIS 0x51160001 154 ops:unitCost/26 +BASIS 0x51160001 155 ops:unitCost/27 +BASIS 0x51160001 156 ops:unitCost/28 +BASIS 0x51160001 157 ops:unitCost/29 +BASIS 0x51160001 158 ops:unitCost/30 +BASIS 0x51160001 159 ops:unitCost/31 +BASIS 0x51160001 160 ops:unitCost/32 +BASIS 0x51160001 161 ops:unitCost/33 +BASIS 0x51160001 162 ops:unitCost/34 +BASIS 0x51160001 163 ops:unitCost/35 +BASIS 0x51160001 164 ops:unitCost/36 +BASIS 0x51160001 165 ops:unitCost/37 +BASIS 0x51160001 166 ops:unitCost/38 +BASIS 0x51160001 167 ops:unitCost/39 +BASIS 0x51160001 168 ops:unitCost/40 +BASIS 0x51160001 169 ops:unitCost/41 +BASIS 0x51160001 170 ops:unitCost/42 +BASIS 0x51160001 171 ops:unitCost/43 +BASIS 0x51160001 172 ops:unitCost/44 +BASIS 0x51160001 173 ops:unitCost/45 +BASIS 0x51160001 174 ops:unitCost/46 +BASIS 0x51160001 175 ops:unitCost/47 +BASIS 0x51160001 176 ops:unitCost/48 +BASIS 0x51160001 177 ops:unitCost/49 +BASIS 0x51160001 178 ops:unitCost/50 +BASIS 0x51160001 179 ops:unitCost/51 +BASIS 0x51160001 180 ops:unitCost/52 +BASIS 0x51160001 181 ops:unitCost/53 +BASIS 0x51160001 182 ops:unitCost/54 +BASIS 0x51160001 183 ops:unitCost/55 +BASIS 0x51160001 184 ops:unitCost/56 +BASIS 0x51160001 185 ops:unitCost/57 +BASIS 0x51160001 186 ops:unitCost/58 +BASIS 0x51160001 187 ops:unitCost/59 +BASIS 0x51160001 188 ops:unitCost/60 +BASIS 0x51160001 189 ops:unitCost/61 +BASIS 0x51160001 190 ops:unitCost/62 +BASIS 0x51160001 191 ops:unitCost/63 +BASIS 0x51160001 192 ops:staff/0 +BASIS 0x51160001 193 ops:staff/1 +BASIS 0x51160001 194 ops:staff/2 +BASIS 0x51160001 195 ops:staff/3 +BASIS 0x51160001 196 ops:equipment/0 +BASIS 0x51160001 197 ops:equipment/1 +BASIS 0x51160001 198 ops:equipment/2 +BASIS 0x51160001 199 ops:equipment/3 +BASIS 0x51160001 200 ops:offers/0 +BASIS 0x51160001 201 ops:offers/1 +BASIS 0x51160001 202 ops:offers/2 +BASIS 0x51160001 203 ops:offers/3 +BASIS 0x51160001 204 ops:offers/4 +BASIS 0x51160001 205 ops:offers/5 +BASIS 0x51160001 206 ops:offers/6 +BASIS 0x51160001 207 ops:offers/7 +BASIS 0x51160001 208 ops:deliverySlots +BASIS 0x51160001 209 ops:deliveryMinutes +BASIS 0x51160001 210 ops:storeId +METHOD 0x51160001 1 1 2fb0b32d08e66e2cd2ad070eaf572c82 ADMITTED_BY_ISSUER Distinct TwoValued Values CanCook(item 0, q 1) +ON 0x51160001 1 0 ops:stock/0 +ON 0x51160001 1 1 ops:stock/1 +ON 0x51160001 1 2 ops:stock/2 +ON 0x51160001 1 64 ops:stockKnown/0 +ON 0x51160001 1 65 ops:stockKnown/1 +ON 0x51160001 1 66 ops:stockKnown/2 +ON 0x51160001 1 192 ops:staff/0 +ON 0x51160001 1 196 ops:equipment/0 +ON 0x51160001 1 200 ops:offers/0 +READ 0x51160001 1 0 ops:stock/0 +READ 0x51160001 1 1 ops:stock/1 +READ 0x51160001 1 2 ops:stock/2 +READ 0x51160001 1 64 ops:stockKnown/0 +READ 0x51160001 1 65 ops:stockKnown/1 +READ 0x51160001 1 66 ops:stockKnown/2 +READ 0x51160001 1 192 ops:staff/0 +READ 0x51160001 1 196 ops:equipment/0 +READ 0x51160001 1 200 ops:offers/0 +WHEN 0x51160001 1 TwoValued And([Sym(200), Sym(196), Sym(64), Res(I32 { lane: 0, op: Ge, t: 2 }), Sym(65), Res(I32 { lane: 1, op: Ge, t: 1 }), Sym(66), Res(I32 { lane: 2, op: Ge, t: 1 }), Res(I32 { lane: 192, op: Ge, t: 1 })]) GuardWitness { normal: And([Sym(64), Sym(65), Sym(66), Sym(196), Sym(200), Res(I32 { lane: 0, op: Gt, t: 1 }), Res(I32 { lane: 1, op: Gt, t: 0 }), Res(I32 { lane: 2, op: Gt, t: 0 }), Res(I32 { lane: 192, op: Gt, t: 0 })]), logic: TwoValued } +DEP 0x51160001 1 0 Sym 200 UNKNOWN 200 ops:offers/0 +DEP 0x51160001 1 1 Sym 196 UNKNOWN 196 ops:equipment/0 +DEP 0x51160001 1 2 Sym 64 UNKNOWN 64 ops:stockKnown/0 +DEP 0x51160001 1 3 ResI32 0 UNKNOWN 0 ops:stock/0 +DEP 0x51160001 1 4 Sym 65 UNKNOWN 65 ops:stockKnown/1 +DEP 0x51160001 1 5 ResI32 1 UNKNOWN 1 ops:stock/1 +DEP 0x51160001 1 6 Sym 66 UNKNOWN 66 ops:stockKnown/2 +DEP 0x51160001 1 7 ResI32 2 UNKNOWN 2 ops:stock/2 +DEP 0x51160001 1 8 ResI32 192 UNKNOWN 192 ops:staff/0 +DO_NONE 0x51160001 1 +METHOD 0x51160001 3 1 a37b3aa062082f55899ff2b3611fcf08 ADMITTED_BY_ISSUER Distinct TwoValued Values CanCook(item 0, q 3) +ON 0x51160001 3 0 ops:stock/0 +ON 0x51160001 3 1 ops:stock/1 +ON 0x51160001 3 2 ops:stock/2 +ON 0x51160001 3 64 ops:stockKnown/0 +ON 0x51160001 3 65 ops:stockKnown/1 +ON 0x51160001 3 66 ops:stockKnown/2 +ON 0x51160001 3 192 ops:staff/0 +ON 0x51160001 3 196 ops:equipment/0 +ON 0x51160001 3 200 ops:offers/0 +READ 0x51160001 3 0 ops:stock/0 +READ 0x51160001 3 1 ops:stock/1 +READ 0x51160001 3 2 ops:stock/2 +READ 0x51160001 3 64 ops:stockKnown/0 +READ 0x51160001 3 65 ops:stockKnown/1 +READ 0x51160001 3 66 ops:stockKnown/2 +READ 0x51160001 3 192 ops:staff/0 +READ 0x51160001 3 196 ops:equipment/0 +READ 0x51160001 3 200 ops:offers/0 +WHEN 0x51160001 3 TwoValued And([Sym(200), Sym(196), Sym(64), Res(I32 { lane: 0, op: Ge, t: 6 }), Sym(65), Res(I32 { lane: 1, op: Ge, t: 3 }), Sym(66), Res(I32 { lane: 2, op: Ge, t: 3 }), Res(I32 { lane: 192, op: Ge, t: 1 })]) GuardWitness { normal: And([Sym(64), Sym(65), Sym(66), Sym(196), Sym(200), Res(I32 { lane: 0, op: Gt, t: 5 }), Res(I32 { lane: 1, op: Gt, t: 2 }), Res(I32 { lane: 2, op: Gt, t: 2 }), Res(I32 { lane: 192, op: Gt, t: 0 })]), logic: TwoValued } +DEP 0x51160001 3 0 Sym 200 UNKNOWN 200 ops:offers/0 +DEP 0x51160001 3 1 Sym 196 UNKNOWN 196 ops:equipment/0 +DEP 0x51160001 3 2 Sym 64 UNKNOWN 64 ops:stockKnown/0 +DEP 0x51160001 3 3 ResI32 0 UNKNOWN 0 ops:stock/0 +DEP 0x51160001 3 4 Sym 65 UNKNOWN 65 ops:stockKnown/1 +DEP 0x51160001 3 5 ResI32 1 UNKNOWN 1 ops:stock/1 +DEP 0x51160001 3 6 Sym 66 UNKNOWN 66 ops:stockKnown/2 +DEP 0x51160001 3 7 ResI32 2 UNKNOWN 2 ops:stock/2 +DEP 0x51160001 3 8 ResI32 192 UNKNOWN 192 ops:staff/0 +DO_NONE 0x51160001 3 +METHOD 0x51160001 257 1 54e20e07f3007f78f38a5e1317ecfc5d ADMITTED_BY_ISSUER Distinct TwoValued Values CanCook(item 1, q 1) +ON 0x51160001 257 10 ops:stock/10 +ON 0x51160001 257 21 ops:stock/21 +ON 0x51160001 257 32 ops:stock/32 +ON 0x51160001 257 74 ops:stockKnown/10 +ON 0x51160001 257 85 ops:stockKnown/21 +ON 0x51160001 257 96 ops:stockKnown/32 +ON 0x51160001 257 193 ops:staff/1 +ON 0x51160001 257 197 ops:equipment/1 +ON 0x51160001 257 201 ops:offers/1 +READ 0x51160001 257 10 ops:stock/10 +READ 0x51160001 257 21 ops:stock/21 +READ 0x51160001 257 32 ops:stock/32 +READ 0x51160001 257 74 ops:stockKnown/10 +READ 0x51160001 257 85 ops:stockKnown/21 +READ 0x51160001 257 96 ops:stockKnown/32 +READ 0x51160001 257 193 ops:staff/1 +READ 0x51160001 257 197 ops:equipment/1 +READ 0x51160001 257 201 ops:offers/1 +WHEN 0x51160001 257 TwoValued And([Sym(201), Sym(197), Sym(74), Res(I32 { lane: 10, op: Ge, t: 2 }), Sym(85), Res(I32 { lane: 21, op: Ge, t: 3 }), Sym(96), Res(I32 { lane: 32, op: Ge, t: 1 }), Res(I32 { lane: 193, op: Ge, t: 1 })]) GuardWitness { normal: And([Sym(74), Sym(85), Sym(96), Sym(197), Sym(201), Res(I32 { lane: 10, op: Gt, t: 1 }), Res(I32 { lane: 21, op: Gt, t: 2 }), Res(I32 { lane: 32, op: Gt, t: 0 }), Res(I32 { lane: 193, op: Gt, t: 0 })]), logic: TwoValued } +DEP 0x51160001 257 0 Sym 201 UNKNOWN 201 ops:offers/1 +DEP 0x51160001 257 1 Sym 197 UNKNOWN 197 ops:equipment/1 +DEP 0x51160001 257 2 Sym 74 UNKNOWN 74 ops:stockKnown/10 +DEP 0x51160001 257 3 ResI32 10 UNKNOWN 10 ops:stock/10 +DEP 0x51160001 257 4 Sym 85 UNKNOWN 85 ops:stockKnown/21 +DEP 0x51160001 257 5 ResI32 21 UNKNOWN 21 ops:stock/21 +DEP 0x51160001 257 6 Sym 96 UNKNOWN 96 ops:stockKnown/32 +DEP 0x51160001 257 7 ResI32 32 UNKNOWN 32 ops:stock/32 +DEP 0x51160001 257 8 ResI32 193 UNKNOWN 193 ops:staff/1 +DO_NONE 0x51160001 257 +METHOD 0x51160001 259 1 e07db047aeb9d18bd1035f2b72e177eb ADMITTED_BY_ISSUER Distinct TwoValued Values CanCook(item 1, q 3) +ON 0x51160001 259 10 ops:stock/10 +ON 0x51160001 259 21 ops:stock/21 +ON 0x51160001 259 32 ops:stock/32 +ON 0x51160001 259 74 ops:stockKnown/10 +ON 0x51160001 259 85 ops:stockKnown/21 +ON 0x51160001 259 96 ops:stockKnown/32 +ON 0x51160001 259 193 ops:staff/1 +ON 0x51160001 259 197 ops:equipment/1 +ON 0x51160001 259 201 ops:offers/1 +READ 0x51160001 259 10 ops:stock/10 +READ 0x51160001 259 21 ops:stock/21 +READ 0x51160001 259 32 ops:stock/32 +READ 0x51160001 259 74 ops:stockKnown/10 +READ 0x51160001 259 85 ops:stockKnown/21 +READ 0x51160001 259 96 ops:stockKnown/32 +READ 0x51160001 259 193 ops:staff/1 +READ 0x51160001 259 197 ops:equipment/1 +READ 0x51160001 259 201 ops:offers/1 +WHEN 0x51160001 259 TwoValued And([Sym(201), Sym(197), Sym(74), Res(I32 { lane: 10, op: Ge, t: 6 }), Sym(85), Res(I32 { lane: 21, op: Ge, t: 9 }), Sym(96), Res(I32 { lane: 32, op: Ge, t: 3 }), Res(I32 { lane: 193, op: Ge, t: 1 })]) GuardWitness { normal: And([Sym(74), Sym(85), Sym(96), Sym(197), Sym(201), Res(I32 { lane: 10, op: Gt, t: 5 }), Res(I32 { lane: 21, op: Gt, t: 8 }), Res(I32 { lane: 32, op: Gt, t: 2 }), Res(I32 { lane: 193, op: Gt, t: 0 })]), logic: TwoValued } +DEP 0x51160001 259 0 Sym 201 UNKNOWN 201 ops:offers/1 +DEP 0x51160001 259 1 Sym 197 UNKNOWN 197 ops:equipment/1 +DEP 0x51160001 259 2 Sym 74 UNKNOWN 74 ops:stockKnown/10 +DEP 0x51160001 259 3 ResI32 10 UNKNOWN 10 ops:stock/10 +DEP 0x51160001 259 4 Sym 85 UNKNOWN 85 ops:stockKnown/21 +DEP 0x51160001 259 5 ResI32 21 UNKNOWN 21 ops:stock/21 +DEP 0x51160001 259 6 Sym 96 UNKNOWN 96 ops:stockKnown/32 +DEP 0x51160001 259 7 ResI32 32 UNKNOWN 32 ops:stock/32 +DEP 0x51160001 259 8 ResI32 193 UNKNOWN 193 ops:staff/1 +DO_NONE 0x51160001 259 +METHOD 0x51160001 513 1 e904a8e7bbe8d78de33a9b55f05b79d8 ADMITTED_BY_ISSUER Distinct TwoValued Values CanCook(item 2, q 1) +ON 0x51160001 513 17 ops:stock/17 +ON 0x51160001 513 28 ops:stock/28 +ON 0x51160001 513 39 ops:stock/39 +ON 0x51160001 513 81 ops:stockKnown/17 +ON 0x51160001 513 92 ops:stockKnown/28 +ON 0x51160001 513 103 ops:stockKnown/39 +ON 0x51160001 513 194 ops:staff/2 +ON 0x51160001 513 198 ops:equipment/2 +ON 0x51160001 513 202 ops:offers/2 +READ 0x51160001 513 17 ops:stock/17 +READ 0x51160001 513 28 ops:stock/28 +READ 0x51160001 513 39 ops:stock/39 +READ 0x51160001 513 81 ops:stockKnown/17 +READ 0x51160001 513 92 ops:stockKnown/28 +READ 0x51160001 513 103 ops:stockKnown/39 +READ 0x51160001 513 194 ops:staff/2 +READ 0x51160001 513 198 ops:equipment/2 +READ 0x51160001 513 202 ops:offers/2 +WHEN 0x51160001 513 TwoValued And([Sym(202), Sym(198), Sym(81), Res(I32 { lane: 17, op: Ge, t: 3 }), Sym(92), Res(I32 { lane: 28, op: Ge, t: 1 }), Sym(103), Res(I32 { lane: 39, op: Ge, t: 2 }), Res(I32 { lane: 194, op: Ge, t: 1 })]) GuardWitness { normal: And([Sym(81), Sym(92), Sym(103), Sym(198), Sym(202), Res(I32 { lane: 17, op: Gt, t: 2 }), Res(I32 { lane: 28, op: Gt, t: 0 }), Res(I32 { lane: 39, op: Gt, t: 1 }), Res(I32 { lane: 194, op: Gt, t: 0 })]), logic: TwoValued } +DEP 0x51160001 513 0 Sym 202 UNKNOWN 202 ops:offers/2 +DEP 0x51160001 513 1 Sym 198 UNKNOWN 198 ops:equipment/2 +DEP 0x51160001 513 2 Sym 81 UNKNOWN 81 ops:stockKnown/17 +DEP 0x51160001 513 3 ResI32 17 UNKNOWN 17 ops:stock/17 +DEP 0x51160001 513 4 Sym 92 UNKNOWN 92 ops:stockKnown/28 +DEP 0x51160001 513 5 ResI32 28 UNKNOWN 28 ops:stock/28 +DEP 0x51160001 513 6 Sym 103 UNKNOWN 103 ops:stockKnown/39 +DEP 0x51160001 513 7 ResI32 39 UNKNOWN 39 ops:stock/39 +DEP 0x51160001 513 8 ResI32 194 UNKNOWN 194 ops:staff/2 +DO_NONE 0x51160001 513 +METHOD 0x51160001 515 1 71f0a9004b598206f18fcee411226542 ADMITTED_BY_ISSUER Distinct TwoValued Values CanCook(item 2, q 3) +ON 0x51160001 515 17 ops:stock/17 +ON 0x51160001 515 28 ops:stock/28 +ON 0x51160001 515 39 ops:stock/39 +ON 0x51160001 515 81 ops:stockKnown/17 +ON 0x51160001 515 92 ops:stockKnown/28 +ON 0x51160001 515 103 ops:stockKnown/39 +ON 0x51160001 515 194 ops:staff/2 +ON 0x51160001 515 198 ops:equipment/2 +ON 0x51160001 515 202 ops:offers/2 +READ 0x51160001 515 17 ops:stock/17 +READ 0x51160001 515 28 ops:stock/28 +READ 0x51160001 515 39 ops:stock/39 +READ 0x51160001 515 81 ops:stockKnown/17 +READ 0x51160001 515 92 ops:stockKnown/28 +READ 0x51160001 515 103 ops:stockKnown/39 +READ 0x51160001 515 194 ops:staff/2 +READ 0x51160001 515 198 ops:equipment/2 +READ 0x51160001 515 202 ops:offers/2 +WHEN 0x51160001 515 TwoValued And([Sym(202), Sym(198), Sym(81), Res(I32 { lane: 17, op: Ge, t: 9 }), Sym(92), Res(I32 { lane: 28, op: Ge, t: 3 }), Sym(103), Res(I32 { lane: 39, op: Ge, t: 6 }), Res(I32 { lane: 194, op: Ge, t: 1 })]) GuardWitness { normal: And([Sym(81), Sym(92), Sym(103), Sym(198), Sym(202), Res(I32 { lane: 17, op: Gt, t: 8 }), Res(I32 { lane: 28, op: Gt, t: 2 }), Res(I32 { lane: 39, op: Gt, t: 5 }), Res(I32 { lane: 194, op: Gt, t: 0 })]), logic: TwoValued } +DEP 0x51160001 515 0 Sym 202 UNKNOWN 202 ops:offers/2 +DEP 0x51160001 515 1 Sym 198 UNKNOWN 198 ops:equipment/2 +DEP 0x51160001 515 2 Sym 81 UNKNOWN 81 ops:stockKnown/17 +DEP 0x51160001 515 3 ResI32 17 UNKNOWN 17 ops:stock/17 +DEP 0x51160001 515 4 Sym 92 UNKNOWN 92 ops:stockKnown/28 +DEP 0x51160001 515 5 ResI32 28 UNKNOWN 28 ops:stock/28 +DEP 0x51160001 515 6 Sym 103 UNKNOWN 103 ops:stockKnown/39 +DEP 0x51160001 515 7 ResI32 39 UNKNOWN 39 ops:stock/39 +DEP 0x51160001 515 8 ResI32 194 UNKNOWN 194 ops:staff/2 +DO_NONE 0x51160001 515 +METHOD 0x51160001 769 1 c11c04ccae176241b764f045b6221ec3 ADMITTED_BY_ISSUER Distinct TwoValued Values CanCook(item 3, q 1) +ON 0x51160001 769 24 ops:stock/24 +ON 0x51160001 769 35 ops:stock/35 +ON 0x51160001 769 46 ops:stock/46 +ON 0x51160001 769 88 ops:stockKnown/24 +ON 0x51160001 769 99 ops:stockKnown/35 +ON 0x51160001 769 110 ops:stockKnown/46 +ON 0x51160001 769 195 ops:staff/3 +ON 0x51160001 769 199 ops:equipment/3 +ON 0x51160001 769 203 ops:offers/3 +READ 0x51160001 769 24 ops:stock/24 +READ 0x51160001 769 35 ops:stock/35 +READ 0x51160001 769 46 ops:stock/46 +READ 0x51160001 769 88 ops:stockKnown/24 +READ 0x51160001 769 99 ops:stockKnown/35 +READ 0x51160001 769 110 ops:stockKnown/46 +READ 0x51160001 769 195 ops:staff/3 +READ 0x51160001 769 199 ops:equipment/3 +READ 0x51160001 769 203 ops:offers/3 +WHEN 0x51160001 769 TwoValued And([Sym(203), Sym(199), Sym(88), Res(I32 { lane: 24, op: Ge, t: 1 }), Sym(99), Res(I32 { lane: 35, op: Ge, t: 2 }), Sym(110), Res(I32 { lane: 46, op: Ge, t: 3 }), Res(I32 { lane: 195, op: Ge, t: 1 })]) GuardWitness { normal: And([Sym(88), Sym(99), Sym(110), Sym(199), Sym(203), Res(I32 { lane: 24, op: Gt, t: 0 }), Res(I32 { lane: 35, op: Gt, t: 1 }), Res(I32 { lane: 46, op: Gt, t: 2 }), Res(I32 { lane: 195, op: Gt, t: 0 })]), logic: TwoValued } +DEP 0x51160001 769 0 Sym 203 UNKNOWN 203 ops:offers/3 +DEP 0x51160001 769 1 Sym 199 UNKNOWN 199 ops:equipment/3 +DEP 0x51160001 769 2 Sym 88 UNKNOWN 88 ops:stockKnown/24 +DEP 0x51160001 769 3 ResI32 24 UNKNOWN 24 ops:stock/24 +DEP 0x51160001 769 4 Sym 99 UNKNOWN 99 ops:stockKnown/35 +DEP 0x51160001 769 5 ResI32 35 UNKNOWN 35 ops:stock/35 +DEP 0x51160001 769 6 Sym 110 UNKNOWN 110 ops:stockKnown/46 +DEP 0x51160001 769 7 ResI32 46 UNKNOWN 46 ops:stock/46 +DEP 0x51160001 769 8 ResI32 195 UNKNOWN 195 ops:staff/3 +DO_NONE 0x51160001 769 +METHOD 0x51160001 771 1 03f88e37adbb70e43e2a1ea522098875 ADMITTED_BY_ISSUER Distinct TwoValued Values CanCook(item 3, q 3) +ON 0x51160001 771 24 ops:stock/24 +ON 0x51160001 771 35 ops:stock/35 +ON 0x51160001 771 46 ops:stock/46 +ON 0x51160001 771 88 ops:stockKnown/24 +ON 0x51160001 771 99 ops:stockKnown/35 +ON 0x51160001 771 110 ops:stockKnown/46 +ON 0x51160001 771 195 ops:staff/3 +ON 0x51160001 771 199 ops:equipment/3 +ON 0x51160001 771 203 ops:offers/3 +READ 0x51160001 771 24 ops:stock/24 +READ 0x51160001 771 35 ops:stock/35 +READ 0x51160001 771 46 ops:stock/46 +READ 0x51160001 771 88 ops:stockKnown/24 +READ 0x51160001 771 99 ops:stockKnown/35 +READ 0x51160001 771 110 ops:stockKnown/46 +READ 0x51160001 771 195 ops:staff/3 +READ 0x51160001 771 199 ops:equipment/3 +READ 0x51160001 771 203 ops:offers/3 +WHEN 0x51160001 771 TwoValued And([Sym(203), Sym(199), Sym(88), Res(I32 { lane: 24, op: Ge, t: 3 }), Sym(99), Res(I32 { lane: 35, op: Ge, t: 6 }), Sym(110), Res(I32 { lane: 46, op: Ge, t: 9 }), Res(I32 { lane: 195, op: Ge, t: 1 })]) GuardWitness { normal: And([Sym(88), Sym(99), Sym(110), Sym(199), Sym(203), Res(I32 { lane: 24, op: Gt, t: 2 }), Res(I32 { lane: 35, op: Gt, t: 5 }), Res(I32 { lane: 46, op: Gt, t: 8 }), Res(I32 { lane: 195, op: Gt, t: 0 })]), logic: TwoValued } +DEP 0x51160001 771 0 Sym 203 UNKNOWN 203 ops:offers/3 +DEP 0x51160001 771 1 Sym 199 UNKNOWN 199 ops:equipment/3 +DEP 0x51160001 771 2 Sym 88 UNKNOWN 88 ops:stockKnown/24 +DEP 0x51160001 771 3 ResI32 24 UNKNOWN 24 ops:stock/24 +DEP 0x51160001 771 4 Sym 99 UNKNOWN 99 ops:stockKnown/35 +DEP 0x51160001 771 5 ResI32 35 UNKNOWN 35 ops:stock/35 +DEP 0x51160001 771 6 Sym 110 UNKNOWN 110 ops:stockKnown/46 +DEP 0x51160001 771 7 ResI32 46 UNKNOWN 46 ops:stock/46 +DEP 0x51160001 771 8 ResI32 195 UNKNOWN 195 ops:staff/3 +DO_NONE 0x51160001 771 +METHOD 0x51160001 1025 1 dee24f9bd10247ee4dd02b9246e69c06 ADMITTED_BY_ISSUER Distinct TwoValued Values CanCook(item 4, q 1) +ON 0x51160001 1025 31 ops:stock/31 +ON 0x51160001 1025 42 ops:stock/42 +ON 0x51160001 1025 53 ops:stock/53 +ON 0x51160001 1025 95 ops:stockKnown/31 +ON 0x51160001 1025 106 ops:stockKnown/42 +ON 0x51160001 1025 117 ops:stockKnown/53 +ON 0x51160001 1025 192 ops:staff/0 +ON 0x51160001 1025 196 ops:equipment/0 +ON 0x51160001 1025 204 ops:offers/4 +READ 0x51160001 1025 31 ops:stock/31 +READ 0x51160001 1025 42 ops:stock/42 +READ 0x51160001 1025 53 ops:stock/53 +READ 0x51160001 1025 95 ops:stockKnown/31 +READ 0x51160001 1025 106 ops:stockKnown/42 +READ 0x51160001 1025 117 ops:stockKnown/53 +READ 0x51160001 1025 192 ops:staff/0 +READ 0x51160001 1025 196 ops:equipment/0 +READ 0x51160001 1025 204 ops:offers/4 +WHEN 0x51160001 1025 TwoValued And([Sym(204), Sym(196), Sym(95), Res(I32 { lane: 31, op: Ge, t: 2 }), Sym(106), Res(I32 { lane: 42, op: Ge, t: 3 }), Sym(117), Res(I32 { lane: 53, op: Ge, t: 1 }), Res(I32 { lane: 192, op: Ge, t: 1 })]) GuardWitness { normal: And([Sym(95), Sym(106), Sym(117), Sym(196), Sym(204), Res(I32 { lane: 31, op: Gt, t: 1 }), Res(I32 { lane: 42, op: Gt, t: 2 }), Res(I32 { lane: 53, op: Gt, t: 0 }), Res(I32 { lane: 192, op: Gt, t: 0 })]), logic: TwoValued } +DEP 0x51160001 1025 0 Sym 204 UNKNOWN 204 ops:offers/4 +DEP 0x51160001 1025 1 Sym 196 UNKNOWN 196 ops:equipment/0 +DEP 0x51160001 1025 2 Sym 95 UNKNOWN 95 ops:stockKnown/31 +DEP 0x51160001 1025 3 ResI32 31 UNKNOWN 31 ops:stock/31 +DEP 0x51160001 1025 4 Sym 106 UNKNOWN 106 ops:stockKnown/42 +DEP 0x51160001 1025 5 ResI32 42 UNKNOWN 42 ops:stock/42 +DEP 0x51160001 1025 6 Sym 117 UNKNOWN 117 ops:stockKnown/53 +DEP 0x51160001 1025 7 ResI32 53 UNKNOWN 53 ops:stock/53 +DEP 0x51160001 1025 8 ResI32 192 UNKNOWN 192 ops:staff/0 +DO_NONE 0x51160001 1025 +METHOD 0x51160001 1027 1 cbf71eb2b4ffcf5ccf9bdef77a587c7c ADMITTED_BY_ISSUER Distinct TwoValued Values CanCook(item 4, q 3) +ON 0x51160001 1027 31 ops:stock/31 +ON 0x51160001 1027 42 ops:stock/42 +ON 0x51160001 1027 53 ops:stock/53 +ON 0x51160001 1027 95 ops:stockKnown/31 +ON 0x51160001 1027 106 ops:stockKnown/42 +ON 0x51160001 1027 117 ops:stockKnown/53 +ON 0x51160001 1027 192 ops:staff/0 +ON 0x51160001 1027 196 ops:equipment/0 +ON 0x51160001 1027 204 ops:offers/4 +READ 0x51160001 1027 31 ops:stock/31 +READ 0x51160001 1027 42 ops:stock/42 +READ 0x51160001 1027 53 ops:stock/53 +READ 0x51160001 1027 95 ops:stockKnown/31 +READ 0x51160001 1027 106 ops:stockKnown/42 +READ 0x51160001 1027 117 ops:stockKnown/53 +READ 0x51160001 1027 192 ops:staff/0 +READ 0x51160001 1027 196 ops:equipment/0 +READ 0x51160001 1027 204 ops:offers/4 +WHEN 0x51160001 1027 TwoValued And([Sym(204), Sym(196), Sym(95), Res(I32 { lane: 31, op: Ge, t: 6 }), Sym(106), Res(I32 { lane: 42, op: Ge, t: 9 }), Sym(117), Res(I32 { lane: 53, op: Ge, t: 3 }), Res(I32 { lane: 192, op: Ge, t: 1 })]) GuardWitness { normal: And([Sym(95), Sym(106), Sym(117), Sym(196), Sym(204), Res(I32 { lane: 31, op: Gt, t: 5 }), Res(I32 { lane: 42, op: Gt, t: 8 }), Res(I32 { lane: 53, op: Gt, t: 2 }), Res(I32 { lane: 192, op: Gt, t: 0 })]), logic: TwoValued } +DEP 0x51160001 1027 0 Sym 204 UNKNOWN 204 ops:offers/4 +DEP 0x51160001 1027 1 Sym 196 UNKNOWN 196 ops:equipment/0 +DEP 0x51160001 1027 2 Sym 95 UNKNOWN 95 ops:stockKnown/31 +DEP 0x51160001 1027 3 ResI32 31 UNKNOWN 31 ops:stock/31 +DEP 0x51160001 1027 4 Sym 106 UNKNOWN 106 ops:stockKnown/42 +DEP 0x51160001 1027 5 ResI32 42 UNKNOWN 42 ops:stock/42 +DEP 0x51160001 1027 6 Sym 117 UNKNOWN 117 ops:stockKnown/53 +DEP 0x51160001 1027 7 ResI32 53 UNKNOWN 53 ops:stock/53 +DEP 0x51160001 1027 8 ResI32 192 UNKNOWN 192 ops:staff/0 +DO_NONE 0x51160001 1027 +METHOD 0x51160001 1281 1 df985eec82827c00571231db21d71369 ADMITTED_BY_ISSUER Distinct TwoValued Values CanCook(item 5, q 1) +ON 0x51160001 1281 38 ops:stock/38 +ON 0x51160001 1281 49 ops:stock/49 +ON 0x51160001 1281 60 ops:stock/60 +ON 0x51160001 1281 102 ops:stockKnown/38 +ON 0x51160001 1281 113 ops:stockKnown/49 +ON 0x51160001 1281 124 ops:stockKnown/60 +ON 0x51160001 1281 193 ops:staff/1 +ON 0x51160001 1281 197 ops:equipment/1 +ON 0x51160001 1281 205 ops:offers/5 +READ 0x51160001 1281 38 ops:stock/38 +READ 0x51160001 1281 49 ops:stock/49 +READ 0x51160001 1281 60 ops:stock/60 +READ 0x51160001 1281 102 ops:stockKnown/38 +READ 0x51160001 1281 113 ops:stockKnown/49 +READ 0x51160001 1281 124 ops:stockKnown/60 +READ 0x51160001 1281 193 ops:staff/1 +READ 0x51160001 1281 197 ops:equipment/1 +READ 0x51160001 1281 205 ops:offers/5 +WHEN 0x51160001 1281 TwoValued And([Sym(205), Sym(197), Sym(102), Res(I32 { lane: 38, op: Ge, t: 3 }), Sym(113), Res(I32 { lane: 49, op: Ge, t: 1 }), Sym(124), Res(I32 { lane: 60, op: Ge, t: 2 }), Res(I32 { lane: 193, op: Ge, t: 1 })]) GuardWitness { normal: And([Sym(102), Sym(113), Sym(124), Sym(197), Sym(205), Res(I32 { lane: 38, op: Gt, t: 2 }), Res(I32 { lane: 49, op: Gt, t: 0 }), Res(I32 { lane: 60, op: Gt, t: 1 }), Res(I32 { lane: 193, op: Gt, t: 0 })]), logic: TwoValued } +DEP 0x51160001 1281 0 Sym 205 UNKNOWN 205 ops:offers/5 +DEP 0x51160001 1281 1 Sym 197 UNKNOWN 197 ops:equipment/1 +DEP 0x51160001 1281 2 Sym 102 UNKNOWN 102 ops:stockKnown/38 +DEP 0x51160001 1281 3 ResI32 38 UNKNOWN 38 ops:stock/38 +DEP 0x51160001 1281 4 Sym 113 UNKNOWN 113 ops:stockKnown/49 +DEP 0x51160001 1281 5 ResI32 49 UNKNOWN 49 ops:stock/49 +DEP 0x51160001 1281 6 Sym 124 UNKNOWN 124 ops:stockKnown/60 +DEP 0x51160001 1281 7 ResI32 60 UNKNOWN 60 ops:stock/60 +DEP 0x51160001 1281 8 ResI32 193 UNKNOWN 193 ops:staff/1 +DO_NONE 0x51160001 1281 +METHOD 0x51160001 1283 1 5540b0ecd5708e5c851cf487de84cb07 ADMITTED_BY_ISSUER Distinct TwoValued Values CanCook(item 5, q 3) +ON 0x51160001 1283 38 ops:stock/38 +ON 0x51160001 1283 49 ops:stock/49 +ON 0x51160001 1283 60 ops:stock/60 +ON 0x51160001 1283 102 ops:stockKnown/38 +ON 0x51160001 1283 113 ops:stockKnown/49 +ON 0x51160001 1283 124 ops:stockKnown/60 +ON 0x51160001 1283 193 ops:staff/1 +ON 0x51160001 1283 197 ops:equipment/1 +ON 0x51160001 1283 205 ops:offers/5 +READ 0x51160001 1283 38 ops:stock/38 +READ 0x51160001 1283 49 ops:stock/49 +READ 0x51160001 1283 60 ops:stock/60 +READ 0x51160001 1283 102 ops:stockKnown/38 +READ 0x51160001 1283 113 ops:stockKnown/49 +READ 0x51160001 1283 124 ops:stockKnown/60 +READ 0x51160001 1283 193 ops:staff/1 +READ 0x51160001 1283 197 ops:equipment/1 +READ 0x51160001 1283 205 ops:offers/5 +WHEN 0x51160001 1283 TwoValued And([Sym(205), Sym(197), Sym(102), Res(I32 { lane: 38, op: Ge, t: 9 }), Sym(113), Res(I32 { lane: 49, op: Ge, t: 3 }), Sym(124), Res(I32 { lane: 60, op: Ge, t: 6 }), Res(I32 { lane: 193, op: Ge, t: 1 })]) GuardWitness { normal: And([Sym(102), Sym(113), Sym(124), Sym(197), Sym(205), Res(I32 { lane: 38, op: Gt, t: 8 }), Res(I32 { lane: 49, op: Gt, t: 2 }), Res(I32 { lane: 60, op: Gt, t: 5 }), Res(I32 { lane: 193, op: Gt, t: 0 })]), logic: TwoValued } +DEP 0x51160001 1283 0 Sym 205 UNKNOWN 205 ops:offers/5 +DEP 0x51160001 1283 1 Sym 197 UNKNOWN 197 ops:equipment/1 +DEP 0x51160001 1283 2 Sym 102 UNKNOWN 102 ops:stockKnown/38 +DEP 0x51160001 1283 3 ResI32 38 UNKNOWN 38 ops:stock/38 +DEP 0x51160001 1283 4 Sym 113 UNKNOWN 113 ops:stockKnown/49 +DEP 0x51160001 1283 5 ResI32 49 UNKNOWN 49 ops:stock/49 +DEP 0x51160001 1283 6 Sym 124 UNKNOWN 124 ops:stockKnown/60 +DEP 0x51160001 1283 7 ResI32 60 UNKNOWN 60 ops:stock/60 +DEP 0x51160001 1283 8 ResI32 193 UNKNOWN 193 ops:staff/1 +DO_NONE 0x51160001 1283 +METHOD 0x51160001 1537 1 acbfb529b830b1290847c3d053dd9b6c ADMITTED_BY_ISSUER Distinct TwoValued Values CanCook(item 6, q 1) +ON 0x51160001 1537 3 ops:stock/3 +ON 0x51160001 1537 45 ops:stock/45 +ON 0x51160001 1537 56 ops:stock/56 +ON 0x51160001 1537 67 ops:stockKnown/3 +ON 0x51160001 1537 109 ops:stockKnown/45 +ON 0x51160001 1537 120 ops:stockKnown/56 +ON 0x51160001 1537 194 ops:staff/2 +ON 0x51160001 1537 198 ops:equipment/2 +ON 0x51160001 1537 206 ops:offers/6 +READ 0x51160001 1537 3 ops:stock/3 +READ 0x51160001 1537 45 ops:stock/45 +READ 0x51160001 1537 56 ops:stock/56 +READ 0x51160001 1537 67 ops:stockKnown/3 +READ 0x51160001 1537 109 ops:stockKnown/45 +READ 0x51160001 1537 120 ops:stockKnown/56 +READ 0x51160001 1537 194 ops:staff/2 +READ 0x51160001 1537 198 ops:equipment/2 +READ 0x51160001 1537 206 ops:offers/6 +WHEN 0x51160001 1537 TwoValued And([Sym(206), Sym(198), Sym(67), Res(I32 { lane: 3, op: Ge, t: 3 }), Sym(109), Res(I32 { lane: 45, op: Ge, t: 1 }), Sym(120), Res(I32 { lane: 56, op: Ge, t: 2 }), Res(I32 { lane: 194, op: Ge, t: 1 })]) GuardWitness { normal: And([Sym(67), Sym(109), Sym(120), Sym(198), Sym(206), Res(I32 { lane: 3, op: Gt, t: 2 }), Res(I32 { lane: 45, op: Gt, t: 0 }), Res(I32 { lane: 56, op: Gt, t: 1 }), Res(I32 { lane: 194, op: Gt, t: 0 })]), logic: TwoValued } +DEP 0x51160001 1537 0 Sym 206 UNKNOWN 206 ops:offers/6 +DEP 0x51160001 1537 1 Sym 198 UNKNOWN 198 ops:equipment/2 +DEP 0x51160001 1537 2 Sym 67 UNKNOWN 67 ops:stockKnown/3 +DEP 0x51160001 1537 3 ResI32 3 UNKNOWN 3 ops:stock/3 +DEP 0x51160001 1537 4 Sym 109 UNKNOWN 109 ops:stockKnown/45 +DEP 0x51160001 1537 5 ResI32 45 UNKNOWN 45 ops:stock/45 +DEP 0x51160001 1537 6 Sym 120 UNKNOWN 120 ops:stockKnown/56 +DEP 0x51160001 1537 7 ResI32 56 UNKNOWN 56 ops:stock/56 +DEP 0x51160001 1537 8 ResI32 194 UNKNOWN 194 ops:staff/2 +DO_NONE 0x51160001 1537 +METHOD 0x51160001 1539 1 21d33d82687c835778c4630cf050db5e ADMITTED_BY_ISSUER Distinct TwoValued Values CanCook(item 6, q 3) +ON 0x51160001 1539 3 ops:stock/3 +ON 0x51160001 1539 45 ops:stock/45 +ON 0x51160001 1539 56 ops:stock/56 +ON 0x51160001 1539 67 ops:stockKnown/3 +ON 0x51160001 1539 109 ops:stockKnown/45 +ON 0x51160001 1539 120 ops:stockKnown/56 +ON 0x51160001 1539 194 ops:staff/2 +ON 0x51160001 1539 198 ops:equipment/2 +ON 0x51160001 1539 206 ops:offers/6 +READ 0x51160001 1539 3 ops:stock/3 +READ 0x51160001 1539 45 ops:stock/45 +READ 0x51160001 1539 56 ops:stock/56 +READ 0x51160001 1539 67 ops:stockKnown/3 +READ 0x51160001 1539 109 ops:stockKnown/45 +READ 0x51160001 1539 120 ops:stockKnown/56 +READ 0x51160001 1539 194 ops:staff/2 +READ 0x51160001 1539 198 ops:equipment/2 +READ 0x51160001 1539 206 ops:offers/6 +WHEN 0x51160001 1539 TwoValued And([Sym(206), Sym(198), Sym(67), Res(I32 { lane: 3, op: Ge, t: 9 }), Sym(109), Res(I32 { lane: 45, op: Ge, t: 3 }), Sym(120), Res(I32 { lane: 56, op: Ge, t: 6 }), Res(I32 { lane: 194, op: Ge, t: 1 })]) GuardWitness { normal: And([Sym(67), Sym(109), Sym(120), Sym(198), Sym(206), Res(I32 { lane: 3, op: Gt, t: 8 }), Res(I32 { lane: 45, op: Gt, t: 2 }), Res(I32 { lane: 56, op: Gt, t: 5 }), Res(I32 { lane: 194, op: Gt, t: 0 })]), logic: TwoValued } +DEP 0x51160001 1539 0 Sym 206 UNKNOWN 206 ops:offers/6 +DEP 0x51160001 1539 1 Sym 198 UNKNOWN 198 ops:equipment/2 +DEP 0x51160001 1539 2 Sym 67 UNKNOWN 67 ops:stockKnown/3 +DEP 0x51160001 1539 3 ResI32 3 UNKNOWN 3 ops:stock/3 +DEP 0x51160001 1539 4 Sym 109 UNKNOWN 109 ops:stockKnown/45 +DEP 0x51160001 1539 5 ResI32 45 UNKNOWN 45 ops:stock/45 +DEP 0x51160001 1539 6 Sym 120 UNKNOWN 120 ops:stockKnown/56 +DEP 0x51160001 1539 7 ResI32 56 UNKNOWN 56 ops:stock/56 +DEP 0x51160001 1539 8 ResI32 194 UNKNOWN 194 ops:staff/2 +DO_NONE 0x51160001 1539 +METHOD 0x51160001 1793 1 a3d9b95cc888ed31a40bb6a3f5ecb3cf ADMITTED_BY_ISSUER Distinct TwoValued Values CanCook(item 7, q 1) +ON 0x51160001 1793 10 ops:stock/10 +ON 0x51160001 1793 52 ops:stock/52 +ON 0x51160001 1793 63 ops:stock/63 +ON 0x51160001 1793 74 ops:stockKnown/10 +ON 0x51160001 1793 116 ops:stockKnown/52 +ON 0x51160001 1793 127 ops:stockKnown/63 +ON 0x51160001 1793 195 ops:staff/3 +ON 0x51160001 1793 199 ops:equipment/3 +ON 0x51160001 1793 207 ops:offers/7 +READ 0x51160001 1793 10 ops:stock/10 +READ 0x51160001 1793 52 ops:stock/52 +READ 0x51160001 1793 63 ops:stock/63 +READ 0x51160001 1793 74 ops:stockKnown/10 +READ 0x51160001 1793 116 ops:stockKnown/52 +READ 0x51160001 1793 127 ops:stockKnown/63 +READ 0x51160001 1793 195 ops:staff/3 +READ 0x51160001 1793 199 ops:equipment/3 +READ 0x51160001 1793 207 ops:offers/7 +WHEN 0x51160001 1793 TwoValued And([Sym(207), Sym(199), Sym(74), Res(I32 { lane: 10, op: Ge, t: 1 }), Sym(116), Res(I32 { lane: 52, op: Ge, t: 2 }), Sym(127), Res(I32 { lane: 63, op: Ge, t: 3 }), Res(I32 { lane: 195, op: Ge, t: 1 })]) GuardWitness { normal: And([Sym(74), Sym(116), Sym(127), Sym(199), Sym(207), Res(I32 { lane: 10, op: Gt, t: 0 }), Res(I32 { lane: 52, op: Gt, t: 1 }), Res(I32 { lane: 63, op: Gt, t: 2 }), Res(I32 { lane: 195, op: Gt, t: 0 })]), logic: TwoValued } +DEP 0x51160001 1793 0 Sym 207 UNKNOWN 207 ops:offers/7 +DEP 0x51160001 1793 1 Sym 199 UNKNOWN 199 ops:equipment/3 +DEP 0x51160001 1793 2 Sym 74 UNKNOWN 74 ops:stockKnown/10 +DEP 0x51160001 1793 3 ResI32 10 UNKNOWN 10 ops:stock/10 +DEP 0x51160001 1793 4 Sym 116 UNKNOWN 116 ops:stockKnown/52 +DEP 0x51160001 1793 5 ResI32 52 UNKNOWN 52 ops:stock/52 +DEP 0x51160001 1793 6 Sym 127 UNKNOWN 127 ops:stockKnown/63 +DEP 0x51160001 1793 7 ResI32 63 UNKNOWN 63 ops:stock/63 +DEP 0x51160001 1793 8 ResI32 195 UNKNOWN 195 ops:staff/3 +DO_NONE 0x51160001 1793 +METHOD 0x51160001 1795 1 ae92cbdd392de5aa5a7b4c5721d9b641 ADMITTED_BY_ISSUER Distinct TwoValued Values CanCook(item 7, q 3) +ON 0x51160001 1795 10 ops:stock/10 +ON 0x51160001 1795 52 ops:stock/52 +ON 0x51160001 1795 63 ops:stock/63 +ON 0x51160001 1795 74 ops:stockKnown/10 +ON 0x51160001 1795 116 ops:stockKnown/52 +ON 0x51160001 1795 127 ops:stockKnown/63 +ON 0x51160001 1795 195 ops:staff/3 +ON 0x51160001 1795 199 ops:equipment/3 +ON 0x51160001 1795 207 ops:offers/7 +READ 0x51160001 1795 10 ops:stock/10 +READ 0x51160001 1795 52 ops:stock/52 +READ 0x51160001 1795 63 ops:stock/63 +READ 0x51160001 1795 74 ops:stockKnown/10 +READ 0x51160001 1795 116 ops:stockKnown/52 +READ 0x51160001 1795 127 ops:stockKnown/63 +READ 0x51160001 1795 195 ops:staff/3 +READ 0x51160001 1795 199 ops:equipment/3 +READ 0x51160001 1795 207 ops:offers/7 +WHEN 0x51160001 1795 TwoValued And([Sym(207), Sym(199), Sym(74), Res(I32 { lane: 10, op: Ge, t: 3 }), Sym(116), Res(I32 { lane: 52, op: Ge, t: 6 }), Sym(127), Res(I32 { lane: 63, op: Ge, t: 9 }), Res(I32 { lane: 195, op: Ge, t: 1 })]) GuardWitness { normal: And([Sym(74), Sym(116), Sym(127), Sym(199), Sym(207), Res(I32 { lane: 10, op: Gt, t: 2 }), Res(I32 { lane: 52, op: Gt, t: 5 }), Res(I32 { lane: 63, op: Gt, t: 8 }), Res(I32 { lane: 195, op: Gt, t: 0 })]), logic: TwoValued } +DEP 0x51160001 1795 0 Sym 207 UNKNOWN 207 ops:offers/7 +DEP 0x51160001 1795 1 Sym 199 UNKNOWN 199 ops:equipment/3 +DEP 0x51160001 1795 2 Sym 74 UNKNOWN 74 ops:stockKnown/10 +DEP 0x51160001 1795 3 ResI32 10 UNKNOWN 10 ops:stock/10 +DEP 0x51160001 1795 4 Sym 116 UNKNOWN 116 ops:stockKnown/52 +DEP 0x51160001 1795 5 ResI32 52 UNKNOWN 52 ops:stock/52 +DEP 0x51160001 1795 6 Sym 127 UNKNOWN 127 ops:stockKnown/63 +DEP 0x51160001 1795 7 ResI32 63 UNKNOWN 63 ops:stock/63 +DEP 0x51160001 1795 8 ResI32 195 UNKNOWN 195 ops:staff/3 +DO_NONE 0x51160001 1795 diff --git a/.claude/probes/2026-11-11-cg-beh-2/lab.facts.tsv b/.claude/probes/2026-11-11-cg-beh-2/lab.facts.tsv new file mode 100644 index 000000000..2cbcec0d5 --- /dev/null +++ b/.claude/probes/2026-11-11-cg-beh-2/lab.facts.tsv @@ -0,0 +1,32 @@ +H cg-beh.facts.v1 317c4ffc04cb557d1142fd1331a0ccaedcd286de cg-beh-probe lab class +CLASS 0x7F0C0001 1 8 4b7b962010df7d77 +BASIS 0x7F0C0001 0 lab:beh/a +BASIS 0x7F0C0001 1 lab:beh/b +BASIS 0x7F0C0001 2 lab:beh/k +BASIS 0x7F0C0001 3 lab:beh/m +BASIS 0x7F0C0001 4 lab:beh/s +BASIS 0x7F0C0001 5 lab:beh/t +BASIS 0x7F0C0001 6 lab:beh/u +BASIS 0x7F0C0001 7 lab:beh/v +METHOD 0x7F0C0001 1 1 b5dcf9c8951e6b8e5fb447bebe32b1ab ADMITTED_BY_ISSUER Distinct TwoValued Values lab1 +ON 0x7F0C0001 1 0 lab:beh/a +READ 0x7F0C0001 1 0 lab:beh/a +READ 0x7F0C0001 1 1 lab:beh/b +WHEN 0x7F0C0001 1 TwoValued And([Res(I32 { lane: 0, op: Lt, t: 5 }), Res(I32 { lane: 1, op: Ge, t: 0 })]) GuardWitness { normal: And([Res(I32 { lane: 0, op: Lt, t: 5 }), Res(I32 { lane: 1, op: Gt, t: -1 })]), logic: TwoValued } +DEP 0x7F0C0001 1 0 ResI32 0 UNKNOWN 0 lab:beh/a +DEP 0x7F0C0001 1 1 ResI32 1 UNKNOWN 1 lab:beh/b +DO 0x7F0C0001 1 0 0xFFFFF000 5 lg:polyfill:f000/IntSLess 2 3 lab:beh/m F0,C5 +DO 0x7F0C0001 1 1 0xFFFFF000 11 lg:polyfill:f000/SUM 2 4 lab:beh/s F3,F1 +METHOD 0x7F0C0001 2 1 2b9c97a5253a3361e021a8dd858cc56b ADMITTED_BY_ISSUER Distinct TwoValued Values lab2 +ON 0x7F0C0001 2 0 lab:beh/a +ON 0x7F0C0001 2 1 lab:beh/b +READ 0x7F0C0001 2 0 lab:beh/a +READ 0x7F0C0001 2 1 lab:beh/b +WHEN_NONE 0x7F0C0001 2 +DO 0x7F0C0001 2 0 0xFFFFF000 0 lg:polyfill:f000/IntAdd 2 5 lab:beh/t F0,F1 +DO 0x7F0C0001 2 1 0xFFFFF000 1 lg:polyfill:f000/IntSub 2 6 lab:beh/u F0,F1 +METHOD 0x7F0C0001 3 1 f864ca4586aeb44195c562be31af19e3 ADMITTED_BY_ISSUER Distinct TwoValued Values lab3 +ON 0x7F0C0001 3 2 lab:beh/k +READ 0x7F0C0001 3 2 lab:beh/k +WHEN_NONE 0x7F0C0001 3 +DO 0x7F0C0001 3 0 0xFFFFF000 10 lg:polyfill:f000/PopCount 1 7 lab:beh/v F2 diff --git a/crates/cg-beh-probe/Cargo.toml b/crates/cg-beh-probe/Cargo.toml new file mode 100644 index 000000000..4f7a29c04 --- /dev/null +++ b/crates/cg-beh-probe/Cargo.toml @@ -0,0 +1,41 @@ +# D-CG-BEH-2 LAB (EXO-155): reads the ON x WHEN x DO contract of registered +# DT64 methods as separate facts, and says which obligations a change makes +# stale. Read-only: it registers nothing in a production store, adds no word +# and executes no method. NOT a workspace member, nothing depends on it. +# Verify with +# cargo test --release --manifest-path crates/cg-beh-probe/Cargo.toml +# Evidence schema: crates/cg-beh-probe/README.md +[package] +name = "cg-beh-probe" +version = "0.0.0" +edition = "2021" +publish = false +license = "MIT OR Apache-2.0" +description = "D-CG-BEH-2 lab: ON / WHEN / DO facts of registered DT64 methods, a change query over them, and its falsifiers." + +# Own workspace root, like the other lab probes. +[workspace] + +[dependencies] +# Consumed read-only through their public APIs; none is changed. +lance-graph-dt64 = { path = "../lance-graph-dt64" } +lance-graph-contract = { path = "../lance-graph-contract" } +# The polyfill lens table (word position -> opcode) and its view. +lance-graph-r2il = { path = "../lance-graph-r2il" } +# The opcode constants the dispatch arms are named by. +ogar-r2il = { git = "https://github.com/AdaWorldAPI/OGAR", branch = "main" } +ogar-loco = { git = "https://github.com/AdaWorldAPI/OGAR", branch = "main" } +# The real CanCook registration. +foundry-parity-lab = { path = "../foundry-parity-lab" } + +# OGAR depends on lance-graph-contract by git; patch it to the path crate so +# the graph holds ONE contract (foundry-parity-lab does the same). +[patch."https://github.com/AdaWorldAPI/lance-graph"] +lance-graph-contract = { path = "../lance-graph-contract" } + +[[test]] +name = "integration" +path = "tests/integration/main.rs" + +[profile.release] +debug = false diff --git a/crates/cg-beh-probe/src/bin/facts.rs b/crates/cg-beh-probe/src/bin/facts.rs new file mode 100644 index 000000000..64e251514 --- /dev/null +++ b/crates/cg-beh-probe/src/bin/facts.rs @@ -0,0 +1,58 @@ +//! Writes the Gate A facts and the dispatch reading as TSV. +//! +//! ```text +//! CG_BEH_SOURCE_REV=$(git rev-parse HEAD) cargo run --release \ +//! --manifest-path crates/cg-beh-probe/Cargo.toml --bin facts -- +//! ``` +//! Without a source revision nothing is written. + +use std::path::PathBuf; + +use cg_beh_probe::dispatch; +use cg_beh_probe::facts::Snapshot; +use cg_beh_probe::fixture::{self, FoundryVariant, Variant}; + +fn main() { + let out = PathBuf::from(std::env::args().nth(1).expect("usage: facts ")); + let rev = std::env::var("CG_BEH_SOURCE_REV").unwrap_or_default(); + + let lab = fixture::world(Variant::Base); + let mut test = Snapshot::new(&rev, "cg-beh-probe lab class").expect("CG_BEH_SOURCE_REV"); + test.add_class( + &lab.store, + &lab.view, + fixture::CLASS, + &fixture::METHODS, + &fixture::READ, + ) + .expect("the lab class reads"); + + let world = fixture::foundry(FoundryVariant::Base); + let mut foundry = Snapshot::new(&rev, "foundry-parity-lab CanCook").expect("a revision"); + foundry + .add_class( + &world.store, + &world.view, + fixture::FOUNDRY_CLASS, + &fixture::foundry_ids(), + &fixture::FOUNDRY_READ, + ) + .expect("the Foundry class reads"); + + let src_path = concat!( + env!("CARGO_MANIFEST_DIR"), + "/../lance-graph-r2il/src/lib.rs" + ); + let src = std::fs::read_to_string(src_path).expect("the dispatch source"); + let arms = dispatch::read(&src).expect("the dispatch arms"); + + std::fs::create_dir_all(&out).expect("the output directory"); + for (name, body) in [ + ("lab.facts.tsv", test.to_tsv()), + ("foundry.facts.tsv", foundry.to_tsv()), + ("dispatch.tsv", arms.to_tsv()), + ] { + std::fs::write(out.join(name), body).expect("a facts file"); + println!("wrote {}", out.join(name).display()); + } +} diff --git a/crates/cg-beh-probe/src/dispatch.rs b/crates/cg-beh-probe/src/dispatch.rs new file mode 100644 index 000000000..3872f15c4 --- /dev/null +++ b/crates/cg-beh-probe/src/dispatch.rs @@ -0,0 +1,167 @@ +//! Source structure: which arm of `FoldDialect::call` a line sits in, and +//! which polyfill word that arm's opcode names. +//! +//! This reads text. It says a line is inside the arm for an opcode; it does +//! not say the arm computes what the word means. + +use lance_graph_r2il::polyfill::POLYFILL; +use lance_graph_r2il::{ + INT_ADD, INT_AND, INT_EQUAL, INT_MULT, INT_NOT, INT_OR, INT_SUB, INT_S_DIV, INT_S_LESS, + INT_XOR, POP_COUNT, +}; +use ogar_loco::FnIndex; +use ogar_r2il::{ALL, ANY, KEY_RUNS, MAX, MIN, SUM}; + +use crate::{fnv64, FNV64_OFFSET}; + +macro_rules! opcodes { + ($($name:ident),* $(,)?) => { &[$((stringify!($name), $name)),*] }; +} + +/// The opcode constants the arms are written with, by the name they have in +/// source. The compiler resolves each name to its constant. +pub const OPCODES: &[(&str, FnIndex)] = opcodes!( + INT_ADD, INT_SUB, INT_MULT, INT_S_DIV, INT_EQUAL, INT_S_LESS, INT_AND, INT_OR, INT_XOR, + INT_NOT, POP_COUNT, SUM, MIN, MAX, ANY, ALL, KEY_RUNS, +); + +/// The polyfill position whose opcode has this source name, read from the +/// compiled [`POLYFILL`] table. +pub fn word_of(opcode_name: &str) -> Option { + let (_, opcode) = OPCODES.iter().find(|(n, _)| *n == opcode_name)?; + POLYFILL + .iter() + .position(|w| w.opcode == *opcode) + .and_then(|p| u8::try_from(p).ok()) +} + +/// The source name of the opcode at polyfill position `word`. +pub fn opcode_name(word: u8) -> Option<&'static str> { + let w = POLYFILL.get(usize::from(word))?; + OPCODES + .iter() + .find(|(_, op)| *op == w.opcode) + .map(|(n, _)| *n) +} + +/// One arm of the dispatch `match`: the pattern names and its line span +/// (1-based, inclusive). +#[derive(Debug, Clone, PartialEq, Eq)] +pub struct Arm { + pub names: Vec, + pub start: usize, + pub end: usize, +} + +/// The arms of one reading of the dispatch function, with the digest of the +/// text they were read from. +#[derive(Debug, Clone, PartialEq, Eq)] +pub struct Dispatch { + pub file_fnv: u64, + pub arms: Vec, +} + +#[derive(Debug, Clone, PartialEq, Eq)] +pub enum DispatchError { + /// `pub fn call(&mut self, f: FnIndex` was not found. + NoCallFn, + /// The function has no `match f {` at the expected depth. + NoMatch, + /// The `match` was found and no arm was read. + NoArms, +} + +/// The digest [`Dispatch::file_fnv`] holds for `src`. +pub fn text_fnv(src: &str) -> u64 { + fnv64(FNV64_OFFSET, src.as_bytes()) +} + +const ARM_INDENT: &str = " "; +const MATCH_INDENT: &str = " "; + +fn arm_names(line: &str) -> Option> { + let rest = line.strip_prefix(ARM_INDENT)?; + if rest.starts_with(' ') { + return None; + } + let head = rest.split(" => ").next()?; + if head.len() == rest.len() { + return None; + } + let names: Vec = head.split(" | ").map(str::to_string).collect(); + let is_path = |n: &String| { + !n.is_empty() + && n.chars() + .all(|c| c.is_ascii_alphanumeric() || c == '_' || c == ':') + }; + names.iter().all(is_path).then_some(names) +} + +/// Read the arms of `FoldDialect::call` from the text of +/// `lance-graph-r2il/src/lib.rs`. +pub fn read(src: &str) -> Result { + let lines: Vec<&str> = src.lines().collect(); + let call = lines + .iter() + .position(|l| l.contains("pub fn call(&mut self, f: FnIndex")) + .ok_or(DispatchError::NoCallFn)?; + let open = (call..lines.len()) + .find(|&i| lines[i] == format!("{MATCH_INDENT}match f {{")) + .ok_or(DispatchError::NoMatch)?; + let close = (open + 1..lines.len()) + .find(|&i| lines[i] == format!("{MATCH_INDENT}}}")) + .ok_or(DispatchError::NoMatch)?; + let mut arms: Vec = Vec::new(); + for (i, line) in lines.iter().enumerate().take(close).skip(open + 1) { + if let Some(names) = arm_names(line) { + if let Some(last) = arms.last_mut() { + last.end = i; + } + arms.push(Arm { + names, + start: i + 1, + end: close, + }); + } + } + if arms.is_empty() { + return Err(DispatchError::NoArms); + } + Ok(Dispatch { + file_fnv: text_fnv(src), + arms, + }) +} + +impl Dispatch { + /// The arm `line` sits in. + pub fn arm_at(&self, line: usize) -> Option<&Arm> { + self.arms.iter().find(|a| a.start <= line && line <= a.end) + } + + /// The arm that names the opcode of polyfill position `word`. + pub fn arm_of_word(&self, word: u8) -> Option<&Arm> { + let name = opcode_name(word)?; + self.arms.iter().find(|a| a.names.iter().any(|n| n == name)) + } + + /// The polyfill positions with no arm in this reading. + pub fn words_without_arm(&self) -> Vec { + (0..POLYFILL.len()) + .filter_map(|p| u8::try_from(p).ok()) + .filter(|&p| self.arm_of_word(p).is_none()) + .collect() + } + + /// The reading as `cg-beh.dispatch.v1` rows. + pub fn to_tsv(&self) -> String { + let mut o = format!("H\tcg-beh.dispatch.v1\t{:016x}\n", self.file_fnv); + for a in &self.arms { + for n in &a.names { + let word = word_of(n).map_or("NOT_A_WORD".to_string(), |w| w.to_string()); + o.push_str(&format!("ARM\t{n}\t{word}\t{}\t{}\n", a.start, a.end)); + } + } + o + } +} diff --git a/crates/cg-beh-probe/src/facts.rs b/crates/cg-beh-probe/src/facts.rs new file mode 100644 index 000000000..ef158fb9a --- /dev/null +++ b/crates/cg-beh-probe/src/facts.rs @@ -0,0 +1,480 @@ +//! Gate A: the registered facts of one method, ON, WHEN and DO kept apart. + +use lance_graph_contract::class_view::{ClassView, WideFieldMask}; +use lance_graph_contract::set_algebra::{Logic, Res, SetExpr}; +use lance_graph_contract::set_rules::{Population, Truth}; +use lance_graph_dt64::{Arg, BindStore, MethodId, MethodRef, Refusal, SchemaRev, ValueDemand}; + +use crate::{fnv64, FNV64_OFFSET}; + +/// A field position of the bound class and the predicate the pinned basis +/// gives it. The label is not carried: it is locale-bound and not identity. +#[derive(Debug, Clone, PartialEq, Eq)] +pub struct Field { + pub position: u8, + pub predicate: String, +} + +/// How a consumer reads the numbers inside a guard. `SetExpr::Sym` is "an +/// opaque two-valued set, identified by number" and a residual names "one +/// lane"; DT64 keeps the guard and checks neither against the basis. +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +pub enum GuardConvention { + /// No reading is declared. Every dependency stays UNKNOWN. + Opaque, + /// The consumer states that a number is a field position of the class + /// (Foundry's `method.rs` does). Accepted per dependency only when the + /// position is in the method's registered `reads` and resolves through + /// the basis. + FieldPosition, +} + +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +pub enum DepKind { + Sym, + ResI32, + ResU32, +} + +/// One leaf a guard depends on. To DT64 it is always UNKNOWN; `consumer` is +/// the field it is under the declared convention, when that could be checked. +#[derive(Debug, Clone, PartialEq, Eq)] +pub struct Dep { + pub kind: DepKind, + pub number: u32, + pub consumer: Option, +} + +/// WHEN. `expr` and `witness` are the `Debug` forms of the registered +/// `SetExpr` and of `Guard::witness()` (its normal form under its logic). +#[derive(Debug, Clone, PartialEq, Eq)] +pub struct WhenFacts { + pub logic: &'static str, + pub expr: String, + pub witness: String, + pub deps: Vec, +} + +#[derive(Debug, Clone, PartialEq, Eq)] +pub enum ArgFact { + Field(Field), + Const(i64), +} + +/// One DO step, at its place in the order. +#[derive(Debug, Clone, PartialEq, Eq)] +pub struct DoStep { + pub ordinal: usize, + pub lens: u32, + pub word: u8, + /// The word's predicate in the lens basis the view gives. + pub word_predicate: String, + pub arity: u8, + pub target: Field, + pub args: Vec, +} + +/// Everything read about one method. `binding` is `Stamp::binding()` of the +/// reference the store issued and then admitted. +#[derive(Debug, Clone, PartialEq, Eq)] +pub struct MethodFacts { + pub class: u32, + pub method: u32, + pub sig_rev: u32, + pub name: String, + pub binding: u128, + pub on: Vec, + pub reads: Vec, + pub when: Option, + pub steps: Vec, + pub population: &'static str, + pub truth: &'static str, + pub demand: &'static str, +} + +/// The pinned basis of one class, as the view gave it and the store accepted +/// it. `basis_fnv` is this crate's own digest of the ordered predicates (the +/// store's `BasisDigest` is private). +#[derive(Debug, Clone, PartialEq, Eq)] +pub struct ClassFacts { + pub class: u32, + pub schema_rev: u32, + pub basis_fnv: u64, + pub basis: Vec, +} + +/// Why facts could not be read. Each is a missing witness; none is an empty +/// answer. +#[derive(Debug, Clone, PartialEq, Eq)] +pub enum Missing { + /// The snapshot was given no source revision. + SourceRevision, + /// The store did not issue a reference for the method. + Issue(Refusal), + /// The store did not admit the reference (other issuer, other binding, + /// other guard, other signature revision). + Admit(Refusal), + /// The view does not give the basis the class was bound against. + Basis(Refusal), + /// A method has DO steps and no lens revision was supplied to read the + /// lens through. + LensRevision { lens: u32 }, + /// The view does not give the lens the store bound. + Lens(Refusal), + /// A registered position does not resolve through the basis. + Position { position: u8, role: &'static str }, + /// A word is outside the lens the view gives. + Word { lens: u32, word: u8 }, +} + +/// What a read is made at. +#[derive(Debug, Clone, Copy)] +pub struct Read { + pub schema_rev: SchemaRev, + /// The revision the polyfill lens was declared at. `BindStore` does not + /// expose it, so the caller states it and `resolve_algebra` checks it. + pub lens_rev: Option, + pub convention: GuardConvention, +} + +pub(crate) fn positions(mask: &WideFieldMask) -> impl Iterator + '_ { + (0..=u8::MAX).filter(move |&p| mask.has(p)) +} + +fn deps_of(e: &SetExpr, out: &mut Vec<(DepKind, u32)>) { + match e { + SetExpr::Sym(n) => out.push((DepKind::Sym, *n)), + SetExpr::Res(Res::I32 { lane, .. }) => out.push((DepKind::ResI32, u32::from(*lane))), + SetExpr::Res(Res::U32 { lane, .. }) => out.push((DepKind::ResU32, u32::from(*lane))), + SetExpr::And(cs) | SetExpr::Or(cs) => cs.iter().for_each(|c| deps_of(c, out)), + SetExpr::Not(c) => deps_of(c, out), + SetExpr::All | SetExpr::Empty => {} + } +} + +/// The pinned basis of `class` at `schema_rev`: `resolve` checks the revision, +/// the field count and the predicate witness before it answers. +pub fn class_facts( + store: &BindStore, + view: &V, + class: u32, + schema_rev: SchemaRev, +) -> Result { + let resolved = store + .resolve(view, class, schema_rev) + .map_err(Missing::Basis)?; + let mut h = fnv64(FNV64_OFFSET, b"cg-beh.basis.v1"); + let mut basis = Vec::with_capacity(resolved.fields.len()); + for (i, f) in resolved.fields.iter().enumerate() { + let iri = f.predicate_iri.as_bytes(); + h = fnv64(h, &(iri.len() as u64).to_le_bytes()); + h = fnv64(h, iri); + basis.push(Field { + position: u8::try_from(i).map_err(|_| Missing::Position { + position: u8::MAX, + role: "basis", + })?, + predicate: f.predicate_iri.clone(), + }); + } + Ok(ClassFacts { + class, + schema_rev: schema_rev.0, + basis_fnv: h, + basis, + }) +} + +/// The facts of the method `r` refers to. `r` must be a reference this store +/// issued for the binding it holds; anything else is [`Missing::Admit`]. +pub fn extract( + store: &BindStore, + view: &V, + r: &MethodRef, + read: &Read, +) -> Result { + let binding = store.admit(r).map_err(Missing::Admit)?; + let resolved = store + .resolve(view, r.class, read.schema_rev) + .map_err(Missing::Basis)?; + let field = |position: u8, role: &'static str| { + resolved + .fields + .get(usize::from(position)) + .map(|f| Field { + position, + predicate: f.predicate_iri.clone(), + }) + .ok_or(Missing::Position { position, role }) + }; + let on = positions(&binding.on) + .map(|p| field(p, "on")) + .collect::, _>>()?; + let reads = positions(&binding.reads) + .map(|p| field(p, "reads")) + .collect::, _>>()?; + + let when = binding.when.as_ref().map(|g| { + let mut leaves = Vec::new(); + deps_of(&g.expr, &mut leaves); + let deps = leaves + .into_iter() + .map(|(kind, number)| { + let consumer = match read.convention { + GuardConvention::Opaque => None, + GuardConvention::FieldPosition => u8::try_from(number) + .ok() + .filter(|p| binding.reads.has(*p)) + .and_then(|p| field(p, "when").ok()), + }; + Dep { + kind, + number, + consumer, + } + }) + .collect(); + WhenFacts { + logic: match g.logic { + Logic::TwoValued => "TwoValued", + Logic::Kleene => "Kleene", + }, + expr: format!("{:?}", g.expr), + witness: format!("{:?}", g.witness()), + deps, + } + }); + + let mut steps = Vec::with_capacity(binding.effects.len()); + for (ordinal, e) in binding.effects.iter().enumerate() { + let (lens, word) = (e.algebra.lens, e.algebra.word); + let lens_rev = read.lens_rev.ok_or(Missing::LensRevision { lens })?; + let words = store + .resolve_algebra(view, lens, lens_rev) + .map_err(Missing::Lens)?; + let word_predicate = words + .fields + .get(usize::from(word)) + .map(|f| f.predicate_iri.clone()) + .ok_or(Missing::Word { lens, word })?; + let arity = store.arity(e.algebra).ok_or(Missing::Word { lens, word })?; + let args = e + .args + .iter() + .map(|a| match *a { + Arg::Field(p) => field(p, "do.arg").map(ArgFact::Field), + Arg::Const(c) => Ok(ArgFact::Const(c)), + }) + .collect::, _>>()?; + steps.push(DoStep { + ordinal, + lens, + word, + word_predicate, + arity, + target: field(e.target, "do.target")?, + args, + }); + } + + Ok(MethodFacts { + class: r.class, + method: r.method.0, + sig_rev: binding.sig_rev.0, + name: binding.name.clone(), + binding: r.stamp.binding(), + on, + reads, + when, + steps, + population: match binding.population { + Population::Distinct => "Distinct", + Population::Bag => "Bag", + }, + truth: match binding.truth { + Truth::TwoValued => "TwoValued", + Truth::ThreeValued => "ThreeValued", + }, + demand: match binding.demand { + ValueDemand::MapOnly => "MapOnly", + ValueDemand::Values => "Values", + }, + }) +} + +/// The facts of several classes at one source revision. +#[derive(Debug, Clone, PartialEq, Eq)] +pub struct Snapshot { + pub source_rev: String, + pub label: String, + pub classes: Vec, + pub methods: Vec, +} + +impl Snapshot { + /// An empty snapshot. A blank or `UNKNOWN` source revision is refused: a + /// snapshot that cannot say what it was taken from is not evidence. + pub fn new(source_rev: &str, label: &str) -> Result { + let rev = source_rev.trim(); + if rev.is_empty() || rev.eq_ignore_ascii_case("unknown") { + return Err(Missing::SourceRevision); + } + Ok(Snapshot { + source_rev: rev.to_string(), + label: label.to_string(), + classes: Vec::new(), + methods: Vec::new(), + }) + } + + /// Read `class` and the methods `ids` of it. The store issues each + /// reference and admits it again before anything is recorded. + pub fn add_class( + &mut self, + store: &BindStore, + view: &V, + class: u32, + ids: &[u32], + read: &Read, + ) -> Result<(), Missing> { + let class_facts = class_facts(store, view, class, read.schema_rev)?; + let mut methods = Vec::with_capacity(ids.len()); + for &id in ids { + let r = store + .method_ref(class, MethodId(id)) + .map_err(Missing::Issue)?; + methods.push(extract(store, view, &r, read)?); + } + self.classes.push(class_facts); + self.methods.extend(methods); + Ok(()) + } + + pub fn method(&self, class: u32, method: u32) -> Option<&MethodFacts> { + self.methods + .iter() + .find(|m| m.class == class && m.method == method) + } + + pub fn class(&self, class: u32) -> Option<&ClassFacts> { + self.classes.iter().find(|c| c.class == class) + } + + /// The snapshot as `cg-beh.facts.v1` rows (see the crate README). One row + /// per fact, tab separated, the row kind first. + pub fn to_tsv(&self) -> String { + let mut o = String::new(); + let mut row = |cells: &[String]| { + o.push_str(&cells.join("\t")); + o.push('\n'); + }; + let s = |v: &str| v.to_string(); + let unknown = || s("UNKNOWN"); + row(&[ + s("H"), + s("cg-beh.facts.v1"), + self.source_rev.clone(), + self.label.clone(), + ]); + for c in &self.classes { + row(&[ + s("CLASS"), + format!("{:#010X}", c.class), + c.schema_rev.to_string(), + c.basis.len().to_string(), + format!("{:016x}", c.basis_fnv), + ]); + for f in &c.basis { + row(&[ + s("BASIS"), + format!("{:#010X}", c.class), + f.position.to_string(), + f.predicate.clone(), + ]); + } + } + for m in &self.methods { + let key = [format!("{:#010X}", m.class), m.method.to_string()]; + row(&[ + s("METHOD"), + key[0].clone(), + key[1].clone(), + m.sig_rev.to_string(), + format!("{:032x}", m.binding), + s("ADMITTED_BY_ISSUER"), + s(m.population), + s(m.truth), + s(m.demand), + m.name.clone(), + ]); + for (kind, fields) in [("ON", &m.on), ("READ", &m.reads)] { + for f in fields { + row(&[ + s(kind), + key[0].clone(), + key[1].clone(), + f.position.to_string(), + f.predicate.clone(), + ]); + } + } + match &m.when { + None => row(&[s("WHEN_NONE"), key[0].clone(), key[1].clone()]), + Some(w) => { + row(&[ + s("WHEN"), + key[0].clone(), + key[1].clone(), + s(w.logic), + w.expr.clone(), + w.witness.clone(), + ]); + for (i, d) in w.deps.iter().enumerate() { + let (pos, pred) = match &d.consumer { + Some(f) => (f.position.to_string(), f.predicate.clone()), + None => (unknown(), unknown()), + }; + row(&[ + s("DEP"), + key[0].clone(), + key[1].clone(), + i.to_string(), + format!("{:?}", d.kind), + d.number.to_string(), + unknown(), + pos, + pred, + ]); + } + } + } + if m.steps.is_empty() { + row(&[s("DO_NONE"), key[0].clone(), key[1].clone()]); + } + for st in &m.steps { + let args: Vec = st + .args + .iter() + .map(|a| match a { + ArgFact::Field(f) => format!("F{}", f.position), + ArgFact::Const(c) => format!("C{c}"), + }) + .collect(); + row(&[ + s("DO"), + key[0].clone(), + key[1].clone(), + st.ordinal.to_string(), + format!("{:#010X}", st.lens), + st.word.to_string(), + st.word_predicate.clone(), + st.arity.to_string(), + st.target.position.to_string(), + st.target.predicate.clone(), + args.join(","), + ]); + } + } + o + } +} diff --git a/crates/cg-beh-probe/src/fixture.rs b/crates/cg-beh-probe/src/fixture.rs new file mode 100644 index 000000000..d9f8398ba --- /dev/null +++ b/crates/cg-beh-probe/src/fixture.rs @@ -0,0 +1,304 @@ +//! The bindings the gate reads. +//! +//! [`world`] is this crate's own class under a lab-local classid: three +//! methods over the polyfill lens, one with all of ON, WHEN and DO. Each +//! [`Variant`] moves exactly one part of it. +//! +//! [`foundry`] builds Foundry's `CanCook` class through the lab's own +//! `World::with_methods`; each [`FoundryVariant`] is `method::methods()` with +//! one part of `CanCook(0, 1)` moved. Nothing in `foundry-parity-lab` is +//! edited, and no DO step is added to a `CanCook` binding. + +use foundry_parity_lab::bind::{self, World, VIEW_CLASS as FOUNDRY_VIEW_CLASS}; +use foundry_parity_lab::method; +use lance_graph_contract::class_view::{ClassId, ClassView, WideFieldMask}; +use lance_graph_contract::ontology::{DisplayTemplate, FieldRef}; +use lance_graph_contract::set_algebra::{Cmp, Logic, Res, SetExpr}; +use lance_graph_contract::set_rules::{Population, Truth}; +use lance_graph_dt64::dr::Extent; +use lance_graph_dt64::{ + AlgebraRef, Arg, BindStore, ClassSchema, Effect, Guard, MethodBinding, MethodId, SchemaRev, + SigRev, ValueDemand, +}; +use lance_graph_r2il::polyfill::{ + polyfill_arities, position_of, AliasLanguage, PolyfillView, POLYFILL_LENS, +}; + +use crate::facts::{GuardConvention, Read}; + +/// The lab class (lab-local id; no OGAR concept is minted for it). +pub const CLASS: u32 = 0x7F0C_0001; +pub const VIEW_CLASS: ClassId = 0x7F0C; +pub const REV: SchemaRev = SchemaRev(1); +pub const FIELDS: [&str; 8] = ["a", "b", "k", "m", "s", "t", "u", "v"]; + +/// ON `a`, WHEN `a < 5 and b >= 0`, DO `m = IntSLess(a, 5)` then +/// `s = SUM(m, b)`. +pub const GUARDED: u32 = 1; +/// Two steps that do not read each other, so either order registers. +pub const INDEPENDENT: u32 = 2; +/// Never moved by any variant. +pub const UNRELATED: u32 = 3; +pub const METHODS: [u32; 3] = [GUARDED, INDEPENDENT, UNRELATED]; + +/// How the lab class is read. +pub const READ: Read = Read { + schema_rev: REV, + lens_rev: Some(REV), + convention: GuardConvention::FieldPosition, +}; + +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +pub enum Variant { + Base, + /// `GUARDED` triggers on `b` instead of `a`. + OnMoved, + /// `GUARDED`'s guard reads `a < 6`. + GuardMoved, + /// `GUARDED`'s guard lists its two conditions in the other order. + GuardRespelled, + /// `INDEPENDENT`'s two steps in the other order. + DoReversed, + /// The predicates of positions 0 and 1 exchanged. Same field count. + BasisSwapped, +} + +/// The view of the lab class and of the polyfill lens. +pub struct TestView { + class: Vec, + polyfill: PolyfillView, +} + +impl TestView { + pub fn new(swapped: bool) -> TestView { + let mut class: Vec = FIELDS + .iter() + .map(|l| FieldRef::new(format!("lab:beh/{l}"), (*l).to_string())) + .collect(); + if swapped { + class.swap(0, 1); + } + TestView { + class, + polyfill: PolyfillView::new(AliasLanguage::R2il), + } + } +} + +impl ClassView for TestView { + fn fields(&self, class: ClassId) -> &[FieldRef] { + if class == VIEW_CLASS { + &self.class + } else { + &[] + } + } + fn lens_fields(&self, lens: u32) -> Option<&[FieldRef]> { + self.polyfill.lens_fields(lens) + } + fn template(&self, _class: ClassId) -> DisplayTemplate { + DisplayTemplate::Detail + } + fn dolce_category_id(&self, _class: ClassId) -> u8 { + 0 + } +} + +pub struct TestWorld { + pub store: BindStore, + pub view: TestView, +} + +fn step(target: u8, name: &str, args: Vec) -> Effect { + Effect { + target, + algebra: AlgebraRef { + lens: POLYFILL_LENS, + word: position_of(name).expect("a polyfill alias"), + }, + args, + } +} + +fn binding( + id: u32, + on: &[u8], + reads: &[u8], + when: Option, + effects: Vec, +) -> MethodBinding { + MethodBinding { + id: MethodId(id), + sig_rev: SigRev(1), + name: format!("lab{id}"), + on: WideFieldMask::from_positions(on), + when, + reads: WideFieldMask::from_positions(reads), + effects, + population: Population::Distinct, + truth: Truth::TwoValued, + demand: ValueDemand::Values, + } +} + +/// The three lab methods under `v`. +pub fn methods(v: Variant) -> Vec { + let below = SetExpr::i32(0, Cmp::Lt, if v == Variant::GuardMoved { 6 } else { 5 }); + let non_negative = SetExpr::i32(1, Cmp::Ge, 0); + let guard = if v == Variant::GuardRespelled { + SetExpr::And(vec![non_negative, below]) + } else { + SetExpr::And(vec![below, non_negative]) + }; + let mut independent = vec![ + step(5, "IntAdd", vec![Arg::Field(0), Arg::Field(1)]), + step(6, "IntSub", vec![Arg::Field(0), Arg::Field(1)]), + ]; + if v == Variant::DoReversed { + independent.reverse(); + } + vec![ + binding( + GUARDED, + if v == Variant::OnMoved { &[1] } else { &[0] }, + &[0, 1], + Some(Guard::new(guard, Logic::TwoValued)), + vec![ + step(3, "IntSLess", vec![Arg::Field(0), Arg::Const(5)]), + step(4, "SUM", vec![Arg::Field(3), Arg::Field(1)]), + ], + ), + binding(INDEPENDENT, &[0, 1], &[0, 1], None, independent), + binding( + UNRELATED, + &[2], + &[2], + None, + vec![step(7, "PopCount", vec![Arg::Field(2)])], + ), + ] +} + +/// A store holding `methods` for the lab class, over the plain or the +/// swapped basis. +pub fn world_with(methods: Vec, swapped: bool) -> TestWorld { + let view = TestView::new(swapped); + let mut store = BindStore::new(); + store + .declare_algebra(POLYFILL_LENS, REV, Extent::DR64_CUBE, polyfill_arities()) + .expect("the polyfill lens declares"); + store + .register( + &view, + CLASS, + ClassSchema { + schema_rev: REV, + field_count: FIELDS.len(), + extent: Extent::DR64_CUBE, + }, + methods, + ) + .expect("the lab class registers"); + TestWorld { store, view } +} + +pub fn world(v: Variant) -> TestWorld { + world_with(methods(v), v == Variant::BasisSwapped) +} + +// ---------------------------------------------------------------- Foundry + +/// The `CanCook` method the Foundry variants move: item 0, quantity 1. +pub const CAN_COOK: (usize, i32) = (0, 1); + +/// How Foundry's class is read. No lens revision: `CanCook` has no DO step, +/// and a method that had one would be refused, not guessed at. +pub const FOUNDRY_READ: Read = Read { + schema_rev: SchemaRev(1), + lens_rev: None, + convention: GuardConvention::FieldPosition, +}; + +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +pub enum FoundryVariant { + /// `method::methods()` as the lab registers it. + Base, + /// The last residual threshold of the guard raised by one. Same fields. + GuardThreshold, + /// ON loses its lowest position. Guard and reads unchanged. + OnNarrowed, +} + +fn raise_last_threshold(e: &SetExpr) -> SetExpr { + let SetExpr::And(cs) = e else { + panic!("a CanCook guard is a conjunction") + }; + let mut cs = cs.clone(); + let last = cs.last_mut().expect("a CanCook guard has conditions"); + let SetExpr::Res(Res::I32 { lane, op, t }) = *last else { + panic!("a CanCook guard ends in its staff residual") + }; + *last = SetExpr::i32(lane, op, t + 1); + SetExpr::And(cs) +} + +/// Foundry's method list with `CanCook(0, 1)` moved as `v` says. +pub fn foundry_methods(v: FoundryVariant) -> Vec { + let target = method::method_id(CAN_COOK.0, CAN_COOK.1); + let mut all = method::methods(); + let m = all + .iter_mut() + .find(|m| m.id == target) + .expect("CanCook(0, 1) is registered"); + match v { + FoundryVariant::Base => {} + FoundryVariant::GuardThreshold => { + let g = m.when.as_ref().expect("CanCook is guarded"); + m.when = Some(Guard::new(raise_last_threshold(&g.expr), g.logic)); + } + FoundryVariant::OnNarrowed => { + let kept: Vec = (0..=u8::MAX).filter(|&p| m.on.has(p)).skip(1).collect(); + m.on = WideFieldMask::from_positions(&kept); + } + } + all +} + +pub fn foundry(v: FoundryVariant) -> World { + World::with_methods(foundry_methods(v)) +} + +/// Every registered `CanCook` method id. +pub fn foundry_ids() -> Vec { + method::methods().iter().map(|m| m.id.0).collect() +} + +/// Foundry's basis with the predicates of two positions exchanged: the same +/// field count, another ordered basis. +pub struct SwappedBasis(Vec); + +impl SwappedBasis { + pub fn of(world: &World, a: usize, b: usize) -> SwappedBasis { + let mut fields = world.view.fields(FOUNDRY_VIEW_CLASS).to_vec(); + fields.swap(a, b); + SwappedBasis(fields) + } +} + +impl ClassView for SwappedBasis { + fn fields(&self, class: ClassId) -> &[FieldRef] { + if class == FOUNDRY_VIEW_CLASS { + &self.0 + } else { + &[] + } + } + fn template(&self, _class: ClassId) -> DisplayTemplate { + DisplayTemplate::Detail + } + fn dolce_category_id(&self, _class: ClassId) -> u8 { + 0 + } +} + +pub const FOUNDRY_CLASS: u32 = bind::CLASS; diff --git a/crates/cg-beh-probe/src/lib.rs b/crates/cg-beh-probe/src/lib.rs new file mode 100644 index 000000000..389f2bf6d --- /dev/null +++ b/crates/cg-beh-probe/src/lib.rs @@ -0,0 +1,87 @@ +//! D-CG-BEH-2 (EXO-155): the ON x WHEN x DO contract of a registered DT64 +//! method, read as separate facts, and a query that says which obligations a +//! change makes stale. +//! +//! Read-only. The crate registers nothing in a production store, adds no +//! polyfill word and executes no method. Its own bindings live in +//! [`fixture`] under a lab-local classid. +//! +//! # Three grades of evidence, never merged +//! +//! - [`Grade::SourceStructure`]: read from source text (which dispatch arm a +//! line sits in). It says where code is, not what it computes. +//! - [`Grade::Dt64Registration`]: read from a `BindStore` through +//! `method_ref`, `admit` and `resolve`. It says what is registered. +//! - [`Grade::ExecutedParity`]: an executed comparison against an oracle. +//! This crate produces none; it only names where one is required. +//! +//! A code-to-opcode mapping is source structure. It is not a statement that +//! the code computes what the word means. +//! +//! # Fail closed +//! +//! [`facts::extract`] returns a [`facts::Missing`] when the store does not +//! admit the reference, the view does not give the bound basis, or a position +//! does not resolve. [`query::diff`] refuses facts that contradict the +//! binding digest. [`query::impl_change`] refuses a dispatch reading taken +//! from other source text. None of them answers "nothing changed" in place of +//! a missing witness. + +#![forbid(unsafe_code)] + +pub mod dispatch; +pub mod facts; +pub mod fixture; +pub mod query; + +/// How a statement was obtained. See the crate docs. +#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] +pub enum Grade { + SourceStructure, + Dt64Registration, + ExecutedParity, +} + +impl Grade { + pub fn name(self) -> &'static str { + match self { + Grade::SourceStructure => "SOURCE_STRUCTURE", + Grade::Dt64Registration => "DT64_REGISTRATION", + Grade::ExecutedParity => "EXECUTED_PARITY", + } + } +} + +/// One hop of an evidence path, with the grade it was obtained at. +#[derive(Debug, Clone, PartialEq, Eq)] +pub struct Evidence { + pub grade: Grade, + pub hop: String, +} + +impl Evidence { + pub(crate) fn registration(hop: impl Into) -> Evidence { + Evidence { + grade: Grade::Dt64Registration, + hop: hop.into(), + } + } + pub(crate) fn source(hop: impl Into) -> Evidence { + Evidence { + grade: Grade::SourceStructure, + hop: hop.into(), + } + } +} + +/// FNV-1a 64 over `bytes`. A change detector for this crate's own snapshots; +/// it is not the store's basis or binding digest and authenticates nothing. +pub(crate) fn fnv64(mut h: u64, bytes: &[u8]) -> u64 { + for &b in bytes { + h ^= u64::from(b); + h = h.wrapping_mul(0x0000_0100_0000_01b3); + } + h +} + +pub(crate) const FNV64_OFFSET: u64 = 0xcbf2_9ce4_8422_2325; diff --git a/crates/cg-beh-probe/src/query.rs b/crates/cg-beh-probe/src/query.rs new file mode 100644 index 000000000..2a402117f --- /dev/null +++ b/crates/cg-beh-probe/src/query.rs @@ -0,0 +1,450 @@ +//! Gate B: which component of a method changed, on what evidence, and which +//! obligations that makes stale. +//! +//! Two queries, because the four kinds of change are visible in two +//! different places: +//! +//! - [`diff`] compares two fact snapshots. A changed ON declaration, a +//! changed WHEN guard, a changed DO registration and a changed field basis +//! each change a different registered fact. +//! - [`impl_change`] takes a changed source line. A changed DO +//! IMPLEMENTATION changes no registered fact at all, so it is found from +//! the dispatch arm the line sits in. + +use crate::dispatch::{self, Arm, Dispatch}; +use crate::facts::{MethodFacts, Snapshot}; +use crate::Evidence; + +/// A part of a method's registration. +#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)] +pub enum Component { + /// The ordered predicates of the class basis. + Basis, + Signature, + /// ON: the trigger field positions. + On, + Reads, + /// WHEN: the guard fires on other rows (another witness). + When, + /// WHEN is written differently and fires on the same rows (same witness). + WhenSpelling, + /// DO: the ordered steps. + Do, + /// Population, truth or value demand. + Demand, +} + +/// Something that was established against the old state and no longer holds. +/// Each names the DT64 answer that shows it. +#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord)] +pub enum Obligation { + /// `resolve` and `bind_lanes` over the changed basis at the bound + /// revision: `PredicateBasisChanged`. + WitnessedResolve, + /// A reference made at the old signature revision: + /// `SignatureRevisionMismatch`. + SignatureRevision, + /// The guard witness a reference carries: `GuardMismatch`, `GuardDropped` + /// or `GuardAdded`. + GuardWitness, + /// The stamp of a reference issued for the old binding: + /// `BindingMismatch`. + MethodRefStamp, + /// The answer of `Resolved::methods_on` for the moved positions. + TriggerSet, + /// An executed comparison of this word against an oracle. This crate + /// holds none, so it is always open. + ExecutedParity { lens: u32, word: u8 }, +} + +#[derive(Debug, Clone, PartialEq, Eq)] +pub enum Status { + Unchanged, + Changed(Vec), + Added, + Removed, +} + +/// The first refusal `admit` gives a reference issued from the old state when +/// it is presented to a store holding the new state. `admit` checks in this +/// order; a store other than the issuer is refused last, whatever else holds. +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +pub enum OldRef { + Signature, + Guard, + Binding, + IssuerOnly, +} + +#[derive(Debug, Clone, PartialEq, Eq)] +pub struct MethodDelta { + pub class: u32, + pub method: u32, + pub status: Status, + pub binding_changed: bool, + pub evidence: Vec, + pub stale: Vec, +} + +impl MethodDelta { + pub fn has(&self, c: Component) -> bool { + matches!(&self.status, Status::Changed(cs) if cs.contains(&c)) + } + + /// See [`OldRef`]. `None` for an added or removed method. + pub fn old_ref(&self) -> Option { + match &self.status { + Status::Added | Status::Removed => None, + Status::Unchanged => Some(OldRef::IssuerOnly), + Status::Changed(cs) => Some(if cs.contains(&Component::Signature) { + OldRef::Signature + } else if cs.contains(&Component::When) { + OldRef::Guard + } else if self.binding_changed { + OldRef::Binding + } else { + OldRef::IssuerOnly + }), + } + } +} + +#[derive(Debug, Clone, PartialEq, Eq)] +pub enum DiffRefusal { + /// A snapshot has a method whose class it has no basis for. + ClassMissing { class: u32 }, + /// The facts and the binding digest disagree: the digest moved with no + /// component that it covers, or a component it covers moved and the + /// digest did not. Either the facts were altered, or something the facts + /// do not carry changed (the lens revision, a word's arity). + Inconsistent { + class: u32, + method: u32, + why: &'static str, + }, +} + +fn positions(fields: &[crate::facts::Field]) -> Vec { + fields.iter().map(|f| f.position).collect() +} + +fn do_key(m: &MethodFacts) -> Vec<(u32, u8, u8, u8, Vec)> { + m.steps + .iter() + .map(|s| { + ( + s.lens, + s.word, + s.arity, + s.target.position, + s.args + .iter() + .map(|a| match a { + crate::facts::ArgFact::Field(f) => format!("F{}", f.position), + crate::facts::ArgFact::Const(c) => format!("C{c}"), + }) + .collect(), + ) + }) + .collect() +} + +fn one( + before: &Snapshot, + after: &Snapshot, + b: &MethodFacts, + a: &MethodFacts, +) -> Result { + let (class, method) = (b.class, b.method); + let basis = |s: &Snapshot| { + s.class(class) + .map(|c| c.basis_fnv) + .ok_or(DiffRefusal::ClassMissing { class }) + }; + let (basis_b, basis_a) = (basis(before)?, basis(after)?); + let mut cs = Vec::new(); + let mut evidence = Vec::new(); + let mut stale = Vec::new(); + + if basis_b != basis_a { + cs.push(Component::Basis); + evidence.push(Evidence::registration(format!( + "class {class:#010X} basis: predicates in position order {basis_b:016x} -> {basis_a:016x} (resolve accepted each against its own store)" + ))); + stale.push(Obligation::WitnessedResolve); + } + if b.sig_rev != a.sig_rev { + cs.push(Component::Signature); + evidence.push(Evidence::registration(format!( + "sig_rev {} -> {}", + b.sig_rev, a.sig_rev + ))); + stale.push(Obligation::SignatureRevision); + } + if positions(&b.on) != positions(&a.on) { + cs.push(Component::On); + evidence.push(Evidence::registration(format!( + "ON positions {:?} -> {:?}", + positions(&b.on), + positions(&a.on) + ))); + stale.push(Obligation::TriggerSet); + } + if positions(&b.reads) != positions(&a.reads) { + cs.push(Component::Reads); + evidence.push(Evidence::registration(format!( + "reads positions {:?} -> {:?}", + positions(&b.reads), + positions(&a.reads) + ))); + } + let witness = |m: &MethodFacts| m.when.as_ref().map(|w| (w.logic, w.witness.clone())); + let spelling = |m: &MethodFacts| m.when.as_ref().map(|w| w.expr.clone()); + if witness(b) != witness(a) { + cs.push(Component::When); + evidence.push(Evidence::registration(format!( + "WHEN witness {:?} -> {:?}", + witness(b), + witness(a) + ))); + stale.push(Obligation::GuardWitness); + } else if spelling(b) != spelling(a) { + cs.push(Component::WhenSpelling); + evidence.push(Evidence::registration( + "WHEN expression differs, witness equal: fires on the same rows", + )); + } + if do_key(b) != do_key(a) { + cs.push(Component::Do); + evidence.push(Evidence::registration(format!( + "DO steps (lens, word, arity, target, args) in order {:?} -> {:?}", + do_key(b), + do_key(a) + ))); + } + if (b.population, b.truth, b.demand) != (a.population, a.truth, a.demand) { + cs.push(Component::Demand); + evidence.push(Evidence::registration( + "population, truth or demand differs", + )); + } + + // The binding digest covers the basis, the signature revision, ON, reads, + // the ordered DO steps and the demand. It does not cover the guard. + let covered = cs.iter().any(|c| { + matches!( + c, + Component::Basis + | Component::Signature + | Component::On + | Component::Reads + | Component::Do + | Component::Demand + ) + }); + let binding_changed = b.binding != a.binding; + if binding_changed && !covered { + return Err(DiffRefusal::Inconsistent { + class, + method, + why: "binding digest moved and no component it covers did", + }); + } + if covered && !binding_changed { + return Err(DiffRefusal::Inconsistent { + class, + method, + why: "a component the binding digest covers moved and the digest did not", + }); + } + if binding_changed { + evidence.push(Evidence::registration(format!( + "binding digest {:032x} -> {:032x}", + b.binding, a.binding + ))); + stale.push(Obligation::MethodRefStamp); + } + stale.sort(); + Ok(MethodDelta { + class, + method, + status: if cs.is_empty() { + Status::Unchanged + } else { + Status::Changed(cs) + }, + binding_changed, + evidence, + stale, + }) +} + +/// Compare the registered facts of every method in either snapshot. A method +/// that did not change is reported as [`Status::Unchanged`], with no stale +/// obligation; it is never left out. +pub fn diff(before: &Snapshot, after: &Snapshot) -> Result, DiffRefusal> { + let mut out = Vec::new(); + for b in &before.methods { + match after.method(b.class, b.method) { + Some(a) => out.push(one(before, after, b, a)?), + None => out.push(MethodDelta { + class: b.class, + method: b.method, + status: Status::Removed, + binding_changed: true, + evidence: vec![Evidence::registration("method absent from the later facts")], + stale: vec![Obligation::MethodRefStamp], + }), + } + } + for a in &after.methods { + if before.method(a.class, a.method).is_none() { + out.push(MethodDelta { + class: a.class, + method: a.method, + status: Status::Added, + binding_changed: true, + evidence: vec![Evidence::registration( + "method absent from the earlier facts", + )], + stale: Vec::new(), + }); + } + } + Ok(out) +} + +/// One word a changed arm realizes, and the DO steps registered on it. +#[derive(Debug, Clone, PartialEq, Eq)] +pub struct WordUse { + pub lens: u32, + pub word: u8, + pub opcode: String, + /// `(class, method, ordinal)`. Empty means no registered user IN THIS + /// SNAPSHOT; it does not mean the word is unused or the change harmless. + pub users: Vec<(u32, u32, usize)>, + pub stale: Vec, +} + +/// What a changed line in the dispatch function reaches. +#[derive(Debug, Clone, PartialEq, Eq)] +pub struct ImplImpact { + pub arm: Arm, + pub words: Vec, + pub evidence: Vec, +} + +#[derive(Debug, Clone, PartialEq, Eq)] +pub enum ImplRefusal { + /// The dispatch reading was taken from other text than the current + /// source. No impact row is produced from it. + StaleWitness { recorded: u64, current: u64 }, + /// The line is in no dispatch arm. There is no behaviour edge from it + /// here; that is not a statement that the change has no effect. + NotInDispatch { line: usize }, + /// The arm names no polyfill word (a loader, a terminal, the catch-all). + ArmNotAWord { names: Vec }, + /// The word has no arm in this reading: what realizes it is UNKNOWN. + NoDispatchArm { word: u8 }, +} + +fn word_use(snap: &Snapshot, lens: u32, word: u8, opcode: &str) -> WordUse { + let users: Vec<(u32, u32, usize)> = snap + .methods + .iter() + .flat_map(|m| { + m.steps + .iter() + .filter(move |s| s.lens == lens && s.word == word) + .map(move |s| (m.class, m.method, s.ordinal)) + }) + .collect(); + let stale = if users.is_empty() { + Vec::new() + } else { + vec![Obligation::ExecutedParity { lens, word }] + }; + WordUse { + lens, + word, + opcode: opcode.to_string(), + users, + stale, + } +} + +fn check_witness(dispatch: &Dispatch, current_src: &str) -> Result<(), ImplRefusal> { + let current = dispatch::text_fnv(current_src); + if current != dispatch.file_fnv { + return Err(ImplRefusal::StaleWitness { + recorded: dispatch.file_fnv, + current, + }); + } + Ok(()) +} + +/// A changed line of the dispatch source: the arm it is in, the words that +/// arm realizes, and the registered DO steps on those words. No registered +/// fact changes, so no reference or binding becomes stale; what becomes open +/// is the executed parity of each word that has a user. +pub fn impl_change( + snap: &Snapshot, + dispatch: &Dispatch, + current_src: &str, + lens: u32, + line: usize, +) -> Result { + check_witness(dispatch, current_src)?; + let arm = dispatch + .arm_at(line) + .ok_or(ImplRefusal::NotInDispatch { line })?; + let words: Vec = arm + .names + .iter() + .filter_map(|n| dispatch::word_of(n).map(|w| word_use(snap, lens, w, n))) + .collect(); + if words.is_empty() { + return Err(ImplRefusal::ArmNotAWord { + names: arm.names.clone(), + }); + } + let evidence = vec![ + Evidence::source(format!( + "line {line} is inside the match arm `{}` (lines {}..={}) of FoldDialect::call", + arm.names.join(" | "), + arm.start, + arm.end + )), + Evidence::source( + "opcode name -> polyfill position: the compiled POLYFILL table, by the constant the name resolves to", + ), + Evidence::registration(format!( + "DO steps on those positions under lens {lens:#010X}, from the snapshot at {}", + snap.source_rev + )), + ]; + Ok(ImplImpact { + arm: arm.clone(), + words, + evidence, + }) +} + +/// The registered DO steps on one word, if this reading says what realizes +/// it. A word with no arm is refused: its users are not reported as +/// unaffected. +pub fn word_impact( + snap: &Snapshot, + dispatch: &Dispatch, + current_src: &str, + lens: u32, + word: u8, +) -> Result { + check_witness(dispatch, current_src)?; + dispatch + .arm_of_word(word) + .ok_or(ImplRefusal::NoDispatchArm { word })?; + let opcode = dispatch::opcode_name(word).ok_or(ImplRefusal::NoDispatchArm { word })?; + Ok(word_use(snap, lens, word, opcode)) +} diff --git a/crates/cg-beh-probe/tests/integration/common.rs b/crates/cg-beh-probe/tests/integration/common.rs new file mode 100644 index 000000000..8f1e3201a --- /dev/null +++ b/crates/cg-beh-probe/tests/integration/common.rs @@ -0,0 +1,71 @@ +use cg_beh_probe::dispatch::{self, Dispatch}; +use cg_beh_probe::facts::Snapshot; +use cg_beh_probe::fixture::{self, FoundryVariant, TestWorld, Variant}; +use cg_beh_probe::query::{MethodDelta, OldRef}; +use foundry_parity_lab::bind::World; +use lance_graph_dt64::{BindStore, MethodId, Refusal}; + +pub const REV: &str = "test-revision"; + +pub fn lab(v: Variant) -> (TestWorld, Snapshot) { + let w = fixture::world(v); + let mut s = Snapshot::new(REV, "lab").unwrap(); + s.add_class( + &w.store, + &w.view, + fixture::CLASS, + &fixture::METHODS, + &fixture::READ, + ) + .unwrap(); + (w, s) +} + +pub fn foundry(v: FoundryVariant) -> (World, Snapshot) { + let w = fixture::foundry(v); + let mut s = Snapshot::new(REV, "foundry").unwrap(); + s.add_class( + &w.store, + &w.view, + fixture::FOUNDRY_CLASS, + &fixture::foundry_ids(), + &fixture::FOUNDRY_READ, + ) + .unwrap(); + (w, s) +} + +pub fn delta(ds: &[MethodDelta], method: u32) -> &MethodDelta { + ds.iter().find(|d| d.method == method).unwrap() +} + +/// What `new` answers a reference `old` issued for `method`, as the query's +/// [`OldRef`] vocabulary. +pub fn observed(old: &BindStore, new: &BindStore, class: u32, method: u32) -> OldRef { + let r = old.method_ref(class, MethodId(method)).unwrap(); + match new.admit(&r) { + Err(Refusal::SignatureRevisionMismatch { .. }) => OldRef::Signature, + Err( + Refusal::GuardMismatch { .. } + | Refusal::GuardDropped { .. } + | Refusal::GuardAdded { .. }, + ) => OldRef::Guard, + Err(Refusal::BindingMismatch { .. }) => OldRef::Binding, + Err(Refusal::ForeignStore { .. }) => OldRef::IssuerOnly, + other => panic!("unexpected admission answer {other:?}"), + } +} + +pub fn dispatch_source() -> String { + std::fs::read_to_string(concat!( + env!("CARGO_MANIFEST_DIR"), + "/../lance-graph-r2il/src/lib.rs" + )) + .unwrap() +} + +pub fn real_dispatch() -> (String, Dispatch) { + let src = dispatch_source(); + let d = dispatch::read(&src).unwrap(); + (src, d) +} diff --git a/crates/cg-beh-probe/tests/integration/gate_a.rs b/crates/cg-beh-probe/tests/integration/gate_a.rs new file mode 100644 index 000000000..e774065d6 --- /dev/null +++ b/crates/cg-beh-probe/tests/integration/gate_a.rs @@ -0,0 +1,172 @@ +//! Gate A: ON, WHEN and DO are read as separate registered facts. + +use cg_beh_probe::facts::{extract, ArgFact, DepKind, GuardConvention, Missing, Read, Snapshot}; +use cg_beh_probe::fixture::{self, FoundryVariant, Variant}; +use foundry_parity_lab::method; +use lance_graph_contract::set_algebra::{Cmp, Logic, SetExpr}; +use lance_graph_dt64::{Guard, MethodId, Refusal, SchemaRev}; +use lance_graph_r2il::polyfill::{position_of, POLYFILL, POLYFILL_LENS}; + +use crate::common::{foundry, lab, REV}; + +#[test] +fn the_lab_method_is_read_part_by_part() { + let (w, s) = lab(Variant::Base); + let m = s.method(fixture::CLASS, fixture::GUARDED).unwrap(); + + // Identity: the digest is the one the store's own reference carries. + let r = w + .store + .method_ref(fixture::CLASS, MethodId(fixture::GUARDED)) + .unwrap(); + assert_eq!(m.binding, r.stamp.binding()); + assert_eq!(m.sig_rev, 1); + + // ON, through the pinned basis. + assert_eq!(m.on.len(), 1); + assert_eq!( + (m.on[0].position, m.on[0].predicate.as_str()), + (0, "lab:beh/a") + ); + let reads: Vec<(u8, &str)> = m + .reads + .iter() + .map(|f| (f.position, f.predicate.as_str())) + .collect(); + assert_eq!(reads, [(0, "lab:beh/a"), (1, "lab:beh/b")]); + + // WHEN. + let when = m.when.as_ref().unwrap(); + assert_eq!(when.logic, "TwoValued"); + assert_eq!(when.deps.len(), 2); + for (dep, (number, predicate)) in when.deps.iter().zip([(0, "lab:beh/a"), (1, "lab:beh/b")]) { + assert_eq!((dep.kind, dep.number), (DepKind::ResI32, number)); + assert_eq!(dep.consumer.as_ref().unwrap().predicate, predicate); + } + + // DO, in order. + assert_eq!(m.steps.len(), 2); + let (less, sum) = (&m.steps[0], &m.steps[1]); + assert_eq!( + (less.ordinal, less.lens, less.word), + (0, POLYFILL_LENS, position_of("IntSLess").unwrap()) + ); + assert_eq!(less.word_predicate, "lg:polyfill:f000/IntSLess"); + assert_eq!((less.arity, less.target.position), (2, 3)); + assert!(matches!(&less.args[..], [ArgFact::Field(f), ArgFact::Const(5)] if f.position == 0)); + assert_eq!( + (sum.ordinal, sum.word, sum.target.position), + (1, position_of("SUM").unwrap(), 4) + ); + assert!( + matches!(&sum.args[..], [ArgFact::Field(a), ArgFact::Field(b)] if a.position == 3 && b.position == 1) + ); + assert_eq!(POLYFILL.len(), 17); +} + +#[test] +fn without_a_declared_convention_every_guard_dependency_is_unknown() { + let w = fixture::world(Variant::Base); + let r = w + .store + .method_ref(fixture::CLASS, MethodId(fixture::GUARDED)) + .unwrap(); + let opaque = Read { + convention: GuardConvention::Opaque, + ..fixture::READ + }; + let m = extract(&w.store, &w.view, &r, &opaque).unwrap(); + let deps = &m.when.as_ref().unwrap().deps; + assert_eq!(deps.len(), 2); + assert!(deps.iter().all(|d| d.consumer.is_none())); +} + +#[test] +fn a_guard_dependency_outside_the_registered_reads_stays_unknown() { + // DT64 registers a guard that names lane 2 for a method that reads only + // 0 and 1: `validate` does not check guard positions. The declared + // convention is therefore not accepted for that dependency. + let mut methods = fixture::methods(Variant::Base); + methods[0].when = Some(Guard::new( + SetExpr::And(vec![ + SetExpr::i32(0, Cmp::Lt, 5), + SetExpr::i32(2, Cmp::Ge, 0), + ]), + Logic::TwoValued, + )); + let w = fixture::world_with(methods, false); + let r = w + .store + .method_ref(fixture::CLASS, MethodId(fixture::GUARDED)) + .unwrap(); + let m = extract(&w.store, &w.view, &r, &fixture::READ).unwrap(); + let deps = &m.when.as_ref().unwrap().deps; + assert_eq!(deps.len(), 2); + assert!(deps[0].consumer.is_some()); + assert_eq!(deps[1].number, 2); + assert!(deps[1].consumer.is_none()); +} + +#[test] +fn can_cook_has_on_and_when_and_no_do() { + let (_, s) = foundry(FoundryVariant::Base); + assert_eq!(s.methods.len(), 16); + let id = method::method_id(0, 1).0; + let m = s.method(fixture::FOUNDRY_CLASS, id).unwrap(); + + assert!(m.steps.is_empty()); + assert!(s.methods.iter().all(|m| m.steps.is_empty())); + assert!(s.to_tsv().contains(&format!("DO_NONE\t0x51160001\t{id}\n"))); + assert!(!s.to_tsv().contains("\nDO\t")); + + // ON is registered equal to reads, and every guard dependency is one of + // the reads. + assert!(!m.on.is_empty()); + assert_eq!(m.on, m.reads); + let when = m.when.as_ref().unwrap(); + assert_eq!(when.logic, "TwoValued"); + assert!(when.deps.len() >= 3); + for d in &when.deps { + let f = d.consumer.as_ref().unwrap(); + assert!(m.reads.contains(f)); + assert!(f.predicate.starts_with("ops:")); + } + assert_eq!(s.class(fixture::FOUNDRY_CLASS).unwrap().basis.len(), 211); +} + +#[test] +fn a_snapshot_without_a_source_revision_is_refused() { + assert_eq!(Snapshot::new("", "x").unwrap_err(), Missing::SourceRevision); + assert_eq!( + Snapshot::new(" UNKNOWN ", "x").unwrap_err(), + Missing::SourceRevision + ); + assert!(Snapshot::new(REV, "x").is_ok()); +} + +#[test] +fn do_steps_are_not_read_without_the_lens_they_were_bound_at() { + let w = fixture::world(Variant::Base); + let r = w + .store + .method_ref(fixture::CLASS, MethodId(fixture::GUARDED)) + .unwrap(); + let none = Read { + lens_rev: None, + ..fixture::READ + }; + assert_eq!( + extract(&w.store, &w.view, &r, &none).unwrap_err(), + Missing::LensRevision { + lens: POLYFILL_LENS + } + ); + let other = Read { + lens_rev: Some(SchemaRev(2)), + ..fixture::READ + }; + assert!(matches!( + extract(&w.store, &w.view, &r, &other).unwrap_err(), + Missing::Lens(Refusal::SchemaRevisionMismatch { .. }) + )); +} diff --git a/crates/cg-beh-probe/tests/integration/gate_b.rs b/crates/cg-beh-probe/tests/integration/gate_b.rs new file mode 100644 index 000000000..372b3ea56 --- /dev/null +++ b/crates/cg-beh-probe/tests/integration/gate_b.rs @@ -0,0 +1,240 @@ +//! Gate B: the four kinds of change are told apart, each with its evidence +//! and the obligations it makes stale. Every predicted admission answer is +//! compared with what the stores answer. + +use cg_beh_probe::fixture::{self, FoundryVariant, Variant}; +use cg_beh_probe::query::{diff, impl_change, word_impact, Component, Obligation, OldRef, Status}; +use cg_beh_probe::Grade; +use foundry_parity_lab::method; +use lance_graph_dt64::{BasisSource, MethodId, Refusal}; +use lance_graph_r2il::polyfill::{position_of, POLYFILL, POLYFILL_LENS}; + +use crate::common::{delta, foundry, lab, observed, real_dispatch}; + +const CLASS: u32 = fixture::CLASS; + +#[test] +fn a_changed_on_declaration_moves_the_binding_and_the_trigger_set() { + let ((old, before), (new, after)) = (lab(Variant::Base), lab(Variant::OnMoved)); + let ds = diff(&before, &after).unwrap(); + let d = delta(&ds, fixture::GUARDED); + assert_eq!(d.status, Status::Changed(vec![Component::On])); + assert!(d.binding_changed); + assert_eq!( + d.stale, + [Obligation::MethodRefStamp, Obligation::TriggerSet] + ); + assert!(d + .evidence + .iter() + .all(|e| e.grade == Grade::Dt64Registration)); + assert_eq!(d.old_ref(), Some(OldRef::Binding)); + assert_eq!( + observed(&old.store, &new.store, CLASS, fixture::GUARDED), + OldRef::Binding + ); + // The trigger set really moved. + let on = |w: &fixture::TestWorld, field: u8| { + w.store + .resolve(&w.view, CLASS, fixture::REV) + .unwrap() + .methods_on(field) + .map(|m| m.id.0) + .collect::>() + }; + assert_eq!(on(&old, 0), [fixture::GUARDED, fixture::INDEPENDENT]); + assert_eq!(on(&new, 0), [fixture::INDEPENDENT]); +} + +#[test] +fn a_changed_guard_moves_the_witness_and_not_the_binding() { + let ((old, before), (new, after)) = (lab(Variant::Base), lab(Variant::GuardMoved)); + let ds = diff(&before, &after).unwrap(); + let d = delta(&ds, fixture::GUARDED); + assert_eq!(d.status, Status::Changed(vec![Component::When])); + assert!(!d.binding_changed); + assert_eq!(d.stale, [Obligation::GuardWitness]); + assert_eq!(d.old_ref(), Some(OldRef::Guard)); + assert_eq!( + observed(&old.store, &new.store, CLASS, fixture::GUARDED), + OldRef::Guard + ); + // DO is untouched. + let steps = |s: &cg_beh_probe::facts::Snapshot| { + s.method(CLASS, fixture::GUARDED).unwrap().steps.clone() + }; + assert_eq!(steps(&before), steps(&after)); +} + +#[test] +fn a_respelled_guard_keeps_its_witness_and_makes_nothing_stale() { + let ((old, before), (new, after)) = (lab(Variant::Base), lab(Variant::GuardRespelled)); + let ds = diff(&before, &after).unwrap(); + let d = delta(&ds, fixture::GUARDED); + assert_eq!(d.status, Status::Changed(vec![Component::WhenSpelling])); + assert!(d.stale.is_empty()); + assert_eq!(d.old_ref(), Some(OldRef::IssuerOnly)); + assert_eq!( + observed(&old.store, &new.store, CLASS, fixture::GUARDED), + OldRef::IssuerOnly + ); +} + +#[test] +fn a_changed_field_basis_reaches_every_method_of_the_class() { + let ((old, before), (new, after)) = (lab(Variant::Base), lab(Variant::BasisSwapped)); + let ds = diff(&before, &after).unwrap(); + assert_eq!(ds.len(), 3); + for d in &ds { + assert_eq!(d.status, Status::Changed(vec![Component::Basis])); + assert_eq!( + d.stale, + [Obligation::WitnessedResolve, Obligation::MethodRefStamp] + ); + assert_eq!(d.old_ref(), Some(OldRef::Binding)); + assert_eq!( + observed(&old.store, &new.store, CLASS, d.method), + OldRef::Binding + ); + } + // Same positions, other predicates under them. + let on = |s: &cg_beh_probe::facts::Snapshot| { + s.method(CLASS, fixture::GUARDED).unwrap().on[0].clone() + }; + assert_eq!((on(&before).position, on(&after).position), (0, 0)); + assert_eq!( + ( + on(&before).predicate.as_str(), + on(&after).predicate.as_str() + ), + ("lab:beh/a", "lab:beh/b") + ); + // The witnessed lookup of the old store refuses the new basis ... + assert_eq!( + old.store + .resolve(&new.view, CLASS, fixture::REV) + .unwrap_err(), + Refusal::PredicateBasisChanged { + class: CLASS, + schema_rev: fixture::REV, + source: BasisSource::Current + } + ); + // ... and `admit`, which takes no view, still admits the old reference. + let r = old + .store + .method_ref(CLASS, MethodId(fixture::GUARDED)) + .unwrap(); + assert!(old.store.admit(&r).is_ok()); +} + +#[test] +fn a_changed_do_implementation_changes_no_registered_fact() { + let (_, snap) = lab(Variant::Base); + let (src, dispatch) = real_dispatch(); + let less = position_of("IntSLess").unwrap(); + let arm = dispatch.arm_of_word(less).unwrap(); + assert_eq!(arm.names, ["INT_S_LESS"]); + + let hit = impl_change(&snap, &dispatch, &src, POLYFILL_LENS, arm.start + 1).unwrap(); + assert_eq!(hit.words.len(), 1); + assert_eq!(hit.words[0].word, less); + assert_eq!(hit.words[0].users, [(CLASS, fixture::GUARDED, 0)]); + assert_eq!( + hit.words[0].stale, + [Obligation::ExecutedParity { + lens: POLYFILL_LENS, + word: less + }] + ); + let grades: Vec = hit.evidence.iter().map(|e| e.grade).collect(); + assert_eq!( + grades, + [ + Grade::SourceStructure, + Grade::SourceStructure, + Grade::Dt64Registration + ] + ); + + // The registration is the same before and after such a change. + let (_, again) = lab(Variant::Base); + assert!(diff(&snap, &again) + .unwrap() + .iter() + .all(|d| d.status == Status::Unchanged && d.stale.is_empty())); +} + +#[test] +fn an_arm_shared_by_three_opcodes_reaches_all_three_words() { + let (_, snap) = lab(Variant::Base); + let (src, dispatch) = real_dispatch(); + let add = position_of("IntAdd").unwrap(); + let arm = dispatch.arm_of_word(add).unwrap(); + assert_eq!(arm.names, ["INT_ADD", "INT_MULT", "INT_S_DIV"]); + let hit = impl_change(&snap, &dispatch, &src, POLYFILL_LENS, arm.start).unwrap(); + let by_word = |name: &str| { + hit.words + .iter() + .find(|w| w.word == position_of(name).unwrap()) + .unwrap() + }; + assert_eq!(by_word("IntAdd").users, [(CLASS, fixture::INDEPENDENT, 0)]); + // No user in this snapshot: nothing is claimed stale, and nothing is + // claimed safe. + assert!(by_word("IntMult").users.is_empty()); + assert!(by_word("IntMult").stale.is_empty()); + assert_eq!(hit.words.len(), 3); +} + +#[test] +fn can_cook_is_told_apart_the_same_way() { + let target = method::method_id(0, 1).0; + let (old, before) = foundry(FoundryVariant::Base); + + let (new, after) = foundry(FoundryVariant::GuardThreshold); + let ds = diff(&before, &after).unwrap(); + assert_eq!(ds.len(), 16); + let d = delta(&ds, target); + assert_eq!(d.status, Status::Changed(vec![Component::When])); + assert!(!d.binding_changed); + assert_eq!( + observed(&old.store, &new.store, fixture::FOUNDRY_CLASS, target), + OldRef::Guard + ); + assert_eq!( + ds.iter().filter(|d| d.status == Status::Unchanged).count(), + 15 + ); + + let (new, after) = foundry(FoundryVariant::OnNarrowed); + let ds = diff(&before, &after).unwrap(); + let d = delta(&ds, target); + assert_eq!(d.status, Status::Changed(vec![Component::On])); + assert_eq!( + d.stale, + [Obligation::MethodRefStamp, Obligation::TriggerSet] + ); + assert_eq!( + observed(&old.store, &new.store, fixture::FOUNDRY_CLASS, target), + OldRef::Binding + ); + assert_eq!( + ds.iter().filter(|d| d.status == Status::Unchanged).count(), + 15 + ); +} + +#[test] +fn no_can_cook_registration_is_reached_through_do() { + // The negative control: CanCook has no DO step, so a changed word + // implementation has no DO edge to it. Its guard is lowered by relalg, + // a path this gate does not map. + let (_, snap) = foundry(FoundryVariant::Base); + let (src, dispatch) = real_dispatch(); + for word in 0..POLYFILL.len() as u8 { + let w = word_impact(&snap, &dispatch, &src, POLYFILL_LENS, word).unwrap(); + assert!(w.users.is_empty()); + assert!(w.stale.is_empty()); + } +} diff --git a/crates/cg-beh-probe/tests/integration/gate_c.rs b/crates/cg-beh-probe/tests/integration/gate_c.rs new file mode 100644 index 000000000..27da1e89f --- /dev/null +++ b/crates/cg-beh-probe/tests/integration/gate_c.rs @@ -0,0 +1,259 @@ +//! Gate C: independent falsifiers. Each alters one thing and checks that +//! exactly that is reported, or that the reading is refused. + +use cg_beh_probe::dispatch::{self, DispatchError}; +use cg_beh_probe::facts::{class_facts, extract, Missing}; +use cg_beh_probe::fixture::{self, FoundryVariant, SwappedBasis, Variant}; +use cg_beh_probe::query::{ + diff, impl_change, word_impact, Component, DiffRefusal, ImplRefusal, Obligation, OldRef, Status, +}; +use foundry_parity_lab::bind::STOCK0; +use foundry_parity_lab::method; +use lance_graph_contract::class_view::ClassView; +use lance_graph_dt64::dr::Extent; +use lance_graph_dt64::{BasisSource, BindStore, ClassSchema, MethodId, Refusal}; +use lance_graph_r2il::polyfill::{polyfill_arities, position_of, POLYFILL_LENS}; + +use crate::common::{delta, foundry, lab, observed, real_dispatch}; + +const CLASS: u32 = fixture::CLASS; + +#[test] +fn a_basis_altered_at_the_same_field_count_is_refused_not_read() { + let (world, _) = foundry(FoundryVariant::Base); + let swapped = SwappedBasis::of(&world, STOCK0, STOCK0 + 1); + assert_eq!( + swapped.fields(foundry_parity_lab::bind::VIEW_CLASS).len(), + world + .view + .fields(foundry_parity_lab::bind::VIEW_CLASS) + .len() + ); + let refused = Refusal::PredicateBasisChanged { + class: fixture::FOUNDRY_CLASS, + schema_rev: fixture::FOUNDRY_READ.schema_rev, + source: BasisSource::Current, + }; + assert_eq!( + class_facts( + &world.store, + &swapped, + fixture::FOUNDRY_CLASS, + fixture::FOUNDRY_READ.schema_rev + ) + .unwrap_err(), + Missing::Basis(refused.clone()) + ); + let r = world + .store + .method_ref(fixture::FOUNDRY_CLASS, method::method_id(0, 1)) + .unwrap(); + assert_eq!( + extract(&world.store, &swapped, &r, &fixture::FOUNDRY_READ).unwrap_err(), + Missing::Basis(refused) + ); + // The same reference over the bound basis reads. + assert!(extract(&world.store, &world.view, &r, &fixture::FOUNDRY_READ).is_ok()); +} + +#[test] +fn reversing_independent_do_steps_is_a_do_change_and_nothing_else() { + let ((old, before), (new, after)) = (lab(Variant::Base), lab(Variant::DoReversed)); + let ds = diff(&before, &after).unwrap(); + let d = delta(&ds, fixture::INDEPENDENT); + assert_eq!(d.status, Status::Changed(vec![Component::Do])); + assert_eq!(d.stale, [Obligation::MethodRefStamp]); + assert_eq!( + observed(&old.store, &new.store, CLASS, fixture::INDEPENDENT), + OldRef::Binding + ); + let words = |s: &cg_beh_probe::facts::Snapshot| { + s.method(CLASS, fixture::INDEPENDENT) + .unwrap() + .steps + .iter() + .map(|st| (st.ordinal, st.word)) + .collect::>() + }; + let (add, sub) = ( + position_of("IntAdd").unwrap(), + position_of("IntSub").unwrap(), + ); + assert_eq!(words(&before), [(0, add), (1, sub)]); + assert_eq!(words(&after), [(0, sub), (1, add)]); +} + +#[test] +fn reversing_dependent_do_steps_does_not_register() { + // GUARDED's second step reads what its first wrote. Reversed, the store + // refuses the binding, so there are no facts to misread. + let mut methods = fixture::methods(Variant::Base); + methods[0].effects.reverse(); + let view = fixture::TestView::new(false); + let mut store = BindStore::new(); + store + .declare_algebra( + POLYFILL_LENS, + fixture::REV, + Extent::DR64_CUBE, + polyfill_arities(), + ) + .unwrap(); + let schema = ClassSchema { + schema_rev: fixture::REV, + field_count: fixture::FIELDS.len(), + extent: Extent::DR64_CUBE, + }; + assert_eq!( + store.register(&view, CLASS, schema, methods).unwrap_err(), + Refusal::UndeclaredRead { + class: CLASS, + method: MethodId(fixture::GUARDED), + effect: 0, + position: 3 + } + ); +} + +#[test] +fn an_unrelated_method_is_reported_unchanged_under_every_variant() { + let (_, before) = lab(Variant::Base); + for v in [ + Variant::OnMoved, + Variant::GuardMoved, + Variant::GuardRespelled, + Variant::DoReversed, + ] { + let (_, after) = lab(v); + let ds = diff(&before, &after).unwrap(); + assert_eq!(ds.len(), 3, "{v:?}"); + let d = delta(&ds, fixture::UNRELATED); + assert_eq!(d.status, Status::Unchanged, "{v:?}"); + assert!(d.stale.is_empty() && !d.binding_changed, "{v:?}"); + assert_eq!( + before.method(CLASS, fixture::UNRELATED), + after.method(CLASS, fixture::UNRELATED) + ); + // Exactly one method moved. + assert_eq!( + ds.iter().filter(|d| d.status != Status::Unchanged).count(), + 1, + "{v:?}" + ); + } +} + +#[test] +fn a_reference_from_another_issuer_yields_no_facts() { + let w = fixture::world(Variant::Base); + let clone = w.store.clone(); + let foreign = clone.method_ref(CLASS, MethodId(fixture::GUARDED)).unwrap(); + assert_eq!( + extract(&w.store, &w.view, &foreign, &fixture::READ).unwrap_err(), + Missing::Admit(Refusal::ForeignStore { class: CLASS }) + ); + // A reference that dropped its guard witness is refused too. + let mut dropped = w + .store + .method_ref(CLASS, MethodId(fixture::GUARDED)) + .unwrap(); + dropped.guard = None; + assert_eq!( + extract(&w.store, &w.view, &dropped, &fixture::READ).unwrap_err(), + Missing::Admit(Refusal::GuardDropped { + class: CLASS, + method: MethodId(fixture::GUARDED) + }) + ); +} + +#[test] +fn a_removed_dispatch_mapping_makes_its_word_unknown_and_no_other() { + let (_, snap) = lab(Variant::Base); + let (src, real) = real_dispatch(); + assert!(real.words_without_arm().is_empty()); + let less = position_of("IntSLess").unwrap(); + let arm = real.arm_of_word(less).unwrap().clone(); + + let without: String = src + .lines() + .enumerate() + .filter(|(i, _)| *i + 1 < arm.start || *i + 1 > arm.end) + .map(|(_, l)| format!("{l}\n")) + .collect(); + let cut = dispatch::read(&without).unwrap(); + assert_eq!(cut.words_without_arm(), [less]); + assert_eq!( + word_impact(&snap, &cut, &without, POLYFILL_LENS, less).unwrap_err(), + ImplRefusal::NoDispatchArm { word: less } + ); + // Every other word answers as before. + for word in (0..17u8).filter(|w| *w != less) { + assert_eq!( + word_impact(&snap, &cut, &without, POLYFILL_LENS, word) + .unwrap() + .users, + word_impact(&snap, &real, &src, POLYFILL_LENS, word) + .unwrap() + .users + ); + } +} + +#[test] +fn a_dispatch_reading_from_other_source_text_is_refused() { + let (_, snap) = lab(Variant::Base); + let (src, real) = real_dispatch(); + let line = real.arm_of_word(position_of("SUM").unwrap()).unwrap().start; + let later = format!("{src}\n// one line later\n"); + assert!(matches!( + impl_change(&snap, &real, &later, POLYFILL_LENS, line).unwrap_err(), + ImplRefusal::StaleWitness { .. } + )); + assert!(impl_change(&snap, &real, &src, POLYFILL_LENS, line).is_ok()); +} + +#[test] +fn a_line_outside_the_word_arms_has_no_behaviour_edge() { + let (_, snap) = lab(Variant::Base); + let (src, real) = real_dispatch(); + assert_eq!( + impl_change(&snap, &real, &src, POLYFILL_LENS, 1).unwrap_err(), + ImplRefusal::NotInDispatch { line: 1 } + ); + let load = real.arms.iter().find(|a| a.names == ["LOAD"]).unwrap(); + assert_eq!( + impl_change(&snap, &real, &src, POLYFILL_LENS, load.start).unwrap_err(), + ImplRefusal::ArmNotAWord { + names: vec!["LOAD".to_string()] + } + ); + assert_eq!( + dispatch::read("fn other() {}").unwrap_err(), + DispatchError::NoCallFn + ); +} + +#[test] +fn facts_that_contradict_the_binding_digest_are_refused() { + let (_, before) = lab(Variant::Base); + // ON altered by hand, digest left alone. + let mut forged = before.clone(); + forged.methods[0].on[0].position = 1; + assert!( + matches!(diff(&before, &forged).unwrap_err(), DiffRefusal::Inconsistent { method, .. } if method == fixture::GUARDED) + ); + // Digest altered by hand, nothing else. + let mut forged = before.clone(); + forged.methods[2].binding ^= 1; + assert!( + matches!(diff(&before, &forged).unwrap_err(), DiffRefusal::Inconsistent { method, .. } if method == fixture::UNRELATED) + ); + // A method whose class basis is absent. + let mut forged = before.clone(); + forged.classes.clear(); + assert_eq!( + diff(&before, &forged).unwrap_err(), + DiffRefusal::ClassMissing { class: CLASS } + ); +} diff --git a/crates/cg-beh-probe/tests/integration/main.rs b/crates/cg-beh-probe/tests/integration/main.rs new file mode 100644 index 000000000..51309812b --- /dev/null +++ b/crates/cg-beh-probe/tests/integration/main.rs @@ -0,0 +1,6 @@ +//! D-CG-BEH-2 gates. A: registered facts. B: the change query. C: falsifiers. + +pub mod common; +pub mod gate_a; +pub mod gate_b; +pub mod gate_c; From 6866339a45e4f03bc72054b33dfa927876b3f752 Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 11 Nov 2026 09:33:22 +0000 Subject: [PATCH 2/4] feat(cg-beh-2): ON x WHEN x DO facts of registered DT64 methods, a change query, falsifiers D-CG-BEH-2 (EXO-155), read-only. A lab crate, crates/cg-beh-probe, reads a method's ON positions, WHEN guard and ordered DO steps from a BindStore through method_ref, admit and resolve, for its own class and for Foundry's CanCook as World::new() registers it. No production registration is edited, no polyfill word is added, nothing is executed. Gate A: cg-beh.facts.v1 rows (crates/cg-beh-probe/README.md). CanCook has ON and WHEN and an explicit DO_NONE. Gate B: query::diff tells a changed ON declaration, WHEN guard, DO registration and field basis apart, and names the stale obligations; query::impl_change handles a changed DO implementation, which moves no registered fact. Every predicted admission answer is compared with the stores' answer. Gate C: 23 tests; disable_runs.py removes 15 guards, 15 named tests fail. Gate D: .mermaid/03, /05 and /06 checked against source (.claude/probes/2026-11-11-cg-beh-2/gate-d-diagram-check.md). Adds the crate to the root exclude list, a CI workflow for it, a board entry and the regenerated entries and .codegraph indexes (adding a crate renumbers the generated dependency diagrams). Co-Authored-By: Claude Fable 5.2 Claude-Session: https://claude.ai/code/session_01XAqKMMWgnUU9g7Ldyn6sbk --- .claude/board/entries/2026-11-11-cg-beh-2.md | 19 + .claude/board/entries/README.md | 3 +- .claude/probes/2026-11-11-cg-beh-2/REPORT.md | 92 ++++ .../gate-d-diagram-check.md | 191 +++++++ .codegraph/calls.tsv | 1 + .codegraph/coverage.tsv | 1 + .codegraph/crates.tsv | 1 + .codegraph/crates/bgz-tensor.index.md | 24 +- .codegraph/crates/bgz17.index.md | 18 +- .codegraph/crates/causal-edge.index.md | 26 +- .codegraph/crates/cg-beh-probe.index.md | 195 +++++++ .codegraph/crates/cognitive-compiler.index.md | 6 +- .../crates/cognitive-polyfill-probe.index.md | 10 +- .../crates/cognitive-shader-driver.index.md | 30 +- .codegraph/crates/cognitive-stack.index.md | 30 +- .codegraph/crates/crepe-plan-probe.index.md | 18 +- .codegraph/crates/d-diamond-1-probe.index.md | 14 +- .codegraph/crates/deepnsm-v2.index.md | 12 +- .codegraph/crates/deepnsm.index.md | 18 +- .codegraph/crates/dr-isa-stream-lab.index.md | 10 +- .codegraph/crates/drf-focus-probe.index.md | 6 +- .../crates/drisa-register-probe.index.md | 14 +- .../crates/dt64-admission-probe.index.md | 10 +- .codegraph/crates/dto-class-check.index.md | 2 +- .codegraph/crates/elixir-template.index.md | 6 +- .codegraph/crates/foundry-parity-lab.index.md | 21 +- .codegraph/crates/gkat-probe.index.md | 2 +- .../crates/grammar-constraints-probe.index.md | 18 +- .codegraph/crates/helix.index.md | 2 +- .codegraph/crates/highheelbgz.index.md | 8 +- .codegraph/crates/holo-h14d-probe.index.md | 14 +- .../holo-lance-masked-io-probe.index.md | 2 +- .codegraph/crates/holograph.index.md | 8 +- .codegraph/crates/jc-batch-probe.index.md | 14 +- .codegraph/crates/jc.index.md | 14 +- .codegraph/crates/lance-graph-act-r.index.md | 2 +- .../crates/lance-graph-archetype.index.md | 6 +- .../crates/lance-graph-arm-discovery.index.md | 10 +- .../crates/lance-graph-benches.index.md | 14 +- .../crates/lance-graph-callcenter.index.md | 22 +- .../crates/lance-graph-catalog.index.md | 6 +- .../lance-graph-codec-research.index.md | 2 +- .../crates/lance-graph-codegraph.index.md | 18 +- .../crates/lance-graph-cognitive.index.md | 18 +- .../lance-graph-consumer-conformance.index.md | 22 +- .../crates/lance-graph-contract.index.md | 195 +++---- .../crates/lance-graph-cypher-quack.index.md | 14 +- .../crates/lance-graph-dir-sim.index.md | 14 +- .../crates/lance-graph-dt64-lance.index.md | 22 +- .codegraph/crates/lance-graph-dt64.index.md | 61 ++- .../crates/lance-graph-glove-parity.index.md | 18 +- .../crates/lance-graph-hydrate.index.md | 6 +- .../crates/lance-graph-lane-fold.index.md | 6 +- .../crates/lance-graph-mask-risc.index.md | 90 ++-- .codegraph/crates/lance-graph-metta.index.md | 10 +- .codegraph/crates/lance-graph-nal.index.md | 14 +- .codegraph/crates/lance-graph-nsl.index.md | 2 +- .codegraph/crates/lance-graph-ogar.index.md | 26 +- .codegraph/crates/lance-graph-onnx.index.md | 6 +- .../crates/lance-graph-ontology.index.md | 26 +- .codegraph/crates/lance-graph-osint.index.md | 18 +- .../crates/lance-graph-planner.index.md | 38 +- .codegraph/crates/lance-graph-python.index.md | 6 +- .codegraph/crates/lance-graph-quack.index.md | 58 +- .codegraph/crates/lance-graph-r2il.index.md | 33 +- .codegraph/crates/lance-graph-rbac.index.md | 14 +- .codegraph/crates/lance-graph-relalg.index.md | 30 +- .../crates/lance-graph-report-ogar.index.md | 10 +- .codegraph/crates/lance-graph-report.index.md | 22 +- .codegraph/crates/lance-graph-sap.index.md | 14 +- .../crates/lance-graph-supervisor.index.md | 18 +- .../crates/lance-graph-turbovec.index.md | 2 +- .codegraph/crates/lance-graph-xlog.index.md | 22 +- .codegraph/crates/lance-graph.index.md | 62 +-- .codegraph/crates/learning.index.md | 6 +- .codegraph/crates/mork-pathmap-probe.index.md | 10 +- .codegraph/crates/neural-debug.index.md | 2 +- .../crates/ogar-behavior-probe.index.md | 10 +- .codegraph/crates/onebrc-probe.index.md | 6 +- .codegraph/crates/p64-bridge.index.md | 18 +- .codegraph/crates/perturbation-sim.index.md | 10 +- .../crates/quasicryth-research.index.md | 2 +- .../crates/r2il-mask-abi-probe.index.md | 2 +- .codegraph/crates/reader-lm.index.md | 4 +- .codegraph/crates/rp-seal-t0-probe.index.md | 2 +- .codegraph/crates/sag-ra-probe.index.md | 2 +- .codegraph/crates/sigker.index.md | 6 +- .codegraph/crates/sigma-tier-router.index.md | 8 +- .codegraph/crates/soa64-u64-lab.index.md | 10 +- .codegraph/crates/surreal_container.index.md | 6 +- .codegraph/crates/symbiont.index.md | 18 +- .../crates/template-equivalence.index.md | 6 +- .codegraph/crates/template-runtime.index.md | 6 +- .codegraph/crates/thinking-engine.index.md | 22 +- .codegraph/crates/thought-git-probe.index.md | 6 +- .../crates/tract-harvest-probe.index.md | 10 +- .codegraph/crates/weather-poc.index.md | 6 +- .codegraph/dependencies.tsv | 6 + .codegraph/freshness.tsv | 1 + .codegraph/gaps.tsv | 1 + .codegraph/imports.tsv | 83 +++ .codegraph/index.md | 494 +++++++++--------- .codegraph/reverse_dependencies.tsv | 6 + .codegraph/symbols.tsv | 91 ++++ .codegraph/views/BindStore.md | 13 +- .codegraph/views/ClassView.md | 16 +- .codegraph/views/MethodBinding.md | 9 +- .codegraph/views/WideFieldMask.md | 16 +- .github/workflows/cg-beh-probe.yml | 80 +++ Cargo.toml | 5 + crates/cg-beh-probe/README.md | 83 +++ 111 files changed, 1912 insertions(+), 1007 deletions(-) create mode 100644 .claude/board/entries/2026-11-11-cg-beh-2.md create mode 100644 .claude/probes/2026-11-11-cg-beh-2/REPORT.md create mode 100644 .claude/probes/2026-11-11-cg-beh-2/gate-d-diagram-check.md create mode 100644 .codegraph/crates/cg-beh-probe.index.md create mode 100644 .github/workflows/cg-beh-probe.yml create mode 100644 crates/cg-beh-probe/README.md diff --git a/.claude/board/entries/2026-11-11-cg-beh-2.md b/.claude/board/entries/2026-11-11-cg-beh-2.md new file mode 100644 index 000000000..43136d978 --- /dev/null +++ b/.claude/board/entries/2026-11-11-cg-beh-2.md @@ -0,0 +1,19 @@ +# 2026-11-11 — CG-BEH-2: ON, WHEN and DO read as separate registered facts + +**Status:** MEASURED (lab). `crates/cg-beh-probe`, `.claude/probes/2026-11-11-cg-beh-2/`. Owner EXO-155; board `P-EXO-18`. + +A read-only lab crate reads a method's ON positions, WHEN guard and ordered DO steps from a +`BindStore` (`method_ref`, `admit`, `resolve`), for its own class and for Foundry's `CanCook`, and +compares two such readings. 23 tests; 15 of 15 disable runs red. + +**Findings.** +- A guard change does not move the binding digest; only `admit`'s witness comparison catches it. +- `admit` takes no `ClassView`. Over a reordered basis of the same count `resolve` refuses and + `admit` still admits the old reference. +- Registration does not check guard positions against the basis or the reads. +- `on` is registered and never evaluated by dt64, r2il, xlog or the Foundry lab. +- `CanCook` (16 methods) has no DO step, so no polyfill word implementation reaches it through DO. + +**OPEN.** Executed parity per word. Source attribution for ON and WHEN. Whether the guard belongs in +the binding digest and whether `admit` should see the basis are owner questions for EXO-155, not +decided here. `.mermaid/05` and `/06` still describe PR #1996 as open (it is merged). diff --git a/.claude/board/entries/README.md b/.claude/board/entries/README.md index 6a6e823bb..f99b0720a 100644 --- a/.claude/board/entries/README.md +++ b/.claude/board/entries/README.md @@ -25,11 +25,12 @@ index row, (3) no duplicate entry id. Checks 1 and 2 are deliberately opposite directions; the stranding this convention prevents shows up in exactly one of them, never both. -597 entries, 2026-08-06 .. 2026-11-11. +598 entries, 2026-08-06 .. 2026-11-11. | date | entry id | finding | file | |---|---|---|---| | 2026-11-11 | `codegraph-recon-1` | | [2026-11-11-codegraph-recon-1.md](2026-11-11-codegraph-recon-1.md) | +| 2026-11-11 | `cg-beh-2` | | [2026-11-11-cg-beh-2.md](2026-11-11-cg-beh-2.md) | | 2026-11-10 | `lab-resolve-borrow-all` | | [2026-11-10-lab-resolve-borrow-all.md](2026-11-10-lab-resolve-borrow-all.md) | | 2026-11-10 | `int8-direct-packed-b` | | [2026-11-10-int8-direct-packed-b.md](2026-11-10-int8-direct-packed-b.md) | | 2026-11-10 | `D-FOUNDRY-PARITY-1` | | [2026-11-10-foundry-parity-1-lab.md](2026-11-10-foundry-parity-1-lab.md) | diff --git a/.claude/probes/2026-11-11-cg-beh-2/REPORT.md b/.claude/probes/2026-11-11-cg-beh-2/REPORT.md new file mode 100644 index 000000000..552a13696 --- /dev/null +++ b/.claude/probes/2026-11-11-cg-beh-2/REPORT.md @@ -0,0 +1,92 @@ +# D-CG-BEH-2: the ON × WHEN × DO contract as separate registered facts + +Source `317c4ffc0`. Crate `crates/cg-beh-probe` (lab, own workspace). Read-only: no production +registration is edited, no word is added, nothing is executed. Owner EXO-155. + +## Gate A: registered facts + +`lab.facts.tsv` holds this crate's own class (three methods; method 1 has ON, WHEN and DO). +`foundry.facts.tsv` holds Foundry's `CanCook` class as `World::new()` registers it: 16 methods over +a 211-field basis. Format: `crates/cg-beh-probe/README.md`. + +`CanCook(item 0, q 1)`: + +| part | registered | +|---|---| +| ON | 9 positions: `ops:stock/0..2`, `ops:stockKnown/0..2`, `ops:staff/0`, `ops:equipment/0`, `ops:offers/0` | +| reads | the same 9 positions | +| WHEN | two-valued conjunction of 9 leaves; every leaf number is one of the reads | +| DO | none (`DO_NONE`), for all 16 methods | +| binding | `2fb0b32d08e66e2cd2ad070eaf572c82`, signature revision 1 | + +ON equals reads because `can_cook_method` builds both from the guard's fields. The store keeps them +as separate masks. + +## Gate B: four kinds of change + +Each prediction was compared with what the stores answer. + +| change | registered fact that moves | binding digest | old reference at the new store | stale | +|---|---|---|---|---| +| ON declaration | ON positions | moves | `BindingMismatch` | reference stamp; `methods_on` answers | +| WHEN guard, other rows | guard witness | does not move | `GuardMismatch` | guard witness | +| WHEN guard, same rows written differently | expression only | does not move | admitted but for the issuer | nothing | +| DO registration (step order) | ordered steps | moves | `BindingMismatch` | reference stamp | +| DO implementation (a dispatch arm) | none | does not move | admitted | executed parity of each word that has a user | +| field basis, same count | ordered predicates | moves for every method of the class | `BindingMismatch` | witnessed `resolve` / lane binding; reference stamp | + +Evidence paths: the first four and the last are `DT64_REGISTRATION` only. The DO implementation row +is `SOURCE_STRUCTURE` (line in arm, arm names opcode, opcode at table position) joined to +`DT64_REGISTRATION` (DO steps on that position). No row is `EXECUTED_PARITY`. + +Measured on the real dispatch source: line 977 is in the `INT_S_LESS` arm (976 to 1018), word 5, used +at ordinal 0 by lab method 1. The `INT_ADD | INT_MULT | INT_S_DIV` arm (1145 to 1162) reaches three +words; one has a user in the lab snapshot. + +## Gate C: falsifiers + +23 tests. `disable_runs.py` removes 15 guards one at a time; each named test fails (15 of 15). + +| falsifier | result | +|---|---| +| basis altered, same field count | `resolve` refuses with `PredicateBasisChanged`; no facts are read | +| guard changed, DO unchanged | only `When`; DO rows and binding digest equal | +| independent DO steps reversed | only `Do` | +| dependent DO steps reversed | the store refuses the registration (`UndeclaredRead`) | +| dispatch mapping removed | that word is refused as unknown; the other 16 answer as before | +| reference from a cloned store | `ForeignStore`; no facts | +| reference with its guard witness dropped | `GuardDropped`; no facts | +| unrelated method | `Unchanged` under every variant, facts byte-equal | +| facts altered against the digest | refused as inconsistent | +| dispatch reading from other text | refused as stale | + +## Findings + +1. **The guard is outside the binding digest.** A guard change leaves the digest equal and is caught + only by the witness comparison in `admit`. +2. **`admit` does not see the basis.** It takes no `ClassView`. Over a reordered basis of the same + count, `resolve` refuses and `admit` still admits the old reference. A caller that admits without + resolving does not learn that the basis moved. +3. **Guard positions are not checked at registration.** A guard may name a lane the method does not + read. Foundry's convention (guard number = field position) is the consumer's; the facts mark it. +4. **ON is registered and read, never evaluated.** In dt64, r2il, xlog and the Foundry lab `on` is + used by `methods_on`, `footprint`, the digest and the registration check. No executor consults it. +5. **`CanCook` has no DO edge.** A changed word implementation reaches no `CanCook` registration + through DO. Its guard is lowered by relalg, which this gate does not map. + +## Gate D + +`gate-d-diagram-check.md`. Checked statements: `03` 37 (4 stale), `05` 35 (5 stale), `06` 32 (4 stale). +The stale group that matters here: `05` and `06` describe PR #1996 (`PreparedMethod`, `rel_from_set`) +as open; it is merged. Relationships the diagrams omit: findings 1 to 4 above, the polyfill lens in +`03`, and that `resolve_algebra` checks revision and count but not the lens predicates. + +## Not shown + +- No executed parity. Nothing here says a word computes what it is declared to mean. +- The native lowering path (`binding_native`) and relalg's guard lowering are not mapped to source. +- Source-level attribution exists for DO implementations only. Which source line builds ON or WHEN + is not derived; ON and WHEN changes are found by comparing facts. +- The lens revision and a word's arity are not in the facts. A change of either moves the digest and + is refused as inconsistent rather than explained. +- One production-shaped binding (`CanCook`) and one lab class. diff --git a/.claude/probes/2026-11-11-cg-beh-2/gate-d-diagram-check.md b/.claude/probes/2026-11-11-cg-beh-2/gate-d-diagram-check.md new file mode 100644 index 000000000..e36a07c75 --- /dev/null +++ b/.claude/probes/2026-11-11-cg-beh-2/gate-d-diagram-check.md @@ -0,0 +1,191 @@ +# Gate D: `.mermaid/03`, `/05` and `/06` checked against source + +Source: lance-graph `317c4ffc0`. The OGAR citations in `06` were read in an OGAR checkout at `8fab880`. +A worker read each diagram in full and each cited source range, and wrote the lists below. The +orchestrator re-read four of its items at the stated lines (PR #1996 merged; `on` read only by +`methods_on`, `footprint`, the digest and the registration check; `NativeReceipt` has no `method`; +`MapTable::map` checks only the frame's issuer). The other items are the worker's reading and are +not re-checked. The diagrams are references; nothing here is a machine fact. No cargo was run for +this check. + +--------------------------------------------------------------------- +## FILE 03-dr-dt64-binding.md +--------------------------------------------------------------------- + +### 1. CONFIRMED + +C1. "`Width` is DR64 (`W64`) or DR256 (`W256`). A DR64 tile has 64 positions, a DR256 tile has 256." (l.89) -> dr.rs:32-44. +C2. Class "reserves an `Extent`: one `Axis` each for identity, property and predicate (methods)" (l.90) -> dr.rs:96-102 (`predicate` doc: "its methods"). +C3. "A reservation costs nothing. Only identity tiles a route touches count as claimed." (l.90) -> dr.rs:91-95, 140-148, 319-335. +C4. "`RouteLog` is append-only. Only routing is versioned" (l.91) -> dr.rs:206-208, 285-292 (`push` only appends); class diagram methods route/check/retract/routed_at/claimed at dr.rs:255, 268, 281, 296, 319. +C5. `RouteRefusal` has OutsideReservation and FutureVersion (l.54-58) -> dr.rs:191-204. +C6. `VersionClock` current/tick/fork (l.43-46) -> dr.rs:175, 180, 185. +C7. "`MapTable` changes only by appending. An old frame replays the layout in force when it was sealed." (l.92) -> dr.rs:703-713, 859-869, 1053-1056. +C8. MapTable members advance/advance_at/seal/map(frame,tile)/diagnose_at (l.59-65) -> dr.rs:970, 997, 1045, 1057, 1075. +C9. "`diagnose_at` takes a bare version number and returns a read-only diagnostic, not an executable map. Execution goes through `MapTable::map` with a frame." (l.93) -> dr.rs:825-831, 1062-1088. +C10. `LocalMap` prepare/local/global and `MapRefusal` TooMany/Duplicate/Unmapped/OutOfTile (l.66-77) -> dr.rs:555-566, 586, 622, 631. +C11. "A frame is a seal over three revisions. Only a `FrameStore` can issue one. A frame compares by the identity of its issue, never by its numbers." (l.109) -> dr.rs:356-361, 375-377, 482-491, 505-507. +C12. `FrameRefusal` five arms (l.130-137) -> dr.rs:364-373. +C13. "A frame from another store is `ForeignFrame` even at equal numbers. A stale frame names the first revision that moved, or `FrameResealed` if none did." (l.169) -> dr.rs:459-479. +C14. "`Focus` is motion, not reference"; "`Scope` here is an opaque `u64` id" (l.170-171) -> dr.rs:510-522. `Guards::check(store, now)` checks frame, then focus, then scope -> dr.rs:543-551. +C15. `ClassView` has fields / fields_at / lens_fields (l.188-192) -> class_view.rs:1061, 1105, 1084. +C16. `ClassSchema` = schema_rev, field_count, extent (l.194-198) -> lib.rs:253-258. +C17. `MethodBinding` has id, sig_rev, on, when, reads, effects (l.199-206); "`on` is the field mask that triggers it, `when` is an optional guard, `effects` is the ordered DO list" (l.258) -> lib.rs:214-231. +C18. `BindStore` register / route / resolve / method_ref / admit / bind_lanes (l.207-214) -> lib.rs:814, 1018, 1073, 1136, 1180; lane.rs:171. +C19. "`Resolved` is an answer, not a witness"; accessors field_view / field_meaning / mask_where / action_ordinals (l.260) -> lib.rs:638-645, 683, 700, 719, 760. +C20. "A field with no spec is never selected by `mask_where`." (l.262) -> lib.rs:715-717, 724. +C21. `PropertySpec.marking` is one of Public, Internal, Pii, Financial, Restricted (l.261) -> property.rs:41-58, 769-783. +C22. "`BindStore::method_ref` issues a `MethodRef` stamped with the store identity. `BindStore::admit` ... refuses with `SignatureRevisionMismatch`, `GuardDropped`, `GuardAdded`, `GuardMismatch`, `BindingMismatch` or `ForeignStore`." (l.259) -> lib.rs:1136-1157, 1192-1210 (each of those six is returned there; the list is not complete, see S2). +C23. `LaneSource` lane_of / borrow / frames (l.221-226) -> lane.rs:57, 66, 79. `LaneAddr` space/lane/scope -> lane.rs:36-40. `LaneRequest` six fields -> lane.rs:91-100. +C24. "`LaneBinding` holds addresses only. It never holds a value." (l.263) -> lane.rs:150-165. +C25. 3.4 sequence order of checks in `bind_lanes`: source_owns, frame check, routed_at, current route, resolve, per-field FieldNotInBasis / Unbound / CoordinateSpace / Scope (l.292-328) -> lane.rs:178-215, 220-263. +C26. `LaneRefusal` arms named in the 3.4 alt branches (Frame, Bind, RouteChanged, FieldNotInBasis, Unbound, CoordinateSpace, Scope, StoreBasisMismatch, MappingChanged, Vanished, NotBound) -> lane.rs:104-141. +C27. "`borrow_all` runs the one check first, so N lanes cost N source lookups and not N squared." (l.349) -> lane.rs:365-391. +C28. "`LaneBinding::lane(field)` re-runs the whole check on each call and returns `NotBound` for a field outside the binding." (l.350) -> lane.rs:352-363. +C29. "`check` does not hash the basis again. It compares a `u128` witness and the revision and field count. A same-count reorder ... is caught only if the source maps lanes by predicate." (l.351) -> lane.rs:296-326 (esp. 303-306, 317-326). +C30. "`Vanished` is yielded per lane and the iterator carries on." (l.352) -> lane.rs:374-375, 404-413. +C31. "The returned lanes are as current as the check. No lock is held on the source." (l.353) -> lane.rs:377-378. +C32. 3.5: no business value, no evaluator, no persistence path (l.368-372) -> lib.rs:24-30. +C33. Basis check in `bind_lanes` goes through `resolve` (witnessed) (l.309-311) -> lane.rs:187; lib.rs:1073-1091, 1220-1246 (revision, count, then predicate-witness). + +### 2. STALE or WRONG + +S1. "Both the route log and the map table tick one shared version clock." (l.18) -> only when built from clones of one `VersionClock`. `RouteLog::with_clock` (dr.rs:235) and `MapTable::with_clock` (dr.rs:885) share; `MapTable::new` (dr.rs:879) and `RouteLog::default` make their own clocks; `BindStore` holds `routes: RouteLog` built by `Default` (lib.rs:777). Doc: dr.rs:158-165. The statement is true as a capability, not as a property of every store. +S2. admit refusal list (l.259) is incomplete: `admit` also returns `UnknownClass` (lib.rs:1184) and `UnknownMethod` (lib.rs:1190). +S3. 3.4 "class unknown or revision or basis differs: Bind(UnknownClass, SchemaRevisionMismatch, PredicateBasisChanged)" (l.311) -> `check_basis` can also return `FieldBasisChanged` (lib.rs:1235, 1291-1303) and `basis_at` can return `UnknownLensBasis` (lib.rs:1277-1279). +S4. Line drift in the Sources lists (symbol is present, range moved): `ClassSchema` cited lib.rs:253-262, actual 253-258; `MethodRef` cited 352-366, actual 352-359 (`Stamp` 370-374); `Resolved` cited 640-770, actual 638-763; `BindStore` cited 772-795, actual 771-791; `admit` cited 1180-1215, actual 1180-1212; `resolve` cited 1073-1095, actual 1073-1091; `LaneBinding` methods cited lane.rs:264-396, actual 265-392; dr.rs ranges are within about five lines (e.g. `LocalMap` cited 568-660, actual 572-655; `MapTable` cited 860-1100, actual 859-1134). + +### 3. MISSING RELATIONSHIPS (each checked) + +M1. `binding_digest` does NOT cover the guard. Doc: "neither is the guard: `BindStore::admit` compares the guard witness structurally" (lib.rs:407-410); body lib.rs:411-468 hashes class, basis digest, id, sig_rev, on, reads, effects (target, lens, word, lens rev, arity, args), population, truth, demand; no `when`, no `name`. Diagram 3.3 shows `MethodBinding` but not what the stamp digest covers. +M2. `admit` does NOT check the field basis. It has no `ClassView` parameter (lib.rs:1180). The basis enters only as `BasisDigest` stored in `ClassEntry.basis` and folded into `entry.bindings[i]` at registration (lib.rs:277-284, 879, 893-896); `admit` compares the stamp digest to that stored one (lib.rs:1207). The basis against the view is checked in `resolve`/`check_basis` (lib.rs:1073-1091) and `bind_lanes`, not in `admit`. Diagram edge "BindStore ..> ClassView : reads basis through" is true of resolve/bind_lanes only. +M3. Registration `validate` does NOT check the guard against the basis. Position check covers `on`, `reads`, effect targets and `Arg::Field` args only (lib.rs:1353-1371); `m.when` is not visited. Other registration checks omitted from the diagram: BasisTooWide, ReservationTooWide, FieldsExceedExtent, MethodsExceedExtent, DuplicateMethodId, UndeclaredRead (read-before-write) (lib.rs:1310-1394); BasisConflict (lib.rs:881-892); UnknownAlgebra/ArityMismatch (lib.rs:852-870). +M4. The polyfill lens is absent from 3.3: `AlgebraRef{lens, word}` (lib.rs:128-132), `declare_algebra` (lib.rs:917-939), `arity`, `resolve_algebra` (lib.rs:954-973), `words_used`, `users_of` (lib.rs:977-1004). `resolve_algebra` calls `check_basis(..., None)`: revision and field count only, NO predicate witness (lib.rs:960-966, with the in-source comment "a reorder of two words with the same arity is NOT detected here"). `AlgebraLens` stores `schema` and `arity` only, no `BasisDigest` (lib.rs:136-140). `Resolved` doc states the difference (lib.rs:641-645). +M5. `MethodBinding` fields omitted in 3.3: `name`, `population`, `truth`, `demand` (lib.rs:220, 228-230). The last three are inside the binding digest (lib.rs:455-467). +M6. `BindStore` also has `register_derived`, `resolve_at`, `check_route`, `check_issuer`, `claimed`, `retract`, `declare_algebra` (lib.rs:826, 1119, 1034, 1161, 1052, 1062, 917). `ClassView::lens_fields_at` (class_view.rs:1115) is not in the interface box. `MapTable::claim` and `locate`, `MapRead`, `TileMap`, `MapDiagnostic` (dr.rs:985, 1113, 689, 763, 831) are not drawn. +M7. `MapTable::map` checks only the frame's issuer (`frames.issued`, dr.rs:1057-1060), never currency: "A frame of this table is never stale" (dr.rs:690-693, 1053-1056). 3.2 says `FrameStore::check` accepts only the current seal; both statements are right, but the diagram does not say `map` is the history path that does not use `check`. + +--------------------------------------------------------------------- +## FILE 05-methods.md +--------------------------------------------------------------------- + +### 1. CONFIRMED + +C1. MethodBinding "id, sig_rev, ON mask, WHEN Guard, reads, DO effects" (l.22) -> lib.rs:214-231. +C2. "`register` is the only way a binding enters a store." (l.56) -> `register`/`register_derived` both call `insert` (lib.rs:814-822, 826-841, 843-912); `classes.insert` only at lib.rs:908. Node text "checks basis and unique MethodIds; a bound class never changes" (l.23) -> lib.rs:871-880, 1345-1351, 904-910 (BehaviourImmutable). +C3. "`method_ref` is the only way a `MethodRef` is issued. Its `Stamp` has private fields" (l.57-59) -> lib.rs:1136-1157, 370-374 (compile_fail doctest at 367-369). +C4. "`admit` returns the stored binding only after all checks pass. The order is fixed: identity, signature revision, guard witness, binding digest, issuer." (l.60-61) -> lib.rs:1180-1211; order doc lib.rs:1174-1179. Exact order in code: class lookup (1182), method lookup (1186-1190), sig_rev (1192), guard (1200-1206), binding digest (1207), issuer (1210). +C5. `Refusal` arms at "554, 555, 562, 564, 566, 571, 574" (l.84) -> exactly UnknownMethod 554, SignatureRevisionMismatch 555, GuardDropped 562, GuardAdded 564, GuardMismatch 566, BindingMismatch 571, ForeignStore 574 (lib.rs). +C6. `check_issuer` lib.rs:1161-1167 -> confirmed. +C7. `Guard` / `witness` (l.81) -> lib.rs:169-195. +C8. `MethodRef` + `Stamp` private fields (l.83) -> lib.rs:352-374. +C9. "DT64 keeps the binding and executes nothing." (l.5) -> lib.rs:1-27. +C10. "`run_with_program` ... `symbolic` answer returns no program" (l.89) -> lower.rs:70-83 (symbolic returns `(run, None)`). +C11. `Measure`, `Query` (l.90) -> ir.rs:98-119 (Measure at ir.rs:98-110, Query to 119). +C12. `to_set` normalize.rs:82 (l.91) -> `pub(crate) fn to_set` at normalize.rs:82. +C13. method.rs line cites for the lab are exact: `can_cook_guard` 47-61, `can_cook_method` 77-94 (with `when: Some(Guard::new(...))` at 87 and `reads` at 88), `MethodRefusal` 105-135 incl. `Folds` 118-120, `prepare` 211-292 with admit :217, borrow_all :229, rename :251, scope :252-257, run_with_program :264-272, one-fold check :276-280, `run` 295-320 with execute_into :302-309. +C14. Lab sequence (l.103-128): admit -> bind_lanes(reads + identity lane) + borrow_all -> rename -> optional conjoin "id lane != denied store" -> `run_with_program(Query{rel_from_set(guard), Keep})` -> refuse unless exactly one program -> per question `execute_into(Out::Mask)` -> read identity lane at set bits -> method.rs:211-320. +C15. "It refuses with `MethodRefusal::Folds` if the guard lowered into more than one fold" (l.137-138) -> method.rs:274-280; doc method.rs:114-118. +C16. "The reader scope in the lab is a stand-in written into the program. It is not the RBAC decision." (l.139-140) -> method.rs:14-16, 252-257; bind.rs:21-23 (READER "NOT an authorization"). +C17. `execute_into` at mask-risc exec.rs:1343 (l.154) -> confirmed (`pub fn execute_into(` at exec.rs:1343). +C18. "Arm C ... `CostRefusal::NotBound` ... merged (#1995)" (l.142-144) -> arm_c.rs:66 (enum), :82 (NotBound), :182 (returned); commit 15d4b4cb4 "(#1995)" is in the checkout history. +C19. r2il module doc (binding.rs:1-73) says prepare/run, what is checked when -> confirmed; `prepare` order: guards (329), route (330), resolve (331-333), admit (334), WHEN refused (335-337), three-valued refused (338-340), lens check (341-343), per effect opcode (344-355). +C20. "r2il refuses a binding that has a WHEN guard" (l.72) and node NOWHEN "GuardNotExecutable" (l.43) -> binding.rs:251-252, 335-337. +C21. "`run` ... check the frame, focus, scope, route and an explicit `ExecPermit`" (l.70-71), sequence 3 steps "check_issuer; check; check_route; permit must list this exact MethodRef, else NotPermitted" -> binding.rs:386-395; same order in `run_native` binding_native.rs:361-370. +C22. "`ExecPermit` is documented as a lab permission. Who issues it is not decided." (l.75-76) -> binding.rs:124-130. +C23. `Receipt` fields plan_id, method, frame, steps_executed, programs_run, output; "bounded by the number of steps ... not a row trace" (l.187, 197-198) -> binding.rs:219-231 (for `run`). +C24. `Prepared` carries plan_id (l.174) -> binding.rs:164-175; plan_id hashes the stamp's binding digest -> binding.rs:522. +C25. `prepare_native` keeps compiled programs, refuses fold results that feed folds (l.179) -> binding_native.rs:203-340 (243-245, 259-262); `run_native` refuses `PlanesChanged` (l.199-200) -> binding_native.rs:372-377. +C26. "per effect: lens, label alias, EXECUTABLE opcode, arity" (l.173) -> binding.rs:541-629 (`opcode`, `frozen_opcode`). +C27. xlog `bag_count_admitted` needs `Population::Bag` and steps GroupCount, GroupCount, MulI64 (l.45, 201-203) -> xlog lib.rs:384-403; `BoundRefusal` lib.rs:363-376. +C28. `run` "never reads the `ClassView` or the vocabulary again" (l.192) -> binding.rs:13-16 and the body of `run` (377-400) calls none. +C29. r2il `prepare` also consumes `resolve`: "P->>S: check_route, resolve(view, class, schema_rev)" (l.170) -> binding.rs:330-333. +C30. Plan wording: "natural candidate is the `Operation::Act` decision in `lance-graph-rbac` ... candidate only" (l.224-226) -> .claude/plans/foundry-parity-v1.md:295 ("the natural issuer is an `lance-graph-rbac` `Operation::Act` decision"). + +### 2. STALE or WRONG + +S1. PR #1996 described as open, lab code described as not on main. Statements: legend "Blue = open PR" (l.10); nodes `RFS` and `LAB` classed `open` (l.31, 35); "It lives on the open PR #1996 branch, not on main. `rel_from_set` is also new in that PR." (l.64-67); sequence note "G6 lab, crates/foundry-parity-lab (PR #1996, open)" (l.111); "(PR #1996)" tags on method.rs sources (l.93, 148-151); normalize.rs:124-130 "(`rel_from_set`, PR #1996 branch only)" (l.92); "The lab (`PreparedMethod`, `rel_from_set`) is on PR #1996 and is not merged." (l.228). Source: crates/foundry-parity-lab/src/method.rs exists on this checkout and contains `PreparedMethod` (method.rs:200-321); crates/lance-graph-relalg/src/normalize.rs:124-130 holds `pub fn rel_from_set`; `git merge-base --is-ancestor fcee68c90 HEAD` succeeded (fcee68c90 is the method.rs commit); the history contains "83d532759 Merge pull request #1996". So RFS and LAB are in code on main; after the correction no node is blue. +S2. "The intake re-checks its `MapTable` frame on every query." (l.204) -> `Intake::bag_count` calls `self.map(table)` (xlog lib.rs:345-347) which is `table.map(&self.frame, self.tile)` (xlog lib.rs:334-336). `MapTable::map` checks only that the frame was issued by this table and replays the layout at the frame's version; "A frame of THIS table is never stale" (dr.rs:690-693, 1053-1060). So a stale-but-same-table frame is not refused. xlog's own doc (lib.rs:378-381, "a stale frame, and nothing runs") overstates the same way. Only a foreign frame or missing tile refuses. +S3. "`Receipt` plan_id, method, frame, output" attached to the node `RUN` "run_native, hot" (l.41-42) and sequence 3 line 187 -> `run_native` returns `NativeReceipt` with plan_id, frame, programs_run, len, values and NO `method` (binding_native.rs:177-187, 410-416). Only `binding::run` returns `Receipt` with `method` (binding.rs:448-455). +S4. Line drift: `ExecPermit` cited binding.rs:125-131, actual 124-130; `Prepared` 165-176, actual 164-175; `ExecRefusal` 236-317, actual 235-312; `prepare` 321-355, actual 321-365; `run` 377-404, actual 377-400; `GuardNotExecutable` ":336-338", actual 335-337; `Guard` lib.rs:170-196, actual 169-195; `run_with_program` lower.rs:70-100, actual 70-92 (`run_as_written` starts at 96); xlog 363-405, actual 363-403. +S5. Node `REFUSE` (l.26) lists UnknownMethod but not UnknownClass, which `admit` also returns first (lib.rs:1182-1184). + +### 3. MISSING RELATIONSHIPS (each checked) + +M1. Guard vs digest: the guard is not in the binding digest (lib.rs:407-410, 411-468). Guard identity is carried separately as `MethodRef.guard: Option` (lib.rs:357, 1151) and compared in `admit` by recomputing `g.witness()` (normal form under the guard's logic; lib.rs:185-194, 1200-1206). Node `ADM` says "guard witness, binding digest" as two checks; it does not say they cover different things. Also `name` is in neither (lib.rs:407-408). +M2. `admit` does not check the field basis and takes no `ClassView` (lib.rs:1180-1212). Order differs by caller: r2il `prepare` runs `resolve` (basis witness) then `admit` (binding.rs:331-334); the lab `prepare` runs `admit` first (method.rs:217) and the basis check happens afterwards inside `bind_lanes` -> `resolve` (lane.rs:187). The diagram's "ADM" box suggests admit is the gate for the whole binding. +M3. Registration does not check WHEN guard positions against the basis (lib.rs:1353-1371 visits `on`, `reads`, effect targets, `Arg::Field`; never `m.when`). Nothing requires guard fields to be inside `reads`. In the lab, `reads` is derived from the guard (method.rs:76-81), and a guard field outside the bound reads is refused only at prepare as `MethodRefusal::NotBound` (method.rs:164, 169, 178). +M4. ON is never evaluated: in dt64, r2il, xlog and the lab, `on` is read only by `methods_on` (lib.rs:677-678), `footprint` (lib.rs:244-245), the binding digest (lib.rs:424), and registration position check (lib.rs:1355). No code in `prepare`, `run`, `run_native` or `PreparedMethod` consults it. The title "ON x WHEN x DO" in the diagram is the data shape; no trigger path exists in the code read. +M5. The polyfill lens check in r2il: `opcode()` calls `store.resolve_algebra(view, lens, rev)` (binding.rs:555-557), which checks revision and field count only, no predicate witness (lib.rs:954-966). Under `POLYFILL_LENS` the position binds and the view's label at that position must be an alias (binding.rs:567-568, 606-629; polyfill.rs:7-12, 116-170); under the R2IL fold reading the label binds and must name exactly one opcode (binding.rs:570-581). The binding digest includes each effect's lens `schema_rev` and word arity (lib.rs:436-443) but not the lens basis. binding.rs:35-36 says "its basis matches its `ClassView` at the stated schema revision (`resolve_algebra`)"; the call checks revision and count only. +M6. Registration refusals for effects not drawn: UnknownAlgebra, ArityMismatch (lib.rs:852-870), UndeclaredRead (lib.rs:1376-1391), AlgebraImmutable (lib.rs:931-936). `MethodBinding.truth`, `population`, `demand` are in the digest (lib.rs:455-467); r2il refuses `Truth::ThreeValued` (binding.rs:338-340); xlog requires `Population::Bag` (xlog lib.rs:391). +M7. Authorization relative to admission: `admit` has no actor, operation or decision parameter (lib.rs:1180); neither `prepare` (binding.rs:321-328), `run` (binding.rs:377-385), `run_native` (binding_native.rs:351-359) nor the lab `PreparedMethod::prepare` (method.rs:211-216) takes a `lance-graph-rbac` type. The only gate in the hot path is `ExecPermit.methods.contains(&plan.method)` (binding.rs:393). `MethodRef` equality includes the stamp (lib.rs:352-358, 385-389), so a permit matches the exact issued reference. I found no code mapping a `MethodId` to an `Operation::Act { action }` name. +M8. `Resolved::action_ordinals` returns `MethodId`s in registration order (lib.rs:760-762), the only "action address" the store exposes. + +--------------------------------------------------------------------- +## FILE 06-authorization.md +--------------------------------------------------------------------- + +### 1. CONFIRMED + +C1. "`establish` runs ... verifier first ... issuer trusted ... `(issuer, subject)` resolve ... no fallback to email" (l.39-43) -> OGAR ogar-auth/src/federation.rs:244-263 (doc 244-251, code 257-270) at OGAR 8fab880. +C2. "`VerifiedLogin` has private fields and no public constructor." (l.44) -> federation.rs:199-210 (doc says only producer is `establish`). +C3. "`AuthenticatedUser` has public fields. It is descriptive" (l.45-47) -> ogar-auth/src/user.rs:292-308. +C4. `acting_party()` on `AuthenticatedUser` (l.24, 63) -> user.rs:325-330. +C5. "`OgarRbac::authorize_user` takes an `AuthenticatedUser` ... calls the generic kernel `authorize_scoped` and adds only the identity." (l.48-50) -> ogar-rbac/src/lib.rs:135-162. Kiosk/unauthenticated not refused (l.46-47) -> lib.rs:146-153. +C6. "`authorize_identity` ... binds every membership of the user to the user's tenant and calls `authorize_memberships`. It returns a `MembershipDecision`" (l.51-54) -> ogar-rbac lib.rs:303-340 (membership scope is `ScopeSpec{tenant}` at 308-319). +C7. "A delegated login authorizes as the user whose authority the token carries. The acting party is recorded and holds no role." (l.55-56) -> ogar-rbac lib.rs:249-254. +C8. `ScopedDecision` decision/scope/field_mask and `visible_fields()` (l.29-30, 124-128) -> authorize.rs:165-200. +C9. "Stage 1 ... not Allow -> Deny or Escalate, scope None, field_mask FULL" (l.78) -> authorize.rs:216-224; `AccessDecision` Allow/Deny/Escalate -> access.rs:5-13. +C10. "Stage 2: fold the granting roles only; scope: ScopeSpec intersect, None is global and does not narrow; field_mask: union of role masks" (l.79-81) -> authorize.rs:225-250 (comment 230-235). +C11. "On a refused decision `field_mask` holds the open default (`FULL`). ... `visible_fields()` returns `EMPTY` unless the decision is `Allow`." (l.96-98) -> authorize.rs:184-199, 219-223. +C12. "`authorize_scoped` intersects the scopes of the granting roles ... `authorize_memberships` ... each granting membership adds its own scope, and the scopes are unioned" (l.99-102); "any unscoped grant means unrestricted" (l.83) -> authorize.rs:284-297, 325-340. +C13. `Operation` Read{depth}/Write{predicate}/Act{action} (l.76, 103-105) -> rbac.rs:346-363. +C14. `OpMask` READ, WRITE, CREATE, DELETE, ACT (l.106-107) -> rbac.rs:453-466; `OpMask::permits` is verb-only (rbac.rs:485-497); `grants_permit` rbac.rs:548-550. +C15. `ScopeSpec` fields tenant/predicate_key/path/deny and `admits`, `intersect` (l.136-142) -> rbac.rs:114-132, 144-151, 166-194. +C16. "`ScopeSpec::admits` ... true when the scope is not `deny` and the row's path lies at or below the scope's path. The tenant is matched by the store that owns the rows." (l.168-171) -> rbac.rs:144-151. +C17. "`intersect` never widens. `deny` absorbs. Two paths on different branches give `DENY`. Two different tenants give `DENY`. A `None` tenant (global) takes the other side's tenant." (l.172-176) -> rbac.rs:166-193. +C18. "`predicate_key` is reserved. It is OR-combined and not interpreted." (l.177-178) -> rbac.rs:118-120, 177. +C19. `ScopeSet` members/admits; `Membership` (l.144-147) -> rbac.rs:235-267, 302-308. +C20. `PropertySpec.marking`, `Marking` five variants, "The default is `Internal`" (l.148-158, 179-180) -> property.rs:41-58, 769-783. +C21. "DT64's `Resolved::mask_where` builds a field mask from meaning ... not an authorization decision." (l.181-184) -> lib.rs:715-725. +C22. `walk_rails_authorized` "applies `visible_fields()`, decides nothing" (l.197, 210) -> selection.rs:308-362. +C23. "No DT64, r2il, xlog, Quack or mask-risc code uses `lance-graph-rbac`" (l.236-237, 263) -> `lance-graph-rbac/Cargo.toml:1-9` depends on contract only; grep of all crates/**/Cargo.toml for "rbac" finds only lance-graph-dir-sim, lance-graph-consumer-conformance, lance-graph-callcenter (plus rbac itself); grep for rbac/ScopedDecision/lance_graph_rbac in the dt64, r2il, xlog, quack, mask-risc, foundry-parity-lab crates returned no files. (Search plus manifest read.) +C24. "The lab uses a stand-in: one reader denied one store id, written into the program." (l.239-241) -> method.rs:14-16, 252-257; fixture DENIED_STORE imported at method.rs:34. +C25. "`Binder::live` is named ... as the existing seam where a scope plane could enter" -> quack/src/bind.rs:92-96 (`fn live(&self, table) -> Mask`, "the plane every row of the table must pass"). The plan-side wording is outside this check. +C26. "`ExecPermit` ... who issues it is not decided" (l.244-247, 256) -> binding.rs:124-130. +C27. "`ResolvedIdentity::auth_classid` is documented as the identity for the audit." (l.249) -> lance-graph-rbac/src/auth.rs:256 (`ResolvedIdentity`), 275, 376-381. +C28. Gap statement G2 "per-row scope lane ... `visible_fields()` limits the bound fields ... not built" (l.234-238) -> .claude/plans/foundry-parity-v1.md:34 ("Apply it to a DT64 binding: per-row scope lane -> resident plane; `visible_fields()` limits bound fields"); DT64 scope is only the equality check in lane.rs:36-40, 96-97, 255-261. + +### 2. STALE or WRONG + +S1. Source list item "`.claude/plans/foundry-parity-v1.md` ... on branch `ccr-ca0562e7-hudvlz`" (l.262) -> the file is present in this main checkout (.claude/plans/foundry-parity-v1.md); PR #1996 from that branch was merged (83d532759). Also "(PR #1996)" on method.rs sources (l.261) is stale: method.rs is on main. +S2. Section 2 diagram edge `S1 -. "memberships route" .-> MS` (l.91) -> `authorize_memberships` does not run stage 1 or call `authorize`. It reads `rbac.memberships(actor, class)`, returns `Deny{"unknown role"}` on an empty list, and calls `grant_permits` per membership (authorize.rs:310-335). The doc says the verdict "matches `authorize` whenever `memberships` lists the roles of `actor_roles`" (authorize.rs:296-297), which is a consistency property, not a call. +S3. "The grant gate is a verb bit per class ... A finer check on depth, predicate or action name layers above it." (l.106-108) -> true of `OpMask::permits` (rbac.rs:485-497), but the reference `ClassGrants::grant_permits` already applies `can_read_at(depth)`, `can_write(predicate)`, `can_act(action)` inside the stage-1 gate (authorize.rs:153-161). The finer check is not a separate later stage in that implementation. +S4. Line drift: `ScopedDecision`/`visible_fields` cited authorize.rs:164-208, actual 165-200; `authorize_scoped` 210-253, actual 210-251; `MembershipDecision` 255-278 / 255-345, actual 256-282 and 299-341; `intersect` rbac.rs:153-191, actual 153-194 (fn body 166-194); `mask_where` lib.rs:714-723, actual 719-725 (doc starts 715). OGAR cites, checked at OGAR 8fab880 (diagram author's OGAR revision unknown): `VerifiedLogin` cited federation.rs:206-216, actual 205-210; `establish` 244-283, actual 244-279; `AuthenticatedUser` user.rs:290-335, actual 292-331; `authorize_user` lib.rs:122-162, actual 129-162; `IdentityActors`/`authorize_identity` 225-345, actual 238-340. + +### 3. MISSING RELATIONSHIPS (each checked) + +M1. Where authorization sits relative to method admission: nowhere in the code read. `BindStore::admit` takes only a `MethodRef` (lib.rs:1180). `ExecPermit` is a `Vec` (binding.rs:127-130). I found no function that turns a `ScopedDecision`/`MembershipDecision` or an `Operation::Act { action }` into an `ExecPermit` or a `MethodRef`, and `Resolved::action_ordinals` yields `MethodId`s, not action names (lib.rs:760-762). Section 4's "ACT -. candidate only .-> ISS" matches this. +M2. Type gap between decision scope and DT64 scope: decision scope is `ScopeSpec{tenant: Option, predicate_key, path: ScopePath, deny}` or `ScopeSet` (rbac.rs:115-132, 236-238); DT64's `Scope` is `{id: u64}` (dr.rs:519-522) compared by equality against `LaneAddr.scope` (lane.rs:255-261). No conversion exists between them in the code read. `ScopeSpec::admits` takes a `ScopePath` row address (rbac.rs:149-151), which DT64 lanes do not carry. +M3. Other crates that do depend on `lance-graph-rbac`, absent from the diagram: lance-graph-dir-sim (feature `rbac`, Cargo.toml:55, 78), lance-graph-consumer-conformance (Cargo.toml:23), lance-graph-callcenter (Cargo.toml:21). +M4. The membership route's scope source: `IdentityActors::memberships_of` gives every role the same tenant-only `ScopeSpec` (ogar-rbac lib.rs:308-319), so on that route the decision scope is tenant-only unless the binding overrides it. +M5. `ScopedDecision::visible_fields` is positional over `WideFieldMask`; `LaneRequest.fields` is a `WideFieldMask` over the same positions (lane.rs:94, 192-195). The two masks are the same type, so "limit bound fields to `visible_fields()`" is an intersection of two masks in principle; no code in dt64 does it (checked lane.rs:171-216: `req.fields` is used unmodified). + +--------------------------------------------------------------------- +## UNVERIFIED (not checked, and why) + +U1. 03 l.370 and 06: reference to `04-read-path.md` and its "authorization gap". Not in the three files assigned. +U2. 06 OGAR crates: only the cited ranges and the functions named were read, at OGAR 8fab880. The OGAR revision the diagram author used is unknown, so the line drift in S4 may be OGAR movement, not an error. +U3. 06 l.12 "The OGAR crates are in the OGAR repository, not in lance-graph": true for the paths read (no ogar-auth or ogar-rbac under the checkout's crates/ list), but I did not read OGAR's whole tree. +U4. 05 l.80 and others cite "`lib.rs:1-27` (what DT64 stores)": confirmed 1-30 (C9); the exact end line is a judgment call, not marked. +U5. 05 `xlog bag_count_admitted` "(`Population::Bag`)" runtime behaviour: read the function (xlog lib.rs:384-403) but not `bag_count_of` or the `Intake` constructor. +U6. 05 `normalize`/`lower` internals ("normalize, lower" box): only `run_with_program` (lower.rs:62-92) and `rel_from_set`/`to_set` (normalize.rs:82-130) were read; the claim "every `SetExpr` lowers to one fold under `Keep`" (method.rs:117-118) rests on a test `every_guard_shape_lowers_to_one_reusable_fold` that I did not open. +U7. 05 l.209-218 diagram text "The intake re-checks its `MapTable` frame": S2 is based on `MapTable::map`; I did not run anything, so no behavioural confirmation. +U8. Nothing here claims the code compiles or tests pass; no cargo was run. + +--------------------------------------------------------------------- +## Counts (statements checked = CONFIRMED + STALE items listed above) + +- 03-dr-dt64-binding.md: 33 confirmed, 4 stale/wrong, 7 missing-relationship items; 37 statements checked. +- 05-methods.md: 30 confirmed, 5 stale/wrong, 8 missing-relationship items; 35 statements checked. +- 06-authorization.md: 28 confirmed, 4 stale/wrong, 5 missing-relationship items; 32 statements checked. diff --git a/.codegraph/calls.tsv b/.codegraph/calls.tsv index e2773eec9..aed7feab3 100644 --- a/.codegraph/calls.tsv +++ b/.codegraph/calls.tsv @@ -4,6 +4,7 @@ bge-m3 - - ARTIFACT_MISSING - - UNKNOWN bgz-tensor - - ARTIFACT_MISSING - - UNKNOWN bgz17 - - ARTIFACT_MISSING - - UNKNOWN causal-edge - - ARTIFACT_MISSING - - UNKNOWN +cg-beh-probe - - ARTIFACT_MISSING - - UNKNOWN cognitive-compiler - - ARTIFACT_MISSING - - UNKNOWN cognitive-polyfill-probe - - ARTIFACT_MISSING - - UNKNOWN cognitive-shader-driver - - ARTIFACT_MISSING - - UNKNOWN diff --git a/.codegraph/coverage.tsv b/.codegraph/coverage.tsv index c2e4302d6..b325f6723 100644 --- a/.codegraph/coverage.tsv +++ b/.codegraph/coverage.tsv @@ -4,6 +4,7 @@ bge-m3 4 0 0 macro-generated items invisible;fn-local use not scanned bgz-tensor 39 29 0 macro-generated items invisible;fn-local use not scanned bgz17 21 5 0 macro-generated items invisible;fn-local use not scanned causal-edge 12 18 0 macro-generated items invisible;fn-local use not scanned +cg-beh-probe 6 5 1 macro-generated items invisible;fn-local use not scanned cognitive-compiler 1 0 0 macro-generated items invisible;fn-local use not scanned cognitive-polyfill-probe 1 1 0 macro-generated items invisible;fn-local use not scanned cognitive-shader-driver 29 61 0 macro-generated items invisible;fn-local use not scanned diff --git a/.codegraph/crates.tsv b/.codegraph/crates.tsv index 9c2335869..cce99fe94 100644 --- a/.codegraph/crates.tsv +++ b/.codegraph/crates.tsv @@ -4,6 +4,7 @@ bge-m3 crates/bge-m3 excluded aefb02c857c31568 bgz-tensor crates/bgz-tensor member 5d1e33d8228a9cf4 bgz17 crates/bgz17 excluded 8bec2499622cf1d7 causal-edge crates/causal-edge excluded c0fc81913c25420a +cg-beh-probe crates/cg-beh-probe excluded 9d4fce995c36c4e4 cognitive-compiler crates/cognitive-compiler excluded d1353bc629a93ad2 cognitive-polyfill-probe crates/cognitive-polyfill-probe excluded 142eccf61ff99e10 cognitive-shader-driver crates/cognitive-shader-driver member a88da842b115f96b diff --git a/.codegraph/crates/bgz-tensor.index.md b/.codegraph/crates/bgz-tensor.index.md index c85f5e50a..5eabdc929 100644 --- a/.codegraph/crates/bgz-tensor.index.md +++ b/.codegraph/crates/bgz-tensor.index.md @@ -251,17 +251,17 @@ Generated from Cargo manifests — extracted relationships only. flowchart LR n0["bge-m3"] n1["bgz-tensor"] - n22["highheelbgz"] - n25["holograph"] - n28["lance-graph"] - n39["lance-graph-contract"] - n76["reader-lm"] - n86["thinking-engine"] + n23["highheelbgz"] + n26["holograph"] + n29["lance-graph"] + n40["lance-graph-contract"] + n77["reader-lm"] + n87["thinking-engine"] n0 --> n1 - n1 --> n25 - n1 --> n39 - n22 --> n1 - n28 --> n1 - n76 --> n1 - n86 --> n1 + n1 --> n26 + n1 --> n40 + n23 --> n1 + n29 --> n1 + n77 --> n1 + n87 --> n1 ``` diff --git a/.codegraph/crates/bgz17.index.md b/.codegraph/crates/bgz17.index.md index f245f6e23..7cc1a850b 100644 --- a/.codegraph/crates/bgz17.index.md +++ b/.codegraph/crates/bgz17.index.md @@ -242,14 +242,14 @@ Generated from Cargo manifests — extracted relationships only. ```mermaid flowchart LR n2["bgz17"] - n6["cognitive-shader-driver"] - n28["lance-graph"] - n54["lance-graph-osint"] - n55["lance-graph-planner"] - n72["p64-bridge"] - n6 --> n2 - n28 --> n2 - n54 --> n2 + n7["cognitive-shader-driver"] + n29["lance-graph"] + n55["lance-graph-osint"] + n56["lance-graph-planner"] + n73["p64-bridge"] + n7 --> n2 + n29 --> n2 n55 --> n2 - n72 --> n2 + n56 --> n2 + n73 --> n2 ``` diff --git a/.codegraph/crates/causal-edge.index.md b/.codegraph/crates/causal-edge.index.md index 6b40f7f31..2cf7da8ff 100644 --- a/.codegraph/crates/causal-edge.index.md +++ b/.codegraph/crates/causal-edge.index.md @@ -246,18 +246,18 @@ Generated from Cargo manifests — extracted relationships only. ```mermaid flowchart LR n3["causal-edge"] - n6["cognitive-shader-driver"] - n11["deepnsm-v2"] - n54["lance-graph-osint"] - n55["lance-graph-planner"] - n72["p64-bridge"] - n80["sigma-tier-router"] - n86["thinking-engine"] - n6 --> n3 - n11 --> n3 - n54 --> n3 + n7["cognitive-shader-driver"] + n12["deepnsm-v2"] + n55["lance-graph-osint"] + n56["lance-graph-planner"] + n73["p64-bridge"] + n81["sigma-tier-router"] + n87["thinking-engine"] + n7 --> n3 + n12 --> n3 n55 --> n3 - n72 --> n3 - n80 --> n3 - n86 --> n3 + n56 --> n3 + n73 --> n3 + n81 --> n3 + n87 --> n3 ``` diff --git a/.codegraph/crates/cg-beh-probe.index.md b/.codegraph/crates/cg-beh-probe.index.md new file mode 100644 index 000000000..76914545b --- /dev/null +++ b/.codegraph/crates/cg-beh-probe.index.md @@ -0,0 +1,195 @@ +# cg-beh-probe + +crate: cg-beh-probe +path: crates/cg-beh-probe +workspace: excluded +digest: 9d4fce995c36c4e4 +evidence legend: ../index.md#evidence-legend + +Generated; the code is the truth. See ../index.md. + +## Depends on + +- dep foundry-parity-lab normal — crates/cg-beh-probe/Cargo.toml:29 CONFIRMED +- dep lance-graph-contract normal — crates/cg-beh-probe/Cargo.toml:22 CONFIRMED +- dep lance-graph-dt64 normal — crates/cg-beh-probe/Cargo.toml:21 CONFIRMED +- dep lance-graph-r2il normal — crates/cg-beh-probe/Cargo.toml:24 CONFIRMED +- dep ogar-loco normal — crates/cg-beh-probe/Cargo.toml:27 CONFIRMED +- dep ogar-r2il normal — crates/cg-beh-probe/Cargo.toml:26 CONFIRMED + +## Depended on by + + +## Public items + +- const OPCODES [pub] — crates/cg-beh-probe/src/dispatch.rs:23 CONFIRMED +- fn word_of [pub] — crates/cg-beh-probe/src/dispatch.rs:30 CONFIRMED +- fn opcode_name [pub] — crates/cg-beh-probe/src/dispatch.rs:39 CONFIRMED +- struct Arm [pub] — crates/cg-beh-probe/src/dispatch.rs:50 CONFIRMED +- struct Dispatch [pub] — crates/cg-beh-probe/src/dispatch.rs:59 CONFIRMED +- enum DispatchError [pub] — crates/cg-beh-probe/src/dispatch.rs:65 CONFIRMED +- fn text_fnv [pub] — crates/cg-beh-probe/src/dispatch.rs:75 CONFIRMED +- fn read [pub] — crates/cg-beh-probe/src/dispatch.rs:102 CONFIRMED +- fn Dispatch::arm_at [pub] — crates/cg-beh-probe/src/dispatch.rs:138 CONFIRMED +- fn Dispatch::arm_of_word [pub] — crates/cg-beh-probe/src/dispatch.rs:143 CONFIRMED +- fn Dispatch::words_without_arm [pub] — crates/cg-beh-probe/src/dispatch.rs:149 CONFIRMED +- fn Dispatch::to_tsv [pub] — crates/cg-beh-probe/src/dispatch.rs:157 CONFIRMED +- struct Field [pub] — crates/cg-beh-probe/src/facts.rs:13 CONFIRMED +- enum GuardConvention [pub] — crates/cg-beh-probe/src/facts.rs:22 CONFIRMED +- enum DepKind [pub] — crates/cg-beh-probe/src/facts.rs:33 CONFIRMED +- struct Dep [pub] — crates/cg-beh-probe/src/facts.rs:42 CONFIRMED +- struct WhenFacts [pub] — crates/cg-beh-probe/src/facts.rs:51 CONFIRMED +- enum ArgFact [pub] — crates/cg-beh-probe/src/facts.rs:59 CONFIRMED +- struct DoStep [pub] — crates/cg-beh-probe/src/facts.rs:66 CONFIRMED +- struct MethodFacts [pub] — crates/cg-beh-probe/src/facts.rs:80 CONFIRMED +- struct ClassFacts [pub] — crates/cg-beh-probe/src/facts.rs:99 CONFIRMED +- enum Missing [pub] — crates/cg-beh-probe/src/facts.rs:109 CONFIRMED +- struct Read [pub] — crates/cg-beh-probe/src/facts.rs:132 CONFIRMED +- fn positions [pub(crate)] — crates/cg-beh-probe/src/facts.rs:140 CONFIRMED +- fn class_facts [pub] — crates/cg-beh-probe/src/facts.rs:157 CONFIRMED +- fn extract [pub] — crates/cg-beh-probe/src/facts.rs:190 CONFIRMED +- struct Snapshot [pub] — crates/cg-beh-probe/src/facts.rs:307 CONFIRMED +- fn Snapshot::new [pub] — crates/cg-beh-probe/src/facts.rs:317 CONFIRMED +- fn Snapshot::add_class [pub] — crates/cg-beh-probe/src/facts.rs:332 CONFIRMED +- fn Snapshot::method [pub] — crates/cg-beh-probe/src/facts.rs:353 CONFIRMED +- fn Snapshot::class [pub] — crates/cg-beh-probe/src/facts.rs:359 CONFIRMED +- fn Snapshot::to_tsv [pub] — crates/cg-beh-probe/src/facts.rs:365 CONFIRMED +- const CLASS [pub] — crates/cg-beh-probe/src/fixture.rs:30 CONFIRMED +- const VIEW_CLASS [pub] — crates/cg-beh-probe/src/fixture.rs:31 CONFIRMED +- const REV [pub] — crates/cg-beh-probe/src/fixture.rs:32 CONFIRMED +- const FIELDS [pub] — crates/cg-beh-probe/src/fixture.rs:33 CONFIRMED +- const GUARDED [pub] — crates/cg-beh-probe/src/fixture.rs:37 CONFIRMED +- const INDEPENDENT [pub] — crates/cg-beh-probe/src/fixture.rs:39 CONFIRMED +- const UNRELATED [pub] — crates/cg-beh-probe/src/fixture.rs:41 CONFIRMED +- const METHODS [pub] — crates/cg-beh-probe/src/fixture.rs:42 CONFIRMED +- const READ [pub] — crates/cg-beh-probe/src/fixture.rs:45 CONFIRMED +- enum Variant [pub] — crates/cg-beh-probe/src/fixture.rs:52 CONFIRMED +- struct TestView [pub] — crates/cg-beh-probe/src/fixture.rs:67 CONFIRMED +- fn TestView::new [pub] — crates/cg-beh-probe/src/fixture.rs:73 CONFIRMED +- struct TestWorld [pub] — crates/cg-beh-probe/src/fixture.rs:107 CONFIRMED +- fn methods [pub] — crates/cg-beh-probe/src/fixture.rs:145 CONFIRMED +- fn world_with [pub] — crates/cg-beh-probe/src/fixture.rs:184 CONFIRMED +- fn world [pub] — crates/cg-beh-probe/src/fixture.rs:205 CONFIRMED +- const CAN_COOK [pub] — crates/cg-beh-probe/src/fixture.rs:212 CONFIRMED +- const FOUNDRY_READ [pub] — crates/cg-beh-probe/src/fixture.rs:216 CONFIRMED +- enum FoundryVariant [pub] — crates/cg-beh-probe/src/fixture.rs:223 CONFIRMED +- fn foundry_methods [pub] — crates/cg-beh-probe/src/fixture.rs:246 CONFIRMED +- fn foundry [pub] — crates/cg-beh-probe/src/fixture.rs:267 CONFIRMED +- fn foundry_ids [pub] — crates/cg-beh-probe/src/fixture.rs:272 CONFIRMED +- struct SwappedBasis [pub] — crates/cg-beh-probe/src/fixture.rs:278 CONFIRMED +- fn SwappedBasis::of [pub] — crates/cg-beh-probe/src/fixture.rs:281 CONFIRMED +- const FOUNDRY_CLASS [pub] — crates/cg-beh-probe/src/fixture.rs:304 CONFIRMED +- mod dispatch [pub] — crates/cg-beh-probe/src/lib.rs:32 CONFIRMED +- mod facts [pub] — crates/cg-beh-probe/src/lib.rs:33 CONFIRMED +- mod fixture [pub] — crates/cg-beh-probe/src/lib.rs:34 CONFIRMED +- mod query [pub] — crates/cg-beh-probe/src/lib.rs:35 CONFIRMED +- enum Grade [pub] — crates/cg-beh-probe/src/lib.rs:39 CONFIRMED +- fn Grade::name [pub] — crates/cg-beh-probe/src/lib.rs:46 CONFIRMED +- struct Evidence [pub] — crates/cg-beh-probe/src/lib.rs:57 CONFIRMED +- fn Evidence::registration [pub(crate)] — crates/cg-beh-probe/src/lib.rs:63 CONFIRMED +- fn Evidence::source [pub(crate)] — crates/cg-beh-probe/src/lib.rs:69 CONFIRMED +- fn fnv64 [pub(crate)] — crates/cg-beh-probe/src/lib.rs:79 CONFIRMED +- const FNV64_OFFSET [pub(crate)] — crates/cg-beh-probe/src/lib.rs:87 CONFIRMED +- enum Component [pub] — crates/cg-beh-probe/src/query.rs:20 CONFIRMED +- enum Obligation [pub] — crates/cg-beh-probe/src/query.rs:40 CONFIRMED +- enum Status [pub] — crates/cg-beh-probe/src/query.rs:61 CONFIRMED +- enum OldRef [pub] — crates/cg-beh-probe/src/query.rs:72 CONFIRMED +- struct MethodDelta [pub] — crates/cg-beh-probe/src/query.rs:80 CONFIRMED +- fn MethodDelta::has [pub] — crates/cg-beh-probe/src/query.rs:90 CONFIRMED +- fn MethodDelta::old_ref [pub] — crates/cg-beh-probe/src/query.rs:95 CONFIRMED +- enum DiffRefusal [pub] — crates/cg-beh-probe/src/query.rs:113 CONFIRMED +- fn diff [pub] — crates/cg-beh-probe/src/query.rs:285 CONFIRMED +- struct WordUse [pub] — crates/cg-beh-probe/src/query.rs:319 CONFIRMED +- struct ImplImpact [pub] — crates/cg-beh-probe/src/query.rs:331 CONFIRMED +- enum ImplRefusal [pub] — crates/cg-beh-probe/src/query.rs:338 CONFIRMED +- fn impl_change [pub] — crates/cg-beh-probe/src/query.rs:391 CONFIRMED +- fn word_impact [pub] — crates/cg-beh-probe/src/query.rs:437 CONFIRMED + +## Imports from in-scope crates + +### foundry-parity-lab +- use foundry_parity_lab::bind — crates/cg-beh-probe/src/fixture.rs:12 CONFIRMED +- use foundry_parity_lab::bind::VIEW_CLASS as FOUNDRY_VIEW_CLASS — crates/cg-beh-probe/src/fixture.rs:12 CONFIRMED +- use foundry_parity_lab::bind::World — crates/cg-beh-probe/src/fixture.rs:12 CONFIRMED +- use foundry_parity_lab::method — crates/cg-beh-probe/src/fixture.rs:13 CONFIRMED +### lance-graph-contract +- use lance_graph_contract::class_view::ClassView — crates/cg-beh-probe/src/facts.rs:3 CONFIRMED +- use lance_graph_contract::class_view::WideFieldMask — crates/cg-beh-probe/src/facts.rs:3 CONFIRMED +- use lance_graph_contract::set_algebra::Logic — crates/cg-beh-probe/src/facts.rs:4 CONFIRMED +- use lance_graph_contract::set_algebra::Res — crates/cg-beh-probe/src/facts.rs:4 CONFIRMED +- use lance_graph_contract::set_algebra::SetExpr — crates/cg-beh-probe/src/facts.rs:4 CONFIRMED +- use lance_graph_contract::set_rules::Population — crates/cg-beh-probe/src/facts.rs:5 CONFIRMED +- use lance_graph_contract::set_rules::Truth — crates/cg-beh-probe/src/facts.rs:5 CONFIRMED +- use lance_graph_contract::class_view::ClassId — crates/cg-beh-probe/src/fixture.rs:14 CONFIRMED +- use lance_graph_contract::class_view::ClassView — crates/cg-beh-probe/src/fixture.rs:14 CONFIRMED +- use lance_graph_contract::class_view::WideFieldMask — crates/cg-beh-probe/src/fixture.rs:14 CONFIRMED +- use lance_graph_contract::ontology::DisplayTemplate — crates/cg-beh-probe/src/fixture.rs:15 CONFIRMED +- use lance_graph_contract::ontology::FieldRef — crates/cg-beh-probe/src/fixture.rs:15 CONFIRMED +- use lance_graph_contract::set_algebra::Cmp — crates/cg-beh-probe/src/fixture.rs:16 CONFIRMED +- use lance_graph_contract::set_algebra::Logic — crates/cg-beh-probe/src/fixture.rs:16 CONFIRMED +- use lance_graph_contract::set_algebra::Res — crates/cg-beh-probe/src/fixture.rs:16 CONFIRMED +- use lance_graph_contract::set_algebra::SetExpr — crates/cg-beh-probe/src/fixture.rs:16 CONFIRMED +- use lance_graph_contract::set_rules::Population — crates/cg-beh-probe/src/fixture.rs:17 CONFIRMED +- use lance_graph_contract::set_rules::Truth — crates/cg-beh-probe/src/fixture.rs:17 CONFIRMED +### lance-graph-dt64 +- use lance_graph_dt64::Arg — crates/cg-beh-probe/src/facts.rs:6 CONFIRMED +- use lance_graph_dt64::BindStore — crates/cg-beh-probe/src/facts.rs:6 CONFIRMED +- use lance_graph_dt64::MethodId — crates/cg-beh-probe/src/facts.rs:6 CONFIRMED +- use lance_graph_dt64::MethodRef — crates/cg-beh-probe/src/facts.rs:6 CONFIRMED +- use lance_graph_dt64::Refusal — crates/cg-beh-probe/src/facts.rs:6 CONFIRMED +- use lance_graph_dt64::SchemaRev — crates/cg-beh-probe/src/facts.rs:6 CONFIRMED +- use lance_graph_dt64::ValueDemand — crates/cg-beh-probe/src/facts.rs:6 CONFIRMED +- use lance_graph_dt64::dr::Extent — crates/cg-beh-probe/src/fixture.rs:18 CONFIRMED +- use lance_graph_dt64::AlgebraRef — crates/cg-beh-probe/src/fixture.rs:20 CONFIRMED +- use lance_graph_dt64::Arg — crates/cg-beh-probe/src/fixture.rs:20 CONFIRMED +- use lance_graph_dt64::BindStore — crates/cg-beh-probe/src/fixture.rs:20 CONFIRMED +- use lance_graph_dt64::ClassSchema — crates/cg-beh-probe/src/fixture.rs:20 CONFIRMED +- use lance_graph_dt64::Effect — crates/cg-beh-probe/src/fixture.rs:20 CONFIRMED +- use lance_graph_dt64::Guard — crates/cg-beh-probe/src/fixture.rs:20 CONFIRMED +- use lance_graph_dt64::MethodBinding — crates/cg-beh-probe/src/fixture.rs:20 CONFIRMED +- use lance_graph_dt64::MethodId — crates/cg-beh-probe/src/fixture.rs:20 CONFIRMED +- use lance_graph_dt64::SchemaRev — crates/cg-beh-probe/src/fixture.rs:20 CONFIRMED +- use lance_graph_dt64::SigRev — crates/cg-beh-probe/src/fixture.rs:21 CONFIRMED +- use lance_graph_dt64::ValueDemand — crates/cg-beh-probe/src/fixture.rs:21 CONFIRMED +### lance-graph-r2il +- use lance_graph_r2il::polyfill::POLYFILL — crates/cg-beh-probe/src/dispatch.rs:7 CONFIRMED +- use lance_graph_r2il::INT_ADD — crates/cg-beh-probe/src/dispatch.rs:9 CONFIRMED +- use lance_graph_r2il::INT_AND — crates/cg-beh-probe/src/dispatch.rs:9 CONFIRMED +- use lance_graph_r2il::INT_EQUAL — crates/cg-beh-probe/src/dispatch.rs:9 CONFIRMED +- use lance_graph_r2il::INT_MULT — crates/cg-beh-probe/src/dispatch.rs:9 CONFIRMED +- use lance_graph_r2il::INT_NOT — crates/cg-beh-probe/src/dispatch.rs:9 CONFIRMED +- use lance_graph_r2il::INT_OR — crates/cg-beh-probe/src/dispatch.rs:9 CONFIRMED +- use lance_graph_r2il::INT_SUB — crates/cg-beh-probe/src/dispatch.rs:9 CONFIRMED +- use lance_graph_r2il::INT_S_DIV — crates/cg-beh-probe/src/dispatch.rs:9 CONFIRMED +- use lance_graph_r2il::INT_S_LESS — crates/cg-beh-probe/src/dispatch.rs:9 CONFIRMED +- use lance_graph_r2il::INT_XOR — crates/cg-beh-probe/src/dispatch.rs:10 CONFIRMED +- use lance_graph_r2il::POP_COUNT — crates/cg-beh-probe/src/dispatch.rs:10 CONFIRMED +- use lance_graph_r2il::polyfill::AliasLanguage — crates/cg-beh-probe/src/fixture.rs:24 CONFIRMED +- use lance_graph_r2il::polyfill::POLYFILL_LENS — crates/cg-beh-probe/src/fixture.rs:24 CONFIRMED +- use lance_graph_r2il::polyfill::PolyfillView — crates/cg-beh-probe/src/fixture.rs:24 CONFIRMED +- use lance_graph_r2il::polyfill::polyfill_arities — crates/cg-beh-probe/src/fixture.rs:24 CONFIRMED +- use lance_graph_r2il::polyfill::position_of — crates/cg-beh-probe/src/fixture.rs:24 CONFIRMED + +## Calls + +CALL_GRAPH=ARTIFACT_MISSING +- calls ARTIFACT_MISSING — no ruff_charon artifact for this crate UNKNOWN + +## Architecture + +- arch Quack lance-selective-read allow/block prefilter + attested range read [LAB] validation=OK — crates/crepe-plan-probe/examples/where_lance_arm.rs:45 LAB + +Generated from Cargo manifests — extracted relationships only. + +```mermaid +flowchart LR + n4["cg-beh-probe"] + n19["foundry-parity-lab"] + n40["lance-graph-contract"] + n43["lance-graph-dt64"] + n59["lance-graph-r2il"] + n4 --> n19 + n4 --> n40 + n4 --> n43 + n4 --> n59 +``` diff --git a/.codegraph/crates/cognitive-compiler.index.md b/.codegraph/crates/cognitive-compiler.index.md index 44cb09336..93bc285c2 100644 --- a/.codegraph/crates/cognitive-compiler.index.md +++ b/.codegraph/crates/cognitive-compiler.index.md @@ -47,7 +47,7 @@ Generated from Cargo manifests — extracted relationships only. ```mermaid flowchart LR - n4["cognitive-compiler"] - n7["cognitive-stack"] - n7 --> n4 + n5["cognitive-compiler"] + n8["cognitive-stack"] + n8 --> n5 ``` diff --git a/.codegraph/crates/cognitive-polyfill-probe.index.md b/.codegraph/crates/cognitive-polyfill-probe.index.md index 5179d8cd3..ef951c039 100644 --- a/.codegraph/crates/cognitive-polyfill-probe.index.md +++ b/.codegraph/crates/cognitive-polyfill-probe.index.md @@ -79,9 +79,9 @@ Generated from Cargo manifests — extracted relationships only. ```mermaid flowchart LR - n5["cognitive-polyfill-probe"] - n42["lance-graph-dt64"] - n47["lance-graph-mask-risc"] - n5 --> n42 - n5 --> n47 + n6["cognitive-polyfill-probe"] + n43["lance-graph-dt64"] + n48["lance-graph-mask-risc"] + n6 --> n43 + n6 --> n48 ``` diff --git a/.codegraph/crates/cognitive-shader-driver.index.md b/.codegraph/crates/cognitive-shader-driver.index.md index f6aa62f73..70df48fe0 100644 --- a/.codegraph/crates/cognitive-shader-driver.index.md +++ b/.codegraph/crates/cognitive-shader-driver.index.md @@ -366,19 +366,19 @@ Generated from Cargo manifests — extracted relationships only. flowchart LR n2["bgz17"] n3["causal-edge"] - n6["cognitive-shader-driver"] - n10["deepnsm"] - n39["lance-graph-contract"] - n53["lance-graph-ontology"] - n55["lance-graph-planner"] - n72["p64-bridge"] - n86["thinking-engine"] - n6 --> n2 - n6 --> n3 - n6 --> n10 - n6 --> n39 - n6 --> n53 - n6 --> n55 - n6 --> n72 - n6 --> n86 + n7["cognitive-shader-driver"] + n11["deepnsm"] + n40["lance-graph-contract"] + n54["lance-graph-ontology"] + n56["lance-graph-planner"] + n73["p64-bridge"] + n87["thinking-engine"] + n7 --> n2 + n7 --> n3 + n7 --> n11 + n7 --> n40 + n7 --> n54 + n7 --> n56 + n7 --> n73 + n7 --> n87 ``` diff --git a/.codegraph/crates/cognitive-stack.index.md b/.codegraph/crates/cognitive-stack.index.md index 19756ebdb..7bcd63255 100644 --- a/.codegraph/crates/cognitive-stack.index.md +++ b/.codegraph/crates/cognitive-stack.index.md @@ -58,19 +58,19 @@ Generated from Cargo manifests — extracted relationships only. ```mermaid flowchart LR - n4["cognitive-compiler"] - n7["cognitive-stack"] - n17["elixir-template"] - n28["lance-graph"] - n39["lance-graph-contract"] - n51["lance-graph-ogar"] - n84["template-equivalence"] - n85["template-runtime"] - n7 --> n4 - n7 --> n17 - n7 --> n28 - n7 --> n39 - n7 --> n51 - n7 --> n84 - n7 --> n85 + n5["cognitive-compiler"] + n8["cognitive-stack"] + n18["elixir-template"] + n29["lance-graph"] + n40["lance-graph-contract"] + n52["lance-graph-ogar"] + n85["template-equivalence"] + n86["template-runtime"] + n8 --> n5 + n8 --> n18 + n8 --> n29 + n8 --> n40 + n8 --> n52 + n8 --> n85 + n8 --> n86 ``` diff --git a/.codegraph/crates/crepe-plan-probe.index.md b/.codegraph/crates/crepe-plan-probe.index.md index 17e9201c1..63e8137e7 100644 --- a/.codegraph/crates/crepe-plan-probe.index.md +++ b/.codegraph/crates/crepe-plan-probe.index.md @@ -318,13 +318,13 @@ Generated from Cargo manifests — extracted relationships only. ```mermaid flowchart LR - n8["crepe-plan-probe"] - n39["lance-graph-contract"] - n47["lance-graph-mask-risc"] - n60["lance-graph-relalg"] - n68["mork-pathmap-probe"] - n8 --> n39 - n8 --> n47 - n8 --> n60 - n8 --> n68 + n9["crepe-plan-probe"] + n40["lance-graph-contract"] + n48["lance-graph-mask-risc"] + n61["lance-graph-relalg"] + n69["mork-pathmap-probe"] + n9 --> n40 + n9 --> n48 + n9 --> n61 + n9 --> n69 ``` diff --git a/.codegraph/crates/d-diamond-1-probe.index.md b/.codegraph/crates/d-diamond-1-probe.index.md index 5ba917d72..69f9ad7f7 100644 --- a/.codegraph/crates/d-diamond-1-probe.index.md +++ b/.codegraph/crates/d-diamond-1-probe.index.md @@ -101,11 +101,11 @@ Generated from Cargo manifests — extracted relationships only. ```mermaid flowchart LR - n9["d-diamond-1-probe"] - n39["lance-graph-contract"] - n47["lance-graph-mask-risc"] - n57["lance-graph-quack"] - n9 --> n39 - n9 --> n47 - n9 --> n57 + n10["d-diamond-1-probe"] + n40["lance-graph-contract"] + n48["lance-graph-mask-risc"] + n58["lance-graph-quack"] + n10 --> n40 + n10 --> n48 + n10 --> n58 ``` diff --git a/.codegraph/crates/deepnsm-v2.index.md b/.codegraph/crates/deepnsm-v2.index.md index 8889e3d4f..b41ff8954 100644 --- a/.codegraph/crates/deepnsm-v2.index.md +++ b/.codegraph/crates/deepnsm-v2.index.md @@ -332,10 +332,10 @@ Generated from Cargo manifests — extracted relationships only. ```mermaid flowchart LR n3["causal-edge"] - n11["deepnsm-v2"] - n31["lance-graph-arm-discovery"] - n39["lance-graph-contract"] - n11 --> n3 - n11 --> n31 - n11 --> n39 + n12["deepnsm-v2"] + n32["lance-graph-arm-discovery"] + n40["lance-graph-contract"] + n12 --> n3 + n12 --> n32 + n12 --> n40 ``` diff --git a/.codegraph/crates/deepnsm.index.md b/.codegraph/crates/deepnsm.index.md index 34aa39000..4223c6111 100644 --- a/.codegraph/crates/deepnsm.index.md +++ b/.codegraph/crates/deepnsm.index.md @@ -277,13 +277,13 @@ Generated from Cargo manifests — extracted relationships only. ```mermaid flowchart LR - n6["cognitive-shader-driver"] - n10["deepnsm"] - n37["lance-graph-cognitive"] - n39["lance-graph-contract"] - n54["lance-graph-osint"] - n6 --> n10 - n10 --> n37 - n10 --> n39 - n54 --> n10 + n7["cognitive-shader-driver"] + n11["deepnsm"] + n38["lance-graph-cognitive"] + n40["lance-graph-contract"] + n55["lance-graph-osint"] + n7 --> n11 + n11 --> n38 + n11 --> n40 + n55 --> n11 ``` diff --git a/.codegraph/crates/dr-isa-stream-lab.index.md b/.codegraph/crates/dr-isa-stream-lab.index.md index 90577bf95..892f21122 100644 --- a/.codegraph/crates/dr-isa-stream-lab.index.md +++ b/.codegraph/crates/dr-isa-stream-lab.index.md @@ -269,9 +269,9 @@ Generated from Cargo manifests — extracted relationships only. ```mermaid flowchart LR - n12["dr-isa-stream-lab"] - n39["lance-graph-contract"] - n42["lance-graph-dt64"] - n12 --> n39 - n12 --> n42 + n13["dr-isa-stream-lab"] + n40["lance-graph-contract"] + n43["lance-graph-dt64"] + n13 --> n40 + n13 --> n43 ``` diff --git a/.codegraph/crates/drf-focus-probe.index.md b/.codegraph/crates/drf-focus-probe.index.md index 4bafc2730..a36fcf832 100644 --- a/.codegraph/crates/drf-focus-probe.index.md +++ b/.codegraph/crates/drf-focus-probe.index.md @@ -100,7 +100,7 @@ Generated from Cargo manifests — extracted relationships only. ```mermaid flowchart LR - n13["drf-focus-probe"] - n55["lance-graph-planner"] - n13 --> n55 + n14["drf-focus-probe"] + n56["lance-graph-planner"] + n14 --> n56 ``` diff --git a/.codegraph/crates/drisa-register-probe.index.md b/.codegraph/crates/drisa-register-probe.index.md index 206ebb3ad..a5d678158 100644 --- a/.codegraph/crates/drisa-register-probe.index.md +++ b/.codegraph/crates/drisa-register-probe.index.md @@ -109,11 +109,11 @@ Generated from Cargo manifests — extracted relationships only. ```mermaid flowchart LR - n14["drisa-register-probe"] - n39["lance-graph-contract"] - n42["lance-graph-dt64"] - n47["lance-graph-mask-risc"] - n14 --> n39 - n14 --> n42 - n14 --> n47 + n15["drisa-register-probe"] + n40["lance-graph-contract"] + n43["lance-graph-dt64"] + n48["lance-graph-mask-risc"] + n15 --> n40 + n15 --> n43 + n15 --> n48 ``` diff --git a/.codegraph/crates/dt64-admission-probe.index.md b/.codegraph/crates/dt64-admission-probe.index.md index 49c70a919..5272a703c 100644 --- a/.codegraph/crates/dt64-admission-probe.index.md +++ b/.codegraph/crates/dt64-admission-probe.index.md @@ -111,9 +111,9 @@ Generated from Cargo manifests — extracted relationships only. ```mermaid flowchart LR - n15["dt64-admission-probe"] - n39["lance-graph-contract"] - n42["lance-graph-dt64"] - n15 --> n39 - n15 --> n42 + n16["dt64-admission-probe"] + n40["lance-graph-contract"] + n43["lance-graph-dt64"] + n16 --> n40 + n16 --> n43 ``` diff --git a/.codegraph/crates/dto-class-check.index.md b/.codegraph/crates/dto-class-check.index.md index 83b788c1f..d115d564f 100644 --- a/.codegraph/crates/dto-class-check.index.md +++ b/.codegraph/crates/dto-class-check.index.md @@ -36,5 +36,5 @@ Generated from Cargo manifests — extracted relationships only. ```mermaid flowchart LR - n16["dto-class-check"] + n17["dto-class-check"] ``` diff --git a/.codegraph/crates/elixir-template.index.md b/.codegraph/crates/elixir-template.index.md index ae9356588..d2aca95a9 100644 --- a/.codegraph/crates/elixir-template.index.md +++ b/.codegraph/crates/elixir-template.index.md @@ -52,7 +52,7 @@ Generated from Cargo manifests — extracted relationships only. ```mermaid flowchart LR - n7["cognitive-stack"] - n17["elixir-template"] - n7 --> n17 + n8["cognitive-stack"] + n18["elixir-template"] + n8 --> n18 ``` diff --git a/.codegraph/crates/foundry-parity-lab.index.md b/.codegraph/crates/foundry-parity-lab.index.md index 6b52ca9a7..ebd90f884 100644 --- a/.codegraph/crates/foundry-parity-lab.index.md +++ b/.codegraph/crates/foundry-parity-lab.index.md @@ -18,6 +18,7 @@ Generated; the code is the truth. See ../index.md. ## Depended on by +- rdep cg-beh-probe normal — crates/cg-beh-probe/Cargo.toml:29 CONFIRMED ## Public items @@ -262,13 +263,15 @@ Generated from Cargo manifests — extracted relationships only. ```mermaid flowchart LR - n18["foundry-parity-lab"] - n39["lance-graph-contract"] - n42["lance-graph-dt64"] - n47["lance-graph-mask-risc"] - n60["lance-graph-relalg"] - n18 --> n39 - n18 --> n42 - n18 --> n47 - n18 --> n60 + n4["cg-beh-probe"] + n19["foundry-parity-lab"] + n40["lance-graph-contract"] + n43["lance-graph-dt64"] + n48["lance-graph-mask-risc"] + n61["lance-graph-relalg"] + n4 --> n19 + n19 --> n40 + n19 --> n43 + n19 --> n48 + n19 --> n61 ``` diff --git a/.codegraph/crates/gkat-probe.index.md b/.codegraph/crates/gkat-probe.index.md index ad72aa526..43fb1a234 100644 --- a/.codegraph/crates/gkat-probe.index.md +++ b/.codegraph/crates/gkat-probe.index.md @@ -122,5 +122,5 @@ Generated from Cargo manifests — extracted relationships only. ```mermaid flowchart LR - n19["gkat-probe"] + n20["gkat-probe"] ``` diff --git a/.codegraph/crates/grammar-constraints-probe.index.md b/.codegraph/crates/grammar-constraints-probe.index.md index 6ce357db7..9a3effaab 100644 --- a/.codegraph/crates/grammar-constraints-probe.index.md +++ b/.codegraph/crates/grammar-constraints-probe.index.md @@ -176,13 +176,13 @@ Generated from Cargo manifests — extracted relationships only. ```mermaid flowchart LR - n20["grammar-constraints-probe"] - n39["lance-graph-contract"] - n42["lance-graph-dt64"] - n47["lance-graph-mask-risc"] - n57["lance-graph-quack"] - n20 --> n39 - n20 --> n42 - n20 --> n47 - n20 --> n57 + n21["grammar-constraints-probe"] + n40["lance-graph-contract"] + n43["lance-graph-dt64"] + n48["lance-graph-mask-risc"] + n58["lance-graph-quack"] + n21 --> n40 + n21 --> n43 + n21 --> n48 + n21 --> n58 ``` diff --git a/.codegraph/crates/helix.index.md b/.codegraph/crates/helix.index.md index ebcfb1c69..9917f6cf7 100644 --- a/.codegraph/crates/helix.index.md +++ b/.codegraph/crates/helix.index.md @@ -113,5 +113,5 @@ Generated from Cargo manifests — extracted relationships only. ```mermaid flowchart LR - n21["helix"] + n22["helix"] ``` diff --git a/.codegraph/crates/highheelbgz.index.md b/.codegraph/crates/highheelbgz.index.md index 85497a77b..d66d609ec 100644 --- a/.codegraph/crates/highheelbgz.index.md +++ b/.codegraph/crates/highheelbgz.index.md @@ -138,8 +138,8 @@ Generated from Cargo manifests — extracted relationships only. ```mermaid flowchart LR n1["bgz-tensor"] - n22["highheelbgz"] - n86["thinking-engine"] - n22 --> n1 - n86 --> n22 + n23["highheelbgz"] + n87["thinking-engine"] + n23 --> n1 + n87 --> n23 ``` diff --git a/.codegraph/crates/holo-h14d-probe.index.md b/.codegraph/crates/holo-h14d-probe.index.md index bdbf711f4..ce50e799b 100644 --- a/.codegraph/crates/holo-h14d-probe.index.md +++ b/.codegraph/crates/holo-h14d-probe.index.md @@ -59,11 +59,11 @@ Generated from Cargo manifests — extracted relationships only. ```mermaid flowchart LR - n23["holo-h14d-probe"] - n47["lance-graph-mask-risc"] - n58["lance-graph-r2il"] - n60["lance-graph-relalg"] - n23 --> n47 - n23 --> n58 - n23 --> n60 + n24["holo-h14d-probe"] + n48["lance-graph-mask-risc"] + n59["lance-graph-r2il"] + n61["lance-graph-relalg"] + n24 --> n48 + n24 --> n59 + n24 --> n61 ``` diff --git a/.codegraph/crates/holo-lance-masked-io-probe.index.md b/.codegraph/crates/holo-lance-masked-io-probe.index.md index 4db9ae356..6545c87f0 100644 --- a/.codegraph/crates/holo-lance-masked-io-probe.index.md +++ b/.codegraph/crates/holo-lance-masked-io-probe.index.md @@ -40,5 +40,5 @@ Generated from Cargo manifests — extracted relationships only. ```mermaid flowchart LR - n24["holo-lance-masked-io-probe"] + n25["holo-lance-masked-io-probe"] ``` diff --git a/.codegraph/crates/holograph.index.md b/.codegraph/crates/holograph.index.md index 1fef54da7..e2aff90ee 100644 --- a/.codegraph/crates/holograph.index.md +++ b/.codegraph/crates/holograph.index.md @@ -255,8 +255,8 @@ Generated from Cargo manifests — extracted relationships only. ```mermaid flowchart LR n1["bgz-tensor"] - n25["holograph"] - n37["lance-graph-cognitive"] - n1 --> n25 - n37 --> n25 + n26["holograph"] + n38["lance-graph-cognitive"] + n1 --> n26 + n38 --> n26 ``` diff --git a/.codegraph/crates/jc-batch-probe.index.md b/.codegraph/crates/jc-batch-probe.index.md index bc2626d16..97c930c09 100644 --- a/.codegraph/crates/jc-batch-probe.index.md +++ b/.codegraph/crates/jc-batch-probe.index.md @@ -79,11 +79,11 @@ Generated from Cargo manifests — extracted relationships only. ```mermaid flowchart LR - n26["jc"] - n27["jc-batch-probe"] - n47["lance-graph-mask-risc"] - n60["lance-graph-relalg"] - n27 --> n26 - n27 --> n47 - n27 --> n60 + n27["jc"] + n28["jc-batch-probe"] + n48["lance-graph-mask-risc"] + n61["lance-graph-relalg"] + n28 --> n27 + n28 --> n48 + n28 --> n61 ``` diff --git a/.codegraph/crates/jc.index.md b/.codegraph/crates/jc.index.md index 3ceaeab61..f1633f842 100644 --- a/.codegraph/crates/jc.index.md +++ b/.codegraph/crates/jc.index.md @@ -151,11 +151,11 @@ Generated from Cargo manifests — extracted relationships only. ```mermaid flowchart LR - n26["jc"] - n27["jc-batch-probe"] - n79["sigker"] - n86["thinking-engine"] - n26 --> n79 - n27 --> n26 - n86 --> n26 + n27["jc"] + n28["jc-batch-probe"] + n80["sigker"] + n87["thinking-engine"] + n27 --> n80 + n28 --> n27 + n87 --> n27 ``` diff --git a/.codegraph/crates/lance-graph-act-r.index.md b/.codegraph/crates/lance-graph-act-r.index.md index ece46fae4..112e46dd8 100644 --- a/.codegraph/crates/lance-graph-act-r.index.md +++ b/.codegraph/crates/lance-graph-act-r.index.md @@ -40,5 +40,5 @@ Generated from Cargo manifests — extracted relationships only. ```mermaid flowchart LR - n29["lance-graph-act-r"] + n30["lance-graph-act-r"] ``` diff --git a/.codegraph/crates/lance-graph-archetype.index.md b/.codegraph/crates/lance-graph-archetype.index.md index 6ca57bb2b..96c3cddca 100644 --- a/.codegraph/crates/lance-graph-archetype.index.md +++ b/.codegraph/crates/lance-graph-archetype.index.md @@ -59,7 +59,7 @@ Generated from Cargo manifests — extracted relationships only. ```mermaid flowchart LR - n30["lance-graph-archetype"] - n39["lance-graph-contract"] - n30 --> n39 + n31["lance-graph-archetype"] + n40["lance-graph-contract"] + n31 --> n40 ``` diff --git a/.codegraph/crates/lance-graph-arm-discovery.index.md b/.codegraph/crates/lance-graph-arm-discovery.index.md index 146482520..d202a3f8f 100644 --- a/.codegraph/crates/lance-graph-arm-discovery.index.md +++ b/.codegraph/crates/lance-graph-arm-discovery.index.md @@ -117,9 +117,9 @@ Generated from Cargo manifests — extracted relationships only. ```mermaid flowchart LR - n11["deepnsm-v2"] - n31["lance-graph-arm-discovery"] - n39["lance-graph-contract"] - n11 --> n31 - n31 --> n39 + n12["deepnsm-v2"] + n32["lance-graph-arm-discovery"] + n40["lance-graph-contract"] + n12 --> n32 + n32 --> n40 ``` diff --git a/.codegraph/crates/lance-graph-benches.index.md b/.codegraph/crates/lance-graph-benches.index.md index d33f23a09..161c9d7f4 100644 --- a/.codegraph/crates/lance-graph-benches.index.md +++ b/.codegraph/crates/lance-graph-benches.index.md @@ -49,11 +49,11 @@ Generated from Cargo manifests — extracted relationships only. ```mermaid flowchart LR - n28["lance-graph"] - n32["lance-graph-benches"] - n47["lance-graph-mask-risc"] - n57["lance-graph-quack"] - n32 --> n28 - n32 --> n47 - n32 --> n57 + n29["lance-graph"] + n33["lance-graph-benches"] + n48["lance-graph-mask-risc"] + n58["lance-graph-quack"] + n33 --> n29 + n33 --> n48 + n33 --> n58 ``` diff --git a/.codegraph/crates/lance-graph-callcenter.index.md b/.codegraph/crates/lance-graph-callcenter.index.md index 1f99324bc..c57f142b0 100644 --- a/.codegraph/crates/lance-graph-callcenter.index.md +++ b/.codegraph/crates/lance-graph-callcenter.index.md @@ -363,15 +363,15 @@ Generated from Cargo manifests — extracted relationships only. ```mermaid flowchart LR - n33["lance-graph-callcenter"] - n38["lance-graph-consumer-conformance"] - n39["lance-graph-contract"] - n53["lance-graph-ontology"] - n59["lance-graph-rbac"] - n64["lance-graph-supervisor"] - n33 --> n39 - n33 --> n53 - n33 --> n59 - n38 --> n33 - n64 --> n33 + n34["lance-graph-callcenter"] + n39["lance-graph-consumer-conformance"] + n40["lance-graph-contract"] + n54["lance-graph-ontology"] + n60["lance-graph-rbac"] + n65["lance-graph-supervisor"] + n34 --> n40 + n34 --> n54 + n34 --> n60 + n39 --> n34 + n65 --> n34 ``` diff --git a/.codegraph/crates/lance-graph-catalog.index.md b/.codegraph/crates/lance-graph-catalog.index.md index 30b1d245f..6e47f649d 100644 --- a/.codegraph/crates/lance-graph-catalog.index.md +++ b/.codegraph/crates/lance-graph-catalog.index.md @@ -96,7 +96,7 @@ Generated from Cargo manifests — extracted relationships only. ```mermaid flowchart LR - n28["lance-graph"] - n34["lance-graph-catalog"] - n28 --> n34 + n29["lance-graph"] + n35["lance-graph-catalog"] + n29 --> n35 ``` diff --git a/.codegraph/crates/lance-graph-codec-research.index.md b/.codegraph/crates/lance-graph-codec-research.index.md index 79973babe..36dcab844 100644 --- a/.codegraph/crates/lance-graph-codec-research.index.md +++ b/.codegraph/crates/lance-graph-codec-research.index.md @@ -154,5 +154,5 @@ Generated from Cargo manifests — extracted relationships only. ```mermaid flowchart LR - n35["lance-graph-codec-research"] + n36["lance-graph-codec-research"] ``` diff --git a/.codegraph/crates/lance-graph-codegraph.index.md b/.codegraph/crates/lance-graph-codegraph.index.md index 73728ed9c..596b0d002 100644 --- a/.codegraph/crates/lance-graph-codegraph.index.md +++ b/.codegraph/crates/lance-graph-codegraph.index.md @@ -279,13 +279,13 @@ Generated from Cargo manifests — extracted relationships only. ```mermaid flowchart LR - n36["lance-graph-codegraph"] - n42["lance-graph-dt64"] - n47["lance-graph-mask-risc"] - n57["lance-graph-quack"] - n66["lance-graph-xlog"] - n36 --> n42 - n36 --> n47 - n36 --> n57 - n36 --> n66 + n37["lance-graph-codegraph"] + n43["lance-graph-dt64"] + n48["lance-graph-mask-risc"] + n58["lance-graph-quack"] + n67["lance-graph-xlog"] + n37 --> n43 + n37 --> n48 + n37 --> n58 + n37 --> n67 ``` diff --git a/.codegraph/crates/lance-graph-cognitive.index.md b/.codegraph/crates/lance-graph-cognitive.index.md index 710899a14..a134e6eb1 100644 --- a/.codegraph/crates/lance-graph-cognitive.index.md +++ b/.codegraph/crates/lance-graph-cognitive.index.md @@ -241,13 +241,13 @@ Generated from Cargo manifests — extracted relationships only. ```mermaid flowchart LR - n10["deepnsm"] - n25["holograph"] - n28["lance-graph"] - n37["lance-graph-cognitive"] - n39["lance-graph-contract"] - n10 --> n37 - n28 --> n37 - n37 --> n25 - n37 --> n39 + n11["deepnsm"] + n26["holograph"] + n29["lance-graph"] + n38["lance-graph-cognitive"] + n40["lance-graph-contract"] + n11 --> n38 + n29 --> n38 + n38 --> n26 + n38 --> n40 ``` diff --git a/.codegraph/crates/lance-graph-consumer-conformance.index.md b/.codegraph/crates/lance-graph-consumer-conformance.index.md index 6319f111a..891de965c 100644 --- a/.codegraph/crates/lance-graph-consumer-conformance.index.md +++ b/.codegraph/crates/lance-graph-consumer-conformance.index.md @@ -75,15 +75,15 @@ Generated from Cargo manifests — extracted relationships only. ```mermaid flowchart LR - n33["lance-graph-callcenter"] - n38["lance-graph-consumer-conformance"] - n39["lance-graph-contract"] - n51["lance-graph-ogar"] - n53["lance-graph-ontology"] - n59["lance-graph-rbac"] - n38 --> n33 - n38 --> n39 - n38 --> n51 - n38 --> n53 - n38 --> n59 + n34["lance-graph-callcenter"] + n39["lance-graph-consumer-conformance"] + n40["lance-graph-contract"] + n52["lance-graph-ogar"] + n54["lance-graph-ontology"] + n60["lance-graph-rbac"] + n39 --> n34 + n39 --> n40 + n39 --> n52 + n39 --> n54 + n39 --> n60 ``` diff --git a/.codegraph/crates/lance-graph-contract.index.md b/.codegraph/crates/lance-graph-contract.index.md index b4f802be6..789a8af13 100644 --- a/.codegraph/crates/lance-graph-contract.index.md +++ b/.codegraph/crates/lance-graph-contract.index.md @@ -20,6 +20,7 @@ Generated; the code is the truth. See ../index.md. ## Depended on by - rdep bgz-tensor normal optional — crates/bgz-tensor/Cargo.toml:27 CONFIRMED +- rdep cg-beh-probe normal — crates/cg-beh-probe/Cargo.toml:22 CONFIRMED - rdep cognitive-shader-driver normal — crates/cognitive-shader-driver/Cargo.toml:230 CONFIRMED - rdep cognitive-stack normal — crates/cognitive-stack/Cargo.toml:48 CONFIRMED - rdep crepe-plan-probe normal — crates/crepe-plan-probe/Cargo.toml:27 CONFIRMED @@ -300,100 +301,102 @@ Generated from Cargo manifests — extracted relationships only. ```mermaid flowchart LR n1["bgz-tensor"] - n6["cognitive-shader-driver"] - n7["cognitive-stack"] - n8["crepe-plan-probe"] - n9["d-diamond-1-probe"] - n10["deepnsm"] - n11["deepnsm-v2"] - n12["dr-isa-stream-lab"] - n14["drisa-register-probe"] - n15["dt64-admission-probe"] - n18["foundry-parity-lab"] - n20["grammar-constraints-probe"] - n28["lance-graph"] - n30["lance-graph-archetype"] - n31["lance-graph-arm-discovery"] - n33["lance-graph-callcenter"] - n37["lance-graph-cognitive"] - n38["lance-graph-consumer-conformance"] - n39["lance-graph-contract"] - n41["lance-graph-dir-sim"] - n42["lance-graph-dt64"] - n43["lance-graph-dt64-lance"] - n44["lance-graph-glove-parity"] - n46["lance-graph-lane-fold"] - n49["lance-graph-nal"] - n51["lance-graph-ogar"] - n53["lance-graph-ontology"] - n55["lance-graph-planner"] - n57["lance-graph-quack"] - n58["lance-graph-r2il"] - n59["lance-graph-rbac"] - n60["lance-graph-relalg"] - n61["lance-graph-report"] - n62["lance-graph-report-ogar"] - n63["lance-graph-sap"] - n64["lance-graph-supervisor"] - n66["lance-graph-xlog"] - n67["learning"] - n70["ogar-behavior-probe"] - n71["onebrc-probe"] - n73["perturbation-sim"] - n80["sigma-tier-router"] - n81["soa64-u64-lab"] - n82["surreal_container"] - n83["symbiont"] - n86["thinking-engine"] - n87["thought-git-probe"] - n88["tract-harvest-probe"] - n89["weather-poc"] - n1 --> n39 - n6 --> n39 - n7 --> n39 - n8 --> n39 - n9 --> n39 - n10 --> n39 - n11 --> n39 - n12 --> n39 - n14 --> n39 - n15 --> n39 - n18 --> n39 - n20 --> n39 - n28 --> n39 - n30 --> n39 - n31 --> n39 - n33 --> n39 - n37 --> n39 - n38 --> n39 - n41 --> n39 - n42 --> n39 - n43 --> n39 - n44 --> n39 - n46 --> n39 - n49 --> n39 - n51 --> n39 - n53 --> n39 - n55 --> n39 - n57 --> n39 - n58 --> n39 - n59 --> n39 - n60 --> n39 - n61 --> n39 - n62 --> n39 - n63 --> n39 - n64 --> n39 - n66 --> n39 - n67 --> n39 - n70 --> n39 - n71 --> n39 - n73 --> n39 - n80 --> n39 - n81 --> n39 - n82 --> n39 - n83 --> n39 - n86 --> n39 - n87 --> n39 - n88 --> n39 - n89 --> n39 + n4["cg-beh-probe"] + n7["cognitive-shader-driver"] + n8["cognitive-stack"] + n9["crepe-plan-probe"] + n10["d-diamond-1-probe"] + n11["deepnsm"] + n12["deepnsm-v2"] + n13["dr-isa-stream-lab"] + n15["drisa-register-probe"] + n16["dt64-admission-probe"] + n19["foundry-parity-lab"] + n21["grammar-constraints-probe"] + n29["lance-graph"] + n31["lance-graph-archetype"] + n32["lance-graph-arm-discovery"] + n34["lance-graph-callcenter"] + n38["lance-graph-cognitive"] + n39["lance-graph-consumer-conformance"] + n40["lance-graph-contract"] + n42["lance-graph-dir-sim"] + n43["lance-graph-dt64"] + n44["lance-graph-dt64-lance"] + n45["lance-graph-glove-parity"] + n47["lance-graph-lane-fold"] + n50["lance-graph-nal"] + n52["lance-graph-ogar"] + n54["lance-graph-ontology"] + n56["lance-graph-planner"] + n58["lance-graph-quack"] + n59["lance-graph-r2il"] + n60["lance-graph-rbac"] + n61["lance-graph-relalg"] + n62["lance-graph-report"] + n63["lance-graph-report-ogar"] + n64["lance-graph-sap"] + n65["lance-graph-supervisor"] + n67["lance-graph-xlog"] + n68["learning"] + n71["ogar-behavior-probe"] + n72["onebrc-probe"] + n74["perturbation-sim"] + n81["sigma-tier-router"] + n82["soa64-u64-lab"] + n83["surreal_container"] + n84["symbiont"] + n87["thinking-engine"] + n88["thought-git-probe"] + n89["tract-harvest-probe"] + n90["weather-poc"] + n1 --> n40 + n4 --> n40 + n7 --> n40 + n8 --> n40 + n9 --> n40 + n10 --> n40 + n11 --> n40 + n12 --> n40 + n13 --> n40 + n15 --> n40 + n16 --> n40 + n19 --> n40 + n21 --> n40 + n29 --> n40 + n31 --> n40 + n32 --> n40 + n34 --> n40 + n38 --> n40 + n39 --> n40 + n42 --> n40 + n43 --> n40 + n44 --> n40 + n45 --> n40 + n47 --> n40 + n50 --> n40 + n52 --> n40 + n54 --> n40 + n56 --> n40 + n58 --> n40 + n59 --> n40 + n60 --> n40 + n61 --> n40 + n62 --> n40 + n63 --> n40 + n64 --> n40 + n65 --> n40 + n67 --> n40 + n68 --> n40 + n71 --> n40 + n72 --> n40 + n74 --> n40 + n81 --> n40 + n82 --> n40 + n83 --> n40 + n84 --> n40 + n87 --> n40 + n88 --> n40 + n89 --> n40 + n90 --> n40 ``` diff --git a/.codegraph/crates/lance-graph-cypher-quack.index.md b/.codegraph/crates/lance-graph-cypher-quack.index.md index 3c15b9f65..146f3ce30 100644 --- a/.codegraph/crates/lance-graph-cypher-quack.index.md +++ b/.codegraph/crates/lance-graph-cypher-quack.index.md @@ -97,11 +97,11 @@ Generated from Cargo manifests — extracted relationships only. ```mermaid flowchart LR - n28["lance-graph"] - n40["lance-graph-cypher-quack"] - n47["lance-graph-mask-risc"] - n57["lance-graph-quack"] - n40 --> n28 - n40 --> n47 - n40 --> n57 + n29["lance-graph"] + n41["lance-graph-cypher-quack"] + n48["lance-graph-mask-risc"] + n58["lance-graph-quack"] + n41 --> n29 + n41 --> n48 + n41 --> n58 ``` diff --git a/.codegraph/crates/lance-graph-dir-sim.index.md b/.codegraph/crates/lance-graph-dir-sim.index.md index 63f1fb86d..4675e48d4 100644 --- a/.codegraph/crates/lance-graph-dir-sim.index.md +++ b/.codegraph/crates/lance-graph-dir-sim.index.md @@ -327,11 +327,11 @@ Generated from Cargo manifests — extracted relationships only. ```mermaid flowchart LR - n39["lance-graph-contract"] - n41["lance-graph-dir-sim"] - n47["lance-graph-mask-risc"] - n57["lance-graph-quack"] - n41 --> n39 - n41 --> n47 - n41 --> n57 + n40["lance-graph-contract"] + n42["lance-graph-dir-sim"] + n48["lance-graph-mask-risc"] + n58["lance-graph-quack"] + n42 --> n40 + n42 --> n48 + n42 --> n58 ``` diff --git a/.codegraph/crates/lance-graph-dt64-lance.index.md b/.codegraph/crates/lance-graph-dt64-lance.index.md index 6dc660f84..72e377063 100644 --- a/.codegraph/crates/lance-graph-dt64-lance.index.md +++ b/.codegraph/crates/lance-graph-dt64-lance.index.md @@ -86,15 +86,15 @@ Generated from Cargo manifests — extracted relationships only. ```mermaid flowchart LR - n28["lance-graph"] - n39["lance-graph-contract"] - n42["lance-graph-dt64"] - n43["lance-graph-dt64-lance"] - n55["lance-graph-planner"] - n64["lance-graph-supervisor"] - n43 --> n28 - n43 --> n39 - n43 --> n42 - n43 --> n55 - n43 --> n64 + n29["lance-graph"] + n40["lance-graph-contract"] + n43["lance-graph-dt64"] + n44["lance-graph-dt64-lance"] + n56["lance-graph-planner"] + n65["lance-graph-supervisor"] + n44 --> n29 + n44 --> n40 + n44 --> n43 + n44 --> n56 + n44 --> n65 ``` diff --git a/.codegraph/crates/lance-graph-dt64.index.md b/.codegraph/crates/lance-graph-dt64.index.md index aaa80a7c3..a4109e8e0 100644 --- a/.codegraph/crates/lance-graph-dt64.index.md +++ b/.codegraph/crates/lance-graph-dt64.index.md @@ -14,6 +14,7 @@ Generated; the code is the truth. See ../index.md. ## Depended on by +- rdep cg-beh-probe normal — crates/cg-beh-probe/Cargo.toml:21 CONFIRMED - rdep cognitive-polyfill-probe normal — crates/cognitive-polyfill-probe/Cargo.toml:14 CONFIRMED - rdep dr-isa-stream-lab normal — crates/dr-isa-stream-lab/Cargo.toml:18 CONFIRMED - rdep drisa-register-probe normal — crates/drisa-register-probe/Cargo.toml:19 CONFIRMED @@ -264,33 +265,35 @@ Generated from Cargo manifests — extracted relationships only. ```mermaid flowchart LR - n5["cognitive-polyfill-probe"] - n12["dr-isa-stream-lab"] - n14["drisa-register-probe"] - n15["dt64-admission-probe"] - n18["foundry-parity-lab"] - n20["grammar-constraints-probe"] - n36["lance-graph-codegraph"] - n39["lance-graph-contract"] - n42["lance-graph-dt64"] - n43["lance-graph-dt64-lance"] - n58["lance-graph-r2il"] - n61["lance-graph-report"] - n66["lance-graph-xlog"] - n70["ogar-behavior-probe"] - n81["soa64-u64-lab"] - n5 --> n42 - n12 --> n42 - n14 --> n42 - n15 --> n42 - n18 --> n42 - n20 --> n42 - n36 --> n42 - n42 --> n39 - n43 --> n42 - n58 --> n42 - n61 --> n42 - n66 --> n42 - n70 --> n42 - n81 --> n42 + n4["cg-beh-probe"] + n6["cognitive-polyfill-probe"] + n13["dr-isa-stream-lab"] + n15["drisa-register-probe"] + n16["dt64-admission-probe"] + n19["foundry-parity-lab"] + n21["grammar-constraints-probe"] + n37["lance-graph-codegraph"] + n40["lance-graph-contract"] + n43["lance-graph-dt64"] + n44["lance-graph-dt64-lance"] + n59["lance-graph-r2il"] + n62["lance-graph-report"] + n67["lance-graph-xlog"] + n71["ogar-behavior-probe"] + n82["soa64-u64-lab"] + n4 --> n43 + n6 --> n43 + n13 --> n43 + n15 --> n43 + n16 --> n43 + n19 --> n43 + n21 --> n43 + n37 --> n43 + n43 --> n40 + n44 --> n43 + n59 --> n43 + n62 --> n43 + n67 --> n43 + n71 --> n43 + n82 --> n43 ``` diff --git a/.codegraph/crates/lance-graph-glove-parity.index.md b/.codegraph/crates/lance-graph-glove-parity.index.md index 2c7a5db5f..4a8ddbbab 100644 --- a/.codegraph/crates/lance-graph-glove-parity.index.md +++ b/.codegraph/crates/lance-graph-glove-parity.index.md @@ -70,13 +70,13 @@ Generated from Cargo manifests — extracted relationships only. ```mermaid flowchart LR - n39["lance-graph-contract"] - n44["lance-graph-glove-parity"] - n51["lance-graph-ogar"] - n53["lance-graph-ontology"] - n57["lance-graph-quack"] - n44 --> n39 - n44 --> n51 - n44 --> n53 - n44 --> n57 + n40["lance-graph-contract"] + n45["lance-graph-glove-parity"] + n52["lance-graph-ogar"] + n54["lance-graph-ontology"] + n58["lance-graph-quack"] + n45 --> n40 + n45 --> n52 + n45 --> n54 + n45 --> n58 ``` diff --git a/.codegraph/crates/lance-graph-hydrate.index.md b/.codegraph/crates/lance-graph-hydrate.index.md index 23e6a4770..f224a3e69 100644 --- a/.codegraph/crates/lance-graph-hydrate.index.md +++ b/.codegraph/crates/lance-graph-hydrate.index.md @@ -86,7 +86,7 @@ Generated from Cargo manifests — extracted relationships only. ```mermaid flowchart LR - n28["lance-graph"] - n45["lance-graph-hydrate"] - n28 --> n45 + n29["lance-graph"] + n46["lance-graph-hydrate"] + n29 --> n46 ``` diff --git a/.codegraph/crates/lance-graph-lane-fold.index.md b/.codegraph/crates/lance-graph-lane-fold.index.md index 0c3ef8bc4..08d373240 100644 --- a/.codegraph/crates/lance-graph-lane-fold.index.md +++ b/.codegraph/crates/lance-graph-lane-fold.index.md @@ -76,7 +76,7 @@ Generated from Cargo manifests — extracted relationships only. ```mermaid flowchart LR - n39["lance-graph-contract"] - n46["lance-graph-lane-fold"] - n46 --> n39 + n40["lance-graph-contract"] + n47["lance-graph-lane-fold"] + n47 --> n40 ``` diff --git a/.codegraph/crates/lance-graph-mask-risc.index.md b/.codegraph/crates/lance-graph-mask-risc.index.md index 83356ed8b..30aedaa3f 100644 --- a/.codegraph/crates/lance-graph-mask-risc.index.md +++ b/.codegraph/crates/lance-graph-mask-risc.index.md @@ -174,49 +174,49 @@ Generated from Cargo manifests — extracted relationships only. ```mermaid flowchart LR - n5["cognitive-polyfill-probe"] - n8["crepe-plan-probe"] - n9["d-diamond-1-probe"] - n14["drisa-register-probe"] - n18["foundry-parity-lab"] - n20["grammar-constraints-probe"] - n23["holo-h14d-probe"] - n27["jc-batch-probe"] - n28["lance-graph"] - n32["lance-graph-benches"] - n36["lance-graph-codegraph"] - n40["lance-graph-cypher-quack"] - n41["lance-graph-dir-sim"] - n47["lance-graph-mask-risc"] - n48["lance-graph-metta"] - n49["lance-graph-nal"] - n57["lance-graph-quack"] - n58["lance-graph-r2il"] - n60["lance-graph-relalg"] - n61["lance-graph-report"] - n63["lance-graph-sap"] - n66["lance-graph-xlog"] - n68["mork-pathmap-probe"] - n5 --> n47 - n8 --> n47 - n9 --> n47 - n14 --> n47 - n18 --> n47 - n20 --> n47 - n23 --> n47 - n27 --> n47 - n28 --> n47 - n32 --> n47 - n36 --> n47 - n40 --> n47 - n41 --> n47 - n48 --> n47 - n49 --> n47 - n57 --> n47 - n58 --> n47 - n60 --> n47 - n61 --> n47 - n63 --> n47 - n66 --> n47 - n68 --> n47 + n6["cognitive-polyfill-probe"] + n9["crepe-plan-probe"] + n10["d-diamond-1-probe"] + n15["drisa-register-probe"] + n19["foundry-parity-lab"] + n21["grammar-constraints-probe"] + n24["holo-h14d-probe"] + n28["jc-batch-probe"] + n29["lance-graph"] + n33["lance-graph-benches"] + n37["lance-graph-codegraph"] + n41["lance-graph-cypher-quack"] + n42["lance-graph-dir-sim"] + n48["lance-graph-mask-risc"] + n49["lance-graph-metta"] + n50["lance-graph-nal"] + n58["lance-graph-quack"] + n59["lance-graph-r2il"] + n61["lance-graph-relalg"] + n62["lance-graph-report"] + n64["lance-graph-sap"] + n67["lance-graph-xlog"] + n69["mork-pathmap-probe"] + n6 --> n48 + n9 --> n48 + n10 --> n48 + n15 --> n48 + n19 --> n48 + n21 --> n48 + n24 --> n48 + n28 --> n48 + n29 --> n48 + n33 --> n48 + n37 --> n48 + n41 --> n48 + n42 --> n48 + n49 --> n48 + n50 --> n48 + n58 --> n48 + n59 --> n48 + n61 --> n48 + n62 --> n48 + n64 --> n48 + n67 --> n48 + n69 --> n48 ``` diff --git a/.codegraph/crates/lance-graph-metta.index.md b/.codegraph/crates/lance-graph-metta.index.md index fdaf6fe30..5775d2931 100644 --- a/.codegraph/crates/lance-graph-metta.index.md +++ b/.codegraph/crates/lance-graph-metta.index.md @@ -37,9 +37,9 @@ Generated from Cargo manifests — extracted relationships only. ```mermaid flowchart LR - n47["lance-graph-mask-risc"] - n48["lance-graph-metta"] - n57["lance-graph-quack"] - n48 --> n47 - n48 --> n57 + n48["lance-graph-mask-risc"] + n49["lance-graph-metta"] + n58["lance-graph-quack"] + n49 --> n48 + n49 --> n58 ``` diff --git a/.codegraph/crates/lance-graph-nal.index.md b/.codegraph/crates/lance-graph-nal.index.md index bd43d9519..0b0c8dea3 100644 --- a/.codegraph/crates/lance-graph-nal.index.md +++ b/.codegraph/crates/lance-graph-nal.index.md @@ -131,11 +131,11 @@ Generated from Cargo manifests — extracted relationships only. ```mermaid flowchart LR - n39["lance-graph-contract"] - n47["lance-graph-mask-risc"] - n49["lance-graph-nal"] - n58["lance-graph-r2il"] - n49 --> n39 - n49 --> n47 - n49 --> n58 + n40["lance-graph-contract"] + n48["lance-graph-mask-risc"] + n50["lance-graph-nal"] + n59["lance-graph-r2il"] + n50 --> n40 + n50 --> n48 + n50 --> n59 ``` diff --git a/.codegraph/crates/lance-graph-nsl.index.md b/.codegraph/crates/lance-graph-nsl.index.md index b39f376bd..b794e9590 100644 --- a/.codegraph/crates/lance-graph-nsl.index.md +++ b/.codegraph/crates/lance-graph-nsl.index.md @@ -100,5 +100,5 @@ Generated from Cargo manifests — extracted relationships only. ```mermaid flowchart LR - n50["lance-graph-nsl"] + n51["lance-graph-nsl"] ``` diff --git a/.codegraph/crates/lance-graph-ogar.index.md b/.codegraph/crates/lance-graph-ogar.index.md index bb817d257..60b134f4a 100644 --- a/.codegraph/crates/lance-graph-ogar.index.md +++ b/.codegraph/crates/lance-graph-ogar.index.md @@ -171,17 +171,17 @@ Generated from Cargo manifests — extracted relationships only. ```mermaid flowchart LR - n7["cognitive-stack"] - n38["lance-graph-consumer-conformance"] - n39["lance-graph-contract"] - n44["lance-graph-glove-parity"] - n51["lance-graph-ogar"] - n53["lance-graph-ontology"] - n83["symbiont"] - n7 --> n51 - n38 --> n51 - n44 --> n51 - n51 --> n39 - n51 --> n53 - n83 --> n51 + n8["cognitive-stack"] + n39["lance-graph-consumer-conformance"] + n40["lance-graph-contract"] + n45["lance-graph-glove-parity"] + n52["lance-graph-ogar"] + n54["lance-graph-ontology"] + n84["symbiont"] + n8 --> n52 + n39 --> n52 + n45 --> n52 + n52 --> n40 + n52 --> n54 + n84 --> n52 ``` diff --git a/.codegraph/crates/lance-graph-onnx.index.md b/.codegraph/crates/lance-graph-onnx.index.md index 66bc8f734..709f7664e 100644 --- a/.codegraph/crates/lance-graph-onnx.index.md +++ b/.codegraph/crates/lance-graph-onnx.index.md @@ -53,7 +53,7 @@ Generated from Cargo manifests — extracted relationships only. ```mermaid flowchart LR - n52["lance-graph-onnx"] - n88["tract-harvest-probe"] - n88 --> n52 + n53["lance-graph-onnx"] + n89["tract-harvest-probe"] + n89 --> n53 ``` diff --git a/.codegraph/crates/lance-graph-ontology.index.md b/.codegraph/crates/lance-graph-ontology.index.md index 281cd406b..3e6a23cde 100644 --- a/.codegraph/crates/lance-graph-ontology.index.md +++ b/.codegraph/crates/lance-graph-ontology.index.md @@ -313,17 +313,17 @@ Generated from Cargo manifests — extracted relationships only. ```mermaid flowchart LR - n6["cognitive-shader-driver"] - n33["lance-graph-callcenter"] - n38["lance-graph-consumer-conformance"] - n39["lance-graph-contract"] - n44["lance-graph-glove-parity"] - n51["lance-graph-ogar"] - n53["lance-graph-ontology"] - n6 --> n53 - n33 --> n53 - n38 --> n53 - n44 --> n53 - n51 --> n53 - n53 --> n39 + n7["cognitive-shader-driver"] + n34["lance-graph-callcenter"] + n39["lance-graph-consumer-conformance"] + n40["lance-graph-contract"] + n45["lance-graph-glove-parity"] + n52["lance-graph-ogar"] + n54["lance-graph-ontology"] + n7 --> n54 + n34 --> n54 + n39 --> n54 + n45 --> n54 + n52 --> n54 + n54 --> n40 ``` diff --git a/.codegraph/crates/lance-graph-osint.index.md b/.codegraph/crates/lance-graph-osint.index.md index 1ede7230c..281b0ba22 100644 --- a/.codegraph/crates/lance-graph-osint.index.md +++ b/.codegraph/crates/lance-graph-osint.index.md @@ -86,13 +86,13 @@ Generated from Cargo manifests — extracted relationships only. flowchart LR n2["bgz17"] n3["causal-edge"] - n10["deepnsm"] - n54["lance-graph-osint"] - n55["lance-graph-planner"] - n72["p64-bridge"] - n54 --> n2 - n54 --> n3 - n54 --> n10 - n54 --> n55 - n54 --> n72 + n11["deepnsm"] + n55["lance-graph-osint"] + n56["lance-graph-planner"] + n73["p64-bridge"] + n55 --> n2 + n55 --> n3 + n55 --> n11 + n55 --> n56 + n55 --> n73 ``` diff --git a/.codegraph/crates/lance-graph-planner.index.md b/.codegraph/crates/lance-graph-planner.index.md index 59ad1198b..2f44eb12d 100644 --- a/.codegraph/crates/lance-graph-planner.index.md +++ b/.codegraph/crates/lance-graph-planner.index.md @@ -365,23 +365,23 @@ Generated from Cargo manifests — extracted relationships only. flowchart LR n2["bgz17"] n3["causal-edge"] - n6["cognitive-shader-driver"] - n13["drf-focus-probe"] - n28["lance-graph"] - n39["lance-graph-contract"] - n43["lance-graph-dt64-lance"] - n54["lance-graph-osint"] - n55["lance-graph-planner"] - n64["lance-graph-supervisor"] - n72["p64-bridge"] - n6 --> n55 - n13 --> n55 - n28 --> n55 - n43 --> n55 - n54 --> n55 - n55 --> n2 - n55 --> n3 - n55 --> n39 - n55 --> n72 - n64 --> n55 + n7["cognitive-shader-driver"] + n14["drf-focus-probe"] + n29["lance-graph"] + n40["lance-graph-contract"] + n44["lance-graph-dt64-lance"] + n55["lance-graph-osint"] + n56["lance-graph-planner"] + n65["lance-graph-supervisor"] + n73["p64-bridge"] + n7 --> n56 + n14 --> n56 + n29 --> n56 + n44 --> n56 + n55 --> n56 + n56 --> n2 + n56 --> n3 + n56 --> n40 + n56 --> n73 + n65 --> n56 ``` diff --git a/.codegraph/crates/lance-graph-python.index.md b/.codegraph/crates/lance-graph-python.index.md index 9ec893c43..715fc65df 100644 --- a/.codegraph/crates/lance-graph-python.index.md +++ b/.codegraph/crates/lance-graph-python.index.md @@ -92,7 +92,7 @@ Generated from Cargo manifests — extracted relationships only. ```mermaid flowchart LR - n28["lance-graph"] - n56["lance-graph-python"] - n56 --> n28 + n29["lance-graph"] + n57["lance-graph-python"] + n57 --> n29 ``` diff --git a/.codegraph/crates/lance-graph-quack.index.md b/.codegraph/crates/lance-graph-quack.index.md index 2b78bd446..4c90b90bb 100644 --- a/.codegraph/crates/lance-graph-quack.index.md +++ b/.codegraph/crates/lance-graph-quack.index.md @@ -218,33 +218,33 @@ Generated from Cargo manifests — extracted relationships only. ```mermaid flowchart LR - n9["d-diamond-1-probe"] - n20["grammar-constraints-probe"] - n28["lance-graph"] - n32["lance-graph-benches"] - n36["lance-graph-codegraph"] - n39["lance-graph-contract"] - n40["lance-graph-cypher-quack"] - n41["lance-graph-dir-sim"] - n44["lance-graph-glove-parity"] - n47["lance-graph-mask-risc"] - n48["lance-graph-metta"] - n57["lance-graph-quack"] - n61["lance-graph-report"] - n63["lance-graph-sap"] - n66["lance-graph-xlog"] - n9 --> n57 - n20 --> n57 - n28 --> n57 - n32 --> n57 - n36 --> n57 - n40 --> n57 - n41 --> n57 - n44 --> n57 - n48 --> n57 - n57 --> n39 - n57 --> n47 - n61 --> n57 - n63 --> n57 - n66 --> n57 + n10["d-diamond-1-probe"] + n21["grammar-constraints-probe"] + n29["lance-graph"] + n33["lance-graph-benches"] + n37["lance-graph-codegraph"] + n40["lance-graph-contract"] + n41["lance-graph-cypher-quack"] + n42["lance-graph-dir-sim"] + n45["lance-graph-glove-parity"] + n48["lance-graph-mask-risc"] + n49["lance-graph-metta"] + n58["lance-graph-quack"] + n62["lance-graph-report"] + n64["lance-graph-sap"] + n67["lance-graph-xlog"] + n10 --> n58 + n21 --> n58 + n29 --> n58 + n33 --> n58 + n37 --> n58 + n41 --> n58 + n42 --> n58 + n45 --> n58 + n49 --> n58 + n58 --> n40 + n58 --> n48 + n62 --> n58 + n64 --> n58 + n67 --> n58 ``` diff --git a/.codegraph/crates/lance-graph-r2il.index.md b/.codegraph/crates/lance-graph-r2il.index.md index 5017a99f5..05dd1721e 100644 --- a/.codegraph/crates/lance-graph-r2il.index.md +++ b/.codegraph/crates/lance-graph-r2il.index.md @@ -19,6 +19,7 @@ Generated; the code is the truth. See ../index.md. ## Depended on by +- rdep cg-beh-probe normal — crates/cg-beh-probe/Cargo.toml:24 CONFIRMED - rdep holo-h14d-probe normal — crates/holo-h14d-probe/Cargo.toml:18 CONFIRMED - rdep lance-graph normal — crates/lance-graph/Cargo.toml:58 CONFIRMED - rdep lance-graph-nal normal — crates/lance-graph-nal/Cargo.toml:19 CONFIRMED @@ -237,19 +238,21 @@ Generated from Cargo manifests — extracted relationships only. ```mermaid flowchart LR - n23["holo-h14d-probe"] - n28["lance-graph"] - n39["lance-graph-contract"] - n42["lance-graph-dt64"] - n47["lance-graph-mask-risc"] - n49["lance-graph-nal"] - n58["lance-graph-r2il"] - n60["lance-graph-relalg"] - n23 --> n58 - n28 --> n58 - n49 --> n58 - n58 --> n39 - n58 --> n42 - n58 --> n47 - n60 --> n58 + n4["cg-beh-probe"] + n24["holo-h14d-probe"] + n29["lance-graph"] + n40["lance-graph-contract"] + n43["lance-graph-dt64"] + n48["lance-graph-mask-risc"] + n50["lance-graph-nal"] + n59["lance-graph-r2il"] + n61["lance-graph-relalg"] + n4 --> n59 + n24 --> n59 + n29 --> n59 + n50 --> n59 + n59 --> n40 + n59 --> n43 + n59 --> n48 + n61 --> n59 ``` diff --git a/.codegraph/crates/lance-graph-rbac.index.md b/.codegraph/crates/lance-graph-rbac.index.md index 7de0e78de..e49e587b8 100644 --- a/.codegraph/crates/lance-graph-rbac.index.md +++ b/.codegraph/crates/lance-graph-rbac.index.md @@ -135,11 +135,11 @@ Generated from Cargo manifests — extracted relationships only. ```mermaid flowchart LR - n33["lance-graph-callcenter"] - n38["lance-graph-consumer-conformance"] - n39["lance-graph-contract"] - n59["lance-graph-rbac"] - n33 --> n59 - n38 --> n59 - n59 --> n39 + n34["lance-graph-callcenter"] + n39["lance-graph-consumer-conformance"] + n40["lance-graph-contract"] + n60["lance-graph-rbac"] + n34 --> n60 + n39 --> n60 + n60 --> n40 ``` diff --git a/.codegraph/crates/lance-graph-relalg.index.md b/.codegraph/crates/lance-graph-relalg.index.md index ceaac7558..84f039643 100644 --- a/.codegraph/crates/lance-graph-relalg.index.md +++ b/.codegraph/crates/lance-graph-relalg.index.md @@ -102,19 +102,19 @@ Generated from Cargo manifests — extracted relationships only. ```mermaid flowchart LR - n8["crepe-plan-probe"] - n18["foundry-parity-lab"] - n23["holo-h14d-probe"] - n27["jc-batch-probe"] - n39["lance-graph-contract"] - n47["lance-graph-mask-risc"] - n58["lance-graph-r2il"] - n60["lance-graph-relalg"] - n8 --> n60 - n18 --> n60 - n23 --> n60 - n27 --> n60 - n60 --> n39 - n60 --> n47 - n60 --> n58 + n9["crepe-plan-probe"] + n19["foundry-parity-lab"] + n24["holo-h14d-probe"] + n28["jc-batch-probe"] + n40["lance-graph-contract"] + n48["lance-graph-mask-risc"] + n59["lance-graph-r2il"] + n61["lance-graph-relalg"] + n9 --> n61 + n19 --> n61 + n24 --> n61 + n28 --> n61 + n61 --> n40 + n61 --> n48 + n61 --> n59 ``` diff --git a/.codegraph/crates/lance-graph-report-ogar.index.md b/.codegraph/crates/lance-graph-report-ogar.index.md index af31ec7fa..29707f468 100644 --- a/.codegraph/crates/lance-graph-report-ogar.index.md +++ b/.codegraph/crates/lance-graph-report-ogar.index.md @@ -64,9 +64,9 @@ Generated from Cargo manifests — extracted relationships only. ```mermaid flowchart LR - n39["lance-graph-contract"] - n61["lance-graph-report"] - n62["lance-graph-report-ogar"] - n62 --> n39 - n62 --> n61 + n40["lance-graph-contract"] + n62["lance-graph-report"] + n63["lance-graph-report-ogar"] + n63 --> n40 + n63 --> n62 ``` diff --git a/.codegraph/crates/lance-graph-report.index.md b/.codegraph/crates/lance-graph-report.index.md index 09da256b4..2d0edfbef 100644 --- a/.codegraph/crates/lance-graph-report.index.md +++ b/.codegraph/crates/lance-graph-report.index.md @@ -293,15 +293,15 @@ Generated from Cargo manifests — extracted relationships only. ```mermaid flowchart LR - n39["lance-graph-contract"] - n42["lance-graph-dt64"] - n47["lance-graph-mask-risc"] - n57["lance-graph-quack"] - n61["lance-graph-report"] - n62["lance-graph-report-ogar"] - n61 --> n39 - n61 --> n42 - n61 --> n47 - n61 --> n57 - n62 --> n61 + n40["lance-graph-contract"] + n43["lance-graph-dt64"] + n48["lance-graph-mask-risc"] + n58["lance-graph-quack"] + n62["lance-graph-report"] + n63["lance-graph-report-ogar"] + n62 --> n40 + n62 --> n43 + n62 --> n48 + n62 --> n58 + n63 --> n62 ``` diff --git a/.codegraph/crates/lance-graph-sap.index.md b/.codegraph/crates/lance-graph-sap.index.md index e58936007..caef49dac 100644 --- a/.codegraph/crates/lance-graph-sap.index.md +++ b/.codegraph/crates/lance-graph-sap.index.md @@ -137,11 +137,11 @@ Generated from Cargo manifests — extracted relationships only. ```mermaid flowchart LR - n39["lance-graph-contract"] - n47["lance-graph-mask-risc"] - n57["lance-graph-quack"] - n63["lance-graph-sap"] - n63 --> n39 - n63 --> n47 - n63 --> n57 + n40["lance-graph-contract"] + n48["lance-graph-mask-risc"] + n58["lance-graph-quack"] + n64["lance-graph-sap"] + n64 --> n40 + n64 --> n48 + n64 --> n58 ``` diff --git a/.codegraph/crates/lance-graph-supervisor.index.md b/.codegraph/crates/lance-graph-supervisor.index.md index af7ed22fe..8ebe6b60d 100644 --- a/.codegraph/crates/lance-graph-supervisor.index.md +++ b/.codegraph/crates/lance-graph-supervisor.index.md @@ -199,13 +199,13 @@ Generated from Cargo manifests — extracted relationships only. ```mermaid flowchart LR - n33["lance-graph-callcenter"] - n39["lance-graph-contract"] - n43["lance-graph-dt64-lance"] - n55["lance-graph-planner"] - n64["lance-graph-supervisor"] - n43 --> n64 - n64 --> n33 - n64 --> n39 - n64 --> n55 + n34["lance-graph-callcenter"] + n40["lance-graph-contract"] + n44["lance-graph-dt64-lance"] + n56["lance-graph-planner"] + n65["lance-graph-supervisor"] + n44 --> n65 + n65 --> n34 + n65 --> n40 + n65 --> n56 ``` diff --git a/.codegraph/crates/lance-graph-turbovec.index.md b/.codegraph/crates/lance-graph-turbovec.index.md index 0518ea42a..daa6966f4 100644 --- a/.codegraph/crates/lance-graph-turbovec.index.md +++ b/.codegraph/crates/lance-graph-turbovec.index.md @@ -45,5 +45,5 @@ Generated from Cargo manifests — extracted relationships only. ```mermaid flowchart LR - n65["lance-graph-turbovec"] + n66["lance-graph-turbovec"] ``` diff --git a/.codegraph/crates/lance-graph-xlog.index.md b/.codegraph/crates/lance-graph-xlog.index.md index 8c60f15ea..e53a9c84d 100644 --- a/.codegraph/crates/lance-graph-xlog.index.md +++ b/.codegraph/crates/lance-graph-xlog.index.md @@ -180,15 +180,15 @@ Generated from Cargo manifests — extracted relationships only. ```mermaid flowchart LR - n36["lance-graph-codegraph"] - n39["lance-graph-contract"] - n42["lance-graph-dt64"] - n47["lance-graph-mask-risc"] - n57["lance-graph-quack"] - n66["lance-graph-xlog"] - n36 --> n66 - n66 --> n39 - n66 --> n42 - n66 --> n47 - n66 --> n57 + n37["lance-graph-codegraph"] + n40["lance-graph-contract"] + n43["lance-graph-dt64"] + n48["lance-graph-mask-risc"] + n58["lance-graph-quack"] + n67["lance-graph-xlog"] + n37 --> n67 + n67 --> n40 + n67 --> n43 + n67 --> n48 + n67 --> n58 ``` diff --git a/.codegraph/crates/lance-graph.index.md b/.codegraph/crates/lance-graph.index.md index c2cd6476a..706b93857 100644 --- a/.codegraph/crates/lance-graph.index.md +++ b/.codegraph/crates/lance-graph.index.md @@ -394,35 +394,35 @@ Generated from Cargo manifests — extracted relationships only. flowchart LR n1["bgz-tensor"] n2["bgz17"] - n7["cognitive-stack"] - n28["lance-graph"] - n32["lance-graph-benches"] - n34["lance-graph-catalog"] - n37["lance-graph-cognitive"] - n39["lance-graph-contract"] - n40["lance-graph-cypher-quack"] - n43["lance-graph-dt64-lance"] - n45["lance-graph-hydrate"] - n47["lance-graph-mask-risc"] - n55["lance-graph-planner"] - n56["lance-graph-python"] - n57["lance-graph-quack"] - n58["lance-graph-r2il"] - n83["symbiont"] - n7 --> n28 - n28 --> n1 - n28 --> n2 - n28 --> n34 - n28 --> n37 - n28 --> n39 - n28 --> n45 - n28 --> n47 - n28 --> n55 - n28 --> n57 - n28 --> n58 - n32 --> n28 - n40 --> n28 - n43 --> n28 - n56 --> n28 - n83 --> n28 + n8["cognitive-stack"] + n29["lance-graph"] + n33["lance-graph-benches"] + n35["lance-graph-catalog"] + n38["lance-graph-cognitive"] + n40["lance-graph-contract"] + n41["lance-graph-cypher-quack"] + n44["lance-graph-dt64-lance"] + n46["lance-graph-hydrate"] + n48["lance-graph-mask-risc"] + n56["lance-graph-planner"] + n57["lance-graph-python"] + n58["lance-graph-quack"] + n59["lance-graph-r2il"] + n84["symbiont"] + n8 --> n29 + n29 --> n1 + n29 --> n2 + n29 --> n35 + n29 --> n38 + n29 --> n40 + n29 --> n46 + n29 --> n48 + n29 --> n56 + n29 --> n58 + n29 --> n59 + n33 --> n29 + n41 --> n29 + n44 --> n29 + n57 --> n29 + n84 --> n29 ``` diff --git a/.codegraph/crates/learning.index.md b/.codegraph/crates/learning.index.md index 7648e47a6..41d33801b 100644 --- a/.codegraph/crates/learning.index.md +++ b/.codegraph/crates/learning.index.md @@ -237,7 +237,7 @@ Generated from Cargo manifests — extracted relationships only. ```mermaid flowchart LR - n39["lance-graph-contract"] - n67["learning"] - n67 --> n39 + n40["lance-graph-contract"] + n68["learning"] + n68 --> n40 ``` diff --git a/.codegraph/crates/mork-pathmap-probe.index.md b/.codegraph/crates/mork-pathmap-probe.index.md index 62186c6bb..cf04be2da 100644 --- a/.codegraph/crates/mork-pathmap-probe.index.md +++ b/.codegraph/crates/mork-pathmap-probe.index.md @@ -266,9 +266,9 @@ Generated from Cargo manifests — extracted relationships only. ```mermaid flowchart LR - n8["crepe-plan-probe"] - n47["lance-graph-mask-risc"] - n68["mork-pathmap-probe"] - n8 --> n68 - n68 --> n47 + n9["crepe-plan-probe"] + n48["lance-graph-mask-risc"] + n69["mork-pathmap-probe"] + n9 --> n69 + n69 --> n48 ``` diff --git a/.codegraph/crates/neural-debug.index.md b/.codegraph/crates/neural-debug.index.md index db712a53a..27bc3c925 100644 --- a/.codegraph/crates/neural-debug.index.md +++ b/.codegraph/crates/neural-debug.index.md @@ -85,5 +85,5 @@ Generated from Cargo manifests — extracted relationships only. ```mermaid flowchart LR - n69["neural-debug"] + n70["neural-debug"] ``` diff --git a/.codegraph/crates/ogar-behavior-probe.index.md b/.codegraph/crates/ogar-behavior-probe.index.md index 1846bfedc..ce88091df 100644 --- a/.codegraph/crates/ogar-behavior-probe.index.md +++ b/.codegraph/crates/ogar-behavior-probe.index.md @@ -69,9 +69,9 @@ Generated from Cargo manifests — extracted relationships only. ```mermaid flowchart LR - n39["lance-graph-contract"] - n42["lance-graph-dt64"] - n70["ogar-behavior-probe"] - n70 --> n39 - n70 --> n42 + n40["lance-graph-contract"] + n43["lance-graph-dt64"] + n71["ogar-behavior-probe"] + n71 --> n40 + n71 --> n43 ``` diff --git a/.codegraph/crates/onebrc-probe.index.md b/.codegraph/crates/onebrc-probe.index.md index 1a09af6c3..60bb98528 100644 --- a/.codegraph/crates/onebrc-probe.index.md +++ b/.codegraph/crates/onebrc-probe.index.md @@ -132,7 +132,7 @@ Generated from Cargo manifests — extracted relationships only. ```mermaid flowchart LR - n39["lance-graph-contract"] - n71["onebrc-probe"] - n71 --> n39 + n40["lance-graph-contract"] + n72["onebrc-probe"] + n72 --> n40 ``` diff --git a/.codegraph/crates/p64-bridge.index.md b/.codegraph/crates/p64-bridge.index.md index ee07d0ccb..7a8aee5cb 100644 --- a/.codegraph/crates/p64-bridge.index.md +++ b/.codegraph/crates/p64-bridge.index.md @@ -88,13 +88,13 @@ Generated from Cargo manifests — extracted relationships only. flowchart LR n2["bgz17"] n3["causal-edge"] - n6["cognitive-shader-driver"] - n54["lance-graph-osint"] - n55["lance-graph-planner"] - n72["p64-bridge"] - n6 --> n72 - n54 --> n72 - n55 --> n72 - n72 --> n2 - n72 --> n3 + n7["cognitive-shader-driver"] + n55["lance-graph-osint"] + n56["lance-graph-planner"] + n73["p64-bridge"] + n7 --> n73 + n55 --> n73 + n56 --> n73 + n73 --> n2 + n73 --> n3 ``` diff --git a/.codegraph/crates/perturbation-sim.index.md b/.codegraph/crates/perturbation-sim.index.md index b0d8c0303..5bb9cf50d 100644 --- a/.codegraph/crates/perturbation-sim.index.md +++ b/.codegraph/crates/perturbation-sim.index.md @@ -238,9 +238,9 @@ Generated from Cargo manifests — extracted relationships only. ```mermaid flowchart LR - n39["lance-graph-contract"] - n73["perturbation-sim"] - n83["symbiont"] - n73 --> n39 - n83 --> n73 + n40["lance-graph-contract"] + n74["perturbation-sim"] + n84["symbiont"] + n74 --> n40 + n84 --> n74 ``` diff --git a/.codegraph/crates/quasicryth-research.index.md b/.codegraph/crates/quasicryth-research.index.md index 56bb243a4..62bda1644 100644 --- a/.codegraph/crates/quasicryth-research.index.md +++ b/.codegraph/crates/quasicryth-research.index.md @@ -147,5 +147,5 @@ Generated from Cargo manifests — extracted relationships only. ```mermaid flowchart LR - n74["quasicryth-research"] + n75["quasicryth-research"] ``` diff --git a/.codegraph/crates/r2il-mask-abi-probe.index.md b/.codegraph/crates/r2il-mask-abi-probe.index.md index 9fd464081..85f35041c 100644 --- a/.codegraph/crates/r2il-mask-abi-probe.index.md +++ b/.codegraph/crates/r2il-mask-abi-probe.index.md @@ -40,5 +40,5 @@ Generated from Cargo manifests — extracted relationships only. ```mermaid flowchart LR - n75["r2il-mask-abi-probe"] + n76["r2il-mask-abi-probe"] ``` diff --git a/.codegraph/crates/reader-lm.index.md b/.codegraph/crates/reader-lm.index.md index 2e650b549..487e7c8b7 100644 --- a/.codegraph/crates/reader-lm.index.md +++ b/.codegraph/crates/reader-lm.index.md @@ -87,6 +87,6 @@ Generated from Cargo manifests — extracted relationships only. ```mermaid flowchart LR n1["bgz-tensor"] - n76["reader-lm"] - n76 --> n1 + n77["reader-lm"] + n77 --> n1 ``` diff --git a/.codegraph/crates/rp-seal-t0-probe.index.md b/.codegraph/crates/rp-seal-t0-probe.index.md index 835cb9a13..bf220c71a 100644 --- a/.codegraph/crates/rp-seal-t0-probe.index.md +++ b/.codegraph/crates/rp-seal-t0-probe.index.md @@ -62,5 +62,5 @@ Generated from Cargo manifests — extracted relationships only. ```mermaid flowchart LR - n77["rp-seal-t0-probe"] + n78["rp-seal-t0-probe"] ``` diff --git a/.codegraph/crates/sag-ra-probe.index.md b/.codegraph/crates/sag-ra-probe.index.md index 467a38a54..871768f88 100644 --- a/.codegraph/crates/sag-ra-probe.index.md +++ b/.codegraph/crates/sag-ra-probe.index.md @@ -41,5 +41,5 @@ Generated from Cargo manifests — extracted relationships only. ```mermaid flowchart LR - n78["sag-ra-probe"] + n79["sag-ra-probe"] ``` diff --git a/.codegraph/crates/sigker.index.md b/.codegraph/crates/sigker.index.md index b47bdde71..f38d6abac 100644 --- a/.codegraph/crates/sigker.index.md +++ b/.codegraph/crates/sigker.index.md @@ -87,7 +87,7 @@ Generated from Cargo manifests — extracted relationships only. ```mermaid flowchart LR - n26["jc"] - n79["sigker"] - n26 --> n79 + n27["jc"] + n80["sigker"] + n27 --> n80 ``` diff --git a/.codegraph/crates/sigma-tier-router.index.md b/.codegraph/crates/sigma-tier-router.index.md index 672d8c128..15469bf4c 100644 --- a/.codegraph/crates/sigma-tier-router.index.md +++ b/.codegraph/crates/sigma-tier-router.index.md @@ -57,8 +57,8 @@ Generated from Cargo manifests — extracted relationships only. ```mermaid flowchart LR n3["causal-edge"] - n39["lance-graph-contract"] - n80["sigma-tier-router"] - n80 --> n3 - n80 --> n39 + n40["lance-graph-contract"] + n81["sigma-tier-router"] + n81 --> n3 + n81 --> n40 ``` diff --git a/.codegraph/crates/soa64-u64-lab.index.md b/.codegraph/crates/soa64-u64-lab.index.md index 3f7008f18..a0bcbbe01 100644 --- a/.codegraph/crates/soa64-u64-lab.index.md +++ b/.codegraph/crates/soa64-u64-lab.index.md @@ -119,9 +119,9 @@ Generated from Cargo manifests — extracted relationships only. ```mermaid flowchart LR - n39["lance-graph-contract"] - n42["lance-graph-dt64"] - n81["soa64-u64-lab"] - n81 --> n39 - n81 --> n42 + n40["lance-graph-contract"] + n43["lance-graph-dt64"] + n82["soa64-u64-lab"] + n82 --> n40 + n82 --> n43 ``` diff --git a/.codegraph/crates/surreal_container.index.md b/.codegraph/crates/surreal_container.index.md index 910df48ad..8b7408b0f 100644 --- a/.codegraph/crates/surreal_container.index.md +++ b/.codegraph/crates/surreal_container.index.md @@ -66,7 +66,7 @@ Generated from Cargo manifests — extracted relationships only. ```mermaid flowchart LR - n39["lance-graph-contract"] - n82["surreal_container"] - n82 --> n39 + n40["lance-graph-contract"] + n83["surreal_container"] + n83 --> n40 ``` diff --git a/.codegraph/crates/symbiont.index.md b/.codegraph/crates/symbiont.index.md index 0a64170cb..33b1c5ff6 100644 --- a/.codegraph/crates/symbiont.index.md +++ b/.codegraph/crates/symbiont.index.md @@ -95,13 +95,13 @@ Generated from Cargo manifests — extracted relationships only. ```mermaid flowchart LR - n28["lance-graph"] - n39["lance-graph-contract"] - n51["lance-graph-ogar"] - n73["perturbation-sim"] - n83["symbiont"] - n83 --> n28 - n83 --> n39 - n83 --> n51 - n83 --> n73 + n29["lance-graph"] + n40["lance-graph-contract"] + n52["lance-graph-ogar"] + n74["perturbation-sim"] + n84["symbiont"] + n84 --> n29 + n84 --> n40 + n84 --> n52 + n84 --> n74 ``` diff --git a/.codegraph/crates/template-equivalence.index.md b/.codegraph/crates/template-equivalence.index.md index 9effafe62..884fa2e2e 100644 --- a/.codegraph/crates/template-equivalence.index.md +++ b/.codegraph/crates/template-equivalence.index.md @@ -42,7 +42,7 @@ Generated from Cargo manifests — extracted relationships only. ```mermaid flowchart LR - n7["cognitive-stack"] - n84["template-equivalence"] - n7 --> n84 + n8["cognitive-stack"] + n85["template-equivalence"] + n8 --> n85 ``` diff --git a/.codegraph/crates/template-runtime.index.md b/.codegraph/crates/template-runtime.index.md index 939fc4fb4..ba2165fc8 100644 --- a/.codegraph/crates/template-runtime.index.md +++ b/.codegraph/crates/template-runtime.index.md @@ -51,7 +51,7 @@ Generated from Cargo manifests — extracted relationships only. ```mermaid flowchart LR - n7["cognitive-stack"] - n85["template-runtime"] - n7 --> n85 + n8["cognitive-stack"] + n86["template-runtime"] + n8 --> n86 ``` diff --git a/.codegraph/crates/thinking-engine.index.md b/.codegraph/crates/thinking-engine.index.md index f09570bca..c1d8fecf8 100644 --- a/.codegraph/crates/thinking-engine.index.md +++ b/.codegraph/crates/thinking-engine.index.md @@ -292,15 +292,15 @@ Generated from Cargo manifests — extracted relationships only. flowchart LR n1["bgz-tensor"] n3["causal-edge"] - n6["cognitive-shader-driver"] - n22["highheelbgz"] - n26["jc"] - n39["lance-graph-contract"] - n86["thinking-engine"] - n6 --> n86 - n86 --> n1 - n86 --> n3 - n86 --> n22 - n86 --> n26 - n86 --> n39 + n7["cognitive-shader-driver"] + n23["highheelbgz"] + n27["jc"] + n40["lance-graph-contract"] + n87["thinking-engine"] + n7 --> n87 + n87 --> n1 + n87 --> n3 + n87 --> n23 + n87 --> n27 + n87 --> n40 ``` diff --git a/.codegraph/crates/thought-git-probe.index.md b/.codegraph/crates/thought-git-probe.index.md index 9e204dd9c..082cc894d 100644 --- a/.codegraph/crates/thought-git-probe.index.md +++ b/.codegraph/crates/thought-git-probe.index.md @@ -139,7 +139,7 @@ Generated from Cargo manifests — extracted relationships only. ```mermaid flowchart LR - n39["lance-graph-contract"] - n87["thought-git-probe"] - n87 --> n39 + n40["lance-graph-contract"] + n88["thought-git-probe"] + n88 --> n40 ``` diff --git a/.codegraph/crates/tract-harvest-probe.index.md b/.codegraph/crates/tract-harvest-probe.index.md index 0ab3203a3..361d7d025 100644 --- a/.codegraph/crates/tract-harvest-probe.index.md +++ b/.codegraph/crates/tract-harvest-probe.index.md @@ -187,9 +187,9 @@ Generated from Cargo manifests — extracted relationships only. ```mermaid flowchart LR - n39["lance-graph-contract"] - n52["lance-graph-onnx"] - n88["tract-harvest-probe"] - n88 --> n39 - n88 --> n52 + n40["lance-graph-contract"] + n53["lance-graph-onnx"] + n89["tract-harvest-probe"] + n89 --> n40 + n89 --> n53 ``` diff --git a/.codegraph/crates/weather-poc.index.md b/.codegraph/crates/weather-poc.index.md index 376e9e836..598af1cfd 100644 --- a/.codegraph/crates/weather-poc.index.md +++ b/.codegraph/crates/weather-poc.index.md @@ -104,7 +104,7 @@ Generated from Cargo manifests — extracted relationships only. ```mermaid flowchart LR - n39["lance-graph-contract"] - n89["weather-poc"] - n89 --> n39 + n40["lance-graph-contract"] + n90["weather-poc"] + n90 --> n40 ``` diff --git a/.codegraph/dependencies.tsv b/.codegraph/dependencies.tsv index 8c57f4551..3667f950e 100644 --- a/.codegraph/dependencies.tsv +++ b/.codegraph/dependencies.tsv @@ -9,6 +9,12 @@ bgz-tensor ndarray normal false - - crates/bgz-tensor/Cargo.toml:25 CONFIRMED no bgz-tensor serde normal true - calibrate,hydrate crates/bgz-tensor/Cargo.toml:28 CONFIRMED no bgz-tensor serde_json normal true - calibrate,hydrate crates/bgz-tensor/Cargo.toml:29 CONFIRMED no bgz-tensor sha2 normal true - calibrate,hydrate crates/bgz-tensor/Cargo.toml:30 CONFIRMED no +cg-beh-probe foundry-parity-lab normal false - - crates/cg-beh-probe/Cargo.toml:29 CONFIRMED yes +cg-beh-probe lance-graph-contract normal false - - crates/cg-beh-probe/Cargo.toml:22 CONFIRMED yes +cg-beh-probe lance-graph-dt64 normal false - - crates/cg-beh-probe/Cargo.toml:21 CONFIRMED yes +cg-beh-probe lance-graph-r2il normal false - - crates/cg-beh-probe/Cargo.toml:24 CONFIRMED yes +cg-beh-probe ogar-loco normal false - - crates/cg-beh-probe/Cargo.toml:27 CONFIRMED no +cg-beh-probe ogar-r2il normal false - - crates/cg-beh-probe/Cargo.toml:26 CONFIRMED no cognitive-polyfill-probe lance-graph-dt64 normal false - - crates/cognitive-polyfill-probe/Cargo.toml:14 CONFIRMED yes cognitive-polyfill-probe lance-graph-mask-risc normal false - - crates/cognitive-polyfill-probe/Cargo.toml:16 CONFIRMED yes cognitive-shader-driver axum normal true - serve crates/cognitive-shader-driver/Cargo.toml:253 CONFIRMED no diff --git a/.codegraph/freshness.tsv b/.codegraph/freshness.tsv index c6f966411..a1a0853ed 100644 --- a/.codegraph/freshness.tsv +++ b/.codegraph/freshness.tsv @@ -4,6 +4,7 @@ bge-m3 aefb02c857c31568 Cargo.toml+src (5 files) bgz-tensor 5d1e33d8228a9cf4 Cargo.toml+src (40 files) bgz17 8bec2499622cf1d7 Cargo.toml+src (22 files) causal-edge c0fc81913c25420a Cargo.toml+src (13 files) +cg-beh-probe 9d4fce995c36c4e4 Cargo.toml+src (7 files) cognitive-compiler d1353bc629a93ad2 Cargo.toml+src (2 files) cognitive-polyfill-probe 142eccf61ff99e10 Cargo.toml+src (2 files) cognitive-shader-driver a88da842b115f96b Cargo.toml+src (30 files) diff --git a/.codegraph/gaps.tsv b/.codegraph/gaps.tsv index 17516f499..88d89772e 100644 --- a/.codegraph/gaps.tsv +++ b/.codegraph/gaps.tsv @@ -8,6 +8,7 @@ calls-missing bge-m3 calls - UNKNOWN ARTIFACT_MISSING calls-missing bgz-tensor calls - UNKNOWN ARTIFACT_MISSING calls-missing bgz17 calls - UNKNOWN ARTIFACT_MISSING calls-missing causal-edge calls - UNKNOWN ARTIFACT_MISSING +calls-missing cg-beh-probe calls - UNKNOWN ARTIFACT_MISSING calls-missing cognitive-compiler calls - UNKNOWN ARTIFACT_MISSING calls-missing cognitive-polyfill-probe calls - UNKNOWN ARTIFACT_MISSING calls-missing cognitive-shader-driver calls - UNKNOWN ARTIFACT_MISSING diff --git a/.codegraph/imports.tsv b/.codegraph/imports.tsv index 448f89dc0..6813226c1 100644 --- a/.codegraph/imports.tsv +++ b/.codegraph/imports.tsv @@ -414,6 +414,89 @@ causal-edge crates/causal-edge/src/v2_layout_tests.rs 962 crate::edge::CausalEdg causal-edge crates/causal-edge/src/v2_layout_tests.rs 963 crate::layout::EPISTEMIC_MASK - use all(test, all(test, feature="causal-edge-v2-layout")) CONFIRMED causal-edge crates/causal-edge/src/v2_layout_tests.rs 963 crate::layout::SPARE_MASK - use all(test, all(test, feature="causal-edge-v2-layout")) CONFIRMED causal-edge crates/causal-edge/src/v2_layout_tests.rs 963 crate::layout::TRUTH_MASK - use all(test, all(test, feature="causal-edge-v2-layout")) CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/bin/facts.rs 11 cg_beh_probe::dispatch - use - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/bin/facts.rs 12 cg_beh_probe::facts::Snapshot - use - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/bin/facts.rs 13 cg_beh_probe::fixture - use - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/bin/facts.rs 13 cg_beh_probe::fixture::FoundryVariant - use - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/bin/facts.rs 13 cg_beh_probe::fixture::Variant - use - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/bin/facts.rs 9 std::path::PathBuf - use - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/dispatch.rs 10 lance_graph_r2il::INT_XOR - use - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/dispatch.rs 10 lance_graph_r2il::POP_COUNT - use - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/dispatch.rs 12 ogar_loco::FnIndex - use - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/dispatch.rs 13 ogar_r2il::ALL - use - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/dispatch.rs 13 ogar_r2il::ANY - use - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/dispatch.rs 13 ogar_r2il::KEY_RUNS - use - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/dispatch.rs 13 ogar_r2il::MAX - use - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/dispatch.rs 13 ogar_r2il::MIN - use - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/dispatch.rs 13 ogar_r2il::SUM - use - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/dispatch.rs 15 crate::FNV64_OFFSET - use - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/dispatch.rs 15 crate::fnv64 - use - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/dispatch.rs 7 lance_graph_r2il::polyfill::POLYFILL - use - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/dispatch.rs 9 lance_graph_r2il::INT_ADD - use - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/dispatch.rs 9 lance_graph_r2il::INT_AND - use - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/dispatch.rs 9 lance_graph_r2il::INT_EQUAL - use - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/dispatch.rs 9 lance_graph_r2il::INT_MULT - use - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/dispatch.rs 9 lance_graph_r2il::INT_NOT - use - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/dispatch.rs 9 lance_graph_r2il::INT_OR - use - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/dispatch.rs 9 lance_graph_r2il::INT_SUB - use - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/dispatch.rs 9 lance_graph_r2il::INT_S_DIV - use - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/dispatch.rs 9 lance_graph_r2il::INT_S_LESS - use - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/facts.rs 3 lance_graph_contract::class_view::ClassView - use - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/facts.rs 3 lance_graph_contract::class_view::WideFieldMask - use - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/facts.rs 4 lance_graph_contract::set_algebra::Logic - use - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/facts.rs 4 lance_graph_contract::set_algebra::Res - use - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/facts.rs 4 lance_graph_contract::set_algebra::SetExpr - use - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/facts.rs 5 lance_graph_contract::set_rules::Population - use - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/facts.rs 5 lance_graph_contract::set_rules::Truth - use - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/facts.rs 6 lance_graph_dt64::Arg - use - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/facts.rs 6 lance_graph_dt64::BindStore - use - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/facts.rs 6 lance_graph_dt64::MethodId - use - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/facts.rs 6 lance_graph_dt64::MethodRef - use - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/facts.rs 6 lance_graph_dt64::Refusal - use - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/facts.rs 6 lance_graph_dt64::SchemaRev - use - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/facts.rs 6 lance_graph_dt64::ValueDemand - use - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/facts.rs 8 crate::FNV64_OFFSET - use - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/facts.rs 8 crate::fnv64 - use - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/fixture.rs 12 foundry_parity_lab::bind - use - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/fixture.rs 12 foundry_parity_lab::bind::VIEW_CLASS FOUNDRY_VIEW_CLASS use - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/fixture.rs 12 foundry_parity_lab::bind::World - use - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/fixture.rs 13 foundry_parity_lab::method - use - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/fixture.rs 14 lance_graph_contract::class_view::ClassId - use - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/fixture.rs 14 lance_graph_contract::class_view::ClassView - use - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/fixture.rs 14 lance_graph_contract::class_view::WideFieldMask - use - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/fixture.rs 15 lance_graph_contract::ontology::DisplayTemplate - use - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/fixture.rs 15 lance_graph_contract::ontology::FieldRef - use - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/fixture.rs 16 lance_graph_contract::set_algebra::Cmp - use - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/fixture.rs 16 lance_graph_contract::set_algebra::Logic - use - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/fixture.rs 16 lance_graph_contract::set_algebra::Res - use - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/fixture.rs 16 lance_graph_contract::set_algebra::SetExpr - use - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/fixture.rs 17 lance_graph_contract::set_rules::Population - use - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/fixture.rs 17 lance_graph_contract::set_rules::Truth - use - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/fixture.rs 18 lance_graph_dt64::dr::Extent - use - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/fixture.rs 20 lance_graph_dt64::AlgebraRef - use - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/fixture.rs 20 lance_graph_dt64::Arg - use - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/fixture.rs 20 lance_graph_dt64::BindStore - use - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/fixture.rs 20 lance_graph_dt64::ClassSchema - use - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/fixture.rs 20 lance_graph_dt64::Effect - use - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/fixture.rs 20 lance_graph_dt64::Guard - use - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/fixture.rs 20 lance_graph_dt64::MethodBinding - use - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/fixture.rs 20 lance_graph_dt64::MethodId - use - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/fixture.rs 20 lance_graph_dt64::SchemaRev - use - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/fixture.rs 21 lance_graph_dt64::SigRev - use - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/fixture.rs 21 lance_graph_dt64::ValueDemand - use - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/fixture.rs 24 lance_graph_r2il::polyfill::AliasLanguage - use - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/fixture.rs 24 lance_graph_r2il::polyfill::POLYFILL_LENS - use - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/fixture.rs 24 lance_graph_r2il::polyfill::PolyfillView - use - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/fixture.rs 24 lance_graph_r2il::polyfill::polyfill_arities - use - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/fixture.rs 24 lance_graph_r2il::polyfill::position_of - use - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/fixture.rs 27 crate::facts::GuardConvention - use - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/fixture.rs 27 crate::facts::Read - use - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/query.rs 14 crate::dispatch - use - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/query.rs 14 crate::dispatch::Arm - use - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/query.rs 14 crate::dispatch::Dispatch - use - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/query.rs 15 crate::facts::MethodFacts - use - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/query.rs 15 crate::facts::Snapshot - use - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/query.rs 16 crate::Evidence - use - CONFIRMED cognitive-compiler crates/cognitive-compiler/src/lib.rs 160 super::* - use test POSSIBLE cognitive-polyfill-probe crates/cognitive-polyfill-probe/src/lib.rs 51 lance_graph_dt64::dr::Frame - use - CONFIRMED cognitive-polyfill-probe crates/cognitive-polyfill-probe/src/lib.rs 51 lance_graph_dt64::dr::LocalMap - use - CONFIRMED diff --git a/.codegraph/index.md b/.codegraph/index.md index d4712c239..f68e0505b 100644 --- a/.codegraph/index.md +++ b/.codegraph/index.md @@ -61,6 +61,7 @@ rg -n 'ARTIFACT_MISSING' .codegraph/gaps.tsv # cr | [bgz-tensor](crates/bgz-tensor.index.md) | member | crates/bgz-tensor | | [bgz17](crates/bgz17.index.md) | excluded | crates/bgz17 | | [causal-edge](crates/causal-edge.index.md) | excluded | crates/causal-edge | +| [cg-beh-probe](crates/cg-beh-probe.index.md) | excluded | crates/cg-beh-probe | | [cognitive-compiler](crates/cognitive-compiler.index.md) | excluded | crates/cognitive-compiler | | [cognitive-polyfill-probe](crates/cognitive-polyfill-probe.index.md) | excluded | crates/cognitive-polyfill-probe | | [cognitive-shader-driver](crates/cognitive-shader-driver.index.md) | member | crates/cognitive-shader-driver | @@ -150,7 +151,7 @@ rg -n 'ARTIFACT_MISSING' .codegraph/gaps.tsv # cr ## Crate dependency diagram -Generated from Cargo manifests — extracted relationships only. Internal `normal` dependencies; only crates with at least one internal edge are drawn (77 of 90). +Generated from Cargo manifests — extracted relationships only. Internal `normal` dependencies; only crates with at least one internal edge are drawn (78 of 91). ```mermaid flowchart LR @@ -158,255 +159,260 @@ flowchart LR n1["bgz-tensor"] n2["bgz17"] n3["causal-edge"] - n4["cognitive-compiler"] - n5["cognitive-polyfill-probe"] - n6["cognitive-shader-driver"] - n7["cognitive-stack"] - n8["crepe-plan-probe"] - n9["d-diamond-1-probe"] - n10["deepnsm"] - n11["deepnsm-v2"] - n12["dr-isa-stream-lab"] - n13["drf-focus-probe"] - n14["drisa-register-probe"] - n15["dt64-admission-probe"] - n17["elixir-template"] - n18["foundry-parity-lab"] - n20["grammar-constraints-probe"] - n22["highheelbgz"] - n23["holo-h14d-probe"] - n25["holograph"] - n26["jc"] - n27["jc-batch-probe"] - n28["lance-graph"] - n30["lance-graph-archetype"] - n31["lance-graph-arm-discovery"] - n32["lance-graph-benches"] - n33["lance-graph-callcenter"] - n34["lance-graph-catalog"] - n36["lance-graph-codegraph"] - n37["lance-graph-cognitive"] - n38["lance-graph-consumer-conformance"] - n39["lance-graph-contract"] - n40["lance-graph-cypher-quack"] - n41["lance-graph-dir-sim"] - n42["lance-graph-dt64"] - n43["lance-graph-dt64-lance"] - n44["lance-graph-glove-parity"] - n45["lance-graph-hydrate"] - n46["lance-graph-lane-fold"] - n47["lance-graph-mask-risc"] - n48["lance-graph-metta"] - n49["lance-graph-nal"] - n51["lance-graph-ogar"] - n52["lance-graph-onnx"] - n53["lance-graph-ontology"] - n54["lance-graph-osint"] - n55["lance-graph-planner"] - n56["lance-graph-python"] - n57["lance-graph-quack"] - n58["lance-graph-r2il"] - n59["lance-graph-rbac"] - n60["lance-graph-relalg"] - n61["lance-graph-report"] - n62["lance-graph-report-ogar"] - n63["lance-graph-sap"] - n64["lance-graph-supervisor"] - n66["lance-graph-xlog"] - n67["learning"] - n68["mork-pathmap-probe"] - n70["ogar-behavior-probe"] - n71["onebrc-probe"] - n72["p64-bridge"] - n73["perturbation-sim"] - n76["reader-lm"] - n79["sigker"] - n80["sigma-tier-router"] - n81["soa64-u64-lab"] - n82["surreal_container"] - n83["symbiont"] - n84["template-equivalence"] - n85["template-runtime"] - n86["thinking-engine"] - n87["thought-git-probe"] - n88["tract-harvest-probe"] - n89["weather-poc"] + n4["cg-beh-probe"] + n5["cognitive-compiler"] + n6["cognitive-polyfill-probe"] + n7["cognitive-shader-driver"] + n8["cognitive-stack"] + n9["crepe-plan-probe"] + n10["d-diamond-1-probe"] + n11["deepnsm"] + n12["deepnsm-v2"] + n13["dr-isa-stream-lab"] + n14["drf-focus-probe"] + n15["drisa-register-probe"] + n16["dt64-admission-probe"] + n18["elixir-template"] + n19["foundry-parity-lab"] + n21["grammar-constraints-probe"] + n23["highheelbgz"] + n24["holo-h14d-probe"] + n26["holograph"] + n27["jc"] + n28["jc-batch-probe"] + n29["lance-graph"] + n31["lance-graph-archetype"] + n32["lance-graph-arm-discovery"] + n33["lance-graph-benches"] + n34["lance-graph-callcenter"] + n35["lance-graph-catalog"] + n37["lance-graph-codegraph"] + n38["lance-graph-cognitive"] + n39["lance-graph-consumer-conformance"] + n40["lance-graph-contract"] + n41["lance-graph-cypher-quack"] + n42["lance-graph-dir-sim"] + n43["lance-graph-dt64"] + n44["lance-graph-dt64-lance"] + n45["lance-graph-glove-parity"] + n46["lance-graph-hydrate"] + n47["lance-graph-lane-fold"] + n48["lance-graph-mask-risc"] + n49["lance-graph-metta"] + n50["lance-graph-nal"] + n52["lance-graph-ogar"] + n53["lance-graph-onnx"] + n54["lance-graph-ontology"] + n55["lance-graph-osint"] + n56["lance-graph-planner"] + n57["lance-graph-python"] + n58["lance-graph-quack"] + n59["lance-graph-r2il"] + n60["lance-graph-rbac"] + n61["lance-graph-relalg"] + n62["lance-graph-report"] + n63["lance-graph-report-ogar"] + n64["lance-graph-sap"] + n65["lance-graph-supervisor"] + n67["lance-graph-xlog"] + n68["learning"] + n69["mork-pathmap-probe"] + n71["ogar-behavior-probe"] + n72["onebrc-probe"] + n73["p64-bridge"] + n74["perturbation-sim"] + n77["reader-lm"] + n80["sigker"] + n81["sigma-tier-router"] + n82["soa64-u64-lab"] + n83["surreal_container"] + n84["symbiont"] + n85["template-equivalence"] + n86["template-runtime"] + n87["thinking-engine"] + n88["thought-git-probe"] + n89["tract-harvest-probe"] + n90["weather-poc"] n0 --> n1 - n1 --> n25 - n1 --> n39 - n5 --> n42 - n5 --> n47 - n6 --> n2 - n6 --> n3 - n6 --> n10 - n6 --> n39 - n6 --> n53 - n6 --> n55 - n6 --> n72 - n6 --> n86 - n7 --> n4 - n7 --> n17 - n7 --> n28 - n7 --> n39 - n7 --> n51 - n7 --> n84 - n7 --> n85 - n8 --> n39 - n8 --> n47 - n8 --> n60 - n8 --> n68 - n9 --> n39 - n9 --> n47 - n9 --> n57 - n10 --> n37 - n10 --> n39 - n11 --> n3 - n11 --> n31 - n11 --> n39 - n12 --> n39 - n12 --> n42 - n13 --> n55 - n14 --> n39 - n14 --> n42 - n14 --> n47 - n15 --> n39 - n15 --> n42 - n18 --> n39 - n18 --> n42 - n18 --> n47 - n18 --> n60 - n20 --> n39 - n20 --> n42 - n20 --> n47 - n20 --> n57 - n22 --> n1 - n23 --> n47 - n23 --> n58 - n23 --> n60 - n26 --> n79 - n27 --> n26 - n27 --> n47 - n27 --> n60 - n28 --> n1 - n28 --> n2 - n28 --> n34 - n28 --> n37 - n28 --> n39 - n28 --> n45 - n28 --> n47 - n28 --> n55 - n28 --> n57 - n28 --> n58 - n30 --> n39 - n31 --> n39 - n32 --> n28 - n32 --> n47 - n32 --> n57 - n33 --> n39 - n33 --> n53 - n33 --> n59 - n36 --> n42 - n36 --> n47 - n36 --> n57 - n36 --> n66 - n37 --> n25 - n37 --> n39 - n38 --> n33 - n38 --> n39 - n38 --> n51 - n38 --> n53 - n38 --> n59 - n40 --> n28 - n40 --> n47 - n40 --> n57 - n41 --> n39 - n41 --> n47 - n41 --> n57 - n42 --> n39 - n43 --> n28 - n43 --> n39 - n43 --> n42 - n43 --> n55 - n43 --> n64 - n44 --> n39 - n44 --> n51 - n44 --> n53 - n44 --> n57 - n46 --> n39 - n48 --> n47 - n48 --> n57 - n49 --> n39 - n49 --> n47 + n1 --> n26 + n1 --> n40 + n4 --> n19 + n4 --> n40 + n4 --> n43 + n4 --> n59 + n6 --> n43 + n6 --> n48 + n7 --> n2 + n7 --> n3 + n7 --> n11 + n7 --> n40 + n7 --> n54 + n7 --> n56 + n7 --> n73 + n7 --> n87 + n8 --> n5 + n8 --> n18 + n8 --> n29 + n8 --> n40 + n8 --> n52 + n8 --> n85 + n8 --> n86 + n9 --> n40 + n9 --> n48 + n9 --> n61 + n9 --> n69 + n10 --> n40 + n10 --> n48 + n10 --> n58 + n11 --> n38 + n11 --> n40 + n12 --> n3 + n12 --> n32 + n12 --> n40 + n13 --> n40 + n13 --> n43 + n14 --> n56 + n15 --> n40 + n15 --> n43 + n15 --> n48 + n16 --> n40 + n16 --> n43 + n19 --> n40 + n19 --> n43 + n19 --> n48 + n19 --> n61 + n21 --> n40 + n21 --> n43 + n21 --> n48 + n21 --> n58 + n23 --> n1 + n24 --> n48 + n24 --> n59 + n24 --> n61 + n27 --> n80 + n28 --> n27 + n28 --> n48 + n28 --> n61 + n29 --> n1 + n29 --> n2 + n29 --> n35 + n29 --> n38 + n29 --> n40 + n29 --> n46 + n29 --> n48 + n29 --> n56 + n29 --> n58 + n29 --> n59 + n31 --> n40 + n32 --> n40 + n33 --> n29 + n33 --> n48 + n33 --> n58 + n34 --> n40 + n34 --> n54 + n34 --> n60 + n37 --> n43 + n37 --> n48 + n37 --> n58 + n37 --> n67 + n38 --> n26 + n38 --> n40 + n39 --> n34 + n39 --> n40 + n39 --> n52 + n39 --> n54 + n39 --> n60 + n41 --> n29 + n41 --> n48 + n41 --> n58 + n42 --> n40 + n42 --> n48 + n42 --> n58 + n43 --> n40 + n44 --> n29 + n44 --> n40 + n44 --> n43 + n44 --> n56 + n44 --> n65 + n45 --> n40 + n45 --> n52 + n45 --> n54 + n45 --> n58 + n47 --> n40 + n49 --> n48 n49 --> n58 - n51 --> n39 - n51 --> n53 - n53 --> n39 - n54 --> n2 - n54 --> n3 - n54 --> n10 - n54 --> n55 - n54 --> n72 + n50 --> n40 + n50 --> n48 + n50 --> n59 + n52 --> n40 + n52 --> n54 + n54 --> n40 n55 --> n2 n55 --> n3 - n55 --> n39 - n55 --> n72 - n56 --> n28 - n57 --> n39 - n57 --> n47 - n58 --> n39 - n58 --> n42 - n58 --> n47 - n59 --> n39 - n60 --> n39 - n60 --> n47 - n60 --> n58 - n61 --> n39 - n61 --> n42 - n61 --> n47 - n61 --> n57 - n62 --> n39 - n62 --> n61 - n63 --> n39 - n63 --> n47 - n63 --> n57 - n64 --> n33 - n64 --> n39 - n64 --> n55 - n66 --> n39 - n66 --> n42 - n66 --> n47 - n66 --> n57 - n67 --> n39 - n68 --> n47 - n70 --> n39 - n70 --> n42 - n71 --> n39 - n72 --> n2 - n72 --> n3 - n73 --> n39 - n76 --> n1 - n80 --> n3 - n80 --> n39 - n81 --> n39 - n81 --> n42 - n82 --> n39 - n83 --> n28 - n83 --> n39 - n83 --> n51 - n83 --> n73 - n86 --> n1 - n86 --> n3 - n86 --> n22 - n86 --> n26 - n86 --> n39 - n87 --> n39 - n88 --> n39 - n88 --> n52 - n89 --> n39 + n55 --> n11 + n55 --> n56 + n55 --> n73 + n56 --> n2 + n56 --> n3 + n56 --> n40 + n56 --> n73 + n57 --> n29 + n58 --> n40 + n58 --> n48 + n59 --> n40 + n59 --> n43 + n59 --> n48 + n60 --> n40 + n61 --> n40 + n61 --> n48 + n61 --> n59 + n62 --> n40 + n62 --> n43 + n62 --> n48 + n62 --> n58 + n63 --> n40 + n63 --> n62 + n64 --> n40 + n64 --> n48 + n64 --> n58 + n65 --> n34 + n65 --> n40 + n65 --> n56 + n67 --> n40 + n67 --> n43 + n67 --> n48 + n67 --> n58 + n68 --> n40 + n69 --> n48 + n71 --> n40 + n71 --> n43 + n72 --> n40 + n73 --> n2 + n73 --> n3 + n74 --> n40 + n77 --> n1 + n81 --> n3 + n81 --> n40 + n82 --> n40 + n82 --> n43 + n83 --> n40 + n84 --> n29 + n84 --> n40 + n84 --> n52 + n84 --> n74 + n87 --> n1 + n87 --> n3 + n87 --> n23 + n87 --> n27 + n87 --> n40 + n88 --> n40 + n89 --> n40 + n89 --> n53 + n90 --> n40 classDef shipped fill:#d8f0d8,stroke:#2e7d32,color:#111 classDef lab fill:#fff3cd,stroke:#a67c00,color:#111 classDef open fill:#d6e6fa,stroke:#1565c0,color:#111 classDef gap fill:#fadadd,stroke:#c62828,stroke-dasharray:5 3,color:#111 - class n1,n6,n28,n30,n32,n33,n34,n38,n39,n40,n42,n45,n46,n47,n52,n53,n55,n57,n58,n59,n61,n64,n66,n80,n82 shipped - class n0,n2,n3,n4,n5,n7,n8,n9,n10,n11,n12,n13,n14,n15,n17,n18,n20,n22,n23,n25,n26,n27,n31,n36,n37,n41,n43,n44,n48,n49,n51,n54,n56,n60,n62,n63,n67,n68,n70,n71,n72,n73,n76,n79,n81,n83,n84,n85,n86,n87,n88,n89 lab + class n1,n7,n29,n31,n33,n34,n35,n39,n40,n41,n43,n46,n47,n48,n53,n54,n56,n58,n59,n60,n62,n65,n67,n81,n83 shipped + class n0,n2,n3,n4,n5,n6,n8,n9,n10,n11,n12,n13,n14,n15,n16,n18,n19,n21,n23,n24,n26,n27,n28,n32,n37,n38,n42,n44,n45,n49,n50,n52,n55,n57,n61,n63,n64,n68,n69,n71,n72,n73,n74,n77,n80,n82,n84,n85,n86,n87,n88,n89,n90 lab ``` diff --git a/.codegraph/reverse_dependencies.tsv b/.codegraph/reverse_dependencies.tsv index 0025ed11f..e8ebd098f 100644 --- a/.codegraph/reverse_dependencies.tsv +++ b/.codegraph/reverse_dependencies.tsv @@ -101,6 +101,7 @@ deepnsm-v2 lance-graph-quack dev false - - crates/lance-graph-quack/Cargo.toml:3 dr-math-binding-probe tract-harvest-probe normal false - - crates/tract-harvest-probe/Cargo.toml:24 CONFIRMED no elixir-template cognitive-stack normal false - - crates/cognitive-stack/Cargo.toml:38 CONFIRMED yes flate2 lance-graph-callcenter normal true - jsonl crates/lance-graph-callcenter/Cargo.toml:46 CONFIRMED no +foundry-parity-lab cg-beh-probe normal false - - crates/cg-beh-probe/Cargo.toml:29 CONFIRMED yes frostem deepnsm-v2 dev false - - crates/deepnsm-v2/Cargo.toml:50 CONFIRMED no futures crepe-plan-probe normal false - - crates/crepe-plan-probe/Cargo.toml:36 CONFIRMED no futures holo-h14d-probe normal false - - crates/holo-h14d-probe/Cargo.toml:22 CONFIRMED no @@ -152,6 +153,7 @@ lance-graph-catalog lance-graph normal false - unity-catalog crates/lance-graph/ lance-graph-cognitive deepnsm normal true - grammar-triangle crates/deepnsm/Cargo.toml:40 CONFIRMED yes lance-graph-cognitive lance-graph normal true - planner crates/lance-graph/Cargo.toml:98 CONFIRMED yes lance-graph-contract bgz-tensor normal true - calibrate crates/bgz-tensor/Cargo.toml:27 CONFIRMED yes +lance-graph-contract cg-beh-probe normal false - - crates/cg-beh-probe/Cargo.toml:22 CONFIRMED yes lance-graph-contract cognitive-shader-driver normal false - - crates/cognitive-shader-driver/Cargo.toml:230 CONFIRMED yes lance-graph-contract cognitive-stack normal false - - crates/cognitive-stack/Cargo.toml:48 CONFIRMED yes lance-graph-contract crepe-plan-probe normal false - - crates/crepe-plan-probe/Cargo.toml:27 CONFIRMED yes @@ -206,6 +208,7 @@ lance-graph-contract thinking-engine normal false - - crates/thinking-engine/Car lance-graph-contract thought-git-probe normal false - - crates/thought-git-probe/Cargo.toml:13 CONFIRMED yes lance-graph-contract tract-harvest-probe normal false - - crates/tract-harvest-probe/Cargo.toml:25 CONFIRMED yes lance-graph-contract weather-poc normal true - canonical-row crates/weather-poc/Cargo.toml:28 CONFIRMED yes +lance-graph-dt64 cg-beh-probe normal false - - crates/cg-beh-probe/Cargo.toml:21 CONFIRMED yes lance-graph-dt64 cognitive-polyfill-probe normal false - - crates/cognitive-polyfill-probe/Cargo.toml:14 CONFIRMED yes lance-graph-dt64 dr-isa-stream-lab normal false - - crates/dr-isa-stream-lab/Cargo.toml:18 CONFIRMED yes lance-graph-dt64 drisa-register-probe normal false - - crates/drisa-register-probe/Cargo.toml:19 CONFIRMED yes @@ -284,6 +287,7 @@ lance-graph-quack lance-graph-report normal false - - crates/lance-graph-report/ lance-graph-quack lance-graph-sap normal false - - crates/lance-graph-sap/Cargo.toml:13 CONFIRMED yes lance-graph-quack lance-graph-xlog normal false - - crates/lance-graph-xlog/Cargo.toml:10 CONFIRMED yes lance-graph-quack r2il-mask-abi-probe dev false - - crates/r2il-mask-abi-probe/Cargo.toml:21 CONFIRMED yes +lance-graph-r2il cg-beh-probe normal false - - crates/cg-beh-probe/Cargo.toml:24 CONFIRMED yes lance-graph-r2il holo-h14d-probe normal false - - crates/holo-h14d-probe/Cargo.toml:18 CONFIRMED yes lance-graph-r2il lance-graph normal false - - crates/lance-graph/Cargo.toml:58 CONFIRMED yes lance-graph-r2il lance-graph-nal normal false - - crates/lance-graph-nal/Cargo.toml:19 CONFIRMED yes @@ -369,6 +373,7 @@ ogar-dir-sim lance-graph-dir-sim normal false - - crates/lance-graph-dir-sim/Car ogar-dismech lance-graph-ogar normal false - - crates/lance-graph-ogar/Cargo.toml:148 CONFIRMED no ogar-doc-ir lance-graph-report-ogar normal false - - crates/lance-graph-report-ogar/Cargo.toml:32 CONFIRMED no ogar-from-ruff ogar-behavior-probe normal false - - crates/ogar-behavior-probe/Cargo.toml:20 CONFIRMED no +ogar-loco cg-beh-probe normal false - - crates/cg-beh-probe/Cargo.toml:27 CONFIRMED no ogar-loco lance-graph-nal normal false - - crates/lance-graph-nal/Cargo.toml:21 CONFIRMED no ogar-loco lance-graph-ogar normal false - - crates/lance-graph-ogar/Cargo.toml:140 CONFIRMED no ogar-loco lance-graph-onnx dev false - - crates/lance-graph-onnx/Cargo.toml:21 CONFIRMED no @@ -379,6 +384,7 @@ ogar-loco r2il-mask-abi-probe dev false - - crates/r2il-mask-abi-probe/Cargo.tom ogar-ontology cognitive-stack normal false - - crates/cognitive-stack/Cargo.toml:81 CONFIRMED no ogar-ontology lance-graph-ogar normal false - - crates/lance-graph-ogar/Cargo.toml:136 CONFIRMED no ogar-ontology symbiont normal false - - crates/symbiont/Cargo.toml:56 CONFIRMED no +ogar-r2il cg-beh-probe normal false - - crates/cg-beh-probe/Cargo.toml:26 CONFIRMED no ogar-r2il lance-graph-r2il normal false - - crates/lance-graph-r2il/Cargo.toml:26 CONFIRMED no ogar-r2il lance-graph-relalg normal false - - crates/lance-graph-relalg/Cargo.toml:20 CONFIRMED no ogar-r2il r2il-mask-abi-probe dev false - - crates/r2il-mask-abi-probe/Cargo.toml:28 CONFIRMED no diff --git a/.codegraph/symbols.tsv b/.codegraph/symbols.tsv index bea7437c0..c4f00c5f0 100644 --- a/.codegraph/symbols.tsv +++ b/.codegraph/symbols.tsv @@ -1292,6 +1292,97 @@ causal-edge crates/causal-edge/src/tables.rs 26 fn unpack_c pub - CONFIRMED causal-edge crates/causal-edge/src/tables.rs 45 struct NarsTables pub - CONFIRMED causal-edge crates/causal-edge/src/tables.rs 55 impl NarsTables - - CONFIRMED causal-edge crates/causal-edge/src/tables.rs 67 fn NarsTables::build pub - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/dispatch.rs 102 fn read pub - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/dispatch.rs 136 impl Dispatch - - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/dispatch.rs 138 fn Dispatch::arm_at pub - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/dispatch.rs 143 fn Dispatch::arm_of_word pub - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/dispatch.rs 149 fn Dispatch::words_without_arm pub - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/dispatch.rs 157 fn Dispatch::to_tsv pub - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/dispatch.rs 23 const OPCODES pub - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/dispatch.rs 30 fn word_of pub - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/dispatch.rs 39 fn opcode_name pub - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/dispatch.rs 50 struct Arm pub - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/dispatch.rs 59 struct Dispatch pub - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/dispatch.rs 65 enum DispatchError pub - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/dispatch.rs 75 fn text_fnv pub - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/facts.rs 109 enum Missing pub - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/facts.rs 13 struct Field pub - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/facts.rs 132 struct Read pub - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/facts.rs 140 fn positions pub(crate) - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/facts.rs 157 fn class_facts pub - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/facts.rs 190 fn extract pub - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/facts.rs 22 enum GuardConvention pub - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/facts.rs 307 struct Snapshot pub - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/facts.rs 314 impl Snapshot - - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/facts.rs 317 fn Snapshot::new pub - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/facts.rs 33 enum DepKind pub - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/facts.rs 332 fn Snapshot::add_class pub - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/facts.rs 353 fn Snapshot::method pub - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/facts.rs 359 fn Snapshot::class pub - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/facts.rs 365 fn Snapshot::to_tsv pub - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/facts.rs 42 struct Dep pub - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/facts.rs 51 struct WhenFacts pub - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/facts.rs 59 enum ArgFact pub - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/facts.rs 66 struct DoStep pub - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/facts.rs 80 struct MethodFacts pub - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/facts.rs 99 struct ClassFacts pub - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/fixture.rs 107 struct TestWorld pub - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/fixture.rs 145 fn methods pub - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/fixture.rs 184 fn world_with pub - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/fixture.rs 205 fn world pub - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/fixture.rs 212 const CAN_COOK pub - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/fixture.rs 216 const FOUNDRY_READ pub - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/fixture.rs 223 enum FoundryVariant pub - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/fixture.rs 246 fn foundry_methods pub - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/fixture.rs 267 fn foundry pub - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/fixture.rs 272 fn foundry_ids pub - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/fixture.rs 278 struct SwappedBasis pub - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/fixture.rs 280 impl SwappedBasis - - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/fixture.rs 281 fn SwappedBasis::of pub - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/fixture.rs 288 impl ClassView for SwappedBasis - - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/fixture.rs 30 const CLASS pub - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/fixture.rs 304 const FOUNDRY_CLASS pub - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/fixture.rs 31 const VIEW_CLASS pub - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/fixture.rs 32 const REV pub - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/fixture.rs 33 const FIELDS pub - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/fixture.rs 37 const GUARDED pub - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/fixture.rs 39 const INDEPENDENT pub - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/fixture.rs 41 const UNRELATED pub - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/fixture.rs 42 const METHODS pub - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/fixture.rs 45 const READ pub - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/fixture.rs 52 enum Variant pub - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/fixture.rs 67 struct TestView pub - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/fixture.rs 72 impl TestView - - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/fixture.rs 73 fn TestView::new pub - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/fixture.rs 88 impl ClassView for TestView - - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/lib.rs 32 mod dispatch pub - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/lib.rs 33 mod facts pub - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/lib.rs 34 mod fixture pub - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/lib.rs 35 mod query pub - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/lib.rs 39 enum Grade pub - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/lib.rs 45 impl Grade - - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/lib.rs 46 fn Grade::name pub - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/lib.rs 57 struct Evidence pub - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/lib.rs 62 impl Evidence - - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/lib.rs 63 fn Evidence::registration pub(crate) - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/lib.rs 69 fn Evidence::source pub(crate) - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/lib.rs 79 fn fnv64 pub(crate) - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/lib.rs 87 const FNV64_OFFSET pub(crate) - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/query.rs 113 enum DiffRefusal pub - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/query.rs 20 enum Component pub - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/query.rs 285 fn diff pub - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/query.rs 319 struct WordUse pub - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/query.rs 331 struct ImplImpact pub - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/query.rs 338 enum ImplRefusal pub - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/query.rs 391 fn impl_change pub - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/query.rs 40 enum Obligation pub - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/query.rs 437 fn word_impact pub - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/query.rs 61 enum Status pub - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/query.rs 72 enum OldRef pub - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/query.rs 80 struct MethodDelta pub - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/query.rs 89 impl MethodDelta - - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/query.rs 90 fn MethodDelta::has pub - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/query.rs 95 fn MethodDelta::old_ref pub - CONFIRMED cognitive-compiler crates/cognitive-compiler/src/lib.rs 103 struct SynthesisInput pub - CONFIRMED cognitive-compiler crates/cognitive-compiler/src/lib.rs 111 enum CompileError pub - CONFIRMED cognitive-compiler crates/cognitive-compiler/src/lib.rs 120 impl core::fmt::Display for CompileError - - CONFIRMED diff --git a/.codegraph/views/BindStore.md b/.codegraph/views/BindStore.md index 0af6749c8..05c9943c1 100644 --- a/.codegraph/views/BindStore.md +++ b/.codegraph/views/BindStore.md @@ -15,6 +15,8 @@ Generated; the code is the truth. Same-name symbols stay separate per file. ## Imports (not resolved to a definition) +- use lance_graph_dt64::BindStore — crates/cg-beh-probe/src/facts.rs:6 POSSIBLE +- use lance_graph_dt64::BindStore — crates/cg-beh-probe/src/fixture.rs:20 POSSIBLE - use lance_graph_dt64::BindStore — crates/dr-isa-stream-lab/src/bind.rs:7 POSSIBLE - use lance_graph_dt64::BindStore — crates/dt64-admission-probe/src/fixture.rs:42 POSSIBLE - use lance_graph_dt64::BindStore — crates/dt64-admission-probe/src/lib.rs:54 POSSIBLE @@ -30,8 +32,17 @@ Generated; the code is the truth. Same-name symbols stay separate per file. - use lance_graph_dt64::BindStore — crates/lance-graph-xlog/src/lens.rs:30 POSSIBLE - use lance_graph_dt64::BindStore — crates/soa64-u64-lab/src/socket.rs:14 POSSIBLE -## Textual occurrences (90 total) +## Textual occurrences (99 total) +- crates/cg-beh-probe/src/facts.rs:6 POSSIBLE +- crates/cg-beh-probe/src/facts.rs:134 POSSIBLE +- crates/cg-beh-probe/src/facts.rs:158 POSSIBLE +- crates/cg-beh-probe/src/facts.rs:191 POSSIBLE +- crates/cg-beh-probe/src/facts.rs:334 POSSIBLE +- crates/cg-beh-probe/src/fixture.rs:20 POSSIBLE +- crates/cg-beh-probe/src/fixture.rs:108 POSSIBLE +- crates/cg-beh-probe/src/fixture.rs:186 POSSIBLE +- crates/cg-beh-probe/src/lib.rs:13 POSSIBLE - crates/dr-isa-stream-lab/src/bind.rs:7 POSSIBLE - crates/dr-isa-stream-lab/src/bind.rs:53 POSSIBLE - crates/dr-isa-stream-lab/src/bind.rs:72 POSSIBLE diff --git a/.codegraph/views/ClassView.md b/.codegraph/views/ClassView.md index 7186ff7db..7f680a892 100644 --- a/.codegraph/views/ClassView.md +++ b/.codegraph/views/ClassView.md @@ -9,6 +9,8 @@ Generated; the code is the truth. Same-name symbols stay separate per file. ## Impls mentioning it +- impl ClassView for TestView — crates/cg-beh-probe/src/fixture.rs:88 POSSIBLE +- impl ClassView for SwappedBasis — crates/cg-beh-probe/src/fixture.rs:288 POSSIBLE - impl ClassView for View — crates/dr-isa-stream-lab/src/bind.rs:35 POSSIBLE - impl ClassView for FixtureView — crates/dt64-admission-probe/src/fixture.rs:201 POSSIBLE - impl ClassView for View — crates/foundry-parity-lab/src/bind.rs:94 POSSIBLE @@ -26,6 +28,8 @@ Generated; the code is the truth. Same-name symbols stay separate per file. ## Imports (not resolved to a definition) +- use lance_graph_contract::class_view::ClassView — crates/cg-beh-probe/src/facts.rs:3 POSSIBLE +- use lance_graph_contract::class_view::ClassView — crates/cg-beh-probe/src/fixture.rs:14 POSSIBLE - use lance_graph_contract::class_view::ClassView — crates/dr-isa-stream-lab/src/bind.rs:3 POSSIBLE - use lance_graph_contract::class_view::ClassView — crates/dt64-admission-probe/src/fixture.rs:37 POSSIBLE - use lance_graph_contract::class_view::ClassView — crates/foundry-parity-lab/src/arm_b.rs:19 POSSIBLE @@ -46,9 +50,16 @@ Generated; the code is the truth. Same-name symbols stay separate per file. - use lance_graph_contract::class_view::ClassView — crates/lance-graph-sap/src/schema.rs:4 POSSIBLE - use lance_graph_contract::class_view::ClassView — crates/soa64-u64-lab/src/socket.rs:10 POSSIBLE -## Textual occurrences (295 total) +## Textual occurrences (302 total) - crates/causal-edge/src/edge_v3.rs:34 POSSIBLE +- crates/cg-beh-probe/src/facts.rs:3 POSSIBLE +- crates/cg-beh-probe/src/facts.rs:157 POSSIBLE +- crates/cg-beh-probe/src/facts.rs:190 POSSIBLE +- crates/cg-beh-probe/src/facts.rs:332 POSSIBLE +- crates/cg-beh-probe/src/fixture.rs:14 POSSIBLE +- crates/cg-beh-probe/src/fixture.rs:88 POSSIBLE +- crates/cg-beh-probe/src/fixture.rs:288 POSSIBLE - crates/cognitive-shader-driver/src/mailbox_soa.rs:161 POSSIBLE - crates/cognitive-shader-driver/src/mailbox_soa.rs:167 POSSIBLE - crates/cognitive-shader-driver/src/mailbox_soa.rs:828 POSSIBLE @@ -341,8 +352,7 @@ Generated; the code is the truth. Same-name symbols stay separate per file. - crates/weather-poc/src/lib.rs:24 POSSIBLE - crates/weather-poc/src/manifest.rs:1 POSSIBLE - crates/weather-poc/src/manifest.rs:6 POSSIBLE -- crates/weather-poc/src/manifest.rs:11 POSSIBLE -- crates/weather-poc/src/manifest.rs:88 POSSIBLE +- truncated at 300 ## Architecture diff --git a/.codegraph/views/MethodBinding.md b/.codegraph/views/MethodBinding.md index 747df2a04..103d21327 100644 --- a/.codegraph/views/MethodBinding.md +++ b/.codegraph/views/MethodBinding.md @@ -13,6 +13,7 @@ Generated; the code is the truth. Same-name symbols stay separate per file. ## Imports (not resolved to a definition) +- use lance_graph_dt64::MethodBinding — crates/cg-beh-probe/src/fixture.rs:20 POSSIBLE - use lance_graph_dt64::MethodBinding — crates/dt64-admission-probe/src/fixture.rs:42 POSSIBLE - use lance_graph_dt64::MethodBinding — crates/dt64-admission-probe/src/lib.rs:54 POSSIBLE - use lance_graph_dt64::MethodBinding — crates/foundry-parity-lab/src/method.rs:26 POSSIBLE @@ -20,8 +21,14 @@ Generated; the code is the truth. Same-name symbols stay separate per file. - use lance_graph_dt64::MethodBinding cfg=test — crates/lance-graph-report/src/lane_source/tests.rs:17 POSSIBLE - use lance_graph_dt64::MethodBinding — crates/lance-graph-xlog/src/lib.rs:43 POSSIBLE -## Textual occurrences (49 total) +## Textual occurrences (55 total) +- crates/cg-beh-probe/src/fixture.rs:20 POSSIBLE +- crates/cg-beh-probe/src/fixture.rs:129 POSSIBLE +- crates/cg-beh-probe/src/fixture.rs:130 POSSIBLE +- crates/cg-beh-probe/src/fixture.rs:145 POSSIBLE +- crates/cg-beh-probe/src/fixture.rs:184 POSSIBLE +- crates/cg-beh-probe/src/fixture.rs:246 POSSIBLE - crates/dt64-admission-probe/src/fixture.rs:42 POSSIBLE - crates/dt64-admission-probe/src/fixture.rs:135 POSSIBLE - crates/dt64-admission-probe/src/fixture.rs:142 POSSIBLE diff --git a/.codegraph/views/WideFieldMask.md b/.codegraph/views/WideFieldMask.md index b651c3496..f9ff8b6d8 100644 --- a/.codegraph/views/WideFieldMask.md +++ b/.codegraph/views/WideFieldMask.md @@ -20,6 +20,8 @@ Generated; the code is the truth. Same-name symbols stay separate per file. ## Imports (not resolved to a definition) +- use lance_graph_contract::class_view::WideFieldMask — crates/cg-beh-probe/src/facts.rs:3 POSSIBLE +- use lance_graph_contract::class_view::WideFieldMask — crates/cg-beh-probe/src/fixture.rs:14 POSSIBLE - use lance_graph_contract::class_view::WideFieldMask — crates/dr-isa-stream-lab/src/bind.rs:3 POSSIBLE - use lance_graph_contract::class_view::WideFieldMask — crates/drisa-register-probe/src/lib.rs:35 POSSIBLE - use lance_graph_contract::class_view::WideFieldMask — crates/dt64-admission-probe/src/fixture.rs:37 POSSIBLE @@ -41,8 +43,14 @@ Generated; the code is the truth. Same-name symbols stay separate per file. - use lance_graph_contract::class_view::WideFieldMask — crates/soa64-u64-lab/src/socket.rs:10 POSSIBLE - use lance_graph_contract::class_view::WideFieldMask — crates/tract-harvest-probe/src/registry.rs:51 POSSIBLE -## Textual occurrences (361 total) +## Textual occurrences (367 total) +- crates/cg-beh-probe/src/facts.rs:3 POSSIBLE +- crates/cg-beh-probe/src/facts.rs:140 POSSIBLE +- crates/cg-beh-probe/src/fixture.rs:14 POSSIBLE +- crates/cg-beh-probe/src/fixture.rs:134 POSSIBLE +- crates/cg-beh-probe/src/fixture.rs:136 POSSIBLE +- crates/cg-beh-probe/src/fixture.rs:261 POSSIBLE - crates/dr-isa-stream-lab/src/bind.rs:3 POSSIBLE - crates/dr-isa-stream-lab/src/bind.rs:109 POSSIBLE - crates/drisa-register-probe/src/lib.rs:35 POSSIBLE @@ -337,12 +345,6 @@ Generated; the code is the truth. Same-name symbols stay separate per file. - crates/lance-graph-ogar/src/recipe_vocab.rs:44 POSSIBLE - crates/lance-graph-rbac/src/authorize.rs:46 POSSIBLE - crates/lance-graph-rbac/src/authorize.rs:177 POSSIBLE -- crates/lance-graph-rbac/src/authorize.rs:181 POSSIBLE -- crates/lance-graph-rbac/src/authorize.rs:186 POSSIBLE -- crates/lance-graph-rbac/src/authorize.rs:193 POSSIBLE -- crates/lance-graph-rbac/src/authorize.rs:197 POSSIBLE -- crates/lance-graph-rbac/src/authorize.rs:222 POSSIBLE -- crates/lance-graph-rbac/src/authorize.rs:227 POSSIBLE - truncated at 300 ## Architecture diff --git a/.github/workflows/cg-beh-probe.yml b/.github/workflows/cg-beh-probe.yml new file mode 100644 index 000000000..20842cd5c --- /dev/null +++ b/.github/workflows/cg-beh-probe.yml @@ -0,0 +1,80 @@ +name: CG Behaviour Probe +# Own [workspace] excluded from root tests; a lab gate, not production +# admission. Reads registered ON x WHEN x DO facts; executes no method. +on: + pull_request: + paths: + - "crates/cg-beh-probe/**" + - "crates/lance-graph-dt64/**" + - "crates/lance-graph-contract/**" + - "crates/lance-graph-r2il/**" + - "crates/foundry-parity-lab/**" + - ".github/workflows/cg-beh-probe.yml" + - "rust-toolchain.toml" + push: + branches: [main] + paths: + - "crates/cg-beh-probe/**" + - "crates/lance-graph-dt64/**" + - "crates/lance-graph-contract/**" + - "crates/lance-graph-r2il/**" + - "crates/foundry-parity-lab/**" + - ".github/workflows/cg-beh-probe.yml" + - "rust-toolchain.toml" + workflow_dispatch: +permissions: + contents: read +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} + cancel-in-progress: true +env: + CARGO_TERM_COLOR: always + CARGO_INCREMENTAL: "0" + CARGO_PROFILE_DEV_DEBUG: "0" + CARGO_PROFILE_TEST_DEBUG: "0" + RUST_BACKTRACE: "1" +jobs: + isolated-probe: + name: excluded-crate fmt, clippy and tests + runs-on: ubuntu-24.04 + timeout-minutes: 60 + defaults: + run: + working-directory: lance-graph + steps: + - uses: actions/checkout@v4 + with: + path: lance-graph + persist-credentials: false + - name: Checkout AdaWorldAPI/ndarray (sibling dependency) + uses: actions/checkout@v4 + with: + repository: AdaWorldAPI/ndarray + path: ndarray + persist-credentials: false + - name: Rust toolchain + run: rustup show + - name: Resolve target-cpu=native for this runner + id: cpu + run: | + flags=$(.github/scripts/resolve-native-rustflags.sh) + echo "RUSTFLAGS=$flags" >> "$GITHUB_ENV" + hash=$(printf %s "$flags" | sha256sum | cut -c1-16) + echo "flags=$hash" >> "$GITHUB_OUTPUT" + - uses: Swatinem/rust-cache@v2 + with: + key: cpu-${{ steps.cpu.outputs.flags }} + workspaces: lance-graph/crates/cg-beh-probe + - name: fmt + run: cargo fmt --manifest-path crates/cg-beh-probe/Cargo.toml --check + - name: clippy + run: cargo clippy --manifest-path crates/cg-beh-probe/Cargo.toml --all-targets -- -D warnings + - name: gates A, B and C + run: cargo test --release --manifest-path crates/cg-beh-probe/Cargo.toml + - name: the committed fact files match this revision's registrations + run: | + out=$(mktemp -d) + CG_BEH_SOURCE_REV=check cargo run --release --manifest-path crates/cg-beh-probe/Cargo.toml --bin facts -- "$out" + for f in lab.facts.tsv foundry.facts.tsv dispatch.tsv; do + diff <(tail -n +2 "$out/$f") <(tail -n +2 ".claude/probes/2026-11-11-cg-beh-2/$f") + done diff --git a/Cargo.toml b/Cargo.toml index 0cb6f49c7..3a15f463c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -238,6 +238,11 @@ exclude = [ # read-only. Own workspace root. Verify via # `cargo test --release --manifest-path crates/foundry-parity-lab/Cargo.toml`. "crates/foundry-parity-lab", + # D-CG-BEH-2 LAB (EXO-155): ON x WHEN x DO facts of registered DT64 methods + # and a change query over them. Read-only; registers nothing in a production + # store. Own workspace root. Verify via + # `cargo test --release --manifest-path crates/cg-beh-probe/Cargo.toml`. + "crates/cg-beh-probe", # ERA5 0.25-degree global grid baked onto the canonical 512-byte NodeRow -- # one cell = one node, one timestep = one Lance version. Standalone and # genuinely zero-dep (see the crate manifest for why helix is NOT an diff --git a/crates/cg-beh-probe/README.md b/crates/cg-beh-probe/README.md new file mode 100644 index 000000000..c5262289b --- /dev/null +++ b/crates/cg-beh-probe/README.md @@ -0,0 +1,83 @@ +# cg-beh-probe: ON × WHEN × DO evidence (D-CG-BEH-2, EXO-155) + +A lab crate. It reads what a `BindStore` has registered for a method, keeps ON, WHEN and DO apart, +and says which obligations a change makes stale. It registers nothing in a production store, adds +no polyfill word and executes no method. + +```sh +cargo test --release --manifest-path crates/cg-beh-probe/Cargo.toml +CG_BEH_SOURCE_REV=$(git rev-parse HEAD) cargo run --release \ + --manifest-path crates/cg-beh-probe/Cargo.toml --bin facts -- .claude/probes/2026-11-11-cg-beh-2 +python3 -I .claude/probes/2026-11-11-cg-beh-2/disable_runs.py # clean tree only +``` + +## Evidence grades + +| grade | obtained from | says | does not say | +|---|---|---|---| +| `SOURCE_STRUCTURE` | source text: the `match` arm of `FoldDialect::call` a line is in | where code is | what the code computes | +| `DT64_REGISTRATION` | `method_ref`, `admit`, `resolve`, `resolve_algebra` on a store | what is registered | that it runs, or runs correctly | +| `EXECUTED_PARITY` | an executed comparison against an oracle | that an answer matched | (this crate produces none) | + +A grade is attached to every hop of an evidence path and is never raised by combining hops. + +## `cg-beh.facts.v1` + +Tab separated, one fact per row, the row kind first. Classids are `0x%08X`. Written by +`Snapshot::to_tsv`; this file is the only description of the format. + +| kind | columns after the kind | +|---|---| +| `H` | `cg-beh.facts.v1`, source revision, label | +| `CLASS` | classid, schema revision, field count, basis digest | +| `BASIS` | classid, position, predicate | +| `METHOD` | classid, method id, signature revision, binding digest, issuer, population, truth, demand, source name | +| `ON` | classid, method id, position, predicate | +| `READ` | classid, method id, position, predicate | +| `WHEN` | classid, method id, logic, expression, witness | +| `WHEN_NONE` | classid, method id | +| `DEP` | classid, method id, ordinal, kind, number, DT64 reading, consumer position, consumer predicate | +| `DO` | classid, method id, ordinal, lens, word, word predicate, arity, target position, target predicate, arguments | +| `DO_NONE` | classid, method id | + +What each value is: + +- **Source revision.** Required. A snapshot without one is refused. +- **Basis digest.** This crate's FNV-1a 64 of the ordered predicates `resolve` returned. The store's + own `BasisDigest` is private; this value detects a difference between two snapshots and nothing else. +- **Binding digest.** `Stamp::binding()` of the reference the store issued. It covers the classid, + the basis, the method id, the signature revision, ON, reads, the ordered DO steps with each lens + revision and arity, and population, truth and demand. It does not cover the guard or the name. +- **Issuer.** Always `ADMITTED_BY_ISSUER`: the row exists only because the store that issued the + reference admitted it. A store has no printable identity, so none is written. +- **Predicate.** The `predicate_iri` at that position of the basis `resolve` accepted at the bound + revision. Labels are not written. +- **Witness.** The `Debug` form of `Guard::witness()`, the guard's normal form under its logic. Two + guards with equal witnesses fire on the same rows. +- **`DEP`.** One row per leaf of the guard. The DT64 reading is always `UNKNOWN`: `SetExpr::Sym` is an + opaque numbered set and a residual names a lane, and registration does not check either against + the basis. The consumer columns hold a field only when the consumer declared that guard numbers + are field positions and the position is in the method's registered reads; otherwise `UNKNOWN`. +- **`DO` arguments.** `F` or `C`, in order. +- **`WHEN_NONE`, `DO_NONE`.** Written explicitly. An absent row is never the way "none" is stated. + +## `cg-beh.dispatch.v1` + +`H`, format name, digest of the source text read. Then one `ARM` row per pattern name: name, +polyfill word or `NOT_A_WORD`, first line, last line. The digest is the witness: a query made +against other text is refused. + +## Queries + +- `query::diff(before, after)`: per method `Unchanged`, `Added`, `Removed`, or `Changed` with the + components that moved (`Basis`, `Signature`, `On`, `Reads`, `When`, `WhenSpelling`, `Do`, `Demand`), + the evidence, and the stale obligations. Facts that contradict the binding digest are refused. +- `query::impl_change(snapshot, dispatch, source, lens, line)`: the arm, its words, the registered + DO steps on them. No registered fact changes; the open obligation is executed parity. +- `query::word_impact(...)`: the same for one word. A word with no arm is refused. + +## Reading these files from another tool + +A reader needs no access to this crate. Join `DO` rows to `dispatch.tsv` on the word column. Keep the +grade of each side: the join of a `SOURCE_STRUCTURE` row and a `DT64_REGISTRATION` row is not a +statement about behaviour. From a54a9d9e3d679a968d71598caa5b7790b13fc5a3 Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 11 Nov 2026 11:22:38 +0000 Subject: [PATCH 3/4] fix(cg-beh-2): report a changed class schema revision; compare dispatch.tsv in full in CI Two review findings on #2005. query::diff ignored ClassFacts::schema_rev, so the same bindings bound at another schema revision were reported Unchanged with nothing stale, while resolve at the old revision answers SchemaRevisionMismatch. It is now its own component (SchemaRevision) with its own obligation (RevisionedResolve). It is not a basis change: the binding digest does not cover the class schema revision and does not move. The CI freshness step skipped the first line of every file. For dispatch.tsv that line is the digest of the source text read, the witness query::check_witness compares, so a changed arm body with unchanged arm spans passed. dispatch.tsv is now compared in full; only the facts files' revision header is skipped. 24 tests; disable runs 16 of 16. Co-Authored-By: Claude Fable 5.2 Claude-Session: https://claude.ai/code/session_01XAqKMMWgnUU9g7Ldyn6sbk --- .claude/probes/2026-11-11-cg-beh-2/REPORT.md | 3 +- .../2026-11-11-cg-beh-2/disable_runs.py | 3 ++ .github/workflows/cg-beh-probe.yml | 10 ++++- crates/cg-beh-probe/README.md | 2 +- crates/cg-beh-probe/src/fixture.rs | 8 +++- crates/cg-beh-probe/src/query.rs | 17 +++++++- .../cg-beh-probe/tests/integration/gate_b.rs | 43 +++++++++++++++++++ 7 files changed, 80 insertions(+), 6 deletions(-) diff --git a/.claude/probes/2026-11-11-cg-beh-2/REPORT.md b/.claude/probes/2026-11-11-cg-beh-2/REPORT.md index 552a13696..3ac587160 100644 --- a/.claude/probes/2026-11-11-cg-beh-2/REPORT.md +++ b/.claude/probes/2026-11-11-cg-beh-2/REPORT.md @@ -34,6 +34,7 @@ Each prediction was compared with what the stores answer. | DO registration (step order) | ordered steps | moves | `BindingMismatch` | reference stamp | | DO implementation (a dispatch arm) | none | does not move | admitted | executed parity of each word that has a user | | field basis, same count | ordered predicates | moves for every method of the class | `BindingMismatch` | witnessed `resolve` / lane binding; reference stamp | +| class schema revision, same basis | schema revision | does not move | admitted but for the issuer | `resolve` at the old revision (`SchemaRevisionMismatch`) | Evidence paths: the first four and the last are `DT64_REGISTRATION` only. The DO implementation row is `SOURCE_STRUCTURE` (line in arm, arm names opcode, opcode at table position) joined to @@ -45,7 +46,7 @@ words; one has a user in the lab snapshot. ## Gate C: falsifiers -23 tests. `disable_runs.py` removes 15 guards one at a time; each named test fails (15 of 15). +24 tests. `disable_runs.py` removes 16 guards one at a time; each named test fails (16 of 16). | falsifier | result | |---|---| diff --git a/.claude/probes/2026-11-11-cg-beh-2/disable_runs.py b/.claude/probes/2026-11-11-cg-beh-2/disable_runs.py index d962295c8..e6f544959 100644 --- a/.claude/probes/2026-11-11-cg-beh-2/disable_runs.py +++ b/.claude/probes/2026-11-11-cg-beh-2/disable_runs.py @@ -37,6 +37,9 @@ ("basis component", QUERY, "if basis_b != basis_a {", "if false {", "gate_b::a_changed_field_basis_reaches_every_method_of_the_class"), + ("schema revision component", QUERY, + "if rev_b != rev_a {", "if false {", + "gate_b::a_changed_schema_revision_is_reported_though_the_binding_does_not_move"), ("DO order", QUERY, " m.steps\n .iter()\n .map(|s| {", " let mut steps: Vec<_> = m.steps.iter().collect();\n steps.sort_by_key(|s| s.word);\n steps\n .into_iter()\n .map(|s| {", diff --git a/.github/workflows/cg-beh-probe.yml b/.github/workflows/cg-beh-probe.yml index 20842cd5c..a79babfeb 100644 --- a/.github/workflows/cg-beh-probe.yml +++ b/.github/workflows/cg-beh-probe.yml @@ -75,6 +75,12 @@ jobs: run: | out=$(mktemp -d) CG_BEH_SOURCE_REV=check cargo run --release --manifest-path crates/cg-beh-probe/Cargo.toml --bin facts -- "$out" - for f in lab.facts.tsv foundry.facts.tsv dispatch.tsv; do - diff <(tail -n +2 "$out/$f") <(tail -n +2 ".claude/probes/2026-11-11-cg-beh-2/$f") + committed=.claude/probes/2026-11-11-cg-beh-2 + # The facts header holds the source revision, which differs here by + # construction; every other row must match. + for f in lab.facts.tsv foundry.facts.tsv; do + diff <(tail -n +2 "$out/$f") <(tail -n +2 "$committed/$f") done + # The dispatch header holds the digest of the source text read. It is + # the witness the query checks, so the file is compared in full. + diff "$out/dispatch.tsv" "$committed/dispatch.tsv" diff --git a/crates/cg-beh-probe/README.md b/crates/cg-beh-probe/README.md index c5262289b..a70c68529 100644 --- a/crates/cg-beh-probe/README.md +++ b/crates/cg-beh-probe/README.md @@ -70,7 +70,7 @@ against other text is refused. ## Queries - `query::diff(before, after)`: per method `Unchanged`, `Added`, `Removed`, or `Changed` with the - components that moved (`Basis`, `Signature`, `On`, `Reads`, `When`, `WhenSpelling`, `Do`, `Demand`), + components that moved (`Basis`, `SchemaRevision`, `Signature`, `On`, `Reads`, `When`, `WhenSpelling`, `Do`, `Demand`), the evidence, and the stale obligations. Facts that contradict the binding digest are refused. - `query::impl_change(snapshot, dispatch, source, lens, line)`: the arm, its words, the registered DO steps on them. No registered fact changes; the open obligation is executed parity. diff --git a/crates/cg-beh-probe/src/fixture.rs b/crates/cg-beh-probe/src/fixture.rs index d9f8398ba..0cbd7f683 100644 --- a/crates/cg-beh-probe/src/fixture.rs +++ b/crates/cg-beh-probe/src/fixture.rs @@ -182,6 +182,12 @@ pub fn methods(v: Variant) -> Vec { /// A store holding `methods` for the lab class, over the plain or the /// swapped basis. pub fn world_with(methods: Vec, swapped: bool) -> TestWorld { + world_at(methods, swapped, REV) +} + +/// [`world_with`] with the lab class bound at `schema_rev`. The polyfill lens +/// stays declared at [`REV`]. +pub fn world_at(methods: Vec, swapped: bool, schema_rev: SchemaRev) -> TestWorld { let view = TestView::new(swapped); let mut store = BindStore::new(); store @@ -192,7 +198,7 @@ pub fn world_with(methods: Vec, swapped: bool) -> TestWorld { &view, CLASS, ClassSchema { - schema_rev: REV, + schema_rev, field_count: FIELDS.len(), extent: Extent::DR64_CUBE, }, diff --git a/crates/cg-beh-probe/src/query.rs b/crates/cg-beh-probe/src/query.rs index 2a402117f..00af75c0f 100644 --- a/crates/cg-beh-probe/src/query.rs +++ b/crates/cg-beh-probe/src/query.rs @@ -20,6 +20,8 @@ use crate::Evidence; pub enum Component { /// The ordered predicates of the class basis. Basis, + /// The schema revision the class is bound at. Not in the binding digest. + SchemaRevision, Signature, /// ON: the trigger field positions. On, @@ -41,6 +43,9 @@ pub enum Obligation { /// `resolve` and `bind_lanes` over the changed basis at the bound /// revision: `PredicateBasisChanged`. WitnessedResolve, + /// `resolve` and `bind_lanes` asked at the old schema revision: + /// `SchemaRevisionMismatch`. + RevisionedResolve, /// A reference made at the old signature revision: /// `SignatureRevisionMismatch`. SignatureRevision, @@ -162,6 +167,8 @@ fn one( .ok_or(DiffRefusal::ClassMissing { class }) }; let (basis_b, basis_a) = (basis(before)?, basis(after)?); + let schema_rev = |s: &Snapshot| s.class(class).map(|c| c.schema_rev); + let (rev_b, rev_a) = (schema_rev(before), schema_rev(after)); let mut cs = Vec::new(); let mut evidence = Vec::new(); let mut stale = Vec::new(); @@ -173,6 +180,13 @@ fn one( ))); stale.push(Obligation::WitnessedResolve); } + if rev_b != rev_a { + cs.push(Component::SchemaRevision); + evidence.push(Evidence::registration(format!( + "class {class:#010X} schema revision {rev_b:?} -> {rev_a:?} (resolve accepted each at its own revision)" + ))); + stale.push(Obligation::RevisionedResolve); + } if b.sig_rev != a.sig_rev { cs.push(Component::Signature); evidence.push(Evidence::registration(format!( @@ -230,7 +244,8 @@ fn one( } // The binding digest covers the basis, the signature revision, ON, reads, - // the ordered DO steps and the demand. It does not cover the guard. + // the ordered DO steps and the demand. It does not cover the guard or + // the class's schema revision. let covered = cs.iter().any(|c| { matches!( c, diff --git a/crates/cg-beh-probe/tests/integration/gate_b.rs b/crates/cg-beh-probe/tests/integration/gate_b.rs index 372b3ea56..df42268fe 100644 --- a/crates/cg-beh-probe/tests/integration/gate_b.rs +++ b/crates/cg-beh-probe/tests/integration/gate_b.rs @@ -238,3 +238,46 @@ fn no_can_cook_registration_is_reached_through_do() { assert!(w.stale.is_empty()); } } + +#[test] +fn a_changed_schema_revision_is_reported_though_the_binding_does_not_move() { + use cg_beh_probe::facts::{Read, Snapshot}; + use lance_graph_dt64::SchemaRev; + + let (old, before) = lab(Variant::Base); + let next = SchemaRev(2); + let new = fixture::world_at(fixture::methods(Variant::Base), false, next); + let mut after = Snapshot::new(crate::common::REV, "lab at revision 2").unwrap(); + let read = Read { + schema_rev: next, + ..fixture::READ + }; + after + .add_class(&new.store, &new.view, CLASS, &fixture::METHODS, &read) + .unwrap(); + + let ds = diff(&before, &after).unwrap(); + assert_eq!(ds.len(), 3); + for d in &ds { + assert_eq!(d.status, Status::Changed(vec![Component::SchemaRevision])); + assert!(!d.binding_changed); + assert_eq!(d.stale, [Obligation::RevisionedResolve]); + // The old reference carries nothing the revision is part of. + assert_eq!(d.old_ref(), Some(OldRef::IssuerOnly)); + assert_eq!( + observed(&old.store, &new.store, CLASS, d.method), + OldRef::IssuerOnly + ); + } + // What the obligation names: the new store refuses the old revision. + assert_eq!( + new.store + .resolve(&new.view, CLASS, fixture::REV) + .unwrap_err(), + Refusal::SchemaRevisionMismatch { + class: CLASS, + bound: next, + asked: fixture::REV + } + ); +} From 9e3bdf173bdef72034352661c1089a5f1d52ae27 Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 11 Nov 2026 11:23:46 +0000 Subject: [PATCH 4/4] chore(cg-beh-2): regenerate .codegraph after the schema-revision fix Co-Authored-By: Claude Fable 5.2 Claude-Session: https://claude.ai/code/session_01XAqKMMWgnUU9g7Ldyn6sbk --- .codegraph/crates.tsv | 2 +- .codegraph/crates/cg-beh-probe.index.md | 49 ++++++++++++----------- .codegraph/freshness.tsv | 2 +- .codegraph/symbols.tsv | 53 +++++++++++++------------ .codegraph/views/BindStore.md | 2 +- .codegraph/views/ClassView.md | 4 +- .codegraph/views/MethodBinding.md | 5 ++- .codegraph/views/WideFieldMask.md | 2 +- 8 files changed, 61 insertions(+), 58 deletions(-) diff --git a/.codegraph/crates.tsv b/.codegraph/crates.tsv index cce99fe94..2dee40719 100644 --- a/.codegraph/crates.tsv +++ b/.codegraph/crates.tsv @@ -4,7 +4,7 @@ bge-m3 crates/bge-m3 excluded aefb02c857c31568 bgz-tensor crates/bgz-tensor member 5d1e33d8228a9cf4 bgz17 crates/bgz17 excluded 8bec2499622cf1d7 causal-edge crates/causal-edge excluded c0fc81913c25420a -cg-beh-probe crates/cg-beh-probe excluded 9d4fce995c36c4e4 +cg-beh-probe crates/cg-beh-probe excluded 419a2e4c6456dda0 cognitive-compiler crates/cognitive-compiler excluded d1353bc629a93ad2 cognitive-polyfill-probe crates/cognitive-polyfill-probe excluded 142eccf61ff99e10 cognitive-shader-driver crates/cognitive-shader-driver member a88da842b115f96b diff --git a/.codegraph/crates/cg-beh-probe.index.md b/.codegraph/crates/cg-beh-probe.index.md index 76914545b..8c8e0e91a 100644 --- a/.codegraph/crates/cg-beh-probe.index.md +++ b/.codegraph/crates/cg-beh-probe.index.md @@ -3,7 +3,7 @@ crate: cg-beh-probe path: crates/cg-beh-probe workspace: excluded -digest: 9d4fce995c36c4e4 +digest: 419a2e4c6456dda0 evidence legend: ../index.md#evidence-legend Generated; the code is the truth. See ../index.md. @@ -69,16 +69,17 @@ Generated; the code is the truth. See ../index.md. - struct TestWorld [pub] — crates/cg-beh-probe/src/fixture.rs:107 CONFIRMED - fn methods [pub] — crates/cg-beh-probe/src/fixture.rs:145 CONFIRMED - fn world_with [pub] — crates/cg-beh-probe/src/fixture.rs:184 CONFIRMED -- fn world [pub] — crates/cg-beh-probe/src/fixture.rs:205 CONFIRMED -- const CAN_COOK [pub] — crates/cg-beh-probe/src/fixture.rs:212 CONFIRMED -- const FOUNDRY_READ [pub] — crates/cg-beh-probe/src/fixture.rs:216 CONFIRMED -- enum FoundryVariant [pub] — crates/cg-beh-probe/src/fixture.rs:223 CONFIRMED -- fn foundry_methods [pub] — crates/cg-beh-probe/src/fixture.rs:246 CONFIRMED -- fn foundry [pub] — crates/cg-beh-probe/src/fixture.rs:267 CONFIRMED -- fn foundry_ids [pub] — crates/cg-beh-probe/src/fixture.rs:272 CONFIRMED -- struct SwappedBasis [pub] — crates/cg-beh-probe/src/fixture.rs:278 CONFIRMED -- fn SwappedBasis::of [pub] — crates/cg-beh-probe/src/fixture.rs:281 CONFIRMED -- const FOUNDRY_CLASS [pub] — crates/cg-beh-probe/src/fixture.rs:304 CONFIRMED +- fn world_at [pub] — crates/cg-beh-probe/src/fixture.rs:190 CONFIRMED +- fn world [pub] — crates/cg-beh-probe/src/fixture.rs:211 CONFIRMED +- const CAN_COOK [pub] — crates/cg-beh-probe/src/fixture.rs:218 CONFIRMED +- const FOUNDRY_READ [pub] — crates/cg-beh-probe/src/fixture.rs:222 CONFIRMED +- enum FoundryVariant [pub] — crates/cg-beh-probe/src/fixture.rs:229 CONFIRMED +- fn foundry_methods [pub] — crates/cg-beh-probe/src/fixture.rs:252 CONFIRMED +- fn foundry [pub] — crates/cg-beh-probe/src/fixture.rs:273 CONFIRMED +- fn foundry_ids [pub] — crates/cg-beh-probe/src/fixture.rs:278 CONFIRMED +- struct SwappedBasis [pub] — crates/cg-beh-probe/src/fixture.rs:284 CONFIRMED +- fn SwappedBasis::of [pub] — crates/cg-beh-probe/src/fixture.rs:287 CONFIRMED +- const FOUNDRY_CLASS [pub] — crates/cg-beh-probe/src/fixture.rs:310 CONFIRMED - mod dispatch [pub] — crates/cg-beh-probe/src/lib.rs:32 CONFIRMED - mod facts [pub] — crates/cg-beh-probe/src/lib.rs:33 CONFIRMED - mod fixture [pub] — crates/cg-beh-probe/src/lib.rs:34 CONFIRMED @@ -91,19 +92,19 @@ Generated; the code is the truth. See ../index.md. - fn fnv64 [pub(crate)] — crates/cg-beh-probe/src/lib.rs:79 CONFIRMED - const FNV64_OFFSET [pub(crate)] — crates/cg-beh-probe/src/lib.rs:87 CONFIRMED - enum Component [pub] — crates/cg-beh-probe/src/query.rs:20 CONFIRMED -- enum Obligation [pub] — crates/cg-beh-probe/src/query.rs:40 CONFIRMED -- enum Status [pub] — crates/cg-beh-probe/src/query.rs:61 CONFIRMED -- enum OldRef [pub] — crates/cg-beh-probe/src/query.rs:72 CONFIRMED -- struct MethodDelta [pub] — crates/cg-beh-probe/src/query.rs:80 CONFIRMED -- fn MethodDelta::has [pub] — crates/cg-beh-probe/src/query.rs:90 CONFIRMED -- fn MethodDelta::old_ref [pub] — crates/cg-beh-probe/src/query.rs:95 CONFIRMED -- enum DiffRefusal [pub] — crates/cg-beh-probe/src/query.rs:113 CONFIRMED -- fn diff [pub] — crates/cg-beh-probe/src/query.rs:285 CONFIRMED -- struct WordUse [pub] — crates/cg-beh-probe/src/query.rs:319 CONFIRMED -- struct ImplImpact [pub] — crates/cg-beh-probe/src/query.rs:331 CONFIRMED -- enum ImplRefusal [pub] — crates/cg-beh-probe/src/query.rs:338 CONFIRMED -- fn impl_change [pub] — crates/cg-beh-probe/src/query.rs:391 CONFIRMED -- fn word_impact [pub] — crates/cg-beh-probe/src/query.rs:437 CONFIRMED +- enum Obligation [pub] — crates/cg-beh-probe/src/query.rs:42 CONFIRMED +- enum Status [pub] — crates/cg-beh-probe/src/query.rs:66 CONFIRMED +- enum OldRef [pub] — crates/cg-beh-probe/src/query.rs:77 CONFIRMED +- struct MethodDelta [pub] — crates/cg-beh-probe/src/query.rs:85 CONFIRMED +- fn MethodDelta::has [pub] — crates/cg-beh-probe/src/query.rs:95 CONFIRMED +- fn MethodDelta::old_ref [pub] — crates/cg-beh-probe/src/query.rs:100 CONFIRMED +- enum DiffRefusal [pub] — crates/cg-beh-probe/src/query.rs:118 CONFIRMED +- fn diff [pub] — crates/cg-beh-probe/src/query.rs:300 CONFIRMED +- struct WordUse [pub] — crates/cg-beh-probe/src/query.rs:334 CONFIRMED +- struct ImplImpact [pub] — crates/cg-beh-probe/src/query.rs:346 CONFIRMED +- enum ImplRefusal [pub] — crates/cg-beh-probe/src/query.rs:353 CONFIRMED +- fn impl_change [pub] — crates/cg-beh-probe/src/query.rs:406 CONFIRMED +- fn word_impact [pub] — crates/cg-beh-probe/src/query.rs:452 CONFIRMED ## Imports from in-scope crates diff --git a/.codegraph/freshness.tsv b/.codegraph/freshness.tsv index a1a0853ed..bf4c6eb32 100644 --- a/.codegraph/freshness.tsv +++ b/.codegraph/freshness.tsv @@ -4,7 +4,7 @@ bge-m3 aefb02c857c31568 Cargo.toml+src (5 files) bgz-tensor 5d1e33d8228a9cf4 Cargo.toml+src (40 files) bgz17 8bec2499622cf1d7 Cargo.toml+src (22 files) causal-edge c0fc81913c25420a Cargo.toml+src (13 files) -cg-beh-probe 9d4fce995c36c4e4 Cargo.toml+src (7 files) +cg-beh-probe 419a2e4c6456dda0 Cargo.toml+src (7 files) cognitive-compiler d1353bc629a93ad2 Cargo.toml+src (2 files) cognitive-polyfill-probe 142eccf61ff99e10 Cargo.toml+src (2 files) cognitive-shader-driver a88da842b115f96b Cargo.toml+src (30 files) diff --git a/.codegraph/symbols.tsv b/.codegraph/symbols.tsv index c4f00c5f0..b9b54b0a0 100644 --- a/.codegraph/symbols.tsv +++ b/.codegraph/symbols.tsv @@ -1329,20 +1329,21 @@ cg-beh-probe crates/cg-beh-probe/src/facts.rs 99 struct ClassFacts pub - CONFIRM cg-beh-probe crates/cg-beh-probe/src/fixture.rs 107 struct TestWorld pub - CONFIRMED cg-beh-probe crates/cg-beh-probe/src/fixture.rs 145 fn methods pub - CONFIRMED cg-beh-probe crates/cg-beh-probe/src/fixture.rs 184 fn world_with pub - CONFIRMED -cg-beh-probe crates/cg-beh-probe/src/fixture.rs 205 fn world pub - CONFIRMED -cg-beh-probe crates/cg-beh-probe/src/fixture.rs 212 const CAN_COOK pub - CONFIRMED -cg-beh-probe crates/cg-beh-probe/src/fixture.rs 216 const FOUNDRY_READ pub - CONFIRMED -cg-beh-probe crates/cg-beh-probe/src/fixture.rs 223 enum FoundryVariant pub - CONFIRMED -cg-beh-probe crates/cg-beh-probe/src/fixture.rs 246 fn foundry_methods pub - CONFIRMED -cg-beh-probe crates/cg-beh-probe/src/fixture.rs 267 fn foundry pub - CONFIRMED -cg-beh-probe crates/cg-beh-probe/src/fixture.rs 272 fn foundry_ids pub - CONFIRMED -cg-beh-probe crates/cg-beh-probe/src/fixture.rs 278 struct SwappedBasis pub - CONFIRMED -cg-beh-probe crates/cg-beh-probe/src/fixture.rs 280 impl SwappedBasis - - CONFIRMED -cg-beh-probe crates/cg-beh-probe/src/fixture.rs 281 fn SwappedBasis::of pub - CONFIRMED -cg-beh-probe crates/cg-beh-probe/src/fixture.rs 288 impl ClassView for SwappedBasis - - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/fixture.rs 190 fn world_at pub - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/fixture.rs 211 fn world pub - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/fixture.rs 218 const CAN_COOK pub - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/fixture.rs 222 const FOUNDRY_READ pub - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/fixture.rs 229 enum FoundryVariant pub - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/fixture.rs 252 fn foundry_methods pub - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/fixture.rs 273 fn foundry pub - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/fixture.rs 278 fn foundry_ids pub - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/fixture.rs 284 struct SwappedBasis pub - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/fixture.rs 286 impl SwappedBasis - - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/fixture.rs 287 fn SwappedBasis::of pub - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/fixture.rs 294 impl ClassView for SwappedBasis - - CONFIRMED cg-beh-probe crates/cg-beh-probe/src/fixture.rs 30 const CLASS pub - CONFIRMED -cg-beh-probe crates/cg-beh-probe/src/fixture.rs 304 const FOUNDRY_CLASS pub - CONFIRMED cg-beh-probe crates/cg-beh-probe/src/fixture.rs 31 const VIEW_CLASS pub - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/fixture.rs 310 const FOUNDRY_CLASS pub - CONFIRMED cg-beh-probe crates/cg-beh-probe/src/fixture.rs 32 const REV pub - CONFIRMED cg-beh-probe crates/cg-beh-probe/src/fixture.rs 33 const FIELDS pub - CONFIRMED cg-beh-probe crates/cg-beh-probe/src/fixture.rs 37 const GUARDED pub - CONFIRMED @@ -1368,21 +1369,21 @@ cg-beh-probe crates/cg-beh-probe/src/lib.rs 63 fn Evidence::registration pub(cra cg-beh-probe crates/cg-beh-probe/src/lib.rs 69 fn Evidence::source pub(crate) - CONFIRMED cg-beh-probe crates/cg-beh-probe/src/lib.rs 79 fn fnv64 pub(crate) - CONFIRMED cg-beh-probe crates/cg-beh-probe/src/lib.rs 87 const FNV64_OFFSET pub(crate) - CONFIRMED -cg-beh-probe crates/cg-beh-probe/src/query.rs 113 enum DiffRefusal pub - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/query.rs 100 fn MethodDelta::old_ref pub - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/query.rs 118 enum DiffRefusal pub - CONFIRMED cg-beh-probe crates/cg-beh-probe/src/query.rs 20 enum Component pub - CONFIRMED -cg-beh-probe crates/cg-beh-probe/src/query.rs 285 fn diff pub - CONFIRMED -cg-beh-probe crates/cg-beh-probe/src/query.rs 319 struct WordUse pub - CONFIRMED -cg-beh-probe crates/cg-beh-probe/src/query.rs 331 struct ImplImpact pub - CONFIRMED -cg-beh-probe crates/cg-beh-probe/src/query.rs 338 enum ImplRefusal pub - CONFIRMED -cg-beh-probe crates/cg-beh-probe/src/query.rs 391 fn impl_change pub - CONFIRMED -cg-beh-probe crates/cg-beh-probe/src/query.rs 40 enum Obligation pub - CONFIRMED -cg-beh-probe crates/cg-beh-probe/src/query.rs 437 fn word_impact pub - CONFIRMED -cg-beh-probe crates/cg-beh-probe/src/query.rs 61 enum Status pub - CONFIRMED -cg-beh-probe crates/cg-beh-probe/src/query.rs 72 enum OldRef pub - CONFIRMED -cg-beh-probe crates/cg-beh-probe/src/query.rs 80 struct MethodDelta pub - CONFIRMED -cg-beh-probe crates/cg-beh-probe/src/query.rs 89 impl MethodDelta - - CONFIRMED -cg-beh-probe crates/cg-beh-probe/src/query.rs 90 fn MethodDelta::has pub - CONFIRMED -cg-beh-probe crates/cg-beh-probe/src/query.rs 95 fn MethodDelta::old_ref pub - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/query.rs 300 fn diff pub - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/query.rs 334 struct WordUse pub - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/query.rs 346 struct ImplImpact pub - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/query.rs 353 enum ImplRefusal pub - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/query.rs 406 fn impl_change pub - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/query.rs 42 enum Obligation pub - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/query.rs 452 fn word_impact pub - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/query.rs 66 enum Status pub - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/query.rs 77 enum OldRef pub - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/query.rs 85 struct MethodDelta pub - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/query.rs 94 impl MethodDelta - - CONFIRMED +cg-beh-probe crates/cg-beh-probe/src/query.rs 95 fn MethodDelta::has pub - CONFIRMED cognitive-compiler crates/cognitive-compiler/src/lib.rs 103 struct SynthesisInput pub - CONFIRMED cognitive-compiler crates/cognitive-compiler/src/lib.rs 111 enum CompileError pub - CONFIRMED cognitive-compiler crates/cognitive-compiler/src/lib.rs 120 impl core::fmt::Display for CompileError - - CONFIRMED diff --git a/.codegraph/views/BindStore.md b/.codegraph/views/BindStore.md index 05c9943c1..7eb0ca0b1 100644 --- a/.codegraph/views/BindStore.md +++ b/.codegraph/views/BindStore.md @@ -41,7 +41,7 @@ Generated; the code is the truth. Same-name symbols stay separate per file. - crates/cg-beh-probe/src/facts.rs:334 POSSIBLE - crates/cg-beh-probe/src/fixture.rs:20 POSSIBLE - crates/cg-beh-probe/src/fixture.rs:108 POSSIBLE -- crates/cg-beh-probe/src/fixture.rs:186 POSSIBLE +- crates/cg-beh-probe/src/fixture.rs:192 POSSIBLE - crates/cg-beh-probe/src/lib.rs:13 POSSIBLE - crates/dr-isa-stream-lab/src/bind.rs:7 POSSIBLE - crates/dr-isa-stream-lab/src/bind.rs:53 POSSIBLE diff --git a/.codegraph/views/ClassView.md b/.codegraph/views/ClassView.md index 7f680a892..e20155601 100644 --- a/.codegraph/views/ClassView.md +++ b/.codegraph/views/ClassView.md @@ -10,7 +10,7 @@ Generated; the code is the truth. Same-name symbols stay separate per file. ## Impls mentioning it - impl ClassView for TestView — crates/cg-beh-probe/src/fixture.rs:88 POSSIBLE -- impl ClassView for SwappedBasis — crates/cg-beh-probe/src/fixture.rs:288 POSSIBLE +- impl ClassView for SwappedBasis — crates/cg-beh-probe/src/fixture.rs:294 POSSIBLE - impl ClassView for View — crates/dr-isa-stream-lab/src/bind.rs:35 POSSIBLE - impl ClassView for FixtureView — crates/dt64-admission-probe/src/fixture.rs:201 POSSIBLE - impl ClassView for View — crates/foundry-parity-lab/src/bind.rs:94 POSSIBLE @@ -59,7 +59,7 @@ Generated; the code is the truth. Same-name symbols stay separate per file. - crates/cg-beh-probe/src/facts.rs:332 POSSIBLE - crates/cg-beh-probe/src/fixture.rs:14 POSSIBLE - crates/cg-beh-probe/src/fixture.rs:88 POSSIBLE -- crates/cg-beh-probe/src/fixture.rs:288 POSSIBLE +- crates/cg-beh-probe/src/fixture.rs:294 POSSIBLE - crates/cognitive-shader-driver/src/mailbox_soa.rs:161 POSSIBLE - crates/cognitive-shader-driver/src/mailbox_soa.rs:167 POSSIBLE - crates/cognitive-shader-driver/src/mailbox_soa.rs:828 POSSIBLE diff --git a/.codegraph/views/MethodBinding.md b/.codegraph/views/MethodBinding.md index 103d21327..a1daf5ab1 100644 --- a/.codegraph/views/MethodBinding.md +++ b/.codegraph/views/MethodBinding.md @@ -21,14 +21,15 @@ Generated; the code is the truth. Same-name symbols stay separate per file. - use lance_graph_dt64::MethodBinding cfg=test — crates/lance-graph-report/src/lane_source/tests.rs:17 POSSIBLE - use lance_graph_dt64::MethodBinding — crates/lance-graph-xlog/src/lib.rs:43 POSSIBLE -## Textual occurrences (55 total) +## Textual occurrences (56 total) - crates/cg-beh-probe/src/fixture.rs:20 POSSIBLE - crates/cg-beh-probe/src/fixture.rs:129 POSSIBLE - crates/cg-beh-probe/src/fixture.rs:130 POSSIBLE - crates/cg-beh-probe/src/fixture.rs:145 POSSIBLE - crates/cg-beh-probe/src/fixture.rs:184 POSSIBLE -- crates/cg-beh-probe/src/fixture.rs:246 POSSIBLE +- crates/cg-beh-probe/src/fixture.rs:190 POSSIBLE +- crates/cg-beh-probe/src/fixture.rs:252 POSSIBLE - crates/dt64-admission-probe/src/fixture.rs:42 POSSIBLE - crates/dt64-admission-probe/src/fixture.rs:135 POSSIBLE - crates/dt64-admission-probe/src/fixture.rs:142 POSSIBLE diff --git a/.codegraph/views/WideFieldMask.md b/.codegraph/views/WideFieldMask.md index f9ff8b6d8..8ae7d8055 100644 --- a/.codegraph/views/WideFieldMask.md +++ b/.codegraph/views/WideFieldMask.md @@ -50,7 +50,7 @@ Generated; the code is the truth. Same-name symbols stay separate per file. - crates/cg-beh-probe/src/fixture.rs:14 POSSIBLE - crates/cg-beh-probe/src/fixture.rs:134 POSSIBLE - crates/cg-beh-probe/src/fixture.rs:136 POSSIBLE -- crates/cg-beh-probe/src/fixture.rs:261 POSSIBLE +- crates/cg-beh-probe/src/fixture.rs:267 POSSIBLE - crates/dr-isa-stream-lab/src/bind.rs:3 POSSIBLE - crates/dr-isa-stream-lab/src/bind.rs:109 POSSIBLE - crates/drisa-register-probe/src/lib.rs:35 POSSIBLE