diff --git a/docs-ai/065-bundled-agent-skills/001-action.md b/docs-ai/065-bundled-agent-skills/001-action.md index 5ac4a024..50019e65 100644 --- a/docs-ai/065-bundled-agent-skills/001-action.md +++ b/docs-ai/065-bundled-agent-skills/001-action.md @@ -61,9 +61,10 @@ - Settings reports a successful link with a toast only (the chip changes state); the plan's "mirroring the CLI install row" did not decide this, and a modal per link would be noise. - `agentSkills` is created and cleared by `SettingsFeature.setSelection`, not by - `AppFeature.setSelection` as the plan's `agentProfiles` analogy implied: a grandparent - mutation happens after the child `ifLet` has run, so it cannot cancel in-flight link effects - (K3 review round 1). + `AppFeature.setSelection` as the plan's `agentProfiles` analogy implied: the grandparent's + `Reduce` runs before the `Scope` into `SettingsFeature`, so its mutation lies outside the + child `ifLet`'s transition boundary and cannot cancel in-flight link effects (K3 review + round 1, wording corrected in round 2). - The section shows detected targets only, as planned, but the "no target detected" state adds an explicit pointer to `prowl skills install --target …` since Settings never creates folders. diff --git a/docs-ai/065-bundled-agent-skills/005-k3-settings-agent-skills.md b/docs-ai/065-bundled-agent-skills/005-k3-settings-agent-skills.md index 975a3185..463e7a26 100644 --- a/docs-ai/065-bundled-agent-skills/005-k3-settings-agent-skills.md +++ b/docs-ai/065-bundled-agent-skills/005-k3-settings-agent-skills.md @@ -61,9 +61,10 @@ shared installer so both surfaces always report the same status. Adversarial review round 1 (sibling reviewer, brief and findings kept outside the repository) found no P0/P1 and one P2: the child state was created and cleared by `AppFeature.setSelection`, -the grandparent, which mutates `settings.agentSkills` *after* `SettingsFeature`'s `ifLet` has -already run for that action — so the `ifLet` never observed a non-nil → nil transition and an -in-flight install/uninstall effect survived the section switch; its delayed completion then hit +the grandparent, whose core `Reduce` runs before the `Scope` into `SettingsFeature` — so the +nested optional was already nil when `SettingsFeature`'s `ifLet` ran, the `ifLet` never observed +a non-nil → nil transition of its own, and an in-flight install/uninstall effect survived the +section switch; its delayed completion then hit nil child state (a TCA runtime warning in Debug) and was dropped without the promised refresh, toast, or failure alert. The reviewer reproduced it with a suspended-install probe. The lifecycle now lives in `SettingsFeature.setSelection` (create on `.commandLineTool` when absent, clear @@ -71,6 +72,11 @@ otherwise), so `ifLet` cancels the child's effects with the state; `AppFeature` `agentSkills`. Pinned by an `AppFeature` test that suspends install/uninstall on a `TestClock`, switches to General, and requires every effect to be gone. +Round 2 re-verified the fix (including re-selecting the same row, reopening Settings mid-action, +and creating a replacement child) and found no P0/P1/P2; its one P3 was that this record and the +action log had described the reducer order backwards ("after the `ifLet` had run"), corrected +above. The review loop closed there. + ## Verification - TDD RED: 25 missing-symbol errors for `SkillInstallClientTests` before the client existed;