21 lines
3.1 KiB
Markdown
21 lines
3.1 KiB
Markdown
---
|
|
name: feedback-rank-on-fields-you-actually-write
|
|
description: A component that ranks/selects by an evaluative field nothing populates silently degrades to a trivial order while claiming to rank — verify scoring fields end-to-end; prefer signals you already capture. For BMF/CapableMind/studium-engine tool-building.
|
|
metadata:
|
|
node_type: memory
|
|
type: feedback
|
|
originSessionId: 96ac9e09-7d3d-4ce3-a9cb-5234078a2a4e
|
|
---
|
|
|
|
When a component ranks or selects by an *evaluative* field (importance, weight, relevance, confidence, salience), verify that some ingestion path actually **writes** that field end-to-end — not just that the consumer **reads** it.
|
|
|
|
Concrete case that surfaced this (2026-05-26, MemPalace): `layers.py` L1 wake-up scored drawers by `importance`/`emotional_weight`/`weight` and a comment promised *"prefer high importance, recent filing."* But **0 of 45,969 drawers carried any of those keys** — no ingest path (miner, convo_miner, diary_write, add_drawer) ever wrote them; `emotional_weight` existed only as an AAAK concept *read* in `dialect.py`, written by nobody. So ranking silently collapsed to insertion order (oldest first), and recency was never consulted at all. The field was an **orphan**: read by the consumer, populated by no one. The fix was to rank on `filed_at` (recency) — a *structural* field present on every drawer — which made the "recent filing" half of the promise true with data we already had.
|
|
|
|
**Why:** This is silent degradation, not a crash. The system advertises a capability (ranked selection) it does not have; no error fires, the order is just quietly wrong. That is precisely the contamination shape — code (and comment/docstring) promising behavior the data never delivers — and for a memory/governance substrate, "silently wrong ranking" is the false-confidence failure L1's charter exists to prevent. Evaluative scoring at ingest is the *hard, deferred* part (it fights background/instant/local budgets), so it tends to be sketched in the index model and never wired into the default pipeline — leaving the consumer reading a field that is always empty.
|
|
|
|
**How to apply** (BMF/CapableMind L1, studium-engine, any ranking we build):
|
|
- For any ranking/selection feature, **trace the scoring field write→read**. If no path writes it, the ranking is fiction — make it raise, log a degradation, or fall back to a signal you have.
|
|
- **Prefer signals you already capture** (recency/`filed_at`, frequency, structural position) over signals that need a deferred scoring pass (LLM-assigned importance). Either build the scoring path *deliberately and end-to-end*, or rank on cheap structural data — never read a field you don't write.
|
|
- **Record structural/provenance metadata always; record evaluative metadata only when a path genuinely assigns it.** Honest degradation: a system must report its own limits, including "I cannot rank by importance because nothing scored these."
|
|
- Treat docstrings/comments that promise ranking behavior as claims to verify, not documentation to trust. Relates to [[feedback-load-bearing-not-by-immediate-weight]] and the live-state / verify-before-assert discipline.
|