--- 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.