Skip to content

docs(specs): зріз 6 — рішення 6 і 7 щодо консюмерських поверхонь - #601

Merged
vitaliytv merged 3 commits into
mainfrom
docs/slice6-decisions
Aug 31, 2026
Merged

docs(specs): зріз 6 — рішення 6 і 7 щодо консюмерських поверхонь#601
vitaliytv merged 3 commits into
mainfrom
docs/slice6-decisions

Conversation

@vitaliytv

Copy link
Copy Markdown
Member

Продовження ітеративного розбору архітектурних питань (рішення 1–5 — у змердженому #600).

Рішення 6 — text/run-v8r

Концерн уже портований нативно, але порт зберіг спосіб виклику: bun x v8r <files>. Тобто нативний Rust-детектор спавнить пакетний менеджер, щоб запустити JS-валідатор, який читає наші ж завендорені схеми. v8r при цьому в реєстрі тулів відсутній.

Рішення — нативна JSON-Schema валідація, каталог вшитий у бінар. Закриває заразом відкрите питання 3.2 МБ npm/schemas/vendor/** і знімає останню неявну залежність від bun у детекторному контурі (після #590).

Відкинуто npm:v8r у реєстрі тулів: дешево й ідентично сьогоднішньому #590, але консервує аномалію — кожен крок ланцюжка «bun → npm → JS-валідатор → наші схеми» ми вміємо робити самі.

Рішення 7 — $schema

n-rules-cli.mjs:126 пише https://unpkg.com/@7n/rules/schemas/n-rules.json у .n-rules.json консюмера. Після зняття npm — 404, і IDE мовчки втрачає валідацію.

Рішення — власний Apicurio Registry. У документі зафіксовано дві умови як частину рішення:

  1. пінована версія, не latest — інакше повертається дрейф класу KNOWN_PLUGIN_RANGES (fix(rules): KNOWN_PLUGIN_RANGES наздогнав версії плагінів воркспейсу #578), лише зовні й непомітно;
  2. анонімне читання — інакше повторюється мовчазна відмова, вже виміряна на git.7n.ai (GET /v2/401).

Прийнята слабкість записана явно: airgapped-консюмер підказок IDE не матиме.

vitaliytv and others added 3 commits August 31, 2026 11:41
6. text/run-v8r: замінити зовнішній v8r нативною JSON-Schema валідацією,
   каталог вшити в бінар. Концерн уже портований, але порт зберіг спавн
   `bun x v8r` — нативний детектор запускає пакетний менеджер заради
   JS-валідатора, що читає наші ж завендорені схеми. Закриває заразом
   питання 3.2 МБ і знімає останню неявну залежність від bun у
   детекторному контурі.

7. $schema: власний Apicurio-реєстр замість unpkg. Записано дві умови як
   частину рішення, а не побажання: пінована версія (інакше повертається
   дрейф класу KNOWN_PLUGIN_RANGES) і анонімне читання (інакше повторюється
   мовчазна відмова, вже виміряна на git.7n.ai — 401 на анонімний pull).

Прийнята слабкість записана явно: airgapped-консюмер підказок IDE не
матиме.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
8. exports помирає природно: більшість споживачів (types.mjs, llm.mjs,
   ensure-tool) зникає за рішеннями 3 і слотовими світами. Справжній
   залишок — тестова інфраструктура плагінів; тести переїжджають у Rust
   разом із кодом, прецедент plugin_lang_js.rs на 86 тестів проти
   справжнього .wasm. Межа названа: тести хоста лишаються JS до порту
   оркестрації.

9. Публічне ядро несе власний OCI-реєстр. Рекомендація фасилітатора була
   спершу перевірити конфігурацію Forgejo, потім гібрид ghcr.io —
   аргумент про різну ціну недоступності схем і бінаря. Власник обрав
   свідомо, ризик прийнятий.

З рішення 9 випливає, що офлайн-дисципліна oci-dist і CI-образи з
вбудованим бінарем перестають бути зручністю й стають несучими.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
…рацій

10. hook лишається портованим, підстава переписується: вимірювання
    (hook_cmd.rs:32-39) дало менше 3% латентності від старту node, тобто
    виграш зрізу в межах похибки. Порт потрібен, але як крок до бінаря як
    вхідної точки, не заради 3%. Цифра фіксується явно, щоб хибна підстава
    не була процитована як прецедент.

11. Тест на ПРИЧИНУ для кожного запису, що стверджує живе обмеження.
    Ключова відмінність: тест на наслідок консервує обмеження (саме так
    rejects_p2_component_profile зробив засновку липкою), тест на причину
    червоніє, коли причина зникає.

    Заміряно: 105 записів реєстру, з них 30 стверджують живе обмеження.
    Рекомендація фасилітатора була вужча (лише чотири контрактні блокери);
    власник обрав повне покриття, вимірювання показує здійсненність.

    Окремо: поширити CRC на файли без frontmatter.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
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