package n7n:fix-deps@0.1.0;
// T0 — детерміновані фікси ДО будь-якої моделі (спека
// `2026-08-17-n7n-harness-local-models.md`, §3.9 "Як пише T0: декларативний
// план, не файлова система", рішення И). Дзеркало
// `harness::pipeline::T0Fn` (`Arc<dyn Fn() -> BoxFuture<'static, EditPlan>>`).
//
// Guest повертає декларативний `edit-plan`, він НІЧОГО не пише сам: жодних
// WASI-прав запису в `t0-plugin` world нижче, лише вужчий read-only
// `host-fs` імпорт (доккоментар `host.wit`). Хост валідує (`prepare`,
// `PreparePlanFn`) і застосовує (`commit`, `CommitPlanFn`) план через
// `write_guard` — межа безпеки §3.7 спеки лишається хостовою за
// побудовою (відсутністю права запису в guest-і), а не за домовленістю.
// Обидві фази `prepare`/`commit` — цілком хостові й НЕ мають відповідника
// в цьому WIT: вони не частина контракту "порахувати план", вони частина
// контракту "застосувати план", який guest не бачить узагалі (`T0Step` у
// `harness::pipeline` лишається хостовим типом).
interface t0 {
use types.{edit-plan};
/// Порахувати декларативний план правок. Порожній `files` — валідний
/// сигнал "нічого не робимо" (дзеркало `EditPlan::empty()`).
plan: func() -> edit-plan;
}
// `import types;` нижче — синтаксична правка, яку вимагає
// `wasmtime::component::bindgen!` (пункт 16б, `crates/plugin-host`), не
// зміна контракту: `t0.plan` повертає `edit-plan`, який транзитивно
// містить `file-edit-plan`/`anchored-edit`/`anchored-file-edit`/
// `create-file-edit`/`delete-file-edit` (`use types.{edit-plan}` вище
// називає лише САМ `edit-plan`, не весь ланцюжок типів усередині нього).
// Без прямого `import types;` у world bindgen! генерує ці вкладені типи в
// приватному (не `pub`) модулі — компільований код МОЖЕ їх мати, але
// конверсійний код цього крейта (`crates/plugin-host/src/t0.rs`) не може
// на них послатись. `detector-plugin`/`verify-plugin` цієї правки не
// потребують — `violation`/`verify-report` плоскі (жодного вкладеного
// `record`/`variant` усередині), тож bindgen дублює їх напряму в
// просторі імен `detector`/`verify` без додаткового `import`.
// `types` не має жодної функції — `import` тут не додає жодного
// host-виклику для лінкера (нічого імплементувати), лише робить
// згенеровані Rust-типи публічно досяжними за шляхом
// `n7n::fix_deps::types::*` (без префіксу `exports::` — це імпорт, не
// експорт world-у).
world t0-plugin {
import types;
import host-fs;
export t0;
}