[DESIGN] Edges were designed to carry typed meaning (claim 10) — 15 of 14,214 do; Contradicts and Causes have never been written once #136

Open
opened 2026-08-07 18:25:41 +00:00 by tim.lingo · 0 comments
Member

Will's design requires every edge to carry a typed relationship. Of 14,214 edges in a live production graph, fifteen do. Measured 2026-08-07 against a real instance (~100k nodes, 4 months of accumulation).

What the design says

Engram provisional 64/064,260, claim 1 — every edge record must comprise "a source node identifier, a target node identifier, a relation type, and a weight in the range [0.0, 1.0]".

Claim 10 enumerates the vocabulary with defined semantics:

Relation Meaning (verbatim)
Supersedes the source node replaces or obsoletes the target node
Causes the source node is a causal precursor to the target node
Contains the source node hierarchically contains the target node
References the source node cites the target node as supporting context
Contradicts the source node is in logical tension with the target node
Exemplifies the source node is a concrete instance of the target node
Activates co-activation of the source node tends to activate the target node
TemporallyPrecedes the source node temporally precedes the target node

05-detailed-description.md:35 defines the field as "an enumerated RelationType… encoding the semantic relationship between the connected nodes."

And claim 1 specifies BFS traversal "following edges of a specified relation type" — the type was designed as a traversal filter, not a label.

What is actually in the graph

total edges: 14,214

DESIGNED TYPES          IN USE (top 8)
  Supersedes         1    tagged            4915
  Causes             0    triggers-safety   3767
  Contains          11    related           1782
  References         2    safety-cluster    1264
  Contradicts        0    scoped_to          848
  Exemplifies        0    identity           475
  Activates          1    remembers          457
  TemporallyPrecedes 0    knows              199

Fifteen edges out of 14,214 use the designed vocabulary. Everything real is a later ad-hoc set, mostly bookkeeping. The graph records that things are connected and almost never how.

Why this matters more than edge count

  1. Relation-filtered traversal is unusable. Claim 1's "follow edges of a specified relation type" has nothing to filter on. The capability is implemented and inert.
  2. Contradicts is the one that will bite users. The strongest documented failure mode for personal memory systems at months of accumulation is re-serving facts the user has already corrected — Memora/FAMA, arXiv 2604.20006 (2026-04) evaluated 4 LLMs and 6 memory agents and found all of them do it. Will designed the exact edge type for this case. It has never been written once.
  3. Causes is what answers "why did that happen", and TemporallyPrecedes is what supports reasoning about order. Both unused.
  4. Adding more untyped edges makes this worse, not better — it multiplies the weaker thing. Any edge-creation work should be typed from the start.

Proposed scope (product owner approved, 2026-08-07)

Forward-only for meaning, retroactive only where certain.

  • Forward: every new edge carries a claim-10 type. The judgment types — Contradicts, Causes, Exemplifies — are assigned by the writer at write time, never inferred after the fact. Activates is never authored; it is learned from co-activation, which makes it the same mechanism as the Hebbian edge-strengthening in the drafts corpus, so those should land together.
  • Retroactive, mechanical only, with honest expected yield:
    • References — real yield, genuinely certain (a memory either cites a node id or it does not). The BUG-11 offline linker already computes exactly this; the work is moving proven logic into the write path.
    • Contains — likely a reclassification of the existing 848 scoped_to edges. Verify before running; do not assume scoped_to means containment.
    • Supersedesnear-zero yield, stated so it isn't oversold: 3 exist, and metadata.supersededBy is present on 457 Memory nodes but an empty string on 455 of them. Expect ~2.
    • TemporallyPrecedesmust be scoped to within-conversation only. Applied globally it connects every node to every later node and buries the graph.
  • Never retroactive: Contradicts, Causes, Exemplifies. Inferring logical tension after the fact is the confident-wrong-answer failure mode. If the meaning was not captured at write time it is gone, and we say so.

Filed by Neuron (Tim's instance). Related: #89 (nodes land with zero edges), #117 (writes never reach the store).

**Will's design requires every edge to carry a typed relationship. Of 14,214 edges in a live production graph, fifteen do.** Measured 2026-08-07 against a real instance (~100k nodes, 4 months of accumulation). ## What the design says Engram provisional 64/064,260, **claim 1** — every edge record must comprise *"a source node identifier, a target node identifier, **a relation type**, and a weight in the range [0.0, 1.0]"*. **Claim 10** enumerates the vocabulary with defined semantics: | Relation | Meaning (verbatim) | |---|---| | `Supersedes` | the source node replaces or obsoletes the target node | | `Causes` | the source node is a causal precursor to the target node | | `Contains` | the source node hierarchically contains the target node | | `References` | the source node cites the target node as supporting context | | `Contradicts` | the source node is in logical tension with the target node | | `Exemplifies` | the source node is a concrete instance of the target node | | `Activates` | co-activation of the source node tends to activate the target node | | `TemporallyPrecedes` | the source node temporally precedes the target node | `05-detailed-description.md:35` defines the field as *"an enumerated RelationType… **encoding the semantic relationship between the connected nodes**."* And claim 1 specifies BFS traversal *"following edges of **a specified relation type**"* — the type was designed as a **traversal filter**, not a label. ## What is actually in the graph ``` total edges: 14,214 DESIGNED TYPES IN USE (top 8) Supersedes 1 tagged 4915 Causes 0 triggers-safety 3767 Contains 11 related 1782 References 2 safety-cluster 1264 Contradicts 0 scoped_to 848 Exemplifies 0 identity 475 Activates 1 remembers 457 TemporallyPrecedes 0 knows 199 ``` Fifteen edges out of 14,214 use the designed vocabulary. Everything real is a later ad-hoc set, mostly bookkeeping. **The graph records that things are connected and almost never how.** ## Why this matters more than edge count 1. **Relation-filtered traversal is unusable.** Claim 1's "follow edges of a specified relation type" has nothing to filter on. The capability is implemented and inert. 2. **`Contradicts` is the one that will bite users.** The strongest documented failure mode for personal memory systems at months of accumulation is re-serving facts the user has already corrected — [Memora/FAMA, arXiv 2604.20006](https://arxiv.org/abs/2604.20006) (2026-04) evaluated 4 LLMs and 6 memory agents and found **all of them** do it. Will designed the exact edge type for this case. It has never been written once. 3. **`Causes` is what answers "why did that happen"**, and `TemporallyPrecedes` is what supports reasoning about order. Both unused. 4. **Adding more untyped edges makes this worse, not better** — it multiplies the weaker thing. Any edge-creation work should be typed from the start. ## Proposed scope (product owner approved, 2026-08-07) **Forward-only for meaning, retroactive only where certain.** - **Forward:** every new edge carries a claim-10 type. The judgment types — `Contradicts`, `Causes`, `Exemplifies` — are assigned by the writer at write time, **never inferred after the fact**. `Activates` is never authored; it is learned from co-activation, which makes it the same mechanism as the Hebbian edge-strengthening in the drafts corpus, so those should land together. - **Retroactive, mechanical only, with honest expected yield:** - `References` — real yield, genuinely certain (a memory either cites a node id or it does not). The BUG-11 offline linker already computes exactly this; the work is moving proven logic into the write path. - `Contains` — likely a *reclassification* of the existing 848 `scoped_to` edges. **Verify before running; do not assume `scoped_to` means containment.** - `Supersedes` — **near-zero yield, stated so it isn't oversold**: 3 exist, and `metadata.supersededBy` is present on 457 Memory nodes but an empty string on 455 of them. Expect ~2. - `TemporallyPrecedes` — **must be scoped to within-conversation only.** Applied globally it connects every node to every later node and buries the graph. - **Never retroactive:** `Contradicts`, `Causes`, `Exemplifies`. Inferring logical tension after the fact is the confident-wrong-answer failure mode. If the meaning was not captured at write time it is gone, and we say so. Filed by Neuron (Tim's instance). Related: #89 (nodes land with zero edges), #117 (writes never reach the store).
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: neuron-technologies/neuron#136