7a1501d097
El SDK CI - dev / build-and-test (pull_request) Failing after 3m59s
A relation that keeps holding up strengthens; one that stops corresponding
decays. That is not analogous to grounding, it IS grounding — so it belongs on
the edge, not in a subsystem beside it. The graph was already the grounding
structure; this stops modelling it as something else.
Deleted, not refactored:
- cog_ground_edge and the `grounded-by` relation type. A grounded-by edge
models grounding as a relation BETWEEN nodes when it is a property OF a
relation. #147 fixed which endpoints that edge landed on and left the wrong
idea intact. Measured on the live store: the old path scored two nodes with
ZERO edges between them at 0.925237 and wrote an edge for it.
- ground() writing. It was a read that wrote — the eg_vindex_sync defect.
Three identical calls produced three writes to the same edge id.
- keystone_write_blocked. Its measured cost was 0.00% brier reduction over
n_trials 0 on the keystone: the loop never ran, so the self was never
calibrated and never falsifiable. Nothing replaces it — non-circularity of
the reference frame is temporal, not a permission.
- a graph predicate for "evidence downstream of itself", built and then
withdrawn. Reachability from the self region covers 89.2% of the live graph
(10,580 of 11,861 nodes), so any topological predicate marks nearly all
evidence tainted and degenerates into the total block censorship began as.
The vector, carried in a GRD1 block on the edge's own metadata:
factual, relational, associative (the existing hebb), polarity (SIGNED — near
zero is "no support", negative is "actively contradicts"; `inhibitory` is that
distinction crushed to one bit), provenance class, and a timestamp. Confidence,
recency, staleness and volatility are DERIVED at read and never serialized.
Decay is one model, not two: cog_decay_factor is the single implementation and
engram_temporal_decay now delegates to it — proven bit-identical over 24
(age, reinforcement) points.
Values reference: thirteen regions, aggregate MIN, binding value named. Measured
— the 13 have pairwise centroid cosine min 0.1525 / mean 0.5199 / max 0.9278, so
they demonstrably are not one region, and a mean would let agreement with twelve
mask a violation of the thirteenth.
Supersession versions the whole vector jointly, gated by consequence and
salience with no epsilon anywhere: floor crossings and sign changes only.
Polarity flips and provenance-class changes are inherently significant and
bypass the salience gate.
Also fixed: the frame contract. Descriptors are built over L2-normalized member
embeddings; think() and the grounding path were fitting RAW vectors against them.
Measured on the self region, same data, same 106 members:
magnitude 0.00283443 -> 0.536134, spread 18.7565 -> 0.930163.
Every fit score sat three decimal places below the 0.5 floors that gate on them.
assert() gates on both floors and computes still_held instead of returning a
hardcoded `true` — the old build reported still_held for a node that does not
exist.
41 lines
2.2 KiB
Bash
Executable File
41 lines
2.2 KiB
Bash
Executable File
#!/bin/sh
|
|
# Build + RUN the §7 GROUNDING-VECTOR tests (engram_cognition.c): the one decay
|
|
# model, the consequence gate, and the stored/derived split. Closed-form
|
|
# constructed cases — no server, no store, no network. Pure C11 (stdlib + libm).
|
|
# Standalone — NOT folded through elc. Two passes:
|
|
# 1. PERF — optimised (-O2, no sanitizer): the functional gate.
|
|
# 2. SAFETY — ASan + UBSan on the same suite.
|
|
#
|
|
# NEGATIVE CONTROL (invariant §8.6 — no test without one). Every symbol this
|
|
# suite exercises (cog_decay_factor, cog_grounding_significant,
|
|
# cog_significance_inherent, CogGrounding, CogProvClass) is introduced by the
|
|
# change under test, so the suite does not COMPILE against the pre-change source.
|
|
# To reproduce:
|
|
# git show origin/dev:lang/runtime/engram_cognition.h > /tmp/pre/engram_cognition.h
|
|
# git show origin/dev:lang/runtime/engram_cognition.c > /tmp/pre/engram_cognition.c
|
|
# cc -I/tmp/pre engram/test/test_grounding_vector.c /tmp/pre/engram_cognition.c ...
|
|
# => error: unknown type name 'CogGrounding'; no binary produced.
|
|
set -e
|
|
HERE=$(cd "$(dirname "$0")" && pwd)
|
|
RT="$HERE/../../lang/runtime"
|
|
CC=${CC:-cc}
|
|
SRC="$HERE/test_grounding_vector.c $RT/engram_cognition.c $RT/engram_reason.c $RT/engram_geometry.c $RT/engram_store.c $RT/engram_vindex.c"
|
|
WARN="-std=c11 -Wall -Wextra"
|
|
# engram_store.c declares emit_log as a WEAK symbol and null-checks it, which is
|
|
# how a test links the store without the EL runtime. Darwin's ld does not resolve
|
|
# an undefined weak symbol at static-link time, so it must be allowed explicitly.
|
|
# (The pre-existing runners in this directory — run_verify_tests.sh among them —
|
|
# do not do this and therefore fail to link on macOS. Unrelated to this change.)
|
|
LDX=""
|
|
[ "$(uname -s)" = "Darwin" ] && LDX="-Wl,-U,_emit_log"
|
|
TMP=$(mktemp -d)
|
|
|
|
echo "### PASS 1: PERF (optimised, un-sanitised) — functional gate"
|
|
$CC $WARN -O2 -I"$RT" $SRC -lm -lpthread $LDX -o "$TMP/perf"
|
|
"$TMP/perf"
|
|
|
|
echo
|
|
echo "### PASS 2: SAFETY (ASan/UBSan)"
|
|
$CC $WARN -O1 -g -fsanitize=address,undefined -fno-omit-frame-pointer -I"$RT" $SRC -lm -lpthread $LDX -o "$TMP/safe"
|
|
ASAN_OPTIONS=${ASAN_OPTIONS:-detect_leaks=0} UBSAN_OPTIONS=halt_on_error=1 "$TMP/safe"
|