Record that hub forwarding preserves governed booleans.

state-hub d61ba32 accepts requires_new_bind, required_ack, and sealed.
The p01 cross-repo check now expects a delivered pose that keeps those
bools. T08 stays waiting on the service account, grant, and T05/T06.

Assistant: grok
Assistant-Session: 01a10286-9185-7bb2-b411-89cf6ab4c0c6
This commit is contained in:
tegwick 2026-10-03 22:27:26 +02:00
parent ff59199c3b
commit b4f637326b
3 changed files with 32 additions and 22 deletions

View file

@ -95,13 +95,13 @@ Existing request: `e30dea31-90e3-4fc0-954a-ed8412b52aca`.
Deliver forwarding with the projected intake-audience SA token, bounded envelope,
stable idempotency key, durable retry and receipt retention. Owner commit
`49eeddb` provides a dev-only forwarding fixture and retained notification
receipts. Its `_bounded_tree` accepts only int/float/null scalar leaves and
rejects governed memo booleans (`requires_new_bind`, `required_ack`, `sealed`)
with `invalid_type`; a cross-repo negative fixture reproduces this using p01.
Accept boolean leaves without removing or coercing shared-schema binding fields,
then provide pose/replay/conflict and browser/PDP acceptance evidence. The
fixture is unscheduled and does not choose/admit an account. Identify the actual
SA and supply runtime forwarding to review into the submitter registry.
receipts. `d61ba32` accepts governed memo booleans (`requires_new_bind`,
`required_ack`, `sealed`) as boolean leaves; a cross-repo fixture submits the
real p01 envelope and checks those values are preserved. Do not strip or coerce
shared-schema binding fields. Pose/replay/conflict evidence exists in the dev
fixture. Browser/PDP acceptance remains open. The fixture is unscheduled and
does not choose/admit an account. Identify the actual SA and supply runtime
forwarding to review into the submitter registry.
Forwarding proves the hub identity; drafted_by remains visibly asserted.
The dedicated endpoint `POST /informed-decision/notifications` accepts only
id/question/class/submitter using our stable delivery id as Idempotency-Key.
@ -162,6 +162,13 @@ Full suite with `INFD_AUDIT_CORE_SOURCE=/home/worsch/audit-core` and
Checks include posed receiver acceptance/lost-reply replay, immutable local
evidence/counts, readiness refusal, notification contract/receipt matching,
resolution retry on unreadable conflicts, explicit runtime configuration and
the State Hub forwarder's governed-boolean refusal. `git diff --check` passed.
the State Hub forwarder's governed-boolean refusal at `49eeddb`.
No new tasks/workplans or live changes were created. T07 is complete locally;
T05/T06/T08/T10 remain waiting and INFD-WP-0005 remains blocked.
Boolean follow-up, same source roots: state-hub `d61ba32` delivers the real p01
envelope and preserves `requires_new_bind`, `required_ack`, and `sealed`.
Focused intake tests: 46 passed, 3 skipped. A later full local run was
449 passed, 64 skipped, and 4 failed outside this change (`waitress` is not
installed, and one access-token audience case in `test_browser_auth.py`).
`git diff --check` passed for this follow-up. T08 stays waiting.

View file

@ -162,7 +162,7 @@ def hub_contract():
return informed_decision_contract, memo_forwarding
def test_actual_hub_forwarder_refuses_governed_boolean_fields(setup, hub_contract, tmp_path):
def test_actual_hub_forwarder_preserves_governed_boolean_fields(setup, hub_contract, tmp_path):
service, store, creates, _ = setup
contract, forwarding = hub_contract
body = envelope()
@ -176,12 +176,15 @@ def test_actual_hub_forwarder_refuses_governed_boolean_fields(setup, hub_contrac
fixture = forwarding.DevIntakeFixture(tmp_path / 'hub.sqlite', transport=transport,
intake_base_url='https://intake.test', hub_base_url='https://hub.test',
token_reader=lambda: 'projected-token')
# Owner commit 49eeddb only permits int/float/null leaves, rejecting the
# shared schema's actual bools. Do not strip or change those binding fields.
with pytest.raises(contract.ContractError) as refused:
fixture.submit(body)
assert refused.value.code == 'invalid_type'
assert not store.memos_for('keycape-human') and not creates and not calls
# Owner commit d61ba32 accepts the shared schema's bool leaves. Do not strip
# or coerce requires_new_bind, required_ack, or sealed.
posed = fixture.submit(body)
assert posed.status == 'delivered' and len(calls) == 1 and len(creates) == 1
memo = calls[0]['memo']
assert memo['binding']['target']['requires_new_bind'] is False
assert memo['highlights'][0]['required_ack'] is True
assert memo['sealed'] is False
assert store.memos_for('keycape-human')
assert b'projected-token' not in Path(fixture.path).read_bytes()

View file

@ -167,18 +167,18 @@ id: INFD-WP-0005-T08
status: wait
priority: medium
blocked_on: message-from:state-hub
blocking_reason: "Owner dev forwarder 49eeddb refuses governed bool fields (invalid_type); state-hub must fix its contract, choose the actual SA and supply reviewed grant/runtime forwarding (msg e30dea31), alongside T05/T06"
blocking_reason: "state-hub must choose the actual SA and supply reviewed grant/runtime forwarding (msg e30dea31), alongside T05/T06"
state_hub_task_id: "ce2b36b4-ef82-53b7-aee7-e0063855370b"
```
Register state-hub as a submitter and run an end-to-end pose from a hub
decision through to the founder's review page in a dev stack.
The owner's DevIntakeFixture now has a cross-repo negative fixture against the
real p01 envelope: `_bounded_tree` refuses `requires_new_bind`, `required_ack`
and `sealed` booleans. The owner must accept shared-schema boolean leaves;
removing or coercing binding fields here is not a compatible workaround.
Production submitter registration and browser/PDP acceptance also wait on
T05/T06 and the owner's chosen SA/runtime forwarding.
state-hub `d61ba32` accepts shared-schema boolean leaves. The cross-repo
fixture submits the real p01 envelope and preserves `requires_new_bind`,
`required_ack`, and `sealed`. Stripping or coercing those fields is not a
compatible workaround. Production submitter registration and browser/PDP
acceptance still wait on T05/T06 and the chosen SA and reviewed runtime
forwarding.
## Doctrine response