diff --git a/docs-ai/064-agent-completion-signals/012-cli-evidence-semantics.md b/docs-ai/064-agent-completion-signals/012-cli-evidence-semantics.md index e364ac4f..bb251625 100644 --- a/docs-ai/064-agent-completion-signals/012-cli-evidence-semantics.md +++ b/docs-ai/064-agent-completion-signals/012-cli-evidence-semantics.md @@ -73,6 +73,26 @@ and `DISPATCH_ALREADY_TERMINAL`. - `make check`, targeted `xcodebuild test` suites, `make build-cli`, `make test-cli-unit`, `make test-cli-smoke`, `make test-cli-integration`, `make build-app` (see the PR). +## Review + +Three adversarial rounds with the `Pi Reviewer` Profile launched beside the coordinator via +`prowl create pane --profile … --prompt -` and awaited with `agents wait --dispatch`; briefs and +findings stayed outside the repository. Each accepted finding was fixed test-first. + +- Round 1 — P1: `makeResult` checked the transcript session before the live status, so a live + agent without a resolved session reported `unavailable` instead of `pending`; P2: the schema + neither required `signal.binding` nor paired `unbound` with its warning. Fixed in 4965fc00. +- Round 2 — P1: the tightened schema rejected the two `agents.signal` integration fixtures + (`make test-cli-integration` red); P3: the skill named only one `unbound` cause. Fixed in + 7f457b5b. +- Round 3 — P3 only: the skill overstated when an already-idle agent returns immediately. + Fixed in the closing docs commit; loop closed with no P0–P2 open. + +Two operational lessons from the loop: a second concurrent `xcodebuild test` in the same +checkout hangs the build service (the reviewer's run sat 27 min at 0 % CPU), and a Profile +launch fails with `CREATE_FAILED` while the display is asleep (see the 064 S3c notes) — both +handled by serializing app test runs and keeping the display awake during unattended rounds. + ## Observed but not changed - Cooperative signals are still coalesced by state at a 200 ms poll: `needs-input` followed diff --git a/skills/prowl-cli/SKILL.md b/skills/prowl-cli/SKILL.md index c117b034..8dc359eb 100644 --- a/skills/prowl-cli/SKILL.md +++ b/skills/prowl-cli/SKILL.md @@ -187,7 +187,7 @@ result="$(prowl agents wait "$pane" --until idle --include-screen 40 --timeout 6 printf '%s\n' "$result" | jq '.data.observation, .data.screen' ``` - `--until idle|blocked` observe the current state: a signal that already existed when the wait was armed counts only if the screen detector agrees, a signal arriving afterwards counts on its own, and an already-idle agent returns immediately. To wait for the *next* turn edge (for example after `send`ing a new prompt), use `--until changed`; with a `verified_live` hook channel it returns at the next runtime signal, not at a screen change. + `--until idle|blocked` observe the current state: a signal that already existed when the wait was armed counts only if the screen detector agrees, a signal arriving afterwards counts on its own, and an already-idle agent with such a signal returns immediately. Detection-only evidence (no hook or cooperative signal, the usual case for a manually launched agent) resolves only after the state has stayed unchanged for two seconds, so give those waits a `--timeout` of at least a few seconds. To wait for the *next* turn edge (for example after `send`ing a new prompt), use `--until changed`; with a `verified_live` hook channel it returns at the next runtime signal, not at a screen change. Exact/high evidence can establish the requested observable condition. If `jq -e '.data.observation.confidence == "heuristic"'` matches, inspect the included stable