Basic Memory v0.21.6 first sync over the live memory dir (steward-authorized live-dir trial, Option A 2026-06-06): adds permalink: to frontmatter, refolds long YAML description lines, strips final newlines. Bodies untouched — verified via full diff classification. From this commit forward, any diff in claude/memory shows only what Basic Memory or the session writes. Trial design: MemPalace untouched as incumbent; git status check on this dir at every wrap; end-of-day evaluation (recall quality, sync robustness, rebuild-from-files, malformed-file behavior). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
3.2 KiB
name, description, metadata, permalink
| name | description | metadata | permalink | ||||||
|---|---|---|---|---|---|---|---|---|---|
| feedback-rank-on-fields-you-actually-write | 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. |
|
claude-memory/feedback-rank-on-fields-you-actually-write |
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.