Reported issues for memshelf-mcp
Pod holds 20 of 42 problems reported by people outside the maintainer team. Issues filed by the project's own owners, members and collaborators are excluded entirely — a maintainer's release checklist is not a warning to a prospective user.
Back to memshelf-mcp.
Most discussed
design: multi-shelf vs domain mixing — decide before M1 freezes conventions
M0 annoyance #4 / ARCHITECTURE open question 5: the "one shelf per project" convention cracked on day one — the live shelf now mixes sqst, personal-hardware, homelab, docshelf-history, and mentoring domains, distinguished only by tags. Options:
- Keep one personal shelf, add domain as a first-class frontmatter field + INDEX grouping.
- Cheap multi-shelf (
memshelf initfrictionless, #9) + a meta-INDEX federation for "which shelf discussed X". - Status quo (tags only) until it actually hurts
Read the thread · 2026-07-13 · closed · 2 comments
doctor: stale-index неустраним, когда у эпизода есть гитигнорённый H2-сплит-каталог
Симптом
На полке с ботом, рендерящим производные на main, doctor отдаёт
stale-index в состоянии, из которого он не выводится: warning висел до
shelve, пережил штатный рендер бота и остался после него.
Признаки того, что расхождение не в свежей записи:
- новый эпизод после рендера бота присутствует и в
INDEX.md, и вledger.tsv; - дублей в реестре нет;
no-ledger-rowпосле рендера ушёл штатно — то есть бот отработал;stale-indexприсутствовал в снимкеdoctorдо ш
Read the thread · 2026-08-20 · closed · 1 comment
README:92: --section "Decisions=..." — быстрый старт молча коммитит на полку эпизод с мусорной секцией
Проблема
README.md:88-96 — блок быстрого старта из шелла. Весь блок исполняем как есть: полка задана конкретно (~/my-shelf), slug конкретный (2026-07-23-topic), --digest — настоящее осмысленное предложение. Кроме одной строки:
memshelf shelve --shelf ~/my-shelf --slug 2026-07-23-topic --kind topic \
--digest "What was decided, what was rejected and why, what stays open." \
--section "Decisions=..."
README.md:92: --section "Decisions=..." — тело секции подменено
Read the thread · 2026-08-18 · closed · 1 comment
derived-stale не отличил остановленный рендерер от отстающего на реальном случае
Проблема
#89 завёл ровно этот сценарий: производные отстают не потому, что бот ещё не
отработал, а потому, что до бота ничего не доехало; эпизоды копятся, а doctor
отдаёт те же warning, что через секунду после здорового шелвинга. PR #95 добавил
код derived-stale уровня error. На боевом случае он не сработал.
Замер 2026-08-16, полка main-memshelf
memshelf_doctor: 122 эпизода, 3 ошибки, 5 предупреждений. Ошибки —
три missing-section в чужих эпизодах от 13.08. По производным:
``
Read the thread · 2026-08-16 · closed · 1 comment
resolve объединяет там, где после #58 надо регенерировать — воскрешает архивные .meta-записи и дублирует ledger
Что случилось
Живое столкновение на sqst-memshelf 2026-08-01. Ветка везла роллап (45 эпизодов в archive/), параллельная сессия смержила в main новый эпизод. Конфликт — ровно в четырёх производных файлах: INDEX.md, ledger.tsv, stats.svg, docs/topics/.meta.json. Эпизоды слились чисто.
Полка бота ещё не подключила, то есть это документированный сценарий для resolve: «мостик для полок, ещё не подключивших бота» (ARCHITECTURE, README). Запустил его — и получил неверную полку:
Read the thread · 2026-08-01 · closed · 1 comment
Release v0.1.0 — owner checklist: PyPI Trusted Publisher, tag, directories
The release machinery is merged (#47) — everything below is the owner-only tail (accounts/credentials). Once done, the pipeline is fully automatic for every future v* tag.
Checklist
- PyPI Trusted Publisher (~2 min, no tokens): https://pypi.org/manage/account/publishing/ → Add a new pending publisher:
- PyPI project name:
memshelf-mcp - Owner:
ignatenkofi· Repository:memshelf-mcp - Workflow name:
release.yml - Environment:
release
- PyPI project name:
- Tag the release: `
Read the thread · 2026-07-23 · closed · 1 comment
Adapter kit: ship the dogfood-proven pre-commit PII guard — prompt-only redaction is bypassed by any write outside /shelve
Task
The M0 kit's only PII/secret defense is prompt-level: SKILL.md step 3's redaction pass (adapters/claude-code/skills/shelve/SKILL.md:49-55). Anything written to the shelf outside the skill — a hand edit, a stray agent write, a fix-up commit — reaches git with no check at all, on a repo whose entire content is conversation memory (MANIFEST: the tool is public, the memory never is; POLICY.md is load-bearing; the project's own privacy docs note git history makes leaks sticky until a delib
Read the thread · 2026-07-17 · closed · 1 comment
Align with shelf-spec v0 (openshelf) memory profile: shelf.yml in init scope, spec-named doctor findings, normative cross-refs
Task
ADR-0005 (openshelf, accepted 2026-07-15) extracted shelf-spec v0 from docshelf/memshelf practice: the spec's profile: memory formalizes exactly this repo's conventions (SPEC.md section 2.1 — "Lineage: memshelf"; section 4.4 ledger format; section 5 episode format; section 5.5 kind-to-category mapping), and an existing shelf becomes conformant by adding one shelf.yml (section 3, compatibility promise). The dogfood M0 shelf already carries a shelf.yml with profile: memory. docshe
Read the thread · 2026-07-17 · closed · 1 comment
Most recent
Неизвестный ключ в аргументах тула отбрасывается молча — опечатка во флаге меняет поведение
Что наблюдается
Вызов memshelf_doctor с двумя лишними ключами:
{"shelf_path": "/…/estate/shelf", "definitely_not_a_key": true, "check_remot": true}
вернул status: ok и нормальный отчёт по указанной полке. Ни ошибки, ни
упоминания о том, что два ключа из трёх отброшены. Второй ключ — опечатка
в реальном флаге check_remote.
Причина по коду
Прочитано на main: src/memshelf_mcp/tools.py (blob fca249c),
src/memshelf_mcp/server.py (blob 3715b78).
Входные модели (
Read the thread · 2026-08-17 · closed · 0 comments
shelve --amend cannot change an episode's kind, and its error blames the slug
What happens
Amending an episode with a different kind fails:
AmendTargetMissing: --amend: no episode '2026-08-13-yinguo-independent-recount'
on this shelf (docs/topics/2026-08-13-yinguo-independent-recount.md does not
exist). Check the slug, or shelve it without --amend to create it.
The episode exists — at docs/sessions/…. --amend resolves the target
directory from the new kind via CATEGORY_BY_KIND and looks only there, so
a kind change always reads as a missing episo
Read the thread · 2026-08-14 · closed · external user · 0 comments
CLI ignores $MEMSHELF_SHELF_PATH while the MCP tools honour it
What happens
The default-shelf fallback landed in tools.py, so every MCP tool resolves an
omitted shelf_path from $MEMSHELF_SHELF_PATH. cli.py declares --shelf as
required=True on each subcommand and never reads the variable, so
export MEMSHELF_SHELF_PATH=~/my-shelf
memshelf index # still: error: the following arguments are required: --shelf
Why it matters
A small asymmetry, but it reads as a bug to whoever sets the variable and then tries the CLI — and t
Read the thread · 2026-08-14 · closed · external user · 0 comments
The "return errors, never raise" contract does not cover bad input
What happens
tests/test_server_contract.py guarantees that a doomed call comes back as a
JSON envelope rather than an exception. That holds for failures inside the
tool body, because each wrapper catches and calls _error_response.
It does not hold for input validation, which the SDK runs before the wrapper is
entered. Observed live against a built bundle, calling memshelf_index with no
shelf configured:
Error executing tool memshelf_index: 1 validation error for memshelf_indexA
[Read the thread](https://github.com/ignatenkofi/memshelf-mcp/issues/85) · 2026-08-14 · closed · external user · 0 comments
### serverInfo.version is empty in the initialize response
## What happens
The server answers `initialize` with an empty version string:
{"name": "memshelf_mcp", "version": ""}
`server.py` builds the server as `MCPServer("memshelf_mcp")`. The SDK's
constructor takes a `version` keyword — introspected on the installed `mcp`
2.0.0:
MCPServer.init: name, title, description, instructions, website_url, icons, version, auth_server_provider, token_verifier, …
Nothing passes it, so every host displays memshelf withou
[Read the thread](https://github.com/ignatenkofi/memshelf-mcp/issues/83) · 2026-08-14 · closed · external user · 0 comments
### resolve: дедуп ledger не схлопывает строки, различающиеся только пустой хвостовой колонкой (вариант #62)
> **Priority:** P3
## Проблема
`resolve` на полке `sqst-memshelf` оставил в `ledger.tsv` две строки одного
эпизода, различающиеся **только пустой последней колонкой**:
79:2026-08-05
Строка 79 заканчивается табом (пустая колонка `notes`), строка 80 — нет.
Дедуп `_union_tsv` сравнивает строки целиком, поэтому такая пара не
схлопывается
[Read the thread](https://github.com/ignatenkofi/memshelf-mcp/issues/78) · 2026-08-07 · closed · 0 comments
### `shelve` оставляет `docs/*/.meta.json` изменённым в рабочем дереве — вопреки собственному контракту
Контракт #58 и README адаптера говорят одно и то же:
> `memshelf shelve` больше не пишет производные файлы и стейджит **только эпизод**.
Стейджит — да. Но **пишет**: `shelve` зовёт `Shelf.add_document`, а тот записывает `title`/`description` в `docs/<категория>/.meta.json` для индексатора (`docshelf/core/shelf.py`, «Record title/description in .meta.json for the indexer»). Файл остаётся в рабочем дереве изменённым и незастейдженным.
## Наблюдалось вживую
После штатного шелва на `sqst-memshel
[Read the thread](https://github.com/ignatenkofi/memshelf-mcp/issues/69) · 2026-08-01 · closed · 0 comments
### Фолбэк `date or span` печатает диапазон в спек-ограниченную колонку ledger, а doctor этого не видит
Второй дефект того же утра и того же семейства, что #64: инструмент отчитывается успехом на артефакте, который спек считает сломанным.
## Что случилось
`main` полки `sqst-memshelf` перестал проходить `shelf-spec validate`:
ledger-malformed (error) line 62: date '2026-07-31..2026-08-01' is not YYYY-MM-DD
При этом `memshelf doctor` на той же полке — **0 errors**.
## Причина
`collect_episodes` (`core/rebuild.py`) читает дату так:
```python
date=fields.get("date") or fields.get("span"
[Read the thread](https://github.com/ignatenkofi/memshelf-mcp/issues/65) · 2026-08-01 · closed · 0 comments
### doctor не проверяет уникальность episode_id в ledger — пропустил 30 дублей
Отделено от #62 (тот про причину порчи, этот — про то, почему её не поймали).
## Симптом
На полке `sqst-memshelf` после `resolve` в `ledger.tsv` оказалось **94 строки на 63 эпизода**: 30 эпизодов записаны дважды. `memshelf doctor --shelf .` вернул **ноль errors** и `exit 0`.
Дальше сработала ровно та цепочка, ради которой doctor и существует как гейт: CLAUDE.md полки предписывает «после shelve и перед push — doctor; errors блокируют push». Я его выполнил, получил зелёный сигнал, запушил и сме
[Read the thread](https://github.com/ignatenkofi/memshelf-mcp/issues/63) · 2026-08-01 · closed · 0 comments
### _union_tsv дублирует строки ledger: дедуп по целой строке против производной колонки digest_tokens
Поймано на живой полке `sqst-memshelf` при разрешении обычного multi-writer конфликта: `memshelf resolve --commit` продублировал 30 строк ledger, и это уехало в main (sqst-memshelf#62, чинится в sqst-memshelf#65).
## Симптом
После resolve: `ledger.tsv` — **94 строки на 63 эпизода** вместо ожидаемых 64. 30 эпизодов записаны дважды, дубли различаются ровно одним полем:
2026-07-22 2026-07-22-case-b-verdict live 12000 200 Case B verdict: ... 2026-07-22 2026-07-22-case-b-verdict live 1
Read the thread · 2026-08-01 · closed · 0 comments
shelve: эпизод без span проходит инструмент (и doctor), но валится на shelf_validate — расхождение со SPEC 5.2
Догфуд-находка с полки sqst-memshelf (PR sqst-memshelf#43, 2026-07-27).
Что случилось
memshelf shelve с непереданным --span записал эпизод docs/topics/2026-07-27-home-network-design-package.md без поля span во фронтматтере и отчитался status: ok. memshelf doctor тоже прошёл чисто (healthy, 0 errors). А advisory-CI полки (shelf_validate из shelf-spec) упал:
rule: episode-frontmatter-invalid
severity: error
detail: missing required field 'span'
suggested_fix: fix the frontm
[Read the thread](https://github.com/ignatenkofi/memshelf-mcp/issues/56) · 2026-07-27 · closed · 0 comments
### Surface the saved tokens — make the economy visible in daily use
The numbers exist (`ledger.tsv`, `recall-log.tsv`, `memshelf_stats`) but are only visible when someone explicitly runs `stats`. The owner asked for the savings to be *ambient*. Candidate surfaces, cheapest first — the first two reuse code that already exists:
1. **SessionStart banner (recommended).** The plugin's `session-start-index.sh` already injects INDEX; prepend one line from `stats`: `📇 shelf: 35 episodes · standing 8.9K tok · holds 2.10M (236:1) · realized saved: N tok`. Every session o
[Read the thread](https://github.com/ignatenkofi/memshelf-mcp/issues/49) · 2026-07-23 · closed · 0 comments
The remaining reports are on [the project's issue tracker](https://github.com/ignatenkofi/memshelf-mcp/issues).