Задача
009 — разбор ошибки агента и чек-лист для нового отчёта
Как проверял
- Проверяющий: независимый исполнитель Orca (Claude Code, Opus 5.5),
задача
task_4f150dd43b99.
- Прочитаны целиком:
LOG-task-009-konstantin-feedback-2026-11-02-wants-scalable-gbrain-system-not-files-workaround.md
— главный документ;
PROPOSAL-task-009-…md,
RESEARCH-task-009-gbrain-options-…md;
QUESTIONS-task-009-…md — вопрос 1–2 целиком, остальные
по заголовкам;
README-task-009-…md — постановка координатора, по
ключевым словам.
- Код gbrain:
$G =
/Users/ws/.bun/install/global/node_modules/gbrain, файл
$G/VERSION = 0.60.545.0. Только чтение, ни
одной команды gbrain не запускал.
- Ссылки вида
файл:строка — на строки на момент проверки.
Ссылки на файлы агента даны без пути папки задачи.
- Непроверенное помечено
🔮 Додумал:.
Часть А. Почему агент пошёл
не туда
Причина
1. Цель пользователя подменена на «проще сейчас»
- Слова пользователя (LOG, сообщение 1):
- «Я хочу на долгосрок. Именно поэтому я использую базу знаний…
потенциал на расширение, потенциал на развитие. И это ключевое»;
- «Мне… нужна система. Масштабируемая… с поверкой истинности»;
- «А ты… мне колхоз прилагаешь. На колхозе я могу, блядь, сам».
- Что сделал агент:
PROPOSAL:70: «Рекомендую вариант Г — поэтапный: сейчас
отдельный репозиторий из markdown + JSON + HTML-карты без gbrain…
Отдельную базу gbrain подключаем позже, только если понадобится».
PROPOSAL:265: «Соблазн „потом“ превращается в
„никогда“. Это не страшно: этап 1 закрывает задачу и без этапа 2».
- Почему это корень, а не мелочь:
- агент сам написал, что система может и не появиться, и назвал это
«не страшно»;
- пользователь назвал главным как раз систему на долгий срок.
- Смягчающее обстоятельство (чтобы разбор был
честным):
- в первой постановке были слова «без переусложнения», «не очень
сложно поддерживать» (
README:17);
- но там же — «такая типа CM система» и «какие варианты внутри Gbarin»
(
README:17, 19);
- агент дал вес первым словам и не дал вторым.
Причина
2. Постановка координатора заранее подсказала вывод «без gbrain»
- Факт — сама постановка
(
README-task-009-…md):
README:87: «Есть ли в gbrain хоть
какая-то поддержка координат или гео-фильтра. Если нет — как
хранить координаты во frontmatter и фильтровать снаружи». Вопрос задан в
отрицательной форме, и ответ «фильтровать снаружи» в нём уже
подсказан.
README:111: варианты — «изолированный источник gbrain,
отдельная база gbrain, без gbrain». Вариант «без
gbrain» внесён в постановку как равноправный.
- В постановке нет ни одного вопроса про обогащение из переписки,
проверку истинности или рост на другие проекты.
- Итог (
LOG, «На что он отвечал», п. 1):
координатор поддержал вывод исполнителя: «Моё мнение: доводы у его
предложений проверяемые, я с ними согласен».
- Почему это корень: вывод исполнителя повторил
вопрос координатора. Это подтверждение собственной гипотезы, а не
исследование.
Причина
3. «В gbrain нет гео» — неверная подача: тип «место» в стандартной схеме
есть
- Слова пользователя: «Я знаю, что там были схемы,
где есть места. А ты… мне пишешь, что там географии нет… География… по
сути, теги могут быть».
- Что написал агент:
PROPOSAL:71: «главное требование — гео. Его gbrain не
умеет вовсе»;
QUESTIONS:57: «гео в gbrain нет вовсе»;
QUESTIONS:83: «gbrain здесь не поможет ни в одном
варианте — гео в нём нет».
- Проверка по коду:
- тип
place, папка places/, primitive
entity —
$G/src/core/schema-pack/base/gbrain-recommended.yaml:112-118.
Там же тип trip (:120-126);
- в рекомендованной схеме есть папка для недвижимости:
household/ — domestic operations, properties, logistics —
$G/docs/GBRAIN_RECOMMENDED_SCHEMA.md:151, правило выбора
папки — :990;
- фильтр по frontmatter находит значение и в поле-списке (то есть в
тегах): «A value matches a page whose top-level frontmatter field equals
it, or whose field is a list containing it» —
$G/src/core/search/frontmatter-where.ts:2-6.
- Противоречие внутри работы агента:
- его же исследование нашло
place («place
(places/, primitive entity) и
trip — только в
gbrain-recommended.yaml:112-126»,
RESEARCH:252);
- в предложение и вопросы это не попало. Осталось только «гео
нет».
- Что верно:
- пространственного поиска (радиус, PostGIS) в gbrain нет — grep
агента (
RESEARCH:320) это подтверждает;
- но «нет пространственного индекса» ≠ «нет гео». Район, тег, страница
места и обратные ссылки — это гео-структура. Расстояние до пляжа —
вычисление поверх неё.
Причина
4. Модель данных построена не на стандартной схеме gbrain, а на
RESO/EspoCRM
- Слова пользователя: «я хочу стандартную схему базы
данных [gbrain] использовать… посмотри, какие там пункты, какая там
структура»; «есть компании. Есть сотрудники этой компании. И все в одном
месте».
- Что сделал агент:
PROPOSAL:327: «Сущности взяты из стандарта RESO,
расширения EspoCRM и кадастра Испании»;
- таблица сущностей (
PROPOSAL:330-341) вводит свои типы
agent и agency. В gbrain для этого есть
стандартные person и company.
- Проверка по коду — связь «компания ↔︎ сотрудники» в стандарте
уже есть:
gbrain-base.yaml:381-384:
page_type: person,
fields: [company, companies],
link_type: works_at. Поле company: в шапке
страницы человека само создаёт связь;
gbrain-base.yaml:390-392:
company.key_people → works_at;
gbrain-base-v2.yaml:419-422: works_at с
обратной связью employs;
gbrain-base-v2.yaml:104-112: тип account,
алиас crm, «a customer or CRM record»
(:7-9);
gbrain-base.yaml:417-423: enrichable_types
— person, company, deal с
рубриками обогащения.
- Утверждение агента о риске своих типов — неполное:
PROPOSAL:263: «небольшой риск… gbrain принимает
незнакомый тип страницы с предупреждением»;
- в
gbrain-base-v2.yaml:649-657 есть правило: тип, не
объявленный в пакете, переводится в note, а прежний тип
уходит в legacy_type. Срабатывает при миграции типов
(mapping_rules, обработчик unify-types,
:28-35);
- 🔮 Додумал: когда именно запускается этот обработчик на живой базе,
по коду не проверял. Но риск «типы
apartment и
listing превратятся в note» на пакете
gbrain-base-v2 реален, если их не объявить в форке.
- Почему это корень: пользователь просил стандартную
схему, а агент взял чужие стандарты и не сверил их со схемой
gbrain.
Причина
5. Истину оставили в JSON вне gbrain, поэтому обогащать карточку из
WhatsApp и почты нельзя
- Слова пользователя: «вот я по WhatsApp упишу, а ну
хуяка обогащается»; «мне удобно, когда мне на почту что-то написали, и
это все добавилось к карточке».
- Что сделал агент:
PROPOSAL:72: «Истина одна: то, что сказано в переписке
WhatsApp, остаётся в реестрах
cl-cons-whats/realestate-registry/»;
PROPOSAL:372: страницы — «копия, генерируется скриптом,
руками не правится»;
PROPOSAL:382-386: страницу собирает скрипт, сохраняется
только ручная зона.
- Следствие: агент gbrain не может дописать факт в
карточку (
put_page, remember,
add_timeline_entry). Следующая сборка скрипта сотрёт такую
правку. Обогащение — главная польза для пользователя — в этой схеме
невозможно.
- Проверка по коду — что gbrain даёт для обогащения:
- разбор выгрузки чата WhatsApp встроен: шаблоны
whatsapp-iso и whatsapp-us —
$G/src/core/conversation-parser/builtins.ts:645-680;
- факты из переписки извлекаются со страниц типов
conversation, meeting, email —
$G/src/core/facts/conversation-types.ts:30-34;
- почта: рецепт
$G/recipes/email-to-brain.md, «Gmail
threads flow into brain pages via the native google source kind»,
cost_estimate: "$0 for APIs";
- скилл
$G/skills/enrich/SKILL.md: «Creates and updates
person/company pages with compiled truth, timeline, and
cross-links»;
- в рекомендованной схеме страницы ведёт агент: «The agent owns this
layer entirely. It creates pages, updates them when new information
arrives» (
GBRAIN_RECOMMENDED_SCHEMA.md:80).
- В работе агента: grep по PROPOSAL и RESEARCH на
enrich, conversation-parser,
email-to-brain — 0 совпадений. Обогащение не исследовано
вовсе.
Причина
6. «Без ключей с оплатой поиска по смыслу нет» — неверно, есть
бесплатный локальный путь
- Слова пользователя: «ты… пишешь, что пользы никакой
нет. Или… без апи… польза нет»; «Я подключу API, но не на 5… заметках…
Будет 500 заметок. Подключу вектор».
- Что написал агент:
PROPOSAL:71: «поиск по смыслу в gbrain выключен (ключей
с оплатой нет), значит, сверх grep он даёт немного»;
PROPOSAL:280: строка «Поиск по смыслу» — ❌ во всех
четырёх вариантах;
QUESTIONS:58: «поиск по смыслу выключен — ключей с
оплатой нет».
- Проверка по коду:
$G/docs/integrations/embedding-providers.md:35-37:
ollama, llama-server, lmstudio —
«(none — runs locally)», цена 0;
- там же
:174-195: настройка Ollama,
gbrain init --pglite --embedding-model ollama:nomic-embed-text;
- функции на LLM идут по подписке через рецепт
claude-cli
($G/docs/ai-providers/claude-cli.md). Он не делает
эмбеддинги: «gateway.embed() throws immediately for
claude-cli models»;
- агент знал про Ollama (
PROPOSAL:240: «Константин
разрешил локальные embeddings (Ollama)»), но поставил её как условие на
потом, а в таблицах написал ❌.
- Почему это корень:
- выбор «когда включать векторы» зависит от объёма, и пользователь сам
назвал порог;
- агент превратил его в постоянное ❌ и сделал из этого довод против
gbrain.
Причина
7. Русский поиск: английский язык по умолчанию подан как свойство
gbrain; стемминг не отделён от лемматизации
- Слова пользователя: «ты… не знаешь, что такое
Лемма… лексема»; «по умолчанию английский язык… на настройках на русских
поставить можно».
- Что написал агент:
PROPOSAL:130: «Сейчас он english: „Давид“
и „Давида“ не сводятся. Переключить на russian — значит
переиндексировать и cheaptrip» — подано как риск;
PROPOSAL:300: «Русский поиск нельзя включить, не
переиндексировав cheaptrip» — довод против варианта А.
- Проверка по коду и докам:
- язык задаёт
GBRAIN_FTS_LANGUAGE, по умолчанию
english —
$G/docs/guides/multi-language-fts.md:3-5;
- смена языка —
gbrain reindex-search-vector --yes —
:42-54;
- встроенные конфигурации — «snowball» (
:39-40). Это
стемминг: отсечение окончаний по правилам, без
словаря;
- лемматизация (сведение к словарной форме) требует
словаря ispell/hunspell в своей конфигурации. Свои конфигурации —
«require a real Postgres instance (e.g. the Supabase engine)»
(
:96-99). На PGLite только snowball;
- один язык на базу; «the vector-search arm is language-agnostic and
covers the rest» (
:103-105).
- Что упущено:
- база cheaptrip тоже русскоязычная и страдает от того же: «„Василий“
≠ „Василия“» (
README:69);
- переиндексация на
russian полезна обоим проектам. Это
не цена варианта А;
- разница «стемминг на PGLite / лемматизация на Postgres» не названа
нигде (grep
лемм|стемм|snowball по PROPOSAL и RESEARCH — 0
совпадений).
Причина
8. «Одна сессия за раз» — свойство выбранного транспорта, а не
gbrain
- Слова пользователя: «базу знаний… которые могут
использовать мои разные агенты».
- Что написал агент:
QUESTIONS:59: «отдельная база по stdio держит замок:
одна сессия за раз»;
PROPOSAL:282: строка «Работа в двух сессиях сразу» — ❌
у варианта Б, без оговорки;
LOG, «На что он отвечал»: «она пускает только одну
сессию Claude за раз».
- Проверка по коду:
$G/docs/mcp/CLAUDE_CODE.md:92-100: про замок PGLite там
же сказано, что делать: «run gbrain serve --http and point
every client at it… or migrate to the Postgres/Supabase engine, which
tolerates concurrent»;
- база cheaptrip уже работает по HTTP на
127.0.0.1:3131
(RESEARCH:136-137);
- исследование агента описало HTTP-вариант для второй базы
(
RESEARCH:196-199). В таблицу предложения он не попал.
- Почему это корень: агент выбрал самый слабый способ
подключения и выдал его ограничение за ограничение всего варианта.
Причина
9. Изолированный источник отвергнут вопреки правилу самого gbrain
- Что написал агент:
RESEARCH:155: «По этому правилу gbrain советует вариант
(а)»;
PROPOSAL:283: у варианта А — «🔴 общая база»;
PROPOSAL:299: «отдельность держится на одном гранте
токена»;
LOG: «Источник внутри базы cheaptrip — смешение с чужим
проектом».
- Проверка по коду:
$G/docs/architecture/brains-and-sources.md:63-64: «if
the data owner stays the same but the topic/repo changes, it's a source
boundary». Владелец обеих баз — Константин;
brains-and-sources.md:58: «Isolate a topic so it never
leaks into personal search | --source with
federated=false»;
- пакет схемы задаётся отдельно на источник:
schema_pack.source.<id>
($G/src/core/schema-pack/entity-types.ts:85,
docs/architecture/schema-packs.md:156).
- Почему это корень:
- для «потом другие темы и проекты» источники — штатный способ
gbrain;
- агент записал правило в исследование, а в предложении сделал
наоборот и не объяснил, почему.
Причина 10.
Масштаб оценён по сегодняшнему объёму
- Что написал агент:
PROPOSAL:308: «На старте у нас 20 квартир, 36 контактов
и 25 компаний — grep и jq на таком объёме
отвечают мгновенно (🔮)»;
PROPOSAL:240: gbrain — по сигналу «страниц больше ~150,
и grep стал неудобен».
- Почему это ошибка:
- пользователь выбирает архитектуру под рост: «потом по какой-то еще
теме», «на разные проекты»;
- довод «сейчас мало данных» отвечает не на тот вопрос.
Причина 11.
Временная ссылка для долгосрочной задачи
- Слова пользователя (LOG, сообщение 3): «агент…
пишет, что ссылка временная… через сутки… кончится… не понимает
контекст»; сообщение 2: «На Cloudflare опубликуй новый ресерч».
- Что сделал агент (
LOG, «На что он
отвечал», п. 3): опубликовал файлы на here.now анонимно на 24 часа и
предложил «1в — ничего не делать: через сутки страницы исчезнут».
- Почему это корень, а не мелочь: способ публикации
выбран по привычке (быстрее), без связи с длиной задачи. Это та же
ошибка, что в причине 1, на другом уровне.
Причина 12.
Системные причины поведения агента
- Оптимизация под «проще и безопаснее сейчас»:
- главным критерием стала защита базы cheaptrip и ноль процессов
(
PROPOSAL:283, :204);
- цель пользователя на этой шкале не оценена.
- Перенос чужих выводов без проверки:
- координатор принял вывод исполнителя («я с ними согласен»,
LOG);
- он не сверил, что в RESEARCH есть
place, HTTP-вариант и
правило «владелец тот же → источник».
- Ограничение как отговорка, а не задача с решением:
- «нет гео», «одна сессия», «нет ключей», «английский язык» — все
четыре поданы как стоп;
- у каждого в документации gbrain есть решение (причины 3, 6, 7,
8).
- Не ответил на прямой вопрос:
- пользователь спрашивал «какие там еще у них схемы есть»;
- в PROPOSAL нет перечня пакетов и их сравнения;
- в RESEARCH перечень на одной строке (
RESEARCH:244), без
разбора gbrain-recommended и
company-brain.
- Не применены правила пользователя, уже записанные в
проекте:
- «функции на LLM предпочтительнее простых команд»
(
cl-cheap-gbrain/CLAUDE.md, правило о подписках);
- «не сужай выбор сам» — вариант «векторы» вычеркнут фразой «ключей
нет».
- Вопрос сформулирован так, что подсказывает ответ:
причина 2. Субагент искал подтверждение «гео нет» и нашёл его.
Часть Б.
Жёсткий чек-лист для нового отчёта агента
Как применять
- Предмет проверки — новый отчёт: исследование стандартных схем gbrain
и проект масштабируемой базы знаний (недвижимость Барселоны сейчас,
другие темы и проекты потом).
- Каждый пункт — утверждение «да / нет». «Частично» = «нет».
- Вес:
- 🔴 блокирующий — одно «нет» = отчёт не принят;
- 🟠 важный — допустимо не больше двух «нет», и у
каждого — план исправления;
- ⚪ мелкий — замечание, приёмку не
останавливает.
$G =
/Users/ws/.bun/install/global/node_modules/gbrain. LOG =
LOG-task-009-konstantin-feedback-…md.
- Всего 34 пункта: 🔴 17, 🟠 15, ⚪ 2.
С. Соответствие словам
пользователя
- С1 🔴 В начале отчёта есть раздел «как понял задачу», и в
нём названы все 11 требований из LOG.
- Как проверить — найти каждое в разделе:
- долгосрочность;
- рост на другие темы и проекты;
- CRM-карточки «компания ↔︎ сотрудники»;
- обогащение из WhatsApp;
- обогащение из почты;
- разные агенты;
- стандартная схема gbrain;
- места и гео;
- проверка истинности;
- русский поиск (лемма, лексема);
- векторы при росте.
- Да — найдены все 11.
- С2 🔴 Рекомендованный вариант строит базу в gbrain сейчас
(отдельная база или источник), а не «файлы сейчас, gbrain
потом».
- Как проверить: в разделе рекомендации есть команды
gbrain для первого этапа.
- grep по рекомендации: «позже», «если понадобится», «по сигналу»,
«этап 2» — нет ни одного откладывания самой базы.
- С3 🔴 Каждое ограничение gbrain в отчёте подано тройкой
«ограничение → решение → путь к коду или доке».
- Как проверить: найти все фразы «нет», «не умеет», «нельзя», «не
поддерживает» о gbrain.
- Да — у каждой в том же пункте есть решение и путь
$G/…:строка.
Ф. Фактическая точность
по коду gbrain
- Ф1 🔴 Отдельным разделом перечислены все 8 пакетов — прямой
ответ на вопрос пользователя «какие ещё схемы есть»; у каждого указано,
от кого он наследует.
- Как проверить: в заголовке раздела слово «схемы» или «пакеты».
ls $G/src/core/schema-pack/base/ и
grep -n '^extends:' $G/src/core/schema-pack/base/*.yaml.
Сверить с отчётом:
gbrain-base — null;
gbrain-base-v2 — null;
gbrain-recommended — gbrain-base;
company-brain — gbrain-base-v2;
gbrain-investor, gbrain-creator,
gbrain-engineer — gbrain-base;
gbrain-everything — gbrain-investor.
- Ф2 🔴 Указано, что тип
place
(places/) есть в gbrain-recommended, а в
gbrain-base-v2 его нет, и сказано, что из этого следует для
выбора пакета.
- Как проверить:
gbrain-recommended.yaml:112-118;
grep -c 'name: place' gbrain-base-v2.yaml → 0.
- Ф3 🟠 Верно описано, откуда берётся связь
works_at.
- Как проверить, что в отчёте сказано:
- в
gbrain-base связь создаётся из поля
company/companies страницы человека —
gbrain-base.yaml:381-384;
- в
gbrain-base-v2 блока frontmatter_links
нет (grep -c frontmatter_links gbrain-base-v2.yaml → 0).
Там works_at объявлен с распознаванием по тексту
(ner_only, :419-422);
- либо прочитан запасной список
FRONTMATTER_LINK_MAP в
$G/src/core/link-extraction.ts:1607 и вывод сделан по
нему.
- Ф4 🔴 Если основа —
gbrain-base-v2 или
наследник, учтено правило «необъявленный тип →
note».
- Как проверить: в отчёте есть ссылка на
gbrain-base-v2.yaml:649-657.
- Все свои типы (квартира, объявление, дом и т. п.) объявлены в своём
пакете с
extends.
- Ф5 🔴 Русский поиск описан точно.
- Как проверить, что в отчёте есть:
GBRAIN_FTS_LANGUAGE=russian и
gbrain reindex-search-vector
(multi-language-fts.md:42-54);
- один язык на базу (
:103-105);
- различие: snowball = стемминг, доступен на PGLite; лемматизация =
словарь ispell/hunspell в своей конфигурации, только настоящий Postgres
(
:96-99);
- определения слов «лемма», «лексема», «стемминг».
- Ф6 🟠 Векторы описаны с бесплатным локальным путём и порогом
по объёму.
- Как проверить, что в отчёте есть:
- Ollama, llama-server или LM Studio с ценой 0
(
embedding-providers.md:35-37);
claude-cli не делает эмбеддинги
(docs/ai-providers/claude-cli.md);
- порог включения в страницах (слова пользователя: «500
заметок»);
- платный ключ подключает сам пользователь — агент его не задаёт.
- Ф7 🔴 Нигде не утверждается «одна сессия за раз» как
свойство gbrain.
- Как проверить: для работы нескольких агентов назван
gbrain serve --http или Postgres со ссылкой на
docs/mcp/CLAUDE_CODE.md:92-100.
- Ф8 🔴 Гео описано без «гео нет вовсе», с тем, что есть, и с
тем, чего нет.
- Как проверить: grep «гео нет», «не умеет вовсе» → 0. Названо всё:
- тип
place;
where по равенству и по элементу списка
(frontmatter-where.ts:2-6);
- обратные ссылки на страницу района;
- отсутствие поиска по радиусу и расчёт расстояния снаружи;
- frontmatter не ищется поиском, значения нужно дублировать в тексте
(
GBRAIN_RECOMMENDED_SCHEMA.md:108).
- Ф9 🔴 Каждая ссылка
путь:строка в отчёте ведёт
туда, где написано заявленное.
- Как проверить: случайно выбрать 10 ссылок на код или доку gbrain,
открыть каждую.
- Да — 10 из 10 совпали. Одна неверная = «нет».
П. Полнота модели
- П1 🔴 Есть таблица «сущность → тип стандартного пакета →
папка → ключ».
- Как проверить, что свои типы введены только там, где стандартного
нет, и у каждого есть довод «почему не подходит
X».
- Агенты =
person, агентства = company,
переговоры = deal, просмотры = meeting,
переписка = conversation/email.
- П2 🟠 В модели есть все 9 сущностей предметной
области.
- Как проверить — найти каждую в таблице П1:
- квартира на покупку;
- квартира в аренду (объявление);
- дом;
- район (место);
- агентство;
- агент;
- переговоры успешные;
- переговоры неуспешные;
- просмотр.
- П3 🟠 Связи типизированы, и для каждой указан
механизм.
- Как проверить — у связей указан механизм
(
frontmatter_links,
gbrain schema add-link-type или ссылка в тексте):
- агент ↔︎ агентство (
works_at/employs);
- объявление → квартира;
- квартира → дом → район;
- сделка → квартира;
- сделка → агент.
- П4 🔴 Описан путь обогащения из WhatsApp от выгрузки до
карточки, с примером одного реального сообщения.
- Как проверить, что есть цепочка:
- выгрузка (
wacli) → страница conversation,
формат whatsapp-iso/whatsapp-us
(conversation-parser/builtins.ts:645-680);
- → извлечение фактов (
facts/conversation-types.ts:30-34,
extract_facts / remember);
- → факт и строка хронологии на карточке
person/company.
- П5 🟠 Описан путь обогащения из почты с учётом шести ящиков
Константина.
- Как проверить, что есть:
- рецепт
email-to-brain.md или поток через
gws;
- страница
email;
- факт на карточке;
- какие из шести ящиков подключать и почему.
- П6 🔴 Описана проверка истинности.
- Как проверить, что названы:
- факты с источником и датой (таблица facts /
remember с
происхождением);
- сводка + хронология
(
docs/guides/compiled-truth.md);
- мнения отдельно от фактов
(
docs/takes-vs-facts.md);
- поиск противоречий (
docs/contradictions.md) и/или скилл
$G/skills/fact-check;
- правило, что делать, когда WhatsApp и почта расходятся.
- П7 🟠 Описан доступ разных агентов.
- Как проверить: для Claude Code, Cursor, Codex, Hermes указано:
- как подключается (MCP HTTP, токен);
- что читает;
- куда пишет (первый источник в гранте —
multi-source-brains.md:246-247).
- П8 🟠 Функции на LLM идут по подписке через
claude-cli; ни один ключ с оплатой по токенам не задаётся
без решения пользователя.
- Как проверить: grep
ANTHROPIC_API_KEY|OPENAI_API_KEY|VOYAGE_API_KEY|OPENROUTER
— каждое упоминание только как вариант на выбор пользователя.
Пр. Практичность
- Пр1 🔴 Есть пошаговый порядок внедрения с командами и
проверкой после каждого шага.
- Как проверить: шаги нумерованы. Каждый содержит:
- команду (
init, sources add,
schema fork, add-type,
add-link-type, schema sync --apply,
reindex-search-vector, sync);
- что увидеть после неё;
- пометку, трогает ли шаг базу cheaptrip.
- Пр2 🔴 Есть план для существующих реестров
cl-cons-whats/realestate-registry/.
- Как проверить: в плане названы все 4 файла:
REGISTRY-realestate-properties-apartments.json;
REGISTRY-realestate-contacts-people-and-company-accounts.json;
REGISTRY-realestate-companies-and-agencies.json;
HISTORY-realestate-unclear-cases-and-decisions-with-reasoning.jsonl.
- Для каждого сказано:
- во что превращается;
- как сохраняются ID (
property_id,
contact_id, company_id);
- где одна истина после переноса;
- что делают скрипты задач 003–008.
- Пр3 🟠 Описаны риски для живой базы cheaptrip и способ их
снять.
- Как проверить, что есть:
gbrain mcp expose не запускать для второй базы
(src/core/serve-service.ts:35);
- скилл
setup-gbrain пишет MCP gbrain на
уровне пользователя;
- резервная копия до изменений;
- откат каждого шага.
- Пр4 🟠 Модель прогнана на реальных объектах.
- Как проверить:
- минимум 3 связанные страницы из реестров (например агентство On Urbe
+ его агент + квартира) показаны в формате gbrain;
- для каждой — 2 вопроса, на которые она ответит, и вызов MCP, который
даст ответ.
- Пр5 🟠 Карта и гео-вид строятся из базы, без второй
истины.
- Как проверить: назван источник данных карты —
gbrain export --type …
(src/commands/export.ts:73-80) или list_pages
+ get_page, или файлы источника. Координаты хранятся в
одном месте.
М. Масштабирование
- М1 🔴 Описано, как добавляется вторая тема или второй
проект, с примером.
- Как проверить, что есть:
- правило «источник или отдельная база» с доводом, и сверка с правилом
gbrain «владелец тот же → граница источника»
(
brains-and-sources.md:63-64);
- изоляция источника
federated=false
(multi-source-brains.md:110-111) и пакет схемы на источник
schema_pack.source.<id>
(src/core/schema-pack/entity-types.ts:85);
- пример следующей темы;
- как общие люди и компании не дублируются между темами (один
person на человека).
- М2 🟠 Описано, что меняется при росте.
- Как проверить: есть пороги или условия для 500 и 5 000 страниц:
- векторы;
- PGLite → Postgres (Supabase);
- лемматизация (только на Postgres, см. Ф5).
Пб. Публикация
- Пб1 🔴 Отчёт опубликован по постоянной ссылке (Cloudflare
Pages, по слову пользователя).
- Как проверить: ссылка открывается; в отчёте и в сообщении нет
here.now и нет ссылок с указанным сроком жизни.
- Пб2 ⚪ Файл отчёта лежит в папке задачи 009, с шапкой
OKF.
- Как проверить: из корня
cl-cons-whats прогнать
python3 /Users/ws/uno-cl/cl-cons-conventions-rules/_cons-rules-2-originals-for-all-projects/SCRIPT-check-okf-frontmatter-fields-status-verified-generated.py
→ код 0 для этого файла.
Под. Подача
- Под1 🟠 У каждой рекомендации («моё предложение») есть три
части.
- Как проверить — пересчитать рекомендации; у каждой должны быть:
- польза на примере недвижимости;
- сравнение с каждым другим вариантом;
- цена и риск.
- Да — у всех.
- Под2 🟠 У каждого вопроса пользователю есть
контекст: кто, откуда сведения (файл, чат, дата) и зачем нужен
ответ.
- Под3 🟠 Все догадки помечены
🔮.
- Как проверить: выбрать 5 утверждений о gbrain без пометки и сверить
с кодом. Да — ни одно не опровергнуто.
- Под4 🟠 Ни один вариант не отброшен без разбора.
- Как проверить: у каждого варианта (источник, отдельная база, mount,
пакеты
gbrain-recommended / gbrain-base-v2 /
company-brain) есть:
- что это;
- пример;
- польза;
- цена;
- мнение с доводом.
- Под5 ⚪ Термины даны с определением, без упрощений, и есть
сквозной пример — вопрос из жизни пользователя.
- Термины: источник, пакет схемы, primitive,
frontmatter_links, эмбеддинг, стемминг, лемма.
- Пример, например: «какие агенты On Urbe торгуются и что они нам
предлагали».
- Пример проведён цепочкой «что сделал пользователь → что делает агент
(команда) → где это оказалось → на какой вопрос это ответит → зачем
так».
Итог приёмки
- Принять отчёт можно, если одновременно:
- все 17 🔴 — «да»;
- не больше двух 🟠 — «нет», и у каждого из них есть план
исправления.
- ⚪ — замечания, приёмку не останавливают.