docs: ci_artifact/consume — обґрунтований не-порт у wasm-гість ci-github - #581
Merged
Conversation
Розвідка ПЕРЕД кодом (задача — п.3 плану migration-completion): concern ci_artifact/consume плагіна ci-github читає слот-граф ІНШИХ плагінів консюмера (collectCiArtifactContributions → resolveSlotGraph) і вантажить canonical-шаблони з ЇХНІХ пакетів. Гість не має каналу контракту для жодного з двох входів: - host-context знає лише repo-root@1/scratch-dir@1 — немає імпорту для резолву слот-графа; - wit/deps/slots/ci-artifact.wit типізує лише producer-бік (manifest.ci-artifacts), не consumer-бік; - (новий, раніше не задокументований канал) сам template-файл лежить у пакеті ІНШОГО плагіна — поза capabilities.fs-read/repo-root@1, які скоуплені на консюмер-репо, не на встановлені директорії плагінів. Порт інвертував би шар: гість одного плагіна вирішував би за весь граф — sandbox-межа компонентної моделі, не питання «ширшого скоупу». JS-канон (main.mjs + fix-consume.mjs) лишається — знімати нема що портувати; гейт §2.90 (wasm-plugin-parity-ci-github.test.mjs) не чіпається, бо концерн і не входить у манифест гостя. Доккоментар crates/plugin-ci-github/src/lib.rs (§2.81, ДРУГА хвиля) уже мав цей висновок коротко — доповнено перехресним посиланням на повний доказ у реєстрі. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
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.
Summary
Задача — пункт 3 плану
docs/plans/2026-08-29-js-rust-migration-completion-plan.md: портувати концернci_artifact/consumeплагінаci-github(plugins/ci-github/rules/ci_artifact/consume/{main.mjs,fix-consume.mjs}) у wasm-гістьcrates/plugin-ci-github. Єдиний концерн репозиторію, де не портовано жодної половини (ні detect, ні fix).Результат: не портовано, структурний блокер контракту. Розвідка ПЕРЕД кодом (правило §2.81) підтвердила й розширила короткий доккоментар, який уже стояв у
crates/plugin-ci-github/src/lib.rs:90-104(«ci_artifact/consumeі рештаga/*— поза обсягом»):Концерн — не звичайна перевірка файлів консюмер-репо, а generic-consumer слоту
ci.artifact@1: читає граф ІНШИХ плагінів консюмера (collectCiArtifactContributions→resolveSlotGraph/getSlotContributions), валідує чужі payload-и, ловить domain-колізії й вантажить canonical-шаблони з ЇХНІХ пакетів. Три незалежно перевірені канали блокування:host-context(world.wit) знає лишеrepo-root@1/scratch-dir@1— жодного import-у для резолву слот-графа інших плагінів.wit/deps/slots/ci-artifact.witтипізує лише producer-бік (manifest.ci-artifacts— що гість ВНОСИТЬ), не consumer-бік (що гість ЧИТАЄ в інших).template-файл лежить у пакеті ІНШОГО плагіна (resolveArtifactTemplatePath→contribution.packageRoot,plugins/ci-github/slots/ci-artifact-consumer.mjs) — позаcapabilities.fs-read/repo-root@1, які скоуплені на консюмер-репо поточного виклику, не на встановлені директорії плагінів. Навіть гіпотетичний новий host-import для резолву графа сам по собі цього б не зняв.Порт інвертував би шар компонентної моделі: гість одного плагіна вирішував би за весь крос-плагінний граф — sandbox-межа, не «просто ширший скоуп».
Зміни
docs/plans/2026-08-05-open-questions-register.md— новий запис §2.98 (кінець файлу): повний доказ трьох каналів блокування, чому це інверсія шару, що зняло б блокер (новий host-mediated import, який резолвить граф і читає чужі шаблони ХОСТ-стороною — окрема задача рівня контракту), і два уроки.crates/plugin-ci-github/src/lib.rs— доккоментар розділу «ci_artifact/consumeі рештаga/*— поза обсягом» доповнено перехресним посиланням на §2.98 (третій канал блокування, якого коротка версія не називала явно).Коду плагіна НЕ змінено. JS-канон (
main.mjs+fix-consume.mjs) лишається — портувати нема що. Гейт складу резолвуnpm/scripts/lib/lint-surface/tests/wasm-plugin-parity-ci-github.test.mjs(§2.90) не чіпається: він звіряє склад для концернівmanifest.concernsживого гостя, аci_artifact/consumeтам і не заявлений — гість про нього не заявляє взагалі.Test plan
cargo check -p rules-contract -p plugin-ci-github— компілюється чисто (лише доккоментар).cargo test -p plugin-ci-github/wasm-plugin-parity-ci-github.test.mjsповедінково не зачеплені (гейти §2.90 не редаговано).crates/rules-contract/wit/world.wit(host-context slots, рядки ~677-708),crates/rules-contract/wit/deps/slots/ci-artifact.wit,plugins/ci-github/slots/ci-artifact-consumer.mjs(resolveArtifactTemplatePath) — усі цитати в §2.98 перевірені читанням файлів, не з памʼяті.🤖 Generated with Claude Code