Skip to content

feat(rules-core): портувати tauri/release нативно (§2.97) - #582

Merged
vitaliytv merged 1 commit into
mainfrom
feat/tauri-release-native
Aug 31, 2026
Merged

feat(rules-core): портувати tauri/release нативно (§2.97)#582
vitaliytv merged 1 commit into
mainfrom
feat/tauri-release-native

Conversation

@vitaliytv

Copy link
Copy Markdown
Member

Закриває пункт 2 плану міграції. Концерн роками стояв у секції «свідомо НЕ портовані».

Рація «не портуємо» пережила свою причину

Три записані причини. На момент порту:

причина стан
«Rust-екосистема не має format-preserving YAML-редактора» хибно від §2.71rules_template_merge::try_surgical_merge саме це й робить
«resolveGithubOwnerRepo спавнить git — процесна дія» знято на кращеowner/repo читається з .git/config, тобто з файлу; побічно зникла залежність від git у PATH
позиційна вставка кроку справжній блокер — але для ДВОХ патернів із пʼятьох, а записаний був як загальний

Три інші патерни (tauri.conf.json — чистий JSON, .changes/.gitkeep — порожні файли, zizmor-коментар — порядкова заміна) у YAML не впираються взагалі.

Урок ширший за концерн: рація «не портуємо» має переглядатись разом з інструментом — ніщо не звʼязувало запис у доккоментарі з появою можливості, яку він заперечував.

Розширення спільного крейта

try_surgical_seq_insert(content, path, index, value, format) — вставка в block-послідовність YAML на позицію, зі збереженням форматування.

Мерж відповідає на «чого бракує» і дописує в кінець. Тут порядок і є змістом: version-sync крок мусить стояти перед tauri-apps/tauri-action, інакше версію синхронізовано вже після збірки — тобто дописування в кінець виглядало б успішним і не робило б нічого.

Межі чесні: None на не-YAML, порожній послідовності й flow-стилі. Результат перевіряється повторним парсом і звіркою позиції.

Чому все або нічого

loadT0Patterns віддає рівно native-патерн, щойно ключ у NATIVE_FIXES. Часткова реєстрація тихо втратила б два патерни.

Полагоджені дефекти канону

  1. Побитий tauri.conf.json — гучна помилка замість catch { continue }.
  2. Недосяжний хірургічний шлях — теж гучна помилка, а не мовчазна регенерація: втрата коментарів у чужому workflow має бути видимою.

Доведено

  • cargo test -p rules-template-merge --features yaml33 passed (+3 нових);
  • cargo test -p rules-core --lib concerns::fix_tauri_release12 passed;
  • cargo test -p rules-core --lib concerns::fix::62 passed;
  • npx vitest run npm/rules/tauri/release/tests/release.test.mjs13 passed;
  • clippy -D warnings на обох крейтах — чисто.

Вісім сценаріїв T0-половини JS-тесту перенесено в Rust, не викинуто — включно з двома, які найлегше зламати непомітно: крок перед tauri-action і виживання коментарів чужого workflow.

Концерн стояв у секції «свідомо НЕ портовані» з трьома причинами, з яких
дві застаріли непоміченими, а третя була вужчою за записане:

- «Rust не має format-preserving YAML» — хибно від §2.71
  (rules_template_merge::try_surgical_merge);
- «спавн git — процесна дія» — знято на краще: owner/repo читається з
  .git/config, тобто з файлу;
- позиційна вставка кроку — справжній блокер, але лише для ДВОХ патернів
  із пʼятьох; три інші в YAML не впираються взагалі.

Крейт rules-template-merge дістав try_surgical_seq_insert: вставку в
YAML-послідовність на ПОЗИЦІЮ. Мерж дописує в кінець, а тут порядок і є
змістом — version-sync крок мусить стояти ПЕРЕД tauri-action.

Порт усе-або-нічого: loadT0Patterns віддає рівно native-патерн, щойно ключ
у NATIVE_FIXES, тож часткова реєстрація тихо втратила б два патерни.

Полагоджено два дефекти канону: побитий tauri.conf.json і недосяжний
хірургічний шлях тепер гучні помилки, а не тихі «нічого не змінено».

Вісім сценаріїв характеризації перенесено в Rust, не викинуто.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@vitaliytv
vitaliytv force-pushed the feat/tauri-release-native branch from f32e72b to 2ac90ea Compare August 31, 2026 03:51
@vitaliytv
vitaliytv merged commit bb54d99 into main Aug 31, 2026
@vitaliytv
vitaliytv deleted the feat/tauri-release-native branch August 31, 2026 03:51
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