feat(review): add multi-owner contracts and receipts
All checks were successful
CI Smoke / host-smoke (push) Successful in 0s
CI Smoke / container-smoke (push) Successful in 1s
Build and Publish Multi-Context Image / build-and-push (push) Successful in 25s

Assistant: codex
Assistant-Model: gpt-5.6-sol
Assistant-Session: 01a023c0-a0a3-7c03-b395-5a0d2757214d
This commit is contained in:
tegwick 2026-08-22 20:57:51 +02:00
parent 52aefe39e4
commit 598f6418e7
13 changed files with 1401 additions and 9 deletions

View file

@ -4,7 +4,7 @@ type: workplan
title: "Multi-owner review contracts and receipts"
domain: infotech
repo: state-hub
status: active
status: finished
owner: codex
topic_slug: multi-owner-review-contracts
created: "2026-08-22"
@ -36,7 +36,7 @@ separable for later movement to `hub-core`.
```task
id: STATE-WP-0082-T01
status: progress
status: done
priority: high
state_hub_task_id: "a6511423-78e0-51c6-8c7d-b91609e331ff"
```
@ -51,11 +51,15 @@ Done when the boundary preserves existing simple decisions, keeps repository
files authoritative, treats State Hub as projection, and states explicitly
that a satisfied procedure review is not an execution authorization.
Implemented in `docs/review-contracts-v1.md` and the
`review-contract/v1` validator. The bounded WP-0024 adapter preserves the
prototype source digest and derives stable assertion ids.
## Add projection persistence
```task
id: STATE-WP-0082-T02
status: todo
status: done
priority: high
state_hub_task_id: "e2ac4ad6-91d9-5b4e-a0fb-7106c731e348"
```
@ -69,11 +73,15 @@ and optional links to a decision, workplan, or task.
Done when upgrade/downgrade works and existing decision rows and routes require
no data rewrite.
Implemented as separate `review_contracts` and append-only
`review_receipts` tables in migration `c9e5a1b3d7f2`. A clean
upgrade/downgrade/upgrade round trip passed.
## Implement validation and aggregation APIs
```task
id: STATE-WP-0082-T03
status: todo
status: done
priority: high
state_hub_task_id: "48682d0c-e69f-5486-a007-472dea959994"
```
@ -88,11 +96,15 @@ For version 1, support the prototype's `all_required` policy only. A latest
valid `request_changes` blocks its owner's gates; contract changes make prior
receipts stale rather than mutating or deleting them.
Projection, receipt, exact listing, and aggregate routes enforce the v1
contract. Linked required reviews now prevent legacy decision resolution from
bypassing an unsatisfied gate.
## Provide a direct client and legacy adapter
```task
id: STATE-WP-0082-T04
status: todo
status: done
priority: medium
state_hub_task_id: "9ab5b022-25d0-556c-bca0-222c414bc18f"
```
@ -105,11 +117,15 @@ migrate without making State Hub execute its repository-specific checks.
Done when callers no longer encode receipts as opaque agent-message bodies and
message transport can carry stable contract/receipt references instead.
Implemented `statehub review project|submit|status`. The client derives the
repository path and full revision from Git. Legacy message receipts remain
historical notifications rather than canonical evidence.
## Pilot with railiance-infra
```task
id: STATE-WP-0082-T05
status: todo
status: done
priority: high
state_hub_task_id: "90af0001-17c6-5cbb-9d08-64947211f956"
```
@ -123,11 +139,19 @@ The pilot must prove approval, request-changes supersession, artifact-change
staleness, duplicate idempotency, wrong-owner rejection, canonical UTC receipt
time, and rebuild from repository files.
Projected contract `01a02ac9-9e90-74c0-bdb2-a8604d32b542` from
`railiance-platform@a557208a4a33520c39f749dcc26e6985386a96d4`.
Projected railiance-infra receipt
`01a02aca-02dd-7b16-93f2-7ab455976059` from
`railiance-infra@d85237aee8080201ddacb2d4f34a15b6fc91609b`.
Its owner state is approved while both gates remain unsatisfied and
`authorizes_execution` remains false.
## Verify compatibility and extraction readiness
```task
id: STATE-WP-0082-T06
status: todo
status: done
priority: medium
state_hub_task_id: "c8486c31-d36b-5517-be2f-7efc715dfd79"
```
@ -138,6 +162,19 @@ future `hub-core` extraction boundary. Record any unimplemented authenticated
actor-to-owner authorization as a live residual rather than implying that a
caller-supplied owner string is authority.
Focused lint and 13 affected tests pass. The full suite reached 639 passing
tests; its sole foreign-key inventory failure was updated for the two new
CASCADE links and the affected suites then passed. Authenticated actor-to-owner
delegation is live residual intake
`01a02aca-2dfc-7e57-bebf-f5e970d7b403`.
## Residual handoff
Authenticated actor-to-owner delegation and authorization proof are tracked by
State Hub intake `01a02aca-2dfc-7e57-bebf-f5e970d7b403` (`origin:
residual`, `origin_ref: STATE-WP-0082`). Until that work is promoted, actor
strings are coordination identities only.
## Acceptance
- Existing single-decider APIs remain backward compatible.