Gate House ruled all three questions within a day, attributing the speed to the request being filed before the architecture with candidate answers and their costs. R1 PEP-shaped, confirmed as proposed. The ruling settles the shape; the layer stays ours to declare, so layer.yaml is written in this repository's voice rather than transcribed from the reply. R2 yes to a presentation claim, no second catalog row, under three limits now declared in layer.yaml and tested. Limit 2 — the claim must never be an input to the decision it presents for — is load-bearing: our self-dealing argument was accepted because it holds, not despite it. Limit 3 drives architecture, since here the actor being audited and the evidence source are the same component. R3 (b) with the authority rule: binding digest authoritative for what the request is, view_hash only for what was shown, neither substitutable, and a disagreement between them is a finding against the presenting surface rather than a fact about the request. Linkage is co-reference; nesting was refused because it reproduces the GH-DEC-2026-008 hash cycle. Built to v0.8 obligation 3 rather than migrating later: axis enumerated, unknown resolves to fail_closed, absent distinguishable from unknown in the record, and published-equals-shipped asserted by test rather than claimed. Every stance is fail_closed, which is a conclusion not a shortcut — ops-warden can justify fail_open on a continuity argument that does not exist here. GH-DEC-2026-010 inherited as a declared gap in four documents: a decision cannot today be proven to have come from access-engine. The decision path must not be described as validated while FLEX-WP-0024 is open. 46 tests pass. T05 and T07 unblocked. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01V3W1dQG7GFFM9d94jFx7iR Assistant: claude-code Assistant-Model: opus Assistant-Process: 1565372@bnt-lap001 Assistant-Session: 16bb2f25-b34c-49ef-8e94-5fec3567a568
159 lines
8.1 KiB
Markdown
159 lines
8.1 KiB
Markdown
---
|
|
repo: informed-decision
|
|
category: product
|
|
stage: 1
|
|
stage_status: active
|
|
started: "2026-09-09"
|
|
---
|
|
|
|
> **Flavor note.** This is a durable **product** repository, not a `prj-`
|
|
> project repository. Per `project-repository-flavor_v0.1.md`, durable products
|
|
> use `INTENT.md` and an ordinary category; the `prj-` flavor is for bounded
|
|
> cross-repo coordination efforts and is not used here. `GOAL.md` is retained
|
|
> as the *stage* statement: `INTENT.md` is stable and aspirational, this file
|
|
> is what the current stage must achieve and is replaced when the stage turns
|
|
> over.
|
|
|
|
# Goal — informed-decision, Stage 1
|
|
|
|
## Outcome
|
|
|
|
**The approver UI has an owner, and it is this repository.**
|
|
|
|
Stage 1 is complete when a human approver can be shown a `approval-engine`
|
|
approval request on a surface this repository owns, understand it, act on it
|
|
with a vocabulary richer than approve/reject, and leave behind a
|
|
reconstructable record of *what they were shown when they bound themselves* —
|
|
and when `key-cape` holds the browser-client registration it has been waiting
|
|
for since 2026-09-08.
|
|
|
|
Two things are being settled at once, and they are the same thing:
|
|
|
|
1. **The ownership question.** `approval-engine` disowns the inbox by design
|
|
and named the gap in `docs/keycape-service-registrations.md`. Nobody picked
|
|
it up. Stage 1 picks it up, in writing, with a catalog placement agreed by
|
|
`gate-house` rather than asserted.
|
|
2. **The capability.** A browser-facing approver surface that presents
|
|
`approval:approve` tokens to `approval-engine` and records the presentation.
|
|
|
|
## Why this is the first stage
|
|
|
|
The founding exploration reaches L5 — multi-party international instruments.
|
|
Stage 1 deliberately does not. It takes the **narrowest real consumer with a
|
|
live blocking dependency**, because a decision surface with no consumer is a
|
|
design document, and this estate already has enough of those.
|
|
|
|
The approval approver flow is L3 on the depth spectrum. It is the right first
|
|
cut because it is the only level currently costing another repository progress.
|
|
|
|
## What Stage 1 delivers
|
|
|
|
- `INTENT.md`, `GOAL.md`, `SCOPE.md`, and a `layer.yaml` derived from a
|
|
`gate-house` answer.
|
|
- The four specs: `docs/specs/ProductRequirementsDocument.md`,
|
|
`docs/specs/UseCaseCatalog.md`, `docs/specs/ArchitectureBlueprint.md`,
|
|
`docs/specs/EvidenceModel.md`.
|
|
- The Decision Memo schema promoted out of `history/` into `schemas/`, with the
|
|
canonicalizer and the isolation vectors under test in CI.
|
|
- A published OIDC browser-client contract — `client_id` and callback URI —
|
|
handed to `key-cape`, closing `KEY-WP-0013-T02`.
|
|
- A working L3 approver surface against a deployed `approval-engine`.
|
|
|
|
## What Stage 1 explicitly does not deliver
|
|
|
|
- L4/L5, QES, QTSP integration, or qualified archival retention.
|
|
- Multi-party parallel sign-off (`Mitzeichnung` across several parties at once).
|
|
- The mandate graph. Stage 1 routes to a named approver; it does not maintain a
|
|
living map of who may bind what. Without that map, `escalate` is only
|
|
forwarding — this is a **known and accepted** Stage 1 limitation, recorded
|
|
here so it is not discovered later as a defect.
|
|
- EUDI Wallet / eID identity import. Identity comes from `key-cape` only.
|
|
- A general workflow engine, a notification transport, or a ticketing system.
|
|
|
|
## Invariants
|
|
|
|
These hold for Stage 1 and for every stage after it.
|
|
|
|
- **`access-engine` remains the only policy decision point.** This repository
|
|
renders questions and records answers. No endpoint here answers "may this
|
|
actor do X". A disposition recorded on a memo is evidence of a human act, not
|
|
an authorization verdict.
|
|
- **`approval-engine` remains the sole owner of approval state.** This surface
|
|
calls its mutations and reads its introspection claim. It never caches
|
|
validity, never infers consumption, and never holds approval current-state.
|
|
`GH-DEC-2026-003` ordering is honoured: decision, then consume, then act.
|
|
- **`approved` is never rendered as permission to act.** It is a state of an
|
|
object. Presenting it as "you may now do the thing" is a policy decision point
|
|
in the browser.
|
|
- **The decision path is not validated, and must not be described as such.**
|
|
`GH-DEC-2026-010` requires a decision be attributable to `access-engine`, and
|
|
no consumer can satisfy that today — the envelope is unsigned
|
|
(`FLEX-WP-0024`). This surface records that a decision was obtained and what
|
|
it said, and records `decision_attributable: false`.
|
|
- **Entitlement to view is `access-engine`'s.** A `200` from `approval-engine`
|
|
is not permission to see the approval; that engine never answers "may this
|
|
actor do X". This surface obtains a decision before rendering and never
|
|
substitutes local judgment for it.
|
|
- **Identity is imported.** Every principal on this surface is authenticated by
|
|
`key-cape`. No local credential, no self-issued assurance level. Human
|
|
principals carry `principal_type: human` and are refused `approval:consume` by
|
|
the engine — this surface must never attempt it.
|
|
- **The binding/awareness split survives contact with the first consumer.**
|
|
`view_hash` covers only what the person committed to. Proposed roles,
|
|
other-tenant orientation and last-session summaries are hashed separately and
|
|
are not signed unless explicitly promoted into `awareness_promoted`.
|
|
- **One question per memo.** An approval that bundles three unrelated acts is
|
|
three memos.
|
|
- **Humans bind, agents draft.** An agent may assemble a memo and may not
|
|
complete a disposition.
|
|
- **The schema does not fork.** Any Stage 1 field added for approvals must be
|
|
expressible for an L0 login banner, or it does not go in the shared object.
|
|
|
|
## The question Stage 1 must answer in writing
|
|
|
|
> **Who owns the approver UI?**
|
|
|
|
**Answered 2026-09-09 by `GH-DEC-2026-012`.** The proposal below was confirmed
|
|
in full. Recorded as proposed-then-ratified rather than rewritten as though it
|
|
had always been settled:
|
|
|
|
- **informed-decision owns it** — the surface, the presentation record, the
|
|
browser client, and the evidence of informedness.
|
|
- It is **PEP-shaped**, not an Engine: it is browser-facing and causes a
|
|
protected side effect on the far side of a decision, so it owes companion §5
|
|
and statute §6.4.
|
|
- It supplies exactly one PIP-like fact — *what was presented* — as a claim
|
|
carrying `view_hash`, issuer and freshness, and it never evaluates that fact.
|
|
- **Ruled:** PEP-shaped, confirmed as proposed. No second catalog row for the
|
|
presentation claim — PEP and PIP are shapes a repository has. The claim is
|
|
permitted under three limits (presentation-only; never an input to the
|
|
decision it presents for; evidence reaches `audit-core` independently), and
|
|
`view_hash` versus the binding digest is settled as distinct attestations with
|
|
an authority rule, linked by co-reference and never by nesting.
|
|
`layer.yaml` and `pep-stance.yaml` declare it; `INTENT.md` carries the
|
|
reasoning.
|
|
|
|
## Definition of done
|
|
|
|
1. ~~`gate-house` has ruled on the layer placement and `layer.yaml` reflects
|
|
it.~~ **Done 2026-09-09** — `GH-DEC-2026-012`; `layer.yaml`,
|
|
`pep-stance.yaml` and `tests/test_layer_conformance.py`.
|
|
2. `key-cape` has the `client_id` and callback URI, and `KEY-WP-0013-T02` is
|
|
unblocked with the answer traceable to this repository.
|
|
3. The four specs exist, are reviewed against the current `approval-engine`,
|
|
`access-engine`, `key-cape` and `audit-core` contracts, and name their
|
|
external gates.
|
|
4. `view_hash` / `awareness_hash` are computed by code in this repository, and
|
|
the four isolation vectors from the exploration are green in CI.
|
|
5. One approval is approved end to end by a human through this surface against
|
|
a deployed `approval-engine`, and the resulting approval entry is
|
|
reconstructable from a stored presentation.
|
|
6. `return` and `discuss` are demonstrated on a real approval and are
|
|
distinguishable from `decline` in the record.
|
|
|
|
## Stage 2 and beyond — direction only, not commitment
|
|
|
|
L0 informed login/elevation in front of `key-cape`, then L2 ADR accept against
|
|
the estate's own decision records. Those two prove scale invariance downward and
|
|
sideways. L4 contract paths and any QES work wait for a named buyer and a
|
|
retention answer, both open questions in the founding exploration.
|