26 KiB
作成
LocalTicketBackend によって作成されました。
State changed
Ticket を workspace-panel が queued にしました。
Decision
Routing decision: implementation_ready
Reason:
- Panel Queue により、この Ticket は Orchestrator routing 対象として明示許可された。
- Ticket body は Rust PDK crate、guest-side only boundary、ergonomic Tool helpers、Component Model binding glue、embedded
rust-component-tooltemplate、docs/tests/validation/non-goals を実装可能な粒度で定義している。 - Blocking dependency
00001KVG0HR96Component Model runtime は closed。Component runtime は explicitwasm-componentmetadata、ToolRegistry path、grant enforcement、no ambient WASI、resource limits、WIT files を含めて完了済み。 - Incoming dependency from
00001KVHKWNQSは、この Ticket が将来の authoring CLI Ticket を unblock する関係であり、本 Ticket の blocker ではない。 - Related Plugin CLI / HTTPS / FS Tickets は closed または non-blocking context。
- 現在 queued はこの Ticket のみ、inprogress は 0 件、child implementation Pods はなし、matching branch/worktree はなし、Orchestrator worktree は clean。
- Risk domain は plugin / pdk / component-model / authoring / templates / sdk / no-crates-io だが、Ticket は no crates.io publication、no remote template fetch、guest-side only、no ambient authority、host-side grants remain authority などの invariants を明示している。bounded context check 後も implementation 前に必要な追加 human decision は見つからなかった。
Evidence checked:
- Ticket
00001KVHKWNQAbody / thread / relations / artifacts。 TicketRelationQuery(00001KVHKWNQA): outgoingdepends_ontarget00001KVG0HR96is closed。incoming00001KVHKWNQS depends_on thisis not a blocker。TicketOrchestrationPlanQuery(00001KVHKWNQA): no previous plan records; accepted plan was recorded now。- Workspace state:
- Orchestrator worktree clean at
9ca2f85b。 - queued: this Ticket only。
- inprogress: 0。
- visible Pods: self + peers only; spawned children 0。
- no matching implementation branch/worktree。
- Orchestrator worktree clean at
- Code/resource context:
resources/plugin/wit/yoi-plugin-tool-v1.witandresources/plugin/wit/yoi-host-v1.witexist from the Component runtime work。docs/development/plugin-development.mdis the current Plugin development guide target。- Cargo workspace has no existing
crates/plugin-pdkcrate。
IntentPacket:
Intent:
- Add a first-party Rust PDK for Component Model Tool Plugins and an embedded starter template so authors can implement Yoi Plugin Tools without raw pointer/length ABI plumbing or remote template fetches。
- Position Component Model + PDK as preferred authoring path while keeping raw core-Wasm ABI as compatibility/transitional runtime support。
Binding decisions / invariants:
- PDK is guest-side only。It must not depend on host runtime crates such as
pod,llm-worker,tui, orclient。 - PDK must not grant or imply authority。Host-side Plugin manifest grants remain the authority boundary for Tool execution / HTTPS / FS host APIs。
- No ambient fs/network/env authority is introduced。
- Do not publish to crates.io and do not implement remote template fetch。
- Do not implement
yoi plugin new/check/packin this Ticket; embedded resources should be suitable for that future Ticket。 - Template dependency policy must support checkout/dev local path dependency and document a future out-of-tree git
revpattern。 - PDK should target the current Component Model Tool world (
yoi:plugin/tool@1.0.0) and runtime ToolOutput JSON bridge。 - Prefer minimal, testable helper APIs over broad macro magic。
Requirements / acceptance criteria:
- Add workspace crate
yoi-plugin-pdkundercrates/plugin-pdkor a justified equivalent。 - Provide typed JSON input parsing, output serialization, structured/bounded
ToolError,ToolContextwith at least tool name, and helper equivalent torun_json_toolproducing ToolOutput JSON accepted by the current runtime。 - Provide WIT binding glue/re-export/wrapper enough that authors do not hand-write raw pointer/length ABI code。
- Add embedded template under
resources/plugin/templates/rust-component-tool/withCargo.toml,src/lib.rs,plugin.toml, and README/next steps。 - Include example or fixture Plugin using the PDK。
- Update Plugin development docs and explain publication/template-fetch deferrals。
- Tests cover PDK happy/error paths, template/sample fixture validation, runtime acceptance if feasible, and no host-runtime crate dependency。
- Validation includes focused PDK/plugin tests,
cargo fmt --check, relevantcargo check/cargo test,git diff --check, andnix build .#yoibecause workspace/package/resources may change。
Escalate if:
- Current WIT/runtime shape cannot support a guest-side helper without changing the Component runtime contract。
- A full sample component build requires external tooling that cannot be kept deterministic in this repo。
- Keeping the PDK guest-only would require undesirable dependencies on host crates。
- Template/resource packaging needs a broader CLI/resource architecture decision。
Next action:
- Record
queued -> inprogressand commit Ticket records before creating the implementation worktree and spawning Coder。
State changed
Ticket body/thread, relation metadata, Component Model runtime dependency state, related completed Tickets, Orchestrator worktree state, visible Pods, existing branch/worktree, and bounded resource/code context were checked. Dependency 00001KVG0HR96 is closed, no inprogress/capacity blocker exists, and no missing planning decision was found. Accepting this queued Ticket for implementation before worktree/Pod side effects.
Implementation report
Implementation orchestration start:
- Acceptance records were committed on Orchestrator branch:
5f7f81bd ticket: accept plugin rust pdk templates. - Created implementation worktree
/home/hare/Projects/yoi/.worktree/00001KVHKWNQA-plugin-rust-pdk-templateson branchimpl/00001KVHKWNQA-plugin-rust-pdk-templatesat5f7f81bd. - Spawned Coder Pod
yoi-coder-00001KVHKWNQAwith write scope limited to the implementation worktree and read-only root scope only for runtime workspace identity. - Coder task explicitly forbids root/original workspace implementation, merge, Ticket close, and cleanup.
Next action:
- Wait for Coder implementation report, then inspect branch diff/validation evidence and route to Reviewer.
Implementation report
Coder implementation report received from yoi-coder-00001KVHKWNQA.
Implementation commit:
06287aca plugin: add rust pdk template
Changed areas reported:
- Added workspace crate
crates/plugin-pdk/yoi-plugin-pdk:- guest-side PDK helpers;
- typed JSON input parsing via
parse_json_input/run_json_tool; - typed JSON output via
ToolOutput::json; - bounded structured
ToolErrorand error-code helpers; ToolContextwith selected tool name;wit_bindgenre-export andexport_component_tool!macro to avoid raw pointer/length ABI plumbing;- tests for happy path, error path, oversized output, template validation, and host-runtime dependency exclusion。
- Added embedded starter template under
resources/plugin/templates/rust-component-tool/withCargo.toml,src/lib.rs,plugin.toml, andREADME.md。 - Added embedded template constants in
crates/manifest/src/plugin.rsfor future authoring CLI use without remote fetching。 - Updated Component Model example to use the PDK。
- Added runtime decoder test confirming PDK-produced ToolOutput JSON shape is accepted。
- Updated Plugin development/design/package docs。
- Updated workspace/package metadata: root
Cargo.toml,Cargo.lock,package.nixcargo hash。
Coder validation reported as passing:
cargo test -p yoi-plugin-pdkcargo test -p manifest embedded_rust_component_tool_template_is_valid_package_shapecargo test -p pod pdk_tool_output_shape_is_accepted_by_wasm_decodercargo checkcargo fmt --checkgit diff --checkgit diff --check --cachedcargo tree -p yoi-plugin-pdk --edges normalnix build .#yoi --no-link
Known deferrals reported:
- No
yoi plugin new/check/pack, remote template fetch, or crates.io publication。 - Full deterministic sample component build/pack execution remains deferred to future authoring CLI/tooling; current sample/template are fixture-validated and use current WIT/PDK shape。
- Raw core-Wasm ABI remains compatibility/transitional runtime support。
Orchestrator evidence checked before review dispatch:
- Implementation worktree is clean on
impl/00001KVHKWNQA-plugin-rust-pdk-templates。 - HEAD is
06287aca。 - Diff from acceptance
5f7f81bd..HEADis one implementation commit touching 17 files, about 857 insertions / 35 deletions。 git diff --check 5f7f81bd..HEADproduced no diagnostics。
Next action:
- Dispatch Reviewer for r1 review against Ticket requirements, with focus on guest-only PDK boundary, no host-runtime deps, authority/grant wording, template/resource packaging, sample/test boundary honesty, docs, and Nix/workspace changes。
Plan
Review dispatch:
- Spawned Reviewer Pod
yoi-reviewer-00001KVHKWNQA-r1against implementation branchimpl/00001KVHKWNQA-plugin-rust-pdk-templates。 - Review target commit:
06287aca plugin: add rust pdk template。 - Review baseline:
5f7f81bd。 - Reviewer task focuses on guest-only PDK boundary, absence of host-runtime deps, authority/grant wording, no ambient fs/network/env, template/resource packaging, current WIT/runtime compatibility, sample/test honesty, docs, and Nix/workspace changes。
- Reviewer is instructed not to edit source, commit, merge, close the Ticket, or use TicketReview directly; it will report verdict/evidence back to Orchestrator。
Review: request changes
Verdict: request_changes
確認範囲:
- Ticket body/thread / Orchestrator IntentPacket
- Diff:
5f7f81bd..06287aca - 主な対象:
crates/plugin-pdk/*, embedded templateresources/plugin/templates/rust-component-tool/*,resources/plugin/wit/*,crates/manifest/src/plugin.rs,crates/pod/src/feature/plugin.rs, workspace/package docs/Nix/Cargo paths。
良い点:
- PDK は guest-side only として提示され、Yoi host/runtime crates への normal dependency は見当たらない。
- docs/templates は host-side Plugin grants が authority boundary であること、crates.io publication / remote template fetch を要求しないことを概ね維持している。
ToolError/ToolOutputbounds と runtime decoder test は現在の ToolOutput JSON bridge と整合している。
Blocking issues:
-
PDK/template authoring path が現在の WIT で実際に compile/parse できない。
- Template/example/docs は次の generated binding path を示している。
resources/plugin/templates/rust-component-tool/src/lib.rsdocs/examples/plugin-component-tool/lib.rscrates/plugin-pdk/src/lib.rs
- しかし
resources/plugin/wit/yoi-host-v1.witの interfacefsがlist: func(...)を使っており、wit-bindgenprobe でlistが keyword として扱われ parse error になった。 - これは “author does not need to hand-write raw pointer/length ABI code” と “template/sample compile or honest validated fixture boundary” の Ticket contract に反する。
- Template/example/docs は次の generated binding path を示している。
-
Embedded template を source tree 内で Cargo package として check できない。
cargo check --manifest-path resources/plugin/templates/rust-component-tool/Cargo.toml --target wasm32-unknown-unknownが root workspace 配下の non-member package として失敗した。- Template を workspace member にするか、workspace exclude / embedded template 側の empty
[workspace]等で standalone fixture として check 可能にする必要がある。 - 現在の shape tests は
wit_bindgen::generate!や WIT parse を実行していないため、この問題を捕捉できていない。
Required fix:
- Current WIT を
wit-bindgenが parse できるよう修正する。listは WIT keyword なので%listescape など、runtime import name semantics を壊さない形を優先すること。 - Embedded template を in-place または controlled fixture copy で Cargo check できるようにする。
wit_bindgen::generate!againstresources/plugin/witを実際に通す test/probe を追加する。string-shape assertion だけでは不可。- Template/example/PDK docs が full build boundary と deferral を正直に表現していることを確認する。
Reviewer validation:
- Passed:
cargo fmt --checkgit diff --check 5f7f81bd..HEADcargo test -p yoi-plugin-pdkcargo test -p manifest embedded_rust_component_tool_template_is_valid_package_shapecargo test -p pod pdk_tool_output_shape_is_accepted_by_wasm_decodercargo checkcargo tree -p yoi-plugin-pdk --edges normalnix build .#yoi --no-link
- Failed reviewer probes:
cargo check --manifest-path resources/plugin/templates/rust-component-tool/Cargo.toml --target wasm32-unknown-unknown: workspace membership/standalone failure。- copied template probe with adjusted relative paths and empty
[workspace]: WIT parse failure atresources/plugin/wit/yoi-host-v1.witbecauselistis keyword。
Worktree status at review end: source tree clean; ignored artifacts under target/ only。
Implementation report
Coder r1-fix report received from yoi-coder-00001KVHKWNQA.
New fix commit:
0a9e585c plugin: fix rust pdk wit template probes
Branch commits now:
0a9e585c plugin: fix rust pdk wit template probes06287aca plugin: add rust pdk template
Fix summary:
- Moved host WIT to dependency package path
resources/plugin/wit/deps/yoi-host/yoi-host-v1.witsoresources/plugin/witis a valid WIT package directory withyoi:hostresolved as dependency。 - Escaped WIT keyword function as
%listwhile preserving import name semantics。 - Added empty
[workspace]to embedded templateCargo.tomlso it can be checked in-place without becoming an undeclared member of Yoi root workspace。 - Updated template/example/docs/PDK snippets to the compile-tested binding pattern with PDK
wit_bindgenre-export,generate_all, andruntime_path: "yoi_plugin_pdk::wit_bindgen::rt"。 - Added compile-time probe
crates/plugin-pdk/tests/wit_bindgen_probe.rsthat runswit_bindgen::generate!againstresources/plugin/wit。 - Added embedded template cargo-check probe for
wasm32-unknown-unknownincrates/plugin-pdk/tests/template.rs。 - Added
%listWIT assertion and updated host WIT include path。 - Updated
Cargo.lockandpackage.nixfor new dev dependency edge / cargo hash。
Coder validation reported as passing:
cargo test -p yoi-plugin-pdkincluding PDK tests, WIT constants, actualwit_bindgen::generate!probe, and embedded template wasm32 check probe。cargo test -p manifest embedded_rust_component_tool_template_is_valid_package_shapecargo test -p pod pdk_tool_output_shape_is_accepted_by_wasm_decodercargo checkcargo tree -p yoi-plugin-pdk --edges normalcargo check --manifest-path resources/plugin/templates/rust-component-tool/Cargo.toml --target wasm32-unknown-unknowncargo fmt --checkgit diff --check 5f7f81bd..HEADgit diff --checkgit diff --check --cachednix build .#yoi --no-link
Operational note:
nix build .#yoi --no-linkinitially hit disk exhaustion after accepting the updated vendor hash; Coder removed local implementation worktreetarget/cache and reran successfully。
Remaining deferrals:
- No
yoi plugin new/check/pack。 - No crates.io publication or remote template fetching。
- Full packaged component execution remains deferred; the current WIT parses with
wit-bindgenand embedded Rust template compiles to the wasm target boundary。
Orchestrator evidence checked before r2 review:
- Implementation worktree is clean。
- HEAD is
0a9e585c。 - Fix diff from
06287aca..HEADtouches 12 files, about 105 insertions / 13 deletions。 - Overall
git diff --check 5f7f81bd..HEADproduced no diagnostics。
Next action:
- Route back to Reviewer for r2 verification of the WIT parse/template compile blockers and final acceptance criteria。
Review: approve
Verdict: approve
確認範囲:
- Ticket body/thread / Orchestrator IntentPacket
- r2 fix diff:
06287aca..0a9e585c - 全体実装 diff:
5f7f81bd..0a9e585c - 主な対象:
resources/plugin/wit/deps/yoi-host/yoi-host-v1.wit,resources/plugin/wit/yoi-plugin-tool-v1.wit, embedded template,crates/plugin-pdk/*,crates/manifest/src/plugin.rs,crates/pod/src/feature/plugin.rs, docs,package.nix。
Previous blockers verification:
- Host WIT は
resources/plugin/wit/deps/yoi-host/yoi-host-v1.witに配置され、resources/plugin/witは current package directory としてwit-bindgenが parse できる形になった。 - Keyword function は
%listとして escape され、import name semantics を保持している。 - Embedded template の
Cargo.tomlには empty[workspace]があり、root workspace 配下の non-member package として拒否されない。 crates/plugin-pdk/tests/wit_bindgen_probe.rsは実際にwit_bindgen::generate!をresources/plugin/witに対して実行している。- Embedded template は
wasm32-unknown-unknowntarget で cargo-check できる。
Overall Ticket fit:
- PDK は guest-side に留まり、host/runtime Yoi crates への dependency は見当たらない。
- PDK / template は authority を付与せず、host-side Plugin manifest grants が authority boundary であることを維持している。
- Ambient fs/network/env authority は露出していない。
- crates.io publication / remote template fetch /
yoi plugin new/check/packは実装していない。 - Docs は full build/pack boundary と deferral を概ね正直に記述している。
Blocking issues: none。
Non-blocking concerns / follow-ups:
cargo check --manifest-path resources/plugin/templates/rust-component-tool/Cargo.toml --target wasm32-unknown-unknownを直接実行すると template-localCargo.lockとtarget/ができる。Reviewer は検証後に untracked artifacts を削除した。テスト自体は temporary target dir を使い template lockfile を消すため blocking ではないが、将来 docs/CI では explicit--target-dirを推奨するとよい。- Reviewer r2 の
nix build .#yoi --no-linkは final artifact copy 中にNo space left on deviceで environment-fail。cargo hash/source-filter/code diagnostic ではない。Coder 側では同コマンド成功済み。Orchestrator final validation で再確認する。
Reviewer validation:
cargo test -p yoi-plugin-pdk: passedcargo test -p manifest embedded_rust_component_tool_template_is_valid_package_shape: passedcargo test -p pod pdk_tool_output_shape_is_accepted_by_wasm_decoder: passedcargo check --manifest-path resources/plugin/templates/rust-component-tool/Cargo.toml --target wasm32-unknown-unknown: passedcargo tree -p yoi-plugin-pdk --edges normal: passed; host/runtime Yoi crate dependencyなしcargo fmt --check: passedgit diff --check 5f7f81bd..HEAD: passedgit diff --check: passedgit diff --check --cached: passedcargo check: passednix build .#yoi --no-link: attempted, environment failed withNo space left on deviceduring final artifact copying
Worktree status at review end: source tree clean; ignored artifacts under normal target/ only。
Implementation report
Merge and final validation report:
Merged implementation branch into Orchestrator branch:
- Merge commit:
edc53a6b merge: plugin rust pdk templates - Implementation commits included:
06287aca plugin: add rust pdk template0a9e585c plugin: fix rust pdk wit template probes
Reviewer outcome:
- r1 requested changes for WIT parse failure (
listkeyword) and embedded template Cargo workspace check failure。 - Coder fixed WIT package layout /
%listescaping, added actualwit_bindgen::generate!probe, and made the embedded template standalone-checkable。 - r2 approved with no blocking issues。
Orchestrator validation after merge passed:
cargo fmt --checkgit diff --check HEAD^1..HEADcargo test -p yoi-plugin-pdkcargo test -p manifest embedded_rust_component_tool_template_is_valid_package_shapecargo test -p pod pdk_tool_output_shape_is_accepted_by_wasm_decodercargo checkcargo tree -p yoi-plugin-pdk --edges normalcargo check --manifest-path resources/plugin/templates/rust-component-tool/Cargo.toml --target wasm32-unknown-unknownnix build .#yoi --no-link
Validation log:
/run/user/1000/yoi/yoi-orchestrator/bash-output/bash-o9gvGb.log
Package impact:
nix path-info -S .#yoi:112156384
Cleanup note:
- Direct template cargo-check creates local
resources/plugin/templates/rust-component-tool/Cargo.lockandtarget/; Orchestrator removed those untracked artifacts after validation. Worktree is clean。
Final state:
- Orchestrator worktree clean at
edc53a6bafter validation。 - Implementation worktree remains available for cleanup after Ticket completion records are committed。
State changed
Implementation was merged into Orchestrator branch at edc53a6b, r2 review approved, and final Orchestrator validation passed: cargo fmt --check, git diff --check HEAD^1..HEAD, focused PDK/manifest/pod tests, cargo check, PDK dependency tree check, embedded template wasm32 check, and nix build .#yoi --no-link.
State changed
Ticket を closed にしました。
完了
Resolution
00001KVHKWNQA を完了しました。
実装内容:
- Guest-side Rust PDK crate
yoi-plugin-pdkを追加しました。 - PDK は typed JSON input/output helper、bounded
ToolError、ToolContext、run_json_tool系 helper、wit_bindgenre-export、export_component_tool!macro を提供します。 - PDK は host/runtime Yoi crates に依存せず、authority を付与しません。Host-side Plugin manifest grants が Tool execution / host API use の authority boundary のままです。
- Embedded Rust Component Tool template を
resources/plugin/templates/rust-component-tool/に追加しました。 - Template は local checkout/dev path dependency を使い、future out-of-tree git
revpattern を docs に記録しています。 resources/plugin/witをwit-bindgenが parse できる package layout に修正し、host WIT dependency をresources/plugin/wit/deps/yoi-host/yoi-host-v1.witに移動しました。- WIT keyword
listは%listescape にし、import name semantics を保持しました。 - Embedded template は empty
[workspace]により in-tree standalone package として check できます。 wit_bindgen::generate!を実際にresources/plugin/witに対して実行する probe と、embedded template のwasm32-unknown-unknowncargo-check probe を追加しました。- Plugin development docs / design docs / package docs / example source を更新しました。
yoi plugin new/check/pack、remote template fetch、crates.io publication、full packaged component execution はこの Ticket の non-goals / follow-up として残しました。
主な commit:
06287aca plugin: add rust pdk template0a9e585c plugin: fix rust pdk wit template probesedc53a6b merge: plugin rust pdk templates
Review:
- r1 は WIT parse failure と embedded template Cargo workspace issue で
request_changes。 - Coder が WIT layout /
%list/ template[workspace]/ actual probes を追加。 - r2 は
approve。
最終 validation:
cargo fmt --checkgit diff --check HEAD^1..HEADcargo test -p yoi-plugin-pdkcargo test -p manifest embedded_rust_component_tool_template_is_valid_package_shapecargo test -p pod pdk_tool_output_shape_is_accepted_by_wasm_decodercargo checkcargo tree -p yoi-plugin-pdk --edges normalcargo check --manifest-path resources/plugin/templates/rust-component-tool/Cargo.toml --target wasm32-unknown-unknownnix build .#yoi --no-link
Package impact:
nix path-info -S .#yoi:112156384
Validation log:
/run/user/1000/yoi/yoi-orchestrator/bash-output/bash-o9gvGb.log