self-review 2026-08-15: plumb the five fan-effect gauges to durable storage

engram_act_stats_json emits 27 keys; emit_heartbeat forwarded 22. The five
dropped were the five newest - the degree-correction instruments added
2026-08-11 - so the one subsystem with no track record was also the only one
with no durable record.

The 08-10 review fixed exactly this for hebb_cands/hebb_cand_max/hebb_mass/
hebb_edges and left the rule in a comment right above the gap: an instrument
that is computed but not plumbed is not an instrument, it is a local
variable. The rule was then not applied to the next thing added. Plumbing is
a checklist item for every new gauge, not a one-time fix.

First heartbeat after the change already earned it: fan_hits 284 of
fan_steps 289 (98.3% of traversal steps binding) with fan_mean 0.5198 against
fan_min 0.5 - the degree correction is sitting at its floor on nearly every
step, which is a constant tax rather than a correction. That was invisible
before today.
This commit is contained in:
2026-08-15 08:44:42 -05:00
parent 319d40048e
commit 187dfe50ea
2 changed files with 128 additions and 86 deletions
+33 -1
View File
@@ -451,6 +451,38 @@ fn emit_heartbeat() -> Void {
let hebb_mass: String = if str_eq(hebb_mass_raw, "") { "-1" } else { hebb_mass_raw }
let hebb_edges_raw: String = json_get(act_stats, "hebb_edges")
let hebb_edges: String = if str_eq(hebb_edges_raw, "") { "-1" } else { hebb_edges_raw }
// Fan-effect gauges (2026-08-15 self-review). Same defect as the block
// directly above, one release later: engram_act_stats_json emits 27 keys,
// this function forwarded 22. The five it dropped are the five NEWEST —
// the degree-correction instruments added 2026-08-11 — so the one
// subsystem with no track record is also the only one with no durable
// record. The 08-10 comment above states the rule it was written to fix
// ("an instrument that is computed but not plumbed to durable storage is
// not an instrument, it is a local variable"), and the rule was then not
// applied to the next thing added. Plumbing is not a one-time fix; it is
// a checklist item for every new gauge.
// fan_mean — mean degree correction applied on the last activation.
// Drifting toward 0 ⇒ hub nodes are being damped into
// irrelevance; toward 1 ⇒ the correction is doing nothing.
// fan_min — the strongest single correction applied.
// fan_hits — how many traversal steps the correction actually bound on.
// 0 with fan_steps > 0 ⇒ the mechanism is inert.
// fan_steps — traversal steps taken (denominator of fan_mean). Also the
// only durable measure of how far activation is spreading.
// fan_dref — reference degree the correction normalises against.
// fan_hits/fan_steps together answer the question hebb_cands/hebb_cand_max
// answers for consolidation: is this quiet because nothing is happening,
// or because a threshold is wrong? Without both, the two look identical.
let fan_mean_raw: String = json_get(act_stats, "fan_mean")
let fan_mean: String = if str_eq(fan_mean_raw, "") { "-1" } else { fan_mean_raw }
let fan_min_raw: String = json_get(act_stats, "fan_min")
let fan_min: String = if str_eq(fan_min_raw, "") { "-1" } else { fan_min_raw }
let fan_hits_raw: String = json_get(act_stats, "fan_hits")
let fan_hits: String = if str_eq(fan_hits_raw, "") { "-1" } else { fan_hits_raw }
let fan_steps_raw: String = json_get(act_stats, "fan_steps")
let fan_steps: String = if str_eq(fan_steps_raw, "") { "-1" } else { fan_steps_raw }
let fan_dref_raw: String = json_get(act_stats, "fan_dref")
let fan_dref: String = if str_eq(fan_dref_raw, "") { "-1" } else { fan_dref_raw }
// Consolidation write-back gauges (2026-08-07 self-review). hebb_links
// counts what this process LEARNED; these three count what SURVIVES it.
// The distinction is the whole finding: 1,198 links formed, 0 persisted,
@@ -564,7 +596,7 @@ fn emit_heartbeat() -> Void {
let dmg_scan: String = if str_eq(dmg_scan_raw, "") { "-1" } else { dmg_scan_raw }
let dmg_ts_raw: String = state_get("soul.txt_census_ts")
let dmg_age: Int = if str_eq(dmg_ts_raw, "") { 0 - 1 } else { ts - str_to_int(dmg_ts_raw) }
let payload: String = "{\"event\":\"heartbeat\",\"pulse\":" + pulse + ",\"tick\":" + pulse + ",\"boot\":" + boot + ",\"idle\":" + idle + ",\"idle_ms\":" + int_to_str(idle_ms) + ",\"node_count\":" + int_to_str(nc) + ",\"edge_count\":" + int_to_str(ec) + ",\"node_delta\":" + int_to_str(node_delta) + ",\"edge_delta\":" + int_to_str(edge_delta) + ",\"wm_active\":" + int_to_str(wmc) + ",\"wm_delta\":" + int_to_str(wm_delta) + ",\"wm_saturated\":" + int_to_str(wm_sat) + ",\"wm_top0_streak\":" + int_to_str(t0streak) + ",\"wm_churn\":" + int_to_str(wm_churn) + ",\"wm_top0_wm\":" + wm_top0_wm + ",\"sync_added_total\":" + sat_str + ",\"sync_age_ms\":" + int_to_str(sync_age) + ",\"wm_avg_weight\":" + wm_avg_str + ",\"wm_top\":" + wm_top + ",\"ts\":" + int_to_str(ts) + ",\"uptime_ms\":" + int_to_str(up_ms) + ",\"uptime\":\"" + up_human + "\",\"embed_ok\":" + int_to_str(emb_ok) + ",\"embed_backfilled\":" + bf_done + ",\"embed_count\":" + bf_total + ",\"embed_eligible\":" + embed_elig + ",\"wm_evicted\":" + act_evict + ",\"wm_evicted_delta\":" + int_to_str(evict_delta) + ",\"evict_floor\":" + ev_floor + ",\"evict_cap\":" + ev_cap + ",\"evict_bll\":" + ev_bll + ",\"breakthroughs\":" + act_bt + ",\"breakthroughs_delta\":" + int_to_str(bt_delta) + ",\"auto_term_streak\":" + int_to_str(hb_ats) + ",\"auto_term_empty_streak\":" + int_to_str(hb_ate) + ",\"embed_breaker_open\":" + act_brk + ",\"ctx_cos\":" + ctx_cos + ",\"dup_seeds\":" + dup_seeds + ",\"dup_wm\":" + dup_wm + ",\"dup_wm_global\":" + dup_wm_g + ",\"hebb_warm\":" + hebb_warm + ",\"hebb_max\":" + hebb_max + ",\"hebb_links\":" + hebb_links + ",\"hebb_cands\":" + hebb_cands + ",\"hebb_cand_max\":" + hebb_cmax + ",\"hebb_mass\":" + hebb_mass + ",\"hebb_edges\":" + hebb_edges + ",\"embed_consec_fail\":" + emb_cf + ",\"txt_damaged_pct\":" + dmg_pct + ",\"txt_damaged_n\":" + dmg_n + ",\"txt_scanned_n\":" + dmg_scan + ",\"txt_census_age_ms\":" + int_to_str(dmg_age) + ",\"hebb_wb_pending\":" + wb_pend + ",\"hebb_wb_drained\":" + wb_drain + ",\"hebb_wb_dropped\":" + wb_drop + ",\"hebb_wb_sent\":" + wb_sent + ",\"ise_fail\":" + fail_str + ",\"txt_damaged\":" + txt_dmg + "}"
let payload: String = "{\"event\":\"heartbeat\",\"pulse\":" + pulse + ",\"tick\":" + pulse + ",\"boot\":" + boot + ",\"idle\":" + idle + ",\"idle_ms\":" + int_to_str(idle_ms) + ",\"node_count\":" + int_to_str(nc) + ",\"edge_count\":" + int_to_str(ec) + ",\"node_delta\":" + int_to_str(node_delta) + ",\"edge_delta\":" + int_to_str(edge_delta) + ",\"wm_active\":" + int_to_str(wmc) + ",\"wm_delta\":" + int_to_str(wm_delta) + ",\"wm_saturated\":" + int_to_str(wm_sat) + ",\"wm_top0_streak\":" + int_to_str(t0streak) + ",\"wm_churn\":" + int_to_str(wm_churn) + ",\"wm_top0_wm\":" + wm_top0_wm + ",\"sync_added_total\":" + sat_str + ",\"sync_age_ms\":" + int_to_str(sync_age) + ",\"wm_avg_weight\":" + wm_avg_str + ",\"wm_top\":" + wm_top + ",\"ts\":" + int_to_str(ts) + ",\"uptime_ms\":" + int_to_str(up_ms) + ",\"uptime\":\"" + up_human + "\",\"embed_ok\":" + int_to_str(emb_ok) + ",\"embed_backfilled\":" + bf_done + ",\"embed_count\":" + bf_total + ",\"embed_eligible\":" + embed_elig + ",\"wm_evicted\":" + act_evict + ",\"wm_evicted_delta\":" + int_to_str(evict_delta) + ",\"evict_floor\":" + ev_floor + ",\"evict_cap\":" + ev_cap + ",\"evict_bll\":" + ev_bll + ",\"breakthroughs\":" + act_bt + ",\"breakthroughs_delta\":" + int_to_str(bt_delta) + ",\"auto_term_streak\":" + int_to_str(hb_ats) + ",\"auto_term_empty_streak\":" + int_to_str(hb_ate) + ",\"embed_breaker_open\":" + act_brk + ",\"ctx_cos\":" + ctx_cos + ",\"dup_seeds\":" + dup_seeds + ",\"dup_wm\":" + dup_wm + ",\"dup_wm_global\":" + dup_wm_g + ",\"hebb_warm\":" + hebb_warm + ",\"hebb_max\":" + hebb_max + ",\"hebb_links\":" + hebb_links + ",\"hebb_cands\":" + hebb_cands + ",\"hebb_cand_max\":" + hebb_cmax + ",\"hebb_mass\":" + hebb_mass + ",\"hebb_edges\":" + hebb_edges + ",\"embed_consec_fail\":" + emb_cf + ",\"txt_damaged_pct\":" + dmg_pct + ",\"txt_damaged_n\":" + dmg_n + ",\"txt_scanned_n\":" + dmg_scan + ",\"txt_census_age_ms\":" + int_to_str(dmg_age) + ",\"hebb_wb_pending\":" + wb_pend + ",\"hebb_wb_drained\":" + wb_drain + ",\"hebb_wb_dropped\":" + wb_drop + ",\"hebb_wb_sent\":" + wb_sent + ",\"ise_fail\":" + fail_str + ",\"txt_damaged\":" + txt_dmg + ",\"fan_mean\":" + fan_mean + ",\"fan_min\":" + fan_min + ",\"fan_hits\":" + fan_hits + ",\"fan_steps\":" + fan_steps + ",\"fan_dref\":" + fan_dref + "}"
ise_post(payload)
}