Skip to content

chore: рішення за пʼятьма відкритими питаннями (directory.rs, гейт, layers) - #61

Merged
vitaliytv merged 1 commit into
mainfrom
claude/drop-directory
Aug 21, 2026
Merged

chore: рішення за пʼятьма відкритими питаннями (directory.rs, гейт, layers)#61
vitaliytv merged 1 commit into
mainfrom
claude/drop-directory

Conversation

@vitaliytv

Copy link
Copy Markdown
Member

Що це

Ітеративний прохід по відкритих питаннях карти. Пʼять рішень, три з них — зміни в коді, два — зафіксовані межі.

1. directory.rs видалено

Ланцюг адресної ескалації мав три ланки, працювала одна: handle → email (парсер із тестами) є; email → account_id немає ніде; Escalation не надсилав ніхто.

Наслідок був гірший за відсутність: push.mjs свідомо не розсилає подію без to_account_id, тож ескалація дійшла б нікому й без сліду, а рядок карти обіцяв частково готовий PII-шлях. Прецедент mt-napi: крейт без споживача видаляється. Парсер на 109 рядків перепишеться в M6 разом із емітером і з обдуманою межею резолву.

2. Гейт звужено до вузла

Заразом виправлено хибне твердження карти. Там стояло «гейт не знає вузла» — насправді PermissionFactory отримує node_hash, тож зміна публічного API не була потрібна і фікс виявився дрібним. Я перевірив це перед тим, як пропонувати варіанти.

Вузол із a.md отримує рівно те звуження, яке сам задекларував; вузол без a.md — стелю хоста. Заборона всього ламала б штатний mt attach заради принципу: a.md описує агентний контракт, і його відсутність не є заявою «нічого не можна». skills: [] читається як відсутній список — інакше порожня декларація мовчки блокувала б вузол. Три тести.

3. layers/ видалено

Перевірка перед видаленням спростувала припущення, з яким я сам сформулював питання. У mt-rust layers/ генерував нуль перекладів (find . -name "*.en.md" → 0). 18 англомовних дзеркал живуть у репо специфікації, і теки layers/ там немає взагалі — їх робить інший інструмент.

Тобто конфлікту «два рушії одного перекладу» в цьому репо не існувало: був мертвий воркспейс на 40 файлів із власним CLI, схемою і 95 тестами. Прибрано разом із записом у workspaces, скриптом і рядком .v8rignore — останнє заразом знімає одну з причин хронічно червоного v8r.

4. Live-переклад — relay (лише рішення, коду немає)

Ухвалено з відомим наслідком, і я його зафіксував: це змінює модель довіри, а не місце коду. access.md фіксує межу relay — «не парсить payload далі роутінгових полів», overview.md називає його ефемерним координатором. Переклад вимагає читати вміст і віддавати його моделі, тобто вміст розмов виходить за периметр.

Спека потребує правки у двох місцях — таблиця меж довіри в access.md і принцип 4 в overview.md; інакше це мовчазне співіснування двох контрактів. Пом’якшення в каноні вже є (self-hosted relay) і лишається чинним.

Окремо інженерне: одиницею перекладу має бути AgentTextDone, а не AgentTextDelta — переклад токен-за-токеном рве речення.

5. mt escalate вручну — штатний для фази 0

Агент escalation-intake лишається метою, але фазою 1. Автоматична класифікація «баг чи вибір» — рівно те судження, заради якого гейт існує, і фальшива евристика тут гірша за відсутність: вона виглядала б як рішення системи. Інваріант «виконавець не пише сам собі розвилку» витриманий — mt escalate викликає не агент вузла.

Стан

Відкритих питань лишилось одне — Rust-тести без CI-гейта.

cargo test --workspace — 460 passed; bun run test — 102 (було 197: −95 разом із layers/); clippy й лінт чисті.

Ітеративний прохід із Vitalii. Пʼять рішень, три з них — зміни в коді.

1. directory.rs видалено. Ланцюг адресної ескалації мав три ланки,
працювала одна; Escalation не надсилав ніхто, а push.mjs свідомо мовчить
без to_account_id — тобто ескалація дійшла б нікому й без сліду, а карта
обіцяла частково готовий PII-шлях. Прецедент mt-napi.

2. Гейт звужено до вузла. Заразом виправлено хибне твердження карти «гейт
не знає вузла»: PermissionFactory отримує node_hash, тож зміна публічного
API не була потрібна. Вузол без a.md падає на стелю хоста — a.md описує
агентний контракт, і його відсутність не є заявою «нічого не можна».
skills: [] читається як відсутній список, інакше порожня декларація
мовчки блокувала б вузол.

3. layers/ видалено. Перевірка спростувала припущення, з яким питання
ставилось: у mt-rust він генерував НУЛЬ перекладів. 18 англомовних
дзеркал живуть у репо спеки, де теки layers/ немає взагалі. Мертвий
воркспейс на 40 файлів; прибрано разом із workspaces, скриптом і рядком
.v8rignore (останнє знімає одну з причин червоного v8r).

4. Live-переклад Envelope робить relay — рішення з відомим наслідком:
це змінює модель довіри, і спека потребує правки у двох місцях.
Зафіксовано в «Закритих питаннях», код не чіпано.

5. mt escalate вручну лишається штатним для фази 0: автоматична
класифікація «баг чи вибір» — рівно те судження, заради якого гейт
існує, і фальшива евристика тут гірша за відсутність.

Відкритих питань лишилось одне — Rust-тести без CI-гейта.
@vitaliytv
vitaliytv merged commit 41ace65 into main Aug 21, 2026
2 of 4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant