pub fn respond(hook_json: &str, project_dir: &Path) -> Option<String>Expand description
The whole envelope, total: hook JSON in, at most one voice block out. Every
failure path is None — the fail-open contract as a return type. The voices are
derived from project_dir (the register, the shim evidence), the classes come
from spec/agenda.register, and the edited path is normalized repo-relative so
messages match what the repo’s own gates would say.
Capability: Effectful — reads the edited file, the registers, and build.rs
under project_dir.