informed-decision/workplans/INFD-WP-0010-present-existing-and-proportionate-decisions.md
tegwick ba7a797160 State Hub ids written back (INFD-WP-0010)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

Assistant: claude-code
Assistant-Model: opus
Assistant-Process: 5502@bnt-lap001
Assistant-Session: 68b3b02f-5d0f-4e71-8421-796f62e50196
2026-10-31 23:19:11 +01:00

4 KiB
Raw Permalink Blame History

id type title domain repo status owner topic_slug created updated flavor depends_on related state_hub_workstream_id
INFD-WP-0010 workplan Present existing approvals, proportionate C1 confirm and hub write-back infotech informed-decision proposed claude-code netkingdom 2026-10-31 2026-10-31 implementation
NK-WP-0056
INFD-WP-0005
APPROVAL-WP-0007
d1363acf-35c2-56ce-be1b-ecebd15b5253

INFD-WP-0010: present existing approvals, proportionate decisions

Owner answer to net-kingdom's decision services alignment review (2026-10-31): see docs/decision-services-alignment-answer.md. Founder direction: informed-decision is the one human-facing decision surface. It should be light for simple decisions and complete for risky ones, and its split with approval-engine should be explicit: approval-engine holds the object, created by the actor who uses it, and informed-decision presents it and records the human's act.

S1: present_existing intake profile

id: INFD-WP-0010-T01
status: done
priority: high
state_hub_task_id: "6e5fe18d-c59f-5abd-ab2d-4e0b738743a9"

A registered submitter's profile present_existing (approval_actor, actions) lets it pose a memo that pins an approval it created itself. Intake GETs the approval and verifies: status requested, no entries, human_control, actor == profile actor, digest == memo, binding == intent, required_count 1, not expired, one memo per approval. It never creates, enters or consumes. The recorded requester flows to review and to the access-engine context. Existing submitters are unchanged.

Done 2026-10-31 (local): code in intake.py, intake_service.py, intake_approval.py, requester.py, store.py; tests in tests/test_intake_present_existing.py. Not deployed.

S1 live enablement for nk-bind-executor

id: INFD-WP-0010-T02
status: wait
priority: high
depends_on: [INFD-WP-0010-T01]
state_hub_task_id: "6c522bcb-5581-5062-a1e4-7e2af6dabcfd"

Waiting on owners outside this repository:

  • access-engine: a compact-sitting version that admits approval_requester service:nk-bind-executor for submitter nk-bind-executor and class bounded-execution, at aal2 (v13 requires informed-decision);
  • key-cape: approval:read on informed-decision-sitting-requester;
  • net-kingdom: an executor projected token with audience informed-decision-intake, and a NetworkPolicy to the private listener.

Then here: the policy pin, a registry row, a release, and a native proof with synthetic BEA content. Optional: for bounded-execution, require a packet item whose digest equals target.admission_digest, once the admission digest's canonical form is confirmed.

Done when: a founder aal2 accept of an executor-created approval is recorded, and the executor consumes it.

S4: C1 single-screen confirm

id: INFD-WP-0010-T03
status: wait
priority: medium
state_hub_task_id: "0b3750f5-47c3-5874-bebb-7ebab385a3df"

A lighter memo profile with one question, one packet item, one required highlight and options. It needs a fresh aal1 session and creates no approval object. It records view_hash and disposition and resolves the served hub decision. Waits on gate-house doctrine for decision classes C0–C3 (review S5), an access-engine policy action for an approval-less confirm, and the founder's answer on class cuts.

Done when: a C1 decision is confirmed in the browser and resolves its hub decision with evidence. No approval object is created.

id: INFD-WP-0010-T04
status: wait
priority: medium
state_hub_task_id: "8c649193-f274-5463-9897-7010a5bb4a9d"

The write-back exists (INFD-WP-0005, INFD_HUB_WRITEBACK). Remaining work:

  • the founder's decision to enable it in production;
  • with state-hub: structured decision links (memo_id, approval_id, view_hash, evidence_ref) that replace the rationale-text idempotency check.

Done when: a served hub decision is resolved by a human disposition in production, and its link fields are populated.