Two rulings landed and both corrected something. GH-DEC-2026-013 accepted our binding-versus-awareness argument, wrote it into the record as its §6, and did not change the outcome — it sharpened the defect. Two different facts share one field named tenant: the act-scope, a property of the act that our binding slice commits, and the principal's membership, a property of the person that approval-engine exact-matches. Gate House's correction stands: a binding slice that must commit the scope being entered should commit that scope, not borrow a membership claim to stand in for it. Our schema already does — binding.target IS the act-scope and is inside view_hash — so no field was added, only a statement (PR-08) and a provenance record (PR-09), since key-cape emits tenant as a bare string. key-cape had already implemented registration-bound tenancy on 2026-09-09, correct under both candidate rulings, so the fail-closed-at-first-use risk that made us withhold the client strings was already retired. IN-0002 closed. The one remaining input to T07 is the deployed origin. GH-DEC-2026-014 granted commitment-only evidence and bounded it. It satisfies non-alteration and NOT reconstructability, and must not be described otherwise anywhere. It also corrected our wording of the gap: we wrote that it leaves us able to erase the content, which understates it. Commitment-only moves integrity out of our control and leaves availability entirely inside it — the party that can withhold the content is the party the evidence is about. Limit 3's condition reduced, not removed. The grant carries a condition we did not propose and would not have thought of: the path must assert that committed content exists and where custody sits, so non-production is a finding attributable to the custodian rather than an unremarkable blank. A commitment with no assertion that something is being committed to is indistinguishable from a commitment to nothing. Booked as PR-53, and marked not-a-reversal-candidate. Recorded the meta-rule Gate House named, now in its third setting here: unknown versus absent in the stance map, directory-asserted versus registration-supplied in the tenant claim, erased versus never held in the evidence path. Wherever a system reaches one appearance by two routes, the record must say which route. 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
231 lines
11 KiB
Markdown
231 lines
11 KiB
Markdown
# The independent evidence path — design and decision request
|
|
|
|
**From:** informed-decision
|
|
**Raised:** 2026-09-09
|
|
**Intake:** `INFD-IN-0003`
|
|
**Blocks:** `INFD-WP-0001-T08`
|
|
**Governing:** `GH-DEC-2026-012` limit **L3-independent-evidence-path**
|
|
**Addressed to:** `audit-core` (registration and payload), `gate-house` (the
|
|
content question, if it is doctrine)
|
|
**Ruled:** `GH-DEC-2026-014` split it — the payload is `audit-core`'s custody
|
|
question; what may be *claimed* from a record of this shape is doctrine.
|
|
Commitment-only is **granted for Stage 1**, with the §4 condition below, which
|
|
this repository did not propose.
|
|
|
|
---
|
|
|
|
## 1. The obligation
|
|
|
|
`GH-DEC-2026-012` permitted this repository to emit a presentation claim under
|
|
three limits. The third:
|
|
|
|
> The evidence copy reaches `audit-core` **independently** of you. Claim
|
|
> endpoint and evidence path are different things and neither substitutes for
|
|
> the other. […] audit evidence is protected from the actor being audited, and
|
|
> here the actor and the source are the same component. The copy that is
|
|
> evidence must not be reachable only through the party it is evidence about.
|
|
|
|
Gate House named this the limit that matters most in our case, and we agree: we
|
|
render the view, we compute the hash over it, and we are the party an auditor is
|
|
checking. A design where the only route to the evidence runs through us is not
|
|
evidence.
|
|
|
|
`docs/specs/ArchitectureBlueprint.md` `O-02` records the mechanism as unchosen
|
|
and states T08 must not ship without it, because "we will add the independent
|
|
path later" is how limit 3 becomes limit-3-in-principle.
|
|
|
|
## 2. What is settled and not being asked
|
|
|
|
**Read independence is the property.** A reader obtains the evidence from
|
|
`audit-core` without asking us and without our cooperation. Our claim endpoint
|
|
serves presentation claims to consumers; it is a different surface with a
|
|
different purpose and does not discharge this obligation.
|
|
|
|
**The write path is a local transactional outbox.** Adopted from
|
|
`approval-engine`'s reasoning rather than rediscovered: the queue lives in our
|
|
own store, written in the **same transaction** as the state change it evidences.
|
|
Emit-after-commit is a defect. The queue is local so an `audit-core` outage
|
|
cannot block a binding act, for the same reason it must not block a revocation
|
|
upstream.
|
|
|
|
**Atomicity covers accident, not compromise.** It does not close the residual in
|
|
`layer.yaml` and will not be described as doing so.
|
|
|
|
**Cadence is owed.** Our `layer.yaml` declares presentation evidence
|
|
**load-bearing**, so §9.6 requires a declared cadence. See §5.
|
|
|
|
## 3. The question: what travels
|
|
|
|
A presentation record is not like an approval transition. It contains, or points
|
|
at, the **brief and packet material actually shown to a human** — which is
|
|
frequently commercially or personally sensitive. So "emit the evidence" is
|
|
ambiguous in a way it was not for `approval-engine`, and the ambiguity has to be
|
|
resolved before we build, not after we have shipped a payload shape.
|
|
|
|
Three candidates.
|
|
|
|
### (a) Commitment only — hash and metadata
|
|
|
|
Emit `memo_id`, `memo_version`, `presentation_id`, `principal`, `locale`,
|
|
`ui_release`, `rendered_at`, `acked_highlight_ids`, `view_hash`,
|
|
`awareness_hash`, the co-referenced approval identifier, the disposition verb,
|
|
and the stance application. **Not** the brief, not the packet, not the highlight
|
|
text.
|
|
|
|
- **Proves independently:** that this principal was shown a view whose canonical
|
|
form hashes to H, at time T, and bound act A against approval X.
|
|
- **Cost:** the *content* lives only here. An auditor can verify that content we
|
|
later produce matches H, and can detect alteration — but if we destroy it,
|
|
nobody can ever see what was shown. Audit-core proves the commitment, not the
|
|
material.
|
|
- **Also:** this is strictly stronger than storing nothing, because it removes
|
|
our ability to alter the record after the fact. It does not remove our ability
|
|
to erase it.
|
|
|
|
### (b) Full binding document
|
|
|
|
Emit the canonical binding document itself, from which `view_hash` is
|
|
recomputable.
|
|
|
|
- **Proves independently:** everything (a) does, plus what was actually shown,
|
|
surviving our compromise or our deletion.
|
|
- **Cost:** `audit-core` now holds business-sensitive and possibly personal
|
|
content, under retention profiles and export entitlements designed for audit
|
|
events rather than for the substance of commercial decisions. Its
|
|
secret-finding and redaction surfaces would be operating on material where a
|
|
redaction is not a defect-signal but routine. That is a meaningful change in
|
|
what `audit-core` is holding, and it is theirs to accept or refuse — not ours
|
|
to assume.
|
|
- **Also:** an L4 instrument under (b) puts contract text in the audit fabric.
|
|
|
|
### (c) Split — commitment to `audit-core`, content to a separate evidence store
|
|
|
|
*Refusal endorsed by `GH-DEC-2026-014`, with an addition worth carrying: an
|
|
evidence store owned by the party whose conduct it evidences is not an evidence
|
|
store, whatever its integrity properties. **The ownership objection is prior to
|
|
the custody one.***
|
|
|
|
(a)'s payload to `audit-core`, plus the full bundle to a store that is neither
|
|
`audit-core` nor us.
|
|
|
|
- **Proves independently:** as (b).
|
|
- **Cost:** a store with no owner. There is no such component today, and
|
|
inventing one to satisfy a limit is how a surface acquires an operational axis
|
|
it was never given. §16 also decided against stronger archival custody for
|
|
approval evidence, and we should not route around that decision by building a
|
|
parallel archive under another name.
|
|
|
|
## 4. What we propose
|
|
|
|
**(a) for Stage 1, with the gap stated rather than papered over.**
|
|
|
|
Reasoning:
|
|
|
|
1. It discharges limit 3 as written. The copy that is evidence — the commitment
|
|
that a presentation with hash H happened to principal P at time T — is
|
|
reachable from `audit-core` without us.
|
|
2. It does not silently expand what `audit-core` holds. Expanding that is a
|
|
decision for its owner, and (b) presented as a fait accompli would be exactly
|
|
the drift we asked gate-house to prevent in a different context.
|
|
3. It is honest about what it does not close. Our first wording — "we can still
|
|
erase the content" — **understated it**, and `GH-DEC-2026-014` corrected us:
|
|
commitment-only moves **integrity** out of our control and leaves
|
|
**availability** entirely inside it. *The party that can withhold the content
|
|
is the party the evidence is about.* That is the condition limit 3 exists to
|
|
prevent, reduced and not removed.
|
|
4. (b) remains available and is a payload change, not a redesign, if the estate
|
|
later decides a commitment is insufficient.
|
|
|
|
**We are not asking to defer (b) indefinitely.** We are asking whether the
|
|
content question is `audit-core`'s to answer as its custodian, or `gate-house`'s
|
|
as doctrine. If it is doctrine and the ruling is (b), we will implement (b).
|
|
|
|
## 4a. The existence assertion — required, and not ours
|
|
|
|
`GH-DEC-2026-014` granted commitment-only **on a condition we did not propose**,
|
|
and it is the condition that makes the grant safe.
|
|
|
|
**Non-production must be detectable as a finding, not present as an absence.**
|
|
|
|
If the independent path holds only a commitment, a reviewer who asks for content
|
|
and gets nothing cannot distinguish *erased*, *withheld*, *lost*, and *never
|
|
held*. The absence reads as an unremarkable blank.
|
|
|
|
So the emitted record MUST carry, alongside the commitment:
|
|
|
|
| Field | Meaning |
|
|
| --- | --- |
|
|
| `content_exists` | An assertion that committed content exists |
|
|
| `custody` | Where custody of that content sits |
|
|
|
|
such that **failure to produce at retrieval is a conformance failure
|
|
attributable to the custodian** — here, this repository.
|
|
|
|
> A commitment with no assertion that something is being committed to is
|
|
> indistinguishable from a commitment to nothing.
|
|
|
|
**Not a reversal candidate.** If it proves expensive, the answer is a cheaper
|
|
mechanism for the same property, never the property's removal.
|
|
|
|
Two limits travel with the grant and belong in `audit-core`'s design too:
|
|
|
|
- It satisfies **non-alteration**. It does **not** satisfy
|
|
**reconstructability**, and must not be described as doing so in any document
|
|
or conformance claim on either side.
|
|
- The residual is not closed and this repository is not credited with closing
|
|
it. The existence assertion narrows the erasure gap by making non-production
|
|
attributable; it does not produce the missing thing.
|
|
|
|
## 5. Cadence
|
|
|
|
Presentation evidence is declared load-bearing, so §9.6 requires a cadence and
|
|
rate monitoring is not automatically the right form.
|
|
|
|
Note a difference from `approval-engine`: their classes are genuinely low-volume
|
|
(a handful of revocations a month), which is why heartbeat is their answer.
|
|
Ours are mixed:
|
|
|
|
- **Presentations** are relatively high-volume — one per render.
|
|
- **Dispositions and stance applications** are low-volume and are the
|
|
security-relevant ones.
|
|
|
|
So we propose **reconciliation as the primary form**, per class: our own count
|
|
of presentations, dispositions and stance applications compared against
|
|
`audit-core`'s event count per class, with divergence a finding. Plus a
|
|
**heartbeat for the low-volume classes**, because a quiet month of dispositions
|
|
is indistinguishable from suppression by rate alone — the same argument
|
|
`approval-engine` makes.
|
|
|
|
This depends on `AUDIT-WP-0009` T04/T06, which we understand are open. We are
|
|
declaring the cadence now and will not describe it as operating until those
|
|
land.
|
|
|
|
## 6. What we need
|
|
|
|
| From | Decision |
|
|
| --- | --- |
|
|
| `audit-core` | Sender registration for `informed-decision`, and whether payload (a) or (b) is acceptable to hold |
|
|
| `audit-core` | Whether reconciliation-plus-heartbeat is the right cadence form for a mixed-volume source |
|
|
| `gate-house` | Only if the content question is doctrine rather than custody |
|
|
|
|
Proposed registration, following `approval-engine`'s form:
|
|
|
|
| Field | Value |
|
|
| --- | --- |
|
|
| Sender and permitted source | `informed-decision` (exact) |
|
|
| Tenants | `["tenant:platform"]` — but see the open tenant question, `INFD-IN-0002` |
|
|
| Write / read | `true` / `false` |
|
|
| Evidence kind | `load-bearing` |
|
|
| Cadence form | reconciliation, plus heartbeat for low-volume classes |
|
|
| Secret policy | `redact` |
|
|
|
|
`redact` chosen for the same reason `approval-engine` chose it: a receiver
|
|
should retain a legitimate record with an accidentally secret-shaped field
|
|
removed rather than reject the event and leave delivery pending. Under payload
|
|
(a) the exposure is small by construction; under (b) `redact` would be doing
|
|
substantially more work, which is itself an argument for (a).
|
|
|
|
**Note the coupling:** the tenant on our registration is the same unresolved
|
|
question as `INFD-IN-0002`. If a human token cannot carry `tenant:platform`, our
|
|
audit registration tenant and our approval tenant should be settled together
|
|
rather than separately.
|