# WP-0024 direct owner-review interface This interface lets each procedure owner inspect its exact review assertions, run the applicable read-only checks, and submit an approval or change request directly. No coding agent has to copy a to-do or translate a prose reply. The canonical contract is `interfaces/RAILIANCE-WP-0024-owner-reviews.json`. A receipt is valid only for the canonical SHA-256 digest of that contract and the pinned digests of the owner's artifacts. Any procedure change therefore makes prior approval stale. ## Owner flow Run these commands from a current `railiance-platform` checkout, replacing the owner and reviewer with your stable agent or operator identifier: ```bash python3 scripts/wp0024-owner-review.py show --owner audit-core python3 scripts/wp0024-owner-review.py verify --owner audit-core python3 scripts/wp0024-owner-review.py approve --owner audit-core --reviewer audit-core ``` Valid owners are `audit-core`, `rapp-postgres`, `railiance-cluster`, `railiance-infra`, and `railiance-platform`. `approve` repeats verification and submits the receipt only when artifact hashes and all named read-only checks pass. The checks may read resource metadata, but they never read Secret data or OpenBao lease payloads. They cannot revoke a lease, restart a workload, create a snapshot, or reboot a node. A successful review is still not a live execution window. The task-to-owner interface is explicit in the contract: - T02 requires `audit-core`, `rapp-postgres`, and `railiance-platform`. - T03 requires `audit-core`, `rapp-postgres`, `railiance-cluster`, and `railiance-infra`, plus `railiance-platform`. One owner receipt may approve both tasks when that owner is responsible for both; its receipt is bound to all artifacts and checks in that owner's review. To request changes instead: ```bash python3 scripts/wp0024-owner-review.py request-changes \ --owner audit-core --reviewer audit-core \ --note 'Clarify the synthetic-load abort threshold.' ``` The note is durable State Hub metadata. Do not include credentials, secret values, private keys, or sensitive provider output. ## Coordination status Anyone can collect current receipts without interpreting owner messages: ```bash python3 scripts/wp0024-owner-review.py status ``` The result reports `approve`, `request-changes`, or `missing` per owner, then computes `all_approved` separately for T02 and T03 as well as for the whole interface. Receipts for an older contract digest or different artifact hashes are counted as stale and cannot satisfy an aggregate. The interface uses `STATE_HUB_URL` when set and otherwise connects to `http://127.0.0.1:8000`. The same value can be supplied explicitly with the top-level `--api-base` option before the subcommand. ## T02 synthetic-load candidate After procedure receipts are complete, audit-core can implement directly against `interfaces/RAILIANCE-WP-0024-T02-synthetic-load-driver.json`. The contract fixes all four phases, exact JSON keys, accepted statuses, retry semantics, value-safety requirements, and custody boundary. The owner registers committed source without executing it: ```bash python3 scripts/wp0024-t02-driver-candidate.py register \ --repo ../audit-core \ --driver scripts/ \ --reviewer audit-core ``` Registration refuses untracked, modified, non-executable, or out-of-repository source. Its State Hub receipt contains the full source commit and SHA-256 driver revision. It neither runs synthetic traffic nor authorizes a lease revocation. Coordination collects the candidate with: ```bash python3 scripts/wp0024-t02-driver-candidate.py status ```