Repository navigation
culi v0.6.0 — Excelsa II
Pointer lines are off by default. No schema change, no migration.
The bet the granularity ladder was making
The third rung — ▸ id Title: teaser lines that the model was meant to pull with expand_card — was always a bet. Three weeks of daily use settled it:
expand_card calls, all time: 1
pointer injections: 78, costing 4,177 tokens (11.4% of all spend)
The MCP server was connected and working throughout — save_lesson and search_context were both used — so this measures the mechanism, not the plumbing. A pointer only does something if it gets pulled, and in practice it doesn't.
It was also corrupting the feedback signal
Those injections were the sole feed for PenalizeAbandonedPointers. Since expansion effectively never happens, every pointer became a downvote at a ~100% base rate:
negative feedback: 0.62 / day
positive feedback: 0.29 / day → 2.1x faster
That dragged cards toward noisy based on exposure rather than merit. The effNoisyFloor added in v0.5.1 raised the bar but didn't change the slope — noisy still climbed 4 → 12 in eight days. Removing the emission fixes the token waste and the signal corruption together, at the source.
A default, not a removal
# ~/.culi/config.yaml
pointer_lines: 4 # restore the third rungThe packer test exercises both modes so the ladder can't silently rot. With pointers off, a card that only fits as a pointer is dropped rather than teased — fewer cards per prompt, each carrying real content.
The SessionStart pointer explainer is skipped when pointers are disabled. It teaches the ▸ syntax, so shipping it would document something the model will never see while spending baseline budget to do it. That budget now goes to cards.
Upgrading
git pull && make installVerdicts are computed on read, so buckets recover as the existing penalties decay (14-day half-life). Nothing to reindex.