refactor: make project-local memory bank a projection of the payload - #134
Merged
Conversation
`memory-bank/` был полной копией payload: 110 файлов дублировали `template/memory-bank/`, а расхождение отслеживалось локом. Отсюда росла вся вчерашняя машинерия синхронизации — pull в песочнице, ручная миграция лока и запрос на subtree-scope в апстрим. Копия была неверной моделью. Этот репозиторий — источник шаблона, а не его downstream-установка, и CLI говорит это прямо: после удаления лока `doctor --profile template` сообщает «Template source profile detected; an installed-template lock is not expected. Create locks only in downstream repositories through memory-bank-cli init» и завершается без ошибок. Теперь generic-документы — симлинки в payload, поэтому инстанс равен payload по построению и синхронизировать нечего. Реальными файлами остались только 26 документов, которыми владеет или которые переопределяет проект: `features/`, `research/`, `adr/`, project-specific части `product/` и `ops/`, индекс и `bootstrap.md`. - удалён `memory-bank/.lock`; - `tools/sync-project-memory-bank.rb` заменён на `tools/refresh-memory-bank-projection.rb`: он лишь досоздаёт симлинки, чинит цели и убирает указывающие на исчезнувший payload, не трогая реальные файлы; - переопределение теперь делается заменой симлинка обычным файлом и видно в git как смена типа; - пропущенный симлинк ловится `lint --repo-root .` как битая ссылка, поэтому проекция не может молча отстать. Проекция пофайловая: `lint` не спускается в симлинк на директорию и объявляет её содержимое недостижимым, поэтому симлинк на каталог не подходит. Поведение продукта не затронуто: downstream по-прежнему получает настоящую копию с локом, что подтверждает smoke-тест установки в чистый репозиторий. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01RtxeRwhVf1y8zvxUtk6xrS
dapi
added a commit
that referenced
this pull request
Sep 6, 2026
…bsystem * origin/main: docs: make the review mechanism an explicit, verifiable choice (#139) docs: add WAIT status for external events without a human gate (#138) docs: bound review convergence across delivery flows (#137) chore: pin memory-bank-cli v2.3.0 in CI (#136) refactor: make project-local memory bank a projection of the payload (#134)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Суть
memory-bank/перестаёт быть копией payload и становится его проекцией: generic-документы — симлинки вtemplate/memory-bank/. Инстанс равен payload по построению, синхронизировать нечего.Почему копия была неверной моделью
Репозиторий — источник шаблона, а не downstream-установка. CLI сообщает это прямо, стоит убрать лок:
Пока лок был на месте, тот же
doctorвыдавал 110 ошибокmanifest.managed_unreadable— по одной на каждый проецируемый документ. Лок описывал дрейф от внешнего шаблона, которого у источника нет.Из этой же неверной модели выросла вчерашняя машинерия: pull в изолированной песочнице, ручная миграция лока и запрос на subtree-scope в апстрим (
dapi/memory-bank-cli#60). Всё это обслуживало дублирование, которого не должно было быть.Что изменилось
memory-bank/.locksync-project-memory-bank.rb: песочница + pull + перенос + правка локаrefresh-memory-bank-projection.rb: досоздать симлинкиПравило переопределения стало явным: заменил симлинк обычным файлом — документ project-specific, и git показывает смену типа; удалил файл и прогнал скрипт — вернулся в проекцию.
Почему пофайлово, а не покаталожно
Пробовал
memory-bank/flows -> ../template/memory-bank/flows.lintне спускается в симлинк на директорию: область упала со 120 файлов до 68, и все ссылки вflows/объявлены битыми. Ограничение зафиксировано вdocs/memory-bank.md, чтобы следующий не наступил на те же грабли.Защита от рассинхронизации
Забыть симлинк для нового документа payload нельзя: индекс инстанса ссылается на него, и
memory-bank-cli lint --repo-root .падает с битой ссылкой. То есть CI ловит пропуск, а не человек.Проверки
lint --repo-root .— OK, 120 файлов в области (было 110), ни одной битой ссылки;lint --scope-root template/memory-bank— OK;doctor --profile template— 0 ошибок;🤖 Generated with Claude Code
https://claude.ai/code/session_01RtxeRwhVf1y8zvxUtk6xrS