fix(relay): полагодити червоний CI і актуалізувати карту конформансу - #59
Open
vitaliytv wants to merge 1 commit into
Open
fix(relay): полагодити червоний CI і актуалізувати карту конформансу#59vitaliytv wants to merge 1 commit into
vitaliytv wants to merge 1 commit into
Conversation
CI на main був червоний на двох перевірках, і обидві — наслідок моїх попередніх PR. Причина в тому, що я звіряв дельта-лінт (змінені файли), а CI ганяє eslint по всьому дереву: 22 помилки, яких дельта не показувала. Виправлено по суті, не заглушками: - regex `/\\/+$/` у двох місцях давав суперлінійний бектрекінг (ReDoS на рядку з довгим хвостом слешів) — замінено циклом; - node-глобали (process, URLSearchParams, Buffer, TextDecoder) імпортовано явно, як вимагає ESM; - base64url через Uint8Array замість Buffer; - решта — механічні правила (toSorted, Iterator#toArray, порядок членів класу, Promise.withResolvers). Карта конформансу актуалізована: зріз мав дату 9 серпня, хоча відтоді змінилось усе. Заявлені шляхи звірено з деревом. Додано розділ «Стан сторожів»: критерій зняття -draft спирається на тести, тож їхній власний стан — частина зрізу. cargo test не запускається в CI ЖОДНИМ workflow, тобто Rust-половина критерію не має автоматичного сторожа; серійно падає 1 тест, паралельно — до 10, бо драбина міряє реальний час. «Відкриті питання» більше не порожні: вісім пунктів, кожен — рішення, а не залишок роботи. Серед них: sandbox називається пісочницею, але лише радить; directory.rs мертвий десятий тиждень, через що адресний push для ескалацій де-факто не працює; live-переклад стрічки не має власника.
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.
Навіщо цей PR
Прохання було «синхронізувати з origin і актуалізувати стан». Синхронізація показала дві речі, яких карта не відображала.
1. CI на main був червоний — і через мої ж PR
Дві перевірки падали: Lint JS (22 помилки eslint) і Lint Text (2 невідомі слова).
Чому я цього не бачив. Я звіряв дельта-лінт (
npx @7n/rules lint— лише змінені файли), а CI ганяєbunx eslint .по всьому дереву з ширшим набором правил. Мої заяви «лінт чистий» були правдиві про те, що я запускав, і не збігались із тим, що перевіряє CI. Це моя помилка в методі перевірки, не в коді.Виправлено по суті, не заглушками. Найважливіше з знайденого:
/\\/+$/у двох місцях (auth.mjs,fcm-sink.mjs) давав суперлінійний бектрекінг — дешевий вектор ReDoS на рядку з довгим хвостом слешів. Обидва місця нормалізують зовнішні адреси (baseUrlKratos, endpoint FCM), тобто вхід не завжди наш. Замінено циклом.process,URLSearchParams,Buffer,TextDecoder) — у ESM це не дрібниця, а залежність від того, що рантайм їх підкладе.toSorted,Iterator#toArray, порядок членів класу,Promise.withResolvers, base64url черезUint8Array.Після правок: 0 errors (3 warnings, які CI не валять), 197 тестів зелені, cspell чистий на 185 файлах.
2. Карта показувала зріз від 9 серпня
Її власне правило — «зріз без дати й методу не зріз», а відтоді змінилось усе. Оновив дату, звірив заявлені шляхи з деревом, перевірив, що з цього реально ганяє CI.
Новий розділ «Стан сторожів»
Критерій зняття
-draftспирається на тести — отже їхній власний стан є частиною зрізу, а не деталлю. Виявилось:cargo testне запускається в CI жодним workflow. Rust-половина критерію не має автоматичного сторожа взагалі — її тримає лише ручний прогін.cascade_exhausted_or_plain_error_paths), паралельно — до 10: драбина міряє реальний час (budget_hard_sec), а шими спавняться процесами, тож під навантаженням вони ловлятьbudget-exceededзамістьfailed.Поки це так, «усі рядки РЕАЛІЗОВАНО» не дорівнює «доведено» — і краще, щоб це стояло в документі, ніж жило в голові.
Три рядки виправлено після звірки
PII-directory— булоЧАСТКОВО, насправді мертвий код: викликів немає жодного, томуEscalation.to_account_idпорожній і адресний push типу 3 для ескалацій де-факто не працює.i18n: lang у ClientHello— булоРЕАЛІЗОВАНО; поле приймається, але далі хендшейку його не читає ніхто.3. «Відкриті питання» більше не порожні
Там стояло «немає». Тепер вісім пунктів, і кожен — рішення, а не залишок роботи. Найгостріші:
sandbox-exec/bubblewrap), або чесна фіксація в спеці, що це декларативна політика для кооперативних виконавців.directory.rsмертвий десятий тиждень — і саме через це не працює адресний push для ескалацій. Дописати резолв або видалити (прецедентmt-napi); тримати мертвим — найгірше з трьох.Решта — гейт без вузла кімнати,
layers/протиi18n.rs, авторdecision-request, і що робити з Rust-тестами в CI.