P3 (embedder surface, none blocking):
ExecuteOptions callback type is awkward: Option<&mut (dyn FnMut(&ExecResult) + Send)> is hard to call — a trait-object alias or dedicated Callback trait would smooth it.
ToolCtx::backend() forces a full KernelBackend mock for out-of-tree tool tests (~16 async methods) even for I/O-free tools. Options: (a) a #[cfg(feature = "test-util")] no-op harness in kaish-tool-api (less invasive), or (b) backend() returning Option<…>. Revisit when the first external tool bundle wants unit tests.
- Recursive/tree
--json carries structure but no size/type metadata: tree --json / ls -R --json (without -l) serialize shape with null leaves — the tree-JSON shape has nowhere to hang per-node metadata. Fix is a shape decision: table-with-children, or a per-node metadata slot.
Migrated from docs/issues.md (P3) in the 2026-07-16 sweep.
P3 (embedder surface, none blocking):
ExecuteOptionscallback type is awkward:Option<&mut (dyn FnMut(&ExecResult) + Send)>is hard to call — a trait-object alias or dedicatedCallbacktrait would smooth it.ToolCtx::backend()forces a fullKernelBackendmock for out-of-tree tool tests (~16 async methods) even for I/O-free tools. Options: (a) a#[cfg(feature = "test-util")]no-op harness inkaish-tool-api(less invasive), or (b)backend()returningOption<…>. Revisit when the first external tool bundle wants unit tests.--jsoncarries structure but no size/type metadata:tree --json/ls -R --json(without-l) serialize shape withnullleaves — the tree-JSON shape has nowhere to hang per-node metadata. Fix is a shape decision: table-with-children, or a per-node metadata slot.Migrated from
docs/issues.md(P3) in the 2026-07-16 sweep.