docs/qa/automatic-hooks-2026-09-30.md
Automatic hook configuration verification — 2026-09-30
Scope: specs/010-automatic-agent-hooks, baseline main 375fc8f. Native Linux, GTK4/libadwaita/VTE; no paid model requests or changes to real provider configs.
Observed behavior
Real-PTY fake-provider tests load installed configuration at process startup, execute the generated reporter commands through the shell, and observe actual server Idle → Working → Blocked → Done states. Splits prepare before startup. An official adapter resume after server restart recreates removed Codex hooks inside its original custom config root. Fake API credentials are absent from persisted state. CLI JSON keeps the setup report; human output shows the notice.
Malformed config and foreign plugins survive byte-for-byte; ordinary terminal
execution continues after setup failure. Shells, hints and generic agent do
not authorize provider writes. Relative roots resolve against the launch cwd;
Claude bare/excluded settings modes remain disabled. Codex hooks are configured
without trust-state edits or bypass flags.
Installer regressions cover mixed ownership, foreign metadata/empty events, compound legacy commands/operators/newlines, refresh, concurrent installation, quoted executable paths, idempotent no-op bytes/timestamps, permissions, symlinks, relative config roots and FIFO rejection. Preservation regressions reproduced red before their fixes.
Review
Separate Standards and Spec reviews found and reproduced preservation, ownership, nonregular-file, disabled-option syntax and relative-root problems. All were corrected and regression-tested. Final reviews report no material blockers.
Verification
cargo build --workspace: passed.cargo test --workspace: passed: 206 tests, no failures.cargo clippy --workspace --all-targets: passed; only the two unchanged existing warnings at audit.rs:111 and router.rs:300.cargo fmt --check,git diff --check: passed.- Eleven ignored GTK display tests: passed, each in its own process/session. GTK must initialize on one thread; one Rust test process per ignored test avoids test-harness thread affinity errors even with --test-threads=1.
- Native setup notice test confirms literal text in ForceLight and ForceDark.
To repeat display checks, enumerate cargo test -p signaltty-gui -- --list --ignored,
then run each name individually with
dbus-run-session -- cargo test -p signaltty-gui -- <name> --exact --ignored --test-threads=1.
Provider probes: Claude 2.1.285, Codex 0.159.0, OpenCode 1.18.33 installed.
OpenCode v1.18.33 source confirms identical export functions are deduplicated; its session schema supplies sessionID and status objects.
The local agent executable is Grok 1.0.44, so Cursor was not exercised against
a local runtime. Provider schema tests still cover Cursor installation. Tests
use fixtures and temporary provider roots, not live model sessions. Installing
configuration does not prove a provider trusted or loaded it: Codex still owns
its native /hooks review. Direct launch is the automatic trigger; agents typed
inside existing shells require previously configured hooks or manual installation.
Delivery: pushed 6cd930b9d46f94c0194a47a2a44a391cdff8620a to origin/main.
Remote CI run 36643280057 passed fmt, clippy and all workspace tests.
Total local verification: 206 workspace + 11 native display tests = 217 passing.