Document the decision overview and finish INFD-WP-0003 (T04)

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

Assistant: claude-code
Assistant-Model: opus
Assistant-Process: 359683@bnt-lap001
Assistant-Session: eebdc939-7a9b-4e50-9d39-c8437e8a14ec
This commit is contained in:
tegwick 2026-09-21 22:08:46 +02:00
parent 0632215b5d
commit 6509ff1460
3 changed files with 53 additions and 3 deletions

View file

@ -54,7 +54,7 @@ old evidence and submission records.
| Route | Behavior |
| --- | --- |
| `GET /` | Sign-in or named memo identifier form; no approvals inbox |
| `GET /` | Sign-in, then the reviewer's decision overview (below) and the memo identifier form |
| `GET /review?memo_id=...` | Entitled current memo; existing intent retrieves its original view |
| `GET /presentations/<id>` | Entitled historical presentation and current submission result |
| `GET /presentations/<id>/packet/<index>` | Fresh read permission and full attachment bytes |
@ -76,6 +76,42 @@ inline scripts, framing and caching remain prohibited. There is no telemetry
or client-side token storage. The reverse proxy must still omit auth queries,
bearer headers and cookies from its logs.
## Decision overview
Added under `INFD-WP-0003`. After sign-in, `GET /` lists the memos this
repository holds that name the signed-in person as the person bound
(`binding.principal`, kind `person`). The latest version of each memo is placed
in one group:
| Group | Condition |
| --- | --- |
| Needs attention | the accepted entry is `in_flight` or `unresolved` and needs operator recovery |
| Open for you | no decision recorded on the latest version, or a prepared accept not yet submitted, and the approval is `requested`/`approved` or its status is unknown |
| Accepted | Approval Engine confirmed the entry. The row shows `approved_at` and the live status |
| Declined | the latest response on the latest version is `decline` |
| Returned or in discussion | the latest response on the latest version is `return` or `discuss`. A revised version moves the memo back to Open |
| Closed without your response | the approval is `expired`, `revoked`, `superseded` or `consumed` and you recorded no decision |
| Not available | the permission check refused or failed. Only the memo id and a bounded reason are shown |
Each row links to `/review?memo_id=...`. It also lists the person's earlier
responses on every version.
The overview is not an inbox and not approval state:
- **It checks permission per row.** Each row gets its own fresh Flex Auth
`read` decision before its question is shown. It is the same check the
review uses, and each decision is stored as a policy observation. A refused
row does not call Approval Engine.
- **It reads Approval Engine by id only.** The overview looks up the approval
id the memo already carries. It never polls for work. The status is shown
live and never stored. An unavailable engine, or an act digest that no longer
matches, degrades only that row.
- **It records nothing.** It creates no presentation, acknowledgment or
disposition. Binding still happens only on the review page, which runs its
own checks again.
- **It shows little memo content.** A row shows only the question, the memo id
and version, and the status. The brief and packet appear only on the review.
## Owner configuration and audit readiness
Set `INFD_REVIEW_CONFIG` to an absolute, owned, regular 0600 JSON file. Its