runtime: ground the node asked about, and refuse circular support #147

Merged
will.anderson merged 1 commits from fix/ground-echo-and-self into dev 2026-08-16 16:54:19 +00:00
Owner

engram_ground_json resolved each seed to a region, wrote the grounded-by edge between the two regions’ hubs, and echoed those hubs back in the claim/evidence fields as if they were the caller’s input.

const char* cid = C->hub_id ? C->hub_id : EL_CSTR(claim);
const char* eid = E->hub_id ? E->hub_id : EL_CSTR(evidence);
cog_ground_edge(g_engram_store, cid, eid, grounding, fw);

Three consequences, all measured against a clone of the live store:

  1. The edge landed on a node the caller never named — the hubs, not the seeds.
  2. Circular support scored as evidence. When both seeds resolve into one region the score is near 1.0 for structural reasons. Four probe nodes written together all landed in a single region, and every grounding among them returned 0.93–0.99. Two independent agents hit this and reported 0.885 / 0.909 self-groundings as confident.
  3. The echo concealed both — the response was indistinguishable from a successful grounding of the ids passed in.

The fix

The region is how a claim is evaluated; it is not what the claim is about. The edge now attaches to the requested ids, and the resolved hubs are reported separately as claim_region / evidence_region.

Degeneracy is broader than hub == hub. Three circular shapes, all previously invisible:

shape meaning
same-region both seeds resolve to one region
claim-region-is-evidence the evidence is the hub of the claim’s own neighbourhood — measured at 0.98883
evidence-region-is-claim the mirror case

Each sets grounding to 0 and writes no edge. Circular support is not support, and a grounding degenerate by construction must not enter the graph as evidence.

Verified

claim → evidence degenerate grounding written
6edf8c79 → 6edf8c79 same-region 0 false
6edf8c79 → d0406dfd same-region 0 false
ebc1413e → 64cc96ef false 0.774563 true
64cc96ef → ebc1413e false 0.802896 true

Legitimate grounding across distinct regions is unchanged and still writes; only circular support is refused.

Same class as #142 and #146 — a value that looked like an answer with nothing behind it — except this one was also writing that non-answer into the canonical store.

`engram_ground_json` resolved each seed to a **region**, wrote the `grounded-by` edge between the two regions’ **hubs**, and echoed those hubs back in the `claim`/`evidence` fields as if they were the caller’s input. ```c const char* cid = C->hub_id ? C->hub_id : EL_CSTR(claim); const char* eid = E->hub_id ? E->hub_id : EL_CSTR(evidence); cog_ground_edge(g_engram_store, cid, eid, grounding, fw); ``` Three consequences, all measured against a clone of the live store: 1. **The edge landed on a node the caller never named** — the hubs, not the seeds. 2. **Circular support scored as evidence.** When both seeds resolve into one region the score is near 1.0 for structural reasons. Four probe nodes written together all landed in a single region, and every grounding among them returned **0.93–0.99**. Two independent agents hit this and reported 0.885 / 0.909 self-groundings as confident. 3. **The echo concealed both** — the response was indistinguishable from a successful grounding of the ids passed in. ### The fix The region is *how* a claim is evaluated; it is not *what* the claim is about. The edge now attaches to the **requested ids**, and the resolved hubs are reported separately as `claim_region` / `evidence_region`. Degeneracy is broader than `hub == hub`. Three circular shapes, all previously invisible: | shape | meaning | |---|---| | `same-region` | both seeds resolve to one region | | `claim-region-is-evidence` | the evidence **is** the hub of the claim’s own neighbourhood — measured at 0.98883 | | `evidence-region-is-claim` | the mirror case | Each sets `grounding` to 0 and writes no edge. Circular support is not support, and a grounding degenerate by construction must not enter the graph as evidence. ### Verified | claim → evidence | degenerate | grounding | written | |---|---|---|---| | `6edf8c79 → 6edf8c79` | same-region | 0 | false | | `6edf8c79 → d0406dfd` | same-region | 0 | false | | `ebc1413e → 64cc96ef` | false | 0.774563 | **true** | | `64cc96ef → ebc1413e` | false | 0.802896 | **true** | Legitimate grounding across distinct regions is unchanged and still writes; only circular support is refused. Same class as #142 and #146 — a value that looked like an answer with nothing behind it — except this one was also **writing that non-answer into the canonical store**.
will.anderson added 1 commit 2026-08-16 16:53:59 +00:00
runtime: ground the node asked about, and refuse circular support
El SDK CI - dev / build-and-test (pull_request) Failing after 15m5s
317466e8f7
engram_ground_json resolved each seed to a REGION, wrote the grounded-by
edge between the two regions' HUBS, and then echoed those hubs back in the
"claim"/"evidence" fields as if they were the caller's input:

    const char* cid = C->hub_id ? C->hub_id : EL_CSTR(claim);
    const char* eid = E->hub_id ? E->hub_id : EL_CSTR(evidence);
    cog_ground_edge(g_engram_store, cid, eid, grounding, fw);

Three consequences, all measured against a clone of the live store:

1. The edge landed on a node the caller never named. Grounding 3b9ced5d
   against 6edf8c79 wrote an edge on the hubs of their regions instead.
2. When both seeds resolve into the same region the support is circular
   and scores near 1.0 for structural reasons, not evidential ones. Four
   probe nodes written together landed in one region, and every grounding
   among them returned 0.93-0.99 as if it were evidence. Two independent
   agents hit this and reported 0.885 / 0.909 self-groundings as confident.
3. The echo concealed both: the response was indistinguishable from a
   successful grounding of the ids that were passed in.

The region is HOW a claim is evaluated; it is not WHAT the claim is about.
So the edge now attaches to the requested ids, and the resolved hubs are
reported separately as claim_region / evidence_region.

Degeneracy is broader than hub == hub. Three circular shapes, all
previously invisible:
    same-region                both seeds resolve to one region
    claim-region-is-evidence   the evidence IS the hub of the claim's own
                               neighbourhood — measured at 0.98883
    evidence-region-is-claim   the mirror case
Each sets grounding to 0 and writes no edge. Circular support is not
support, and a grounding that is degenerate by construction must not
enter the graph as though it were evidence.

Verified:
  6edf8c79 -> 6edf8c79   degenerate=same-region   g=0        written=false
  6edf8c79 -> d0406dfd   degenerate=same-region   g=0        written=false
  ebc1413e -> 64cc96ef   degenerate=false         g=0.774563 written=true
  64cc96ef -> ebc1413e   degenerate=false         g=0.802896 written=true
Legitimate grounding across distinct regions is unchanged and still
writes; only circular support is refused.

This is the same class as #142 and #146 — a value that looked like an
answer with nothing behind it — except here it was also writing that
non-answer into the canonical store.
will.anderson merged commit 1f70b9fa18 into dev 2026-08-16 16:54:19 +00:00
Sign in to join this conversation.