informed-decision/intakes/intakes.md

478 lines
26 KiB
Markdown
Raw Normal View History

Raise INFD-IN-0001: layer placement and approver-UI ownership File the gate-house decision request that gates INFD-WP-0001-T02, before any architecture is written, so the ruling constrains the design rather than being retrofitted to it. Three rulings requested: layer and role (proposed PEP-shaped, §6.4/companion §5); whether a presentation attestation also makes this a PIP or must reach consumers only through audit-core; and the relationship between view_hash and approval-engine's binding digest. The third is the highest risk and the reason this is filed first. Both digests claim to canonicalize "the binding" but cover different material — the approval digest exists without a human in the loop, view_hash covers the brief, packet, highlights, locale and UI release. Three candidate rulings are set out with what each costs; the proposal is distinct attestations with an explicit authority rule, but any of the three is implementable. The outcome to avoid is both shipping with no stated relationship. The self-dealing objection is argued against ourselves rather than left for review, and the residual is stated plainly: a compromised surface can present X and attest Y, structurally the same residual approval-engine names for adversarial omission at a compromised source. No claim is made to close it. 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
2026-09-09 14:07:13 +02:00
# Intake records
## INFD-IN-0001 — Layer placement and approver-UI ownership
```yaml
id: INFD-IN-0001
kind: intake
title: Layer placement and approver-UI ownership
Close INFD-IN-0001; design the independent evidence path; track both blockers Housekeeping the ruling left behind, plus the one piece of blocked work that was substantially ours to move. INFD-IN-0001 closed with its resolution recorded, matching approval-engine's IN-0002 form. It was still open after GH-DEC-2026-012 answered it. INFD-IN-0003 and docs/evidence-path-design.md take up O-02, which was sitting in the blueprint as "mechanism unchosen". Read independence and the local transactional outbox are settled and not in question. The real question is what travels, and it is sharper for us than for approval-engine because a presentation record carries the brief and packet material actually shown to a human. Three candidates with costs; proposal is commitment-only for Stage 1 — hashes, principal, timestamps, acks, co-referenced approval id — which discharges limit 3 and removes our ability to alter the record, while leaving us able to erase the content. That residual is declared alongside the existing compromised-surface one rather than papered over. Deliberately not proposing the full binding document unilaterally: it would put commercial and personal material into the audit fabric under retention and export entitlements designed for audit events. That is a meaningful change in what audit-core holds and is its owner's to accept, not ours to assume. The third option, a separate evidence store, is refused here because that store has no owner and inventing one routes around the §16 decision against stronger archival custody. Cadence declared and its form argued rather than copied: approval-engine's heartbeat answer suits genuinely low-volume classes, but ours are mixed — presentations are one per render, while dispositions and stance applications are low-volume and are the security-relevant ones. Reconciliation per class as primary, heartbeat for the low-volume classes. Depends on AUDIT-WP-0009 T04/T06; declared, not claimed operating. INFD-IN-0002 files the tenant blocker as a tracked record rather than leaving it in message threads and a blueprint footnote. T07 and T08 now name their blocking intakes. 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
2026-09-09 23:19:27 +02:00
status: closed
Raise INFD-IN-0001: layer placement and approver-UI ownership File the gate-house decision request that gates INFD-WP-0001-T02, before any architecture is written, so the ruling constrains the design rather than being retrofitted to it. Three rulings requested: layer and role (proposed PEP-shaped, §6.4/companion §5); whether a presentation attestation also makes this a PIP or must reach consumers only through audit-core; and the relationship between view_hash and approval-engine's binding digest. The third is the highest risk and the reason this is filed first. Both digests claim to canonicalize "the binding" but cover different material — the approval digest exists without a human in the loop, view_hash covers the brief, packet, highlights, locale and UI release. Three candidate rulings are set out with what each costs; the proposal is distinct attestations with an explicit authority rule, but any of the three is implementable. The outcome to avoid is both shipping with no stated relationship. The self-dealing objection is argued against ourselves rather than left for review, and the residual is stated plainly: a compromised surface can present X and attest Y, structurally the same residual approval-engine names for adversarial omission at a compromised source. No claim is made to close it. 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
2026-09-09 14:07:13 +02:00
origin: coordination
origin_ref: INFD-WP-0001-T02
priority: high
owner: gate-house
repo: informed-decision
lane: blue
tags:
- decision-request
- cross-repo
created: '2026-09-09'
updated: '2026-09-09'
Close INFD-IN-0001; design the independent evidence path; track both blockers Housekeeping the ruling left behind, plus the one piece of blocked work that was substantially ours to move. INFD-IN-0001 closed with its resolution recorded, matching approval-engine's IN-0002 form. It was still open after GH-DEC-2026-012 answered it. INFD-IN-0003 and docs/evidence-path-design.md take up O-02, which was sitting in the blueprint as "mechanism unchosen". Read independence and the local transactional outbox are settled and not in question. The real question is what travels, and it is sharper for us than for approval-engine because a presentation record carries the brief and packet material actually shown to a human. Three candidates with costs; proposal is commitment-only for Stage 1 — hashes, principal, timestamps, acks, co-referenced approval id — which discharges limit 3 and removes our ability to alter the record, while leaving us able to erase the content. That residual is declared alongside the existing compromised-surface one rather than papered over. Deliberately not proposing the full binding document unilaterally: it would put commercial and personal material into the audit fabric under retention and export entitlements designed for audit events. That is a meaningful change in what audit-core holds and is its owner's to accept, not ours to assume. The third option, a separate evidence store, is refused here because that store has no owner and inventing one routes around the §16 decision against stronger archival custody. Cadence declared and its form argued rather than copied: approval-engine's heartbeat answer suits genuinely low-volume classes, but ours are mixed — presentations are one per render, while dispositions and stance applications are low-volume and are the security-relevant ones. Reconciliation per class as primary, heartbeat for the low-volume classes. Depends on AUDIT-WP-0009 T04/T06; declared, not claimed operating. INFD-IN-0002 files the tenant blocker as a tracked record rather than leaving it in message threads and a blueprint footnote. T07 and T08 now name their blocking intakes. 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
2026-09-09 23:19:27 +02:00
resolution: >-
Resolved 2026-09-09 as GH-DEC-2026-012 (gate-house@0a1d1d9), within a day of
filing. All three ruled. R1: PEP-shaped, confirmed as proposed; the ruling
settles the shape, the layer stays this repository's to declare, so layer.yaml
is written in its own voice. R2: yes to a presentation claim and no second
catalog row — PEP and PIP are shapes a repository has — under three limits now
declared and tested in layer.yaml; limit 2 (never an input to the decision it
presents for) is load-bearing, since the self-dealing argument was accepted
because it holds. R3: option (b) as proposed, with the authority rule written
down — the binding digest is 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; (c) was refused because nesting reproduces
the GH-DEC-2026-008 hash cycle. Also directed: build the stance map to v0.8
obligation 3 rather than migrate later, and inherit GH-DEC-2026-010 as a
declared open gap. Delivered in layer.yaml, pep-stance.yaml,
informed_decision/stance.py and tests/test_layer_conformance.py.
Raise INFD-IN-0001: layer placement and approver-UI ownership File the gate-house decision request that gates INFD-WP-0001-T02, before any architecture is written, so the ruling constrains the design rather than being retrofitted to it. Three rulings requested: layer and role (proposed PEP-shaped, §6.4/companion §5); whether a presentation attestation also makes this a PIP or must reach consumers only through audit-core; and the relationship between view_hash and approval-engine's binding digest. The third is the highest risk and the reason this is filed first. Both digests claim to canonicalize "the binding" but cover different material — the approval digest exists without a human in the loop, view_hash covers the brief, packet, highlights, locale and UI release. Three candidate rulings are set out with what each costs; the proposal is distinct attestations with an explicit authority rule, but any of the three is implementable. The outcome to avoid is both shipping with no stated relationship. The self-dealing objection is argued against ourselves rather than left for review, and the residual is stated plainly: a compromised surface can present X and attest Y, structurally the same residual approval-engine names for adversarial omission at a compromised source. No claim is made to close it. 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
2026-09-09 14:07:13 +02:00
description: >-
approval-engine names an approvals inbox under Non-Goals, leaving the
browser-facing approver UI unowned; key-cape KEY-WP-0013-T02 is blocked on a
client_id and callback URI no component has claimed, and approval-engine
recorded in docs/keycape-service-registrations.md that they must come from
that component's owner. informed-decision claims the surface and asks
gate-house to rule on three things before any code is written: (R1) layer and
role, proposed PEP-shaped under statute §6.4 and companion §5; (R2) whether a
presentation attestation makes this a PIP as well, or whether presentation
evidence must reach consumers only via audit-core, noting §17 has no assigned
request-claim schema owner; (R3) the relationship between informed-decision's
view_hash and approval-engine's binding digest, which both claim to
canonicalize "the binding" but cover different material. R3 is the highest
risk: shipping both without a stated authority rule leaves the estate with two
canonicalizations of one act. Proposal is (b) — distinct attestations with the
binding digest authoritative for replay and view_hash authoritative only for
what was shown. Full request: docs/gate-house-decision-request-layer-placement.md.
Blocks INFD-WP-0001 T05 and T07; T03, T04 and T06 proceed regardless.
Add PRD and Use Case Catalog; file the gate-house request (T02-T04) T02 — intake INFD-IN-0001 filed with gate-house and messages sent to gate-house, key-cape and approval-engine. Status progress; it now waits on an external ruling. key-cape was told explicitly why T07 is not answering KEY-WP-0013-T02 yet — a placeholder callback URI would either fail closed or register an origin no component owns — and given the token shape to check now rather than at T07. T03 — ProductRequirementsDocument.md. 30 requirements, each traced to a GOAL.md DoD item, an INTENT principle or wrongness condition, a state-transition guard, or a named external contract, and each with an observable pass condition. Anti-requirements are stated as testable absences: no dwell timers, no attention analytics, no dark patterns, no auto-approval, no approval-state caching, no authorization endpoint. Four limitations are recorded up front, including that escalate without a mandate graph is forwarding and that view_hash is computed by the renderer. T04 — UseCaseCatalog.md. L0-L5 with counterparties, plus ten negative cases bound to guards and isolation vectors. Each case records the constraint it places on the shared schema, so scale invariance is testable rather than asserted. Closes with the four changes that would fork the object. T05 and T07 remain gated on the ruling. T06 is independent and is next. 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
2026-09-09 14:11:36 +02:00
state_hub_intake_id: "01a08610-f458-7fd5-b284-26a65d1d73c2"
Raise INFD-IN-0001: layer placement and approver-UI ownership File the gate-house decision request that gates INFD-WP-0001-T02, before any architecture is written, so the ruling constrains the design rather than being retrofitted to it. Three rulings requested: layer and role (proposed PEP-shaped, §6.4/companion §5); whether a presentation attestation also makes this a PIP or must reach consumers only through audit-core; and the relationship between view_hash and approval-engine's binding digest. The third is the highest risk and the reason this is filed first. Both digests claim to canonicalize "the binding" but cover different material — the approval digest exists without a human in the loop, view_hash covers the brief, packet, highlights, locale and UI release. Three candidate rulings are set out with what each costs; the proposal is distinct attestations with an explicit authority rule, but any of the three is implementable. The outcome to avoid is both shipping with no stated relationship. The self-dealing objection is argued against ourselves rather than left for review, and the residual is stated plainly: a compromised surface can present X and attest Y, structurally the same residual approval-engine names for adversarial omission at a compromised source. No claim is made to close it. 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
2026-09-09 14:07:13 +02:00
```
Close INFD-IN-0001; design the independent evidence path; track both blockers Housekeeping the ruling left behind, plus the one piece of blocked work that was substantially ours to move. INFD-IN-0001 closed with its resolution recorded, matching approval-engine's IN-0002 form. It was still open after GH-DEC-2026-012 answered it. INFD-IN-0003 and docs/evidence-path-design.md take up O-02, which was sitting in the blueprint as "mechanism unchosen". Read independence and the local transactional outbox are settled and not in question. The real question is what travels, and it is sharper for us than for approval-engine because a presentation record carries the brief and packet material actually shown to a human. Three candidates with costs; proposal is commitment-only for Stage 1 — hashes, principal, timestamps, acks, co-referenced approval id — which discharges limit 3 and removes our ability to alter the record, while leaving us able to erase the content. That residual is declared alongside the existing compromised-surface one rather than papered over. Deliberately not proposing the full binding document unilaterally: it would put commercial and personal material into the audit fabric under retention and export entitlements designed for audit events. That is a meaningful change in what audit-core holds and is its owner's to accept, not ours to assume. The third option, a separate evidence store, is refused here because that store has no owner and inventing one routes around the §16 decision against stronger archival custody. Cadence declared and its form argued rather than copied: approval-engine's heartbeat answer suits genuinely low-volume classes, but ours are mixed — presentations are one per render, while dispositions and stance applications are low-volume and are the security-relevant ones. Reconciliation per class as primary, heartbeat for the low-volume classes. Depends on AUDIT-WP-0009 T04/T06; declared, not claimed operating. INFD-IN-0002 files the tenant blocker as a tracked record rather than leaving it in message threads and a blueprint footnote. T07 and T08 now name their blocking intakes. 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
2026-09-09 23:19:27 +02:00
## INFD-IN-0002 — Human access tokens cannot carry `tenant:platform`
```yaml
id: INFD-IN-0002
kind: intake
title: Human access tokens cannot carry tenant:platform
Apply GH-DEC-2026-013 and GH-DEC-2026-014; close INFD-IN-0002 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
2026-09-10 07:57:57 +02:00
status: closed
Close INFD-IN-0001; design the independent evidence path; track both blockers Housekeeping the ruling left behind, plus the one piece of blocked work that was substantially ours to move. INFD-IN-0001 closed with its resolution recorded, matching approval-engine's IN-0002 form. It was still open after GH-DEC-2026-012 answered it. INFD-IN-0003 and docs/evidence-path-design.md take up O-02, which was sitting in the blueprint as "mechanism unchosen". Read independence and the local transactional outbox are settled and not in question. The real question is what travels, and it is sharper for us than for approval-engine because a presentation record carries the brief and packet material actually shown to a human. Three candidates with costs; proposal is commitment-only for Stage 1 — hashes, principal, timestamps, acks, co-referenced approval id — which discharges limit 3 and removes our ability to alter the record, while leaving us able to erase the content. That residual is declared alongside the existing compromised-surface one rather than papered over. Deliberately not proposing the full binding document unilaterally: it would put commercial and personal material into the audit fabric under retention and export entitlements designed for audit events. That is a meaningful change in what audit-core holds and is its owner's to accept, not ours to assume. The third option, a separate evidence store, is refused here because that store has no owner and inventing one routes around the §16 decision against stronger archival custody. Cadence declared and its form argued rather than copied: approval-engine's heartbeat answer suits genuinely low-volume classes, but ours are mixed — presentations are one per render, while dispositions and stance applications are low-volume and are the security-relevant ones. Reconciliation per class as primary, heartbeat for the low-volume classes. Depends on AUDIT-WP-0009 T04/T06; declared, not claimed operating. INFD-IN-0002 files the tenant blocker as a tracked record rather than leaving it in message threads and a blueprint footnote. T07 and T08 now name their blocking intakes. 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
2026-09-09 23:19:27 +02:00
origin: coordination
origin_ref: INFD-WP-0001-T07
priority: high
owner: key-cape
repo: informed-decision
lane: blue
tags:
- decision-request
- cross-repo
- blocker
created: '2026-09-09'
Apply GH-DEC-2026-013 and GH-DEC-2026-014; close INFD-IN-0002 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
2026-09-10 07:57:57 +02:00
updated: '2026-09-10'
resolution: >-
Resolved 2026-09-10. key-cape had already implemented registration-bound
tenancy on 2026-09-09 (329e48f), deliberately correct under both candidate
rulings: a declared zone applies where the directory places the user nowhere,
agreement passes, and a declared zone conflicting with a directory assignment
refuses issuance with 403 tenant_binding rather than relabelling. So the risk
that a client registered now fails closed at first use was already retired.
GH-DEC-2026-013 then ruled directory-sourced the terminal state and granted
the registration-bound shape as a declared bounded gap — admissible precisely
because its distinguishing case fails closed. This repository's
binding-versus-awareness argument was accepted and written into the ruling as
its §6; it did not change the outcome but sharpened the defect, which is that
two different facts share one field named tenant: the act-scope (a property of
the act, which our binding slice commits) and the principal's membership (a
property of the person, which approval-engine exact-matches). Gate House's
correction of our position is adopted: a binding slice that must commit the
scope being entered should commit that scope, not borrow a membership claim to
stand in for it — and binding.target already does, so no field was added, only
a statement and a provenance record. The condition we asked for is in
key-cape's docs/tenant-claim-contract.md, strengthened from "must be revisited"
to void if the dynamic-registration exclusion is lifted, and enforced by a test
asserting the capability and the exclusion together. Two obligations land here
and are booked as PR-08 and PR-09: do not use the tenant claim as the
act-scope, and record the claim's provenance since key-cape emits it as a bare
string. T07 unblocked.
Close INFD-IN-0001; design the independent evidence path; track both blockers Housekeeping the ruling left behind, plus the one piece of blocked work that was substantially ours to move. INFD-IN-0001 closed with its resolution recorded, matching approval-engine's IN-0002 form. It was still open after GH-DEC-2026-012 answered it. INFD-IN-0003 and docs/evidence-path-design.md take up O-02, which was sitting in the blueprint as "mechanism unchosen". Read independence and the local transactional outbox are settled and not in question. The real question is what travels, and it is sharper for us than for approval-engine because a presentation record carries the brief and packet material actually shown to a human. Three candidates with costs; proposal is commitment-only for Stage 1 — hashes, principal, timestamps, acks, co-referenced approval id — which discharges limit 3 and removes our ability to alter the record, while leaving us able to erase the content. That residual is declared alongside the existing compromised-surface one rather than papered over. Deliberately not proposing the full binding document unilaterally: it would put commercial and personal material into the audit fabric under retention and export entitlements designed for audit events. That is a meaningful change in what audit-core holds and is its owner's to accept, not ours to assume. The third option, a separate evidence store, is refused here because that store has no owner and inventing one routes around the §16 decision against stronger archival custody. Cadence declared and its form argued rather than copied: approval-engine's heartbeat answer suits genuinely low-volume classes, but ours are mixed — presentations are one per render, while dispositions and stance applications are low-volume and are the security-relevant ones. Reconciliation per class as primary, heartbeat for the low-volume classes. Depends on AUDIT-WP-0009 T04/T06; declared, not claimed operating. INFD-IN-0002 files the tenant blocker as a tracked record rather than leaving it in message threads and a blueprint footnote. T07 and T08 now name their blocking intakes. 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
2026-09-09 23:19:27 +02:00
description: >-
Raised by key-cape (KEY-WP-0013-T05) while reviewing the approver client
shape, and it blocks INFD-WP-0001-T07. The tenant claim on a human token
resolves from the directory user record via effectiveTenant(user); no adapter
populates domain.User.Tenant, so every human token falls back to the platform
default tenant:coulomb. The per-client tenant field, which is how the two
approval service clients carry tenant:platform, is read only on the
client_credentials path. approval-engine compares tenant by exact string
equality and pins near-miss spellings as refused, so an approver token issued
today would be rejected and the failure would surface as a rejected approval
rather than as a registration defect. Two resolutions: directory-sourced
(tenant becomes a property of the person and changes everywhere, needs a
directory attribute and an owner for who is a platform-zone human), or
registration-bound and fail-closed (symmetric with the service registrations
and with decision 5ed3fb35, but writes a cross-tenant capability into the
issuer). informed-decision prefers registration-bound: under it the tenant is
a property of the surface and its registration, which is exactly what the
pre-sign binding slice commits, whereas directory-sourced makes tenant
describe the person, which is closer to awareness than to binding. key-cape
leans the same way but will not implement either unilaterally. Not this
repository's to decide alone; routed to key-cape, approval-engine and
gate-house. If registration-bound is chosen, the condition that it holds only
because registrations are static and deployment-owned should be written into
the contract rather than left as reasoning in a message. Blocks T07; the
client_id and callback URI will not be published until it is resolved, since
registering a client that fails closed at first use is the failure key-cape
flagged.
state_hub_intake_id: "01a0880b-36f8-7d89-ab67-2c91ee16f300"
Close INFD-IN-0001; design the independent evidence path; track both blockers Housekeeping the ruling left behind, plus the one piece of blocked work that was substantially ours to move. INFD-IN-0001 closed with its resolution recorded, matching approval-engine's IN-0002 form. It was still open after GH-DEC-2026-012 answered it. INFD-IN-0003 and docs/evidence-path-design.md take up O-02, which was sitting in the blueprint as "mechanism unchosen". Read independence and the local transactional outbox are settled and not in question. The real question is what travels, and it is sharper for us than for approval-engine because a presentation record carries the brief and packet material actually shown to a human. Three candidates with costs; proposal is commitment-only for Stage 1 — hashes, principal, timestamps, acks, co-referenced approval id — which discharges limit 3 and removes our ability to alter the record, while leaving us able to erase the content. That residual is declared alongside the existing compromised-surface one rather than papered over. Deliberately not proposing the full binding document unilaterally: it would put commercial and personal material into the audit fabric under retention and export entitlements designed for audit events. That is a meaningful change in what audit-core holds and is its owner's to accept, not ours to assume. The third option, a separate evidence store, is refused here because that store has no owner and inventing one routes around the §16 decision against stronger archival custody. Cadence declared and its form argued rather than copied: approval-engine's heartbeat answer suits genuinely low-volume classes, but ours are mixed — presentations are one per render, while dispositions and stance applications are low-volume and are the security-relevant ones. Reconciliation per class as primary, heartbeat for the low-volume classes. Depends on AUDIT-WP-0009 T04/T06; declared, not claimed operating. INFD-IN-0002 files the tenant blocker as a tracked record rather than leaving it in message threads and a blueprint footnote. T07 and T08 now name their blocking intakes. 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
2026-09-09 23:19:27 +02:00
```
## INFD-IN-0003 — The independent evidence path: what travels to audit-core
```yaml
id: INFD-IN-0003
kind: intake
title: The independent evidence path — what travels to audit-core
Apply GH-DEC-2026-015/016 and the audit-core registration; both blockers cleared Origin and evidence path both landed today. T07 origin: railiance-apps deployed decisions.coulomb.social and corrected the hostname in this repo — not the decide.coulomb.social this workplan proposed. Verified here rather than taken on report: both paths 200, TLS verify 0, Let's Encrypt cert valid to 2026-12-09. T08: audit-core registered the source with every field as proposed and landed the detection half. INFD-IN-0003 closed. Their refinements booked — reconciliation on the high-volume class too, since rate detects a stream stopping but never a stream missing the particular renders that mattered, which is exactly our threat model; and PR-12, the custody locator must be a stable non-secret identifier because redact scans data and an existence declaration arriving without its pointer looks complete while being useless. INFD-IN-0004 ruled as GH-DEC-2026-015: gate-house reversed itself and nesting is permitted for this pair. The decisive ground was not the cycle argument we led with — our binding slice canonicalizes principal and target, two of the five digest fields, so co-reference left us performing a partial recomputation of one act in a second vocabulary, closer to the translation R3 forbade than nesting is. Our ordering objection was withdrawn as mistaken. The permission is conditioned and NOT ACTIVE until approval-engine states its presentation exclusion as normative and tested. layer.yaml is deliberately unchanged and carries nesting_permission_active false — we do not activate on our own initiative. GH-DEC-2026-016 ruled NC-03. Its §5 is live rather than hypothetical and is booked as PR-11: principal_type: human is a property of the client registration, structurally the same shape as the gap-route tenant, so a human-in-the-loop control must not be discharged on it as verified humanity. T07 stays progress: the submission to key-cape is written but unsent, blocked by the local permission classifier rather than by any repository. 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
2026-09-10 19:19:10 +02:00
status: closed
Close INFD-IN-0001; design the independent evidence path; track both blockers Housekeeping the ruling left behind, plus the one piece of blocked work that was substantially ours to move. INFD-IN-0001 closed with its resolution recorded, matching approval-engine's IN-0002 form. It was still open after GH-DEC-2026-012 answered it. INFD-IN-0003 and docs/evidence-path-design.md take up O-02, which was sitting in the blueprint as "mechanism unchosen". Read independence and the local transactional outbox are settled and not in question. The real question is what travels, and it is sharper for us than for approval-engine because a presentation record carries the brief and packet material actually shown to a human. Three candidates with costs; proposal is commitment-only for Stage 1 — hashes, principal, timestamps, acks, co-referenced approval id — which discharges limit 3 and removes our ability to alter the record, while leaving us able to erase the content. That residual is declared alongside the existing compromised-surface one rather than papered over. Deliberately not proposing the full binding document unilaterally: it would put commercial and personal material into the audit fabric under retention and export entitlements designed for audit events. That is a meaningful change in what audit-core holds and is its owner's to accept, not ours to assume. The third option, a separate evidence store, is refused here because that store has no owner and inventing one routes around the §16 decision against stronger archival custody. Cadence declared and its form argued rather than copied: approval-engine's heartbeat answer suits genuinely low-volume classes, but ours are mixed — presentations are one per render, while dispositions and stance applications are low-volume and are the security-relevant ones. Reconciliation per class as primary, heartbeat for the low-volume classes. Depends on AUDIT-WP-0009 T04/T06; declared, not claimed operating. INFD-IN-0002 files the tenant blocker as a tracked record rather than leaving it in message threads and a blueprint footnote. T07 and T08 now name their blocking intakes. 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
2026-09-09 23:19:27 +02:00
origin: residual
origin_ref: INFD-WP-0001-T05
priority: high
owner: audit-core
repo: informed-decision
lane: blue
tags:
- decision-request
- cross-repo
created: '2026-09-09'
Apply GH-DEC-2026-013 and GH-DEC-2026-014; close INFD-IN-0002 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
2026-09-10 07:57:57 +02:00
updated: '2026-09-10'
Apply GH-DEC-2026-015/016 and the audit-core registration; both blockers cleared Origin and evidence path both landed today. T07 origin: railiance-apps deployed decisions.coulomb.social and corrected the hostname in this repo — not the decide.coulomb.social this workplan proposed. Verified here rather than taken on report: both paths 200, TLS verify 0, Let's Encrypt cert valid to 2026-12-09. T08: audit-core registered the source with every field as proposed and landed the detection half. INFD-IN-0003 closed. Their refinements booked — reconciliation on the high-volume class too, since rate detects a stream stopping but never a stream missing the particular renders that mattered, which is exactly our threat model; and PR-12, the custody locator must be a stable non-secret identifier because redact scans data and an existence declaration arriving without its pointer looks complete while being useless. INFD-IN-0004 ruled as GH-DEC-2026-015: gate-house reversed itself and nesting is permitted for this pair. The decisive ground was not the cycle argument we led with — our binding slice canonicalizes principal and target, two of the five digest fields, so co-reference left us performing a partial recomputation of one act in a second vocabulary, closer to the translation R3 forbade than nesting is. Our ordering objection was withdrawn as mistaken. The permission is conditioned and NOT ACTIVE until approval-engine states its presentation exclusion as normative and tested. layer.yaml is deliberately unchanged and carries nesting_permission_active false — we do not activate on our own initiative. GH-DEC-2026-016 ruled NC-03. Its §5 is live rather than hypothetical and is booked as PR-11: principal_type: human is a property of the client registration, structurally the same shape as the gap-route tenant, so a human-in-the-loop control must not be discharged on it as verified humanity. T07 stays progress: the submission to key-cape is written but unsent, blocked by the local permission classifier rather than by any repository. 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
2026-09-10 19:19:10 +02:00
resolution: >-
Closed 2026-09-10. audit-core registered this source with every field as
proposed — source informed-decision exact, tenants [tenant:platform], write
true, read false, evidence_kind load-bearing, secret_policy redact — at
c4016a7 as AUDIT-WP-0009-T11 / AUDIT-IN-0003, documented in their
docs/informed-decision-source-registration.md. The entry is inert until the
token exists, asserted by test rather than by reading. The two extra fields the
ruling added (content_exists, custody) needed no schema change: data is stored
verbatim into details.data and hash-chained, so a custodian cannot quietly
retract the assertion that content existed. One class one source with distinct
type values per class, because two senders would split one residual into two
smaller-looking ones for a component whose defining property is that the actor
and the evidence source are the same. Cadence accepted with the refinement that
BOTH heartbeat and reconciliation scope per class, and with reconciliation
applying to the high-volume class too since rate detects a stream stopping but
never a stream missing the particular renders that mattered. One design
consequence booked as PR-12: redact scans data, so the custody locator must be
a stable non-secret identifier rather than a credentialed URL, or the existence
declaration arrives without its pointer. Both controls are bounded and neither
may be described as covering the compromised-emitter residual. Reconstructability
is now written down on audit-core's side as well as ours. T08 unblocked.
Apply GH-DEC-2026-013 and GH-DEC-2026-014; close INFD-IN-0002 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
2026-09-10 07:57:57 +02:00
Doctrine half ruled 2026-09-10 as GH-DEC-2026-014; the payload remains
audit-core's custody question and the intake stays open for it. Commitment-only
is GRANTED for Stage 1, on the GH-DEC-2026-013 test that its distinguishing
case fails closed — a reviewer who cannot obtain the content gets no
reconstruction rather than a wrong one — and the data-protection reason was
accepted as a reason of the right kind, since doctrine forcing L4 contract text
into an audit fabric trades one control for a breach of another. Two limits:
it satisfies non-alteration and NOT reconstructability, and must not be
described otherwise in any document or conformance claim on either side; and
our wording of the gap was corrected — commitment-only moves integrity out of
our control and leaves availability entirely inside it, so the party that can
withhold the content is the party the evidence is about, which is limit 3's
condition reduced rather than removed. The grant carries a condition we did not
propose (§4): the path must carry an assertion that committed content exists
and where custody sits, so that 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. Not a reversal candidate. Our refusal of a separate evidence store was
endorsed, with the addition that an evidence store owned by the party whose
conduct it evidences is not an evidence store whatever its integrity
properties, the ownership objection being prior to the custody one. Booked as
PR-53 and PR-54 and EvidenceModel §8d. Still open for audit-core: sender
registration, and whether reconciliation plus heartbeat suits a mixed-volume
source.
Close INFD-IN-0001; design the independent evidence path; track both blockers Housekeeping the ruling left behind, plus the one piece of blocked work that was substantially ours to move. INFD-IN-0001 closed with its resolution recorded, matching approval-engine's IN-0002 form. It was still open after GH-DEC-2026-012 answered it. INFD-IN-0003 and docs/evidence-path-design.md take up O-02, which was sitting in the blueprint as "mechanism unchosen". Read independence and the local transactional outbox are settled and not in question. The real question is what travels, and it is sharper for us than for approval-engine because a presentation record carries the brief and packet material actually shown to a human. Three candidates with costs; proposal is commitment-only for Stage 1 — hashes, principal, timestamps, acks, co-referenced approval id — which discharges limit 3 and removes our ability to alter the record, while leaving us able to erase the content. That residual is declared alongside the existing compromised-surface one rather than papered over. Deliberately not proposing the full binding document unilaterally: it would put commercial and personal material into the audit fabric under retention and export entitlements designed for audit events. That is a meaningful change in what audit-core holds and is its owner's to accept, not ours to assume. The third option, a separate evidence store, is refused here because that store has no owner and inventing one routes around the §16 decision against stronger archival custody. Cadence declared and its form argued rather than copied: approval-engine's heartbeat answer suits genuinely low-volume classes, but ours are mixed — presentations are one per render, while dispositions and stance applications are low-volume and are the security-relevant ones. Reconciliation per class as primary, heartbeat for the low-volume classes. Depends on AUDIT-WP-0009 T04/T06; declared, not claimed operating. INFD-IN-0002 files the tenant blocker as a tracked record rather than leaving it in message threads and a blueprint footnote. T07 and T08 now name their blocking intakes. 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
2026-09-09 23:19:27 +02:00
description: >-
GH-DEC-2026-012 limit L3 requires the evidence copy to reach audit-core
independently of informed-decision, because here the actor being audited and
the evidence source are the same component. Read independence and a local
transactional outbox are settled and not in question. The open question is
what travels, and it is sharper here than for approval-engine because a
presentation record contains the brief and packet material actually shown to a
human, which is frequently commercially or personally sensitive. Three
candidates with costs are in docs/evidence-path-design.md: (a) commitment only
— hashes, principal, timestamps, acks, co-referenced approval id — which
discharges limit 3 and removes our ability to alter the record but not to
erase the content; (b) the full binding document, which survives our
compromise but puts commercial and personal material into the audit fabric
under retention and export entitlements designed for audit events, a
meaningful change in what audit-core holds and its owner's to accept or
refuse; (c) a split with a separate evidence store, refused here because that
store has no owner and inventing one routes around the §16 decision against
stronger archival custody. informed-decision proposes (a) for Stage 1 with the
erasure residual declared alongside the existing compromised-surface residual,
and asks whether the content question is audit-core's as custodian or
gate-house's as doctrine. Also requests a sender registration and asks whether
reconciliation plus a heartbeat for low-volume classes is the right cadence
form for a mixed-volume source — presentations are high-volume, dispositions
and stance applications are low-volume and are the security-relevant ones.
Cadence depends on AUDIT-WP-0009 T04/T06 and is declared, not claimed
operating. The registration tenant is coupled to INFD-IN-0002. Blocks
INFD-WP-0001-T08.
state_hub_intake_id: "01a0880b-4421-747b-9e7f-6e9bff9d2ea3"
Close INFD-IN-0001; design the independent evidence path; track both blockers Housekeeping the ruling left behind, plus the one piece of blocked work that was substantially ours to move. INFD-IN-0001 closed with its resolution recorded, matching approval-engine's IN-0002 form. It was still open after GH-DEC-2026-012 answered it. INFD-IN-0003 and docs/evidence-path-design.md take up O-02, which was sitting in the blueprint as "mechanism unchosen". Read independence and the local transactional outbox are settled and not in question. The real question is what travels, and it is sharper for us than for approval-engine because a presentation record carries the brief and packet material actually shown to a human. Three candidates with costs; proposal is commitment-only for Stage 1 — hashes, principal, timestamps, acks, co-referenced approval id — which discharges limit 3 and removes our ability to alter the record, while leaving us able to erase the content. That residual is declared alongside the existing compromised-surface one rather than papered over. Deliberately not proposing the full binding document unilaterally: it would put commercial and personal material into the audit fabric under retention and export entitlements designed for audit events. That is a meaningful change in what audit-core holds and is its owner's to accept, not ours to assume. The third option, a separate evidence store, is refused here because that store has no owner and inventing one routes around the §16 decision against stronger archival custody. Cadence declared and its form argued rather than copied: approval-engine's heartbeat answer suits genuinely low-volume classes, but ours are mixed — presentations are one per render, while dispositions and stance applications are low-volume and are the security-relevant ones. Reconciliation per class as primary, heartbeat for the low-volume classes. Depends on AUDIT-WP-0009 T04/T06; declared, not claimed operating. INFD-IN-0002 files the tenant blocker as a tracked record rather than leaving it in message threads and a blueprint footnote. T07 and T08 now name their blocking intakes. 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
2026-09-09 23:19:27 +02:00
```
Raise INFD-IN-0004: approval-engine's R3 answer conflicts with the ruling approval-engine answered R3 and recommends exactly the option GH-DEC-2026-012 refused: that our binding document carry their binding.digest as a field rather than re-canonicalize action/actor/principal/purpose/target ourselves. We cannot comply with both, so this is raised as a finding rather than resolved. It is not a wording difference. Our binding slice canonicalizes principal and target, two of the five fields in their digest, so co-reference by identifier alone leaves two independent canonicalizations of one act linked by a shared id. GH-DEC-2026-012 manages that with an authority rule; approval-engine's proposal removes it. Both are coherent and they are not the same design. New information the refusal may not have had: their digest covers exactly five act fields, and they state that widening it to cover presentation would be a defect since a new UI release would invalidate every prior approval. The GH-DEC-2026-008 cycle condition is mutual containment, so if their digest structurally cannot contain view_hash the containment is one-directional. Not asserted as settling it — that cycle was found by two engines independently within hours, and "the cycle cannot arise here" is the belief such failures punish. Deliberately not adopted, despite coming from the layer that owns the digest and despite our having offered to let them settle R3. Gate House was right that a bilateral agreement produces agreement rather than an authority rule, and that applies to this one too. layer.yaml is unchanged and carries a linkage_under_review marker rather than a silent edit. Also carries the smaller doctrine question approval-engine handed on: whether approver evidence should be human-only at the engine, since entries[].principal_type is auditable after the fact and stops nothing, and there is no upstream backstop for humans-bind-agents-draft. 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
2026-09-10 13:59:52 +02:00
## INFD-IN-0004 — approval-engine's R3 answer conflicts with GH-DEC-2026-012 R3
```yaml
id: INFD-IN-0004
kind: intake
title: approval-engine R3 answer conflicts with GH-DEC-2026-012 R3
Apply GH-DEC-2026-015/016 and the audit-core registration; both blockers cleared Origin and evidence path both landed today. T07 origin: railiance-apps deployed decisions.coulomb.social and corrected the hostname in this repo — not the decide.coulomb.social this workplan proposed. Verified here rather than taken on report: both paths 200, TLS verify 0, Let's Encrypt cert valid to 2026-12-09. T08: audit-core registered the source with every field as proposed and landed the detection half. INFD-IN-0003 closed. Their refinements booked — reconciliation on the high-volume class too, since rate detects a stream stopping but never a stream missing the particular renders that mattered, which is exactly our threat model; and PR-12, the custody locator must be a stable non-secret identifier because redact scans data and an existence declaration arriving without its pointer looks complete while being useless. INFD-IN-0004 ruled as GH-DEC-2026-015: gate-house reversed itself and nesting is permitted for this pair. The decisive ground was not the cycle argument we led with — our binding slice canonicalizes principal and target, two of the five digest fields, so co-reference left us performing a partial recomputation of one act in a second vocabulary, closer to the translation R3 forbade than nesting is. Our ordering objection was withdrawn as mistaken. The permission is conditioned and NOT ACTIVE until approval-engine states its presentation exclusion as normative and tested. layer.yaml is deliberately unchanged and carries nesting_permission_active false — we do not activate on our own initiative. GH-DEC-2026-016 ruled NC-03. Its §5 is live rather than hypothetical and is booked as PR-11: principal_type: human is a property of the client registration, structurally the same shape as the gap-route tenant, so a human-in-the-loop control must not be discharged on it as verified humanity. T07 stays progress: the submission to key-cape is written but unsent, blocked by the local permission classifier rather than by any repository. 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
2026-09-10 19:19:10 +02:00
status: closed
Raise INFD-IN-0004: approval-engine's R3 answer conflicts with the ruling approval-engine answered R3 and recommends exactly the option GH-DEC-2026-012 refused: that our binding document carry their binding.digest as a field rather than re-canonicalize action/actor/principal/purpose/target ourselves. We cannot comply with both, so this is raised as a finding rather than resolved. It is not a wording difference. Our binding slice canonicalizes principal and target, two of the five fields in their digest, so co-reference by identifier alone leaves two independent canonicalizations of one act linked by a shared id. GH-DEC-2026-012 manages that with an authority rule; approval-engine's proposal removes it. Both are coherent and they are not the same design. New information the refusal may not have had: their digest covers exactly five act fields, and they state that widening it to cover presentation would be a defect since a new UI release would invalidate every prior approval. The GH-DEC-2026-008 cycle condition is mutual containment, so if their digest structurally cannot contain view_hash the containment is one-directional. Not asserted as settling it — that cycle was found by two engines independently within hours, and "the cycle cannot arise here" is the belief such failures punish. Deliberately not adopted, despite coming from the layer that owns the digest and despite our having offered to let them settle R3. Gate House was right that a bilateral agreement produces agreement rather than an authority rule, and that applies to this one too. layer.yaml is unchanged and carries a linkage_under_review marker rather than a silent edit. Also carries the smaller doctrine question approval-engine handed on: whether approver evidence should be human-only at the engine, since entries[].principal_type is auditable after the fact and stops nothing, and there is no upstream backstop for humans-bind-agents-draft. 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
2026-09-10 13:59:52 +02:00
origin: coordination
origin_ref: INFD-WP-0001-T02
priority: high
owner: gate-house
repo: informed-decision
lane: blue
tags:
- decision-request
- cross-repo
- finding
created: '2026-09-10'
updated: '2026-09-10'
description: >-
GH-DEC-2026-012 R3 refused option (c) — view_hash containing approval-engine's
binding digest as a field — and required linkage by co-reference, forbidding
this repository from recomputing or restating that digest from its own
vocabulary. approval-engine (docs/approval-claim.md, 62233c7) has since
answered the same question and recommends exactly option (c): that our binding
document carry their binding.digest as a field rather than re-canonicalize
action/actor/principal/purpose/target ourselves, so there is one
canonicalization of the act computed by the layer that owns it. We cannot
comply with both. This is not a wording difference: our binding slice
canonicalizes principal and target, two of the five fields in their digest, so
co-reference by identifier alone leaves two independent canonicalizations of
one act linked by a shared id — which GH-DEC-2026-012 manages with an
authority rule rather than removes. New information the refusal may not have
had: their digest covers exactly five act fields and they state that widening
it to cover presentation would be a defect, since a new UI release would
invalidate every prior approval. The GH-DEC-2026-008 cycle condition is mutual
containment, so if their digest structurally cannot contain view_hash the
containment is one-directional and no cycle arises. Not asserted as settling
it — that cycle was found by two engines independently within hours and cost
real work, and "the cycle cannot arise here" is the belief such failures
punish. No design change made: layer.yaml still declares co-reference and
nesting_forbidden as ruled, and approval-engine's recommendation is not
adopted despite coming from the digest's owner, because a bilateral agreement
produces agreement rather than an authority rule. Raised because the statute
makes a disagreement a finding for gate-house rather than a choice. Carries a
second smaller question: whether approver evidence should be human-only at the
engine, since entries[].principal_type is auditable after the fact and stops
nothing, and there is no upstream backstop for humans-bind-agents-draft. Full
finding: docs/finding-r3-linkage-conflict.md.
state_hub_intake_id: "01a08b30-b7e7-70a6-9139-2eac8c1f6611"
Raise INFD-IN-0004: approval-engine's R3 answer conflicts with the ruling approval-engine answered R3 and recommends exactly the option GH-DEC-2026-012 refused: that our binding document carry their binding.digest as a field rather than re-canonicalize action/actor/principal/purpose/target ourselves. We cannot comply with both, so this is raised as a finding rather than resolved. It is not a wording difference. Our binding slice canonicalizes principal and target, two of the five fields in their digest, so co-reference by identifier alone leaves two independent canonicalizations of one act linked by a shared id. GH-DEC-2026-012 manages that with an authority rule; approval-engine's proposal removes it. Both are coherent and they are not the same design. New information the refusal may not have had: their digest covers exactly five act fields, and they state that widening it to cover presentation would be a defect since a new UI release would invalidate every prior approval. The GH-DEC-2026-008 cycle condition is mutual containment, so if their digest structurally cannot contain view_hash the containment is one-directional. Not asserted as settling it — that cycle was found by two engines independently within hours, and "the cycle cannot arise here" is the belief such failures punish. Deliberately not adopted, despite coming from the layer that owns the digest and despite our having offered to let them settle R3. Gate House was right that a bilateral agreement produces agreement rather than an authority rule, and that applies to this one too. layer.yaml is unchanged and carries a linkage_under_review marker rather than a silent edit. Also carries the smaller doctrine question approval-engine handed on: whether approver evidence should be human-only at the engine, since entries[].principal_type is auditable after the fact and stops nothing, and there is no upstream backstop for humans-bind-agents-draft. 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
2026-09-10 13:59:52 +02:00
```
## INFD-IN-0005 — Reliable fresh authentication for timed reviews
```yaml
id: INFD-IN-0005
kind: intake
title: Reliable fresh authentication for timed reviews
status: open
origin: residual
origin_ref: SECRETS-WP-0010
priority: high
owner: informed-decision
repo: informed-decision
lane: blue
tags: [cross-repo, authentication]
created: '2026-09-16'
updated: '2026-09-16'
description: >-
Coordinate with key-cape and the Authelia deployment owner to validate an
upgrade supporting prompt=login/max_age, including changed ID-token claims,
existing clients and rollback. Authelia 4.38 rejected even fresh sign-in in
native logs; the review parameter change was rolled back (cbea539). Retain
the 900-second review MFA requirement. Verify KeyCape preserves the original
timestamp for reused authentication and records a new timestamp only after
actual reauthentication; completeAuthorization currently copies a prior
session timestamp even after MFA. Provide an actionable freshness error and
prove the full browser path, not just redirect parameter forwarding.
T03's three human approvals and key check subsequently completed; this is
ongoing authentication reliability work, not an outstanding T03 execution.
Narrow INFD-IN-0006 to `surface` alone after railiance-master's correction The custodian's record was corrected on 2026-09-21 while this request was being written. railiance-master had already established — with fuller citations than this repository had — that flex-auth's validator set {Staff, Engine, Tooling} is not §3's enumeration: §3 has four rows and `Taxonomy` is the first, defined in §3.1, catalogued in §4, mapped in §7 and given its own §17. It added the sharper finding this repository had not reached: §3's table writes `Engines` while §4 types eight rows `Engine`, so two faithful conformance runs disagree about every engine in the estate. This repository reached the first half independently and before seeing the correction, and now records it rather than re-arguing it. The consequence is what matters: `surface` is the only surveyed value outside §3 itself, and the only one that needs a ruling on whether the vocabulary is closed. The two cases do not behave alike and should not be ruled on together — which is what the corrected record says, and this repository agrees. One point carries over into the closed outcome: if §3's vocabulary is ruled closed, the closed set should be written out as declaration values rather than inferred from table row labels. `Engines`/`Engine` is what happens otherwise, and it is B1's shape one level further in. Position unchanged; the declared value remains unchanged pending the ruling. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Assistant: claude-code Assistant-Model: opus Assistant-Process: 63291@bnt-lap001 Assistant-Session: 8bd77868-ca68-4f49-bb1e-d539ecc0d703
2026-09-21 02:14:00 +02:00
state_hub_intake_id: "01a0c14e-f965-788f-8efb-4424f1f1ad08"
```
Raise INFD-IN-0006: is §3's layer vocabulary closed, and what is `surface`? The custodian's estate-wide sweep (2026-09-21), extending flex-auth's boundaries review FLEX-WP-0030, found this repository declaring `layer: surface` against a §3 vocabulary that does not enumerate it. flex-auth's validator admits only {Staff, Engine, Tooling}, so this fails on the value rather than on casing or on B1's precedence question. It was never raised here directly and it is not the nine-repository defect: both our files say `surface`, in the same casing. `surface` denotes the presentation-and-binding tier — the runtime a human touches, where a decision rendered elsewhere is shown to a named person, that person binds their identity to the act, and the evidence that the presentation happened is produced. It was chosen by elimination on 2026-09-09 (f6376dd), because GH-DEC-2026-012 R1 ruled us out of Engine and left the layer ours to declare, and each remaining value is false of us: not Staff (deterministic by construction, and holding state audit-core depends on at runtime, which §3.4 forbids Staff), not Tooling (we persist nothing another layer reads), not Taxonomy (we are nothing but a runtime position). Faced with a false value that satisfies a validator or the true word and a finding, the true word was written. Position: `surface` names a real tier §3 does not enumerate. The sharpest form is that a standing ruling plus a closed vocabulary leaves this repository no conforming declaration available — the §9.1 defect applied to conformance that §11 names against itself. But the ruling is gate-house's and we do not claim it must go our way: if the vocabulary is ruled closed and a value named, both files change the same day without argument. We ask only that such a ruling show how §3's determinism cut reaches that value given GH-DEC-2026-012 R1, because the next repository in this position will reason from it — and the tier a human touches having no owner is exactly what produced approval-engine's unowned inbox, key-cape's blocked client_id, and this repository. Two observations offered: flex-auth's validator admits three values where §3 enumerates four, so railiance-master's `Taxonomy` fails the validator rather than the standard and is separable without any ruling, leaving `surface` as the only surveyed value outside §3 itself; and §3's row label is `Engines` while declarations use `Engine`, which should be written out as declaration values if the set is ruled closed. The declared value is UNCHANGED on purpose. Changing it ahead of the ruling would pre-empt gate-house and throw away the evidence of what was concluded. layer.yaml, INTENT.md and AGENTS.md now say so in place, so the value is not read as unexamined and no later agent silently "fixes" it. AGENTS.md's layer section was also stale — it still said layer.yaml was unwritten. 28 layer conformance tests pass. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Assistant: claude-code Assistant-Model: opus Assistant-Process: 63291@bnt-lap001 Assistant-Session: 8bd77868-ca68-4f49-bb1e-d539ecc0d703
2026-09-21 02:11:59 +02:00
## INFD-IN-0006 — Is §3's layer vocabulary closed, and what is `surface`?
```yaml
id: INFD-IN-0006
kind: intake
title: Is section 3's layer vocabulary closed, and what is `surface`?
status: closed
Raise INFD-IN-0006: is §3's layer vocabulary closed, and what is `surface`? The custodian's estate-wide sweep (2026-09-21), extending flex-auth's boundaries review FLEX-WP-0030, found this repository declaring `layer: surface` against a §3 vocabulary that does not enumerate it. flex-auth's validator admits only {Staff, Engine, Tooling}, so this fails on the value rather than on casing or on B1's precedence question. It was never raised here directly and it is not the nine-repository defect: both our files say `surface`, in the same casing. `surface` denotes the presentation-and-binding tier — the runtime a human touches, where a decision rendered elsewhere is shown to a named person, that person binds their identity to the act, and the evidence that the presentation happened is produced. It was chosen by elimination on 2026-09-09 (f6376dd), because GH-DEC-2026-012 R1 ruled us out of Engine and left the layer ours to declare, and each remaining value is false of us: not Staff (deterministic by construction, and holding state audit-core depends on at runtime, which §3.4 forbids Staff), not Tooling (we persist nothing another layer reads), not Taxonomy (we are nothing but a runtime position). Faced with a false value that satisfies a validator or the true word and a finding, the true word was written. Position: `surface` names a real tier §3 does not enumerate. The sharpest form is that a standing ruling plus a closed vocabulary leaves this repository no conforming declaration available — the §9.1 defect applied to conformance that §11 names against itself. But the ruling is gate-house's and we do not claim it must go our way: if the vocabulary is ruled closed and a value named, both files change the same day without argument. We ask only that such a ruling show how §3's determinism cut reaches that value given GH-DEC-2026-012 R1, because the next repository in this position will reason from it — and the tier a human touches having no owner is exactly what produced approval-engine's unowned inbox, key-cape's blocked client_id, and this repository. Two observations offered: flex-auth's validator admits three values where §3 enumerates four, so railiance-master's `Taxonomy` fails the validator rather than the standard and is separable without any ruling, leaving `surface` as the only surveyed value outside §3 itself; and §3's row label is `Engines` while declarations use `Engine`, which should be written out as declaration values if the set is ruled closed. The declared value is UNCHANGED on purpose. Changing it ahead of the ruling would pre-empt gate-house and throw away the evidence of what was concluded. layer.yaml, INTENT.md and AGENTS.md now say so in place, so the value is not read as unexamined and no later agent silently "fixes" it. AGENTS.md's layer section was also stale — it still said layer.yaml was unwritten. 28 layer conformance tests pass. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Assistant: claude-code Assistant-Model: opus Assistant-Process: 63291@bnt-lap001 Assistant-Session: 8bd77868-ca68-4f49-bb1e-d539ecc0d703
2026-09-21 02:11:59 +02:00
origin: coordination
origin_ref: the-custodian/docs/assessments/2026-09-21-layer-declaration-boundaries.md
priority: medium
owner: gate-house
repo: informed-decision
lane: blue
tags:
- decision-request
- cross-repo
- conformance
created: '2026-09-21'
updated: '2026-09-21'
resolved_by: GH-DEC-2026-017
resolution: >-
RULED 2026-09-21. The section 3 vocabulary is CLOSED and has four tokens —
Taxonomy, Tooling, Engine, Staff — with comparison ASCII case-insensitive, so
no repository is asked to re-spell anything. `surface` is not a layer and this
repository's correct declaration is `layer: Staff, role: pep-shaped`, which
the ruling notes this repository's own file already reasons from twice.
Applied the same day in one commit, in INTENT.md and in layer.yaml, with no
argument, exactly as pre-committed; the elimination reasoning that produced
`surface` is kept as history in layer.yaml because the ruling's own reversal
condition names it. The ruling also held that this repository was NEVER a
section 11 non-conformance — section 11 binds estate-authored repositories IN
section 4 and this repository has no catalog row, so a run that grades it is
over-scoped — and it changed the declaration's FORM: INTENT.md governs,
layer.yaml is a derived artifact that must be marked derived and agree, and a
declaration carries no standard version, which removes the
`standard_version: "0.7"` this repository had flagged. Two things spawn from
it rather than close with it: INFD-IN-0007 (the section 3.4 fit, asked once
more) and the section 4 catalog-row question, answered YES in
docs/section-4-catalog-row.md.
Raise INFD-IN-0006: is §3's layer vocabulary closed, and what is `surface`? The custodian's estate-wide sweep (2026-09-21), extending flex-auth's boundaries review FLEX-WP-0030, found this repository declaring `layer: surface` against a §3 vocabulary that does not enumerate it. flex-auth's validator admits only {Staff, Engine, Tooling}, so this fails on the value rather than on casing or on B1's precedence question. It was never raised here directly and it is not the nine-repository defect: both our files say `surface`, in the same casing. `surface` denotes the presentation-and-binding tier — the runtime a human touches, where a decision rendered elsewhere is shown to a named person, that person binds their identity to the act, and the evidence that the presentation happened is produced. It was chosen by elimination on 2026-09-09 (f6376dd), because GH-DEC-2026-012 R1 ruled us out of Engine and left the layer ours to declare, and each remaining value is false of us: not Staff (deterministic by construction, and holding state audit-core depends on at runtime, which §3.4 forbids Staff), not Tooling (we persist nothing another layer reads), not Taxonomy (we are nothing but a runtime position). Faced with a false value that satisfies a validator or the true word and a finding, the true word was written. Position: `surface` names a real tier §3 does not enumerate. The sharpest form is that a standing ruling plus a closed vocabulary leaves this repository no conforming declaration available — the §9.1 defect applied to conformance that §11 names against itself. But the ruling is gate-house's and we do not claim it must go our way: if the vocabulary is ruled closed and a value named, both files change the same day without argument. We ask only that such a ruling show how §3's determinism cut reaches that value given GH-DEC-2026-012 R1, because the next repository in this position will reason from it — and the tier a human touches having no owner is exactly what produced approval-engine's unowned inbox, key-cape's blocked client_id, and this repository. Two observations offered: flex-auth's validator admits three values where §3 enumerates four, so railiance-master's `Taxonomy` fails the validator rather than the standard and is separable without any ruling, leaving `surface` as the only surveyed value outside §3 itself; and §3's row label is `Engines` while declarations use `Engine`, which should be written out as declaration values if the set is ruled closed. The declared value is UNCHANGED on purpose. Changing it ahead of the ruling would pre-empt gate-house and throw away the evidence of what was concluded. layer.yaml, INTENT.md and AGENTS.md now say so in place, so the value is not read as unexamined and no later agent silently "fixes" it. AGENTS.md's layer section was also stale — it still said layer.yaml was unwritten. 28 layer conformance tests pass. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Assistant: claude-code Assistant-Model: opus Assistant-Process: 63291@bnt-lap001 Assistant-Session: 8bd77868-ca68-4f49-bb1e-d539ecc0d703
2026-09-21 02:11:59 +02:00
description: >-
This repository declares `layer: surface` in both INTENT.md frontmatter and
layer.yaml. Section 3 of security-layer-model_v0.8.md enumerates four layers —
Taxonomy, Tooling, Engines, Staff — and `surface` is not among them;
flex-auth's conformance validator reads the vocabulary as closed and admits
only {Staff, Engine, Tooling}, so this repository fails it on the value rather
than on casing or on the B1 precedence question. Surfaced by the custodian's
estate-wide sweep extending flex-auth's boundaries review (FLEX-WP-0030); it
was never a finding raised against this repository directly. Two facts bound
it: this repository is internally consistent — both files say `surface` in the
same casing, so it is not part of the nine-repository B1 disagreement — and it
has no section 4 catalog row, having declared ahead of being catalogued.
`surface` denotes the presentation-and-binding tier: the runtime a human
touches, where a decision rendered elsewhere is shown to a named person, that
person's identity is bound to the act, and the evidence that the presentation
happened is produced. It was chosen by elimination on 2026-09-09 (f6376dd),
in this repository's own voice, because GH-DEC-2026-012 R1 ruled it out of
Engine and left the layer to it to declare, and because each remaining section
3 value is false of it — not Staff (deterministic by construction, and holding
state audit-core depends on at runtime, which section 3.4 forbids Staff), not
Tooling (persists nothing another layer reads), not Taxonomy (nothing but a
runtime position). POSITION: `surface` names a real tier section 3 does not
enumerate, the sharpest form being that a standing ruling plus a closed
vocabulary would leave this repository no conforming declaration available —
the section 9.1 defect applied to conformance that section 11 names. This
repository does not claim the ruling must go its way: if gate-house rules the
vocabulary closed and names which of the four values applies, both files
change the same day without argument, and it asks only that such a ruling show
how section 3's determinism cut reaches that value given GH-DEC-2026-012 R1,
because the next repository in this position will reason from it. The declared
value is deliberately UNCHANGED pending the ruling: changing it first would
pre-empt gate-house and destroy the evidence of what was actually concluded.
Narrow INFD-IN-0006 to `surface` alone after railiance-master's correction The custodian's record was corrected on 2026-09-21 while this request was being written. railiance-master had already established — with fuller citations than this repository had — that flex-auth's validator set {Staff, Engine, Tooling} is not §3's enumeration: §3 has four rows and `Taxonomy` is the first, defined in §3.1, catalogued in §4, mapped in §7 and given its own §17. It added the sharper finding this repository had not reached: §3's table writes `Engines` while §4 types eight rows `Engine`, so two faithful conformance runs disagree about every engine in the estate. This repository reached the first half independently and before seeing the correction, and now records it rather than re-arguing it. The consequence is what matters: `surface` is the only surveyed value outside §3 itself, and the only one that needs a ruling on whether the vocabulary is closed. The two cases do not behave alike and should not be ruled on together — which is what the corrected record says, and this repository agrees. One point carries over into the closed outcome: if §3's vocabulary is ruled closed, the closed set should be written out as declaration values rather than inferred from table row labels. `Engines`/`Engine` is what happens otherwise, and it is B1's shape one level further in. Position unchanged; the declared value remains unchanged pending the ruling. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Assistant: claude-code Assistant-Model: opus Assistant-Process: 63291@bnt-lap001 Assistant-Session: 8bd77868-ca68-4f49-bb1e-d539ecc0d703
2026-09-21 02:14:00 +02:00
Scope narrowed the same day: railiance-master had already established, with
fuller citations, that flex-auth's validator set is not section 3's enumeration
— section 3 has four rows and `Taxonomy` is the first — and the custodian's
record was corrected to say so, adding that section 3 writes `Engines` while
section 4 types eight rows `Engine`. This repository reached the first half
independently and does not re-argue it. The consequence is that `surface` is
the only surveyed value outside section 3 itself and the only one needing this
ruling; the two cases should not be ruled on together. One point carries over:
if the set is ruled closed it should be written out as declaration values
rather than inferred from table row labels. Full request:
Raise INFD-IN-0006: is §3's layer vocabulary closed, and what is `surface`? The custodian's estate-wide sweep (2026-09-21), extending flex-auth's boundaries review FLEX-WP-0030, found this repository declaring `layer: surface` against a §3 vocabulary that does not enumerate it. flex-auth's validator admits only {Staff, Engine, Tooling}, so this fails on the value rather than on casing or on B1's precedence question. It was never raised here directly and it is not the nine-repository defect: both our files say `surface`, in the same casing. `surface` denotes the presentation-and-binding tier — the runtime a human touches, where a decision rendered elsewhere is shown to a named person, that person binds their identity to the act, and the evidence that the presentation happened is produced. It was chosen by elimination on 2026-09-09 (f6376dd), because GH-DEC-2026-012 R1 ruled us out of Engine and left the layer ours to declare, and each remaining value is false of us: not Staff (deterministic by construction, and holding state audit-core depends on at runtime, which §3.4 forbids Staff), not Tooling (we persist nothing another layer reads), not Taxonomy (we are nothing but a runtime position). Faced with a false value that satisfies a validator or the true word and a finding, the true word was written. Position: `surface` names a real tier §3 does not enumerate. The sharpest form is that a standing ruling plus a closed vocabulary leaves this repository no conforming declaration available — the §9.1 defect applied to conformance that §11 names against itself. But the ruling is gate-house's and we do not claim it must go our way: if the vocabulary is ruled closed and a value named, both files change the same day without argument. We ask only that such a ruling show how §3's determinism cut reaches that value given GH-DEC-2026-012 R1, because the next repository in this position will reason from it — and the tier a human touches having no owner is exactly what produced approval-engine's unowned inbox, key-cape's blocked client_id, and this repository. Two observations offered: flex-auth's validator admits three values where §3 enumerates four, so railiance-master's `Taxonomy` fails the validator rather than the standard and is separable without any ruling, leaving `surface` as the only surveyed value outside §3 itself; and §3's row label is `Engines` while declarations use `Engine`, which should be written out as declaration values if the set is ruled closed. The declared value is UNCHANGED on purpose. Changing it ahead of the ruling would pre-empt gate-house and throw away the evidence of what was concluded. layer.yaml, INTENT.md and AGENTS.md now say so in place, so the value is not read as unexamined and no later agent silently "fixes" it. AGENTS.md's layer section was also stale — it still said layer.yaml was unwritten. 28 layer conformance tests pass. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Assistant: claude-code Assistant-Model: opus Assistant-Process: 63291@bnt-lap001 Assistant-Session: 8bd77868-ca68-4f49-bb1e-d539ecc0d703
2026-09-21 02:11:59 +02:00
docs/gate-house-decision-request-layer-vocabulary.md.
Narrow INFD-IN-0006 to `surface` alone after railiance-master's correction The custodian's record was corrected on 2026-09-21 while this request was being written. railiance-master had already established — with fuller citations than this repository had — that flex-auth's validator set {Staff, Engine, Tooling} is not §3's enumeration: §3 has four rows and `Taxonomy` is the first, defined in §3.1, catalogued in §4, mapped in §7 and given its own §17. It added the sharper finding this repository had not reached: §3's table writes `Engines` while §4 types eight rows `Engine`, so two faithful conformance runs disagree about every engine in the estate. This repository reached the first half independently and before seeing the correction, and now records it rather than re-arguing it. The consequence is what matters: `surface` is the only surveyed value outside §3 itself, and the only one that needs a ruling on whether the vocabulary is closed. The two cases do not behave alike and should not be ruled on together — which is what the corrected record says, and this repository agrees. One point carries over into the closed outcome: if §3's vocabulary is ruled closed, the closed set should be written out as declaration values rather than inferred from table row labels. `Engines`/`Engine` is what happens otherwise, and it is B1's shape one level further in. Position unchanged; the declared value remains unchanged pending the ruling. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Assistant: claude-code Assistant-Model: opus Assistant-Process: 63291@bnt-lap001 Assistant-Session: 8bd77868-ca68-4f49-bb1e-d539ecc0d703
2026-09-21 02:14:00 +02:00
state_hub_intake_id: "01a0c14f-17b6-72fb-8951-8c933bd05d6b"
Raise INFD-IN-0006: is §3's layer vocabulary closed, and what is `surface`? The custodian's estate-wide sweep (2026-09-21), extending flex-auth's boundaries review FLEX-WP-0030, found this repository declaring `layer: surface` against a §3 vocabulary that does not enumerate it. flex-auth's validator admits only {Staff, Engine, Tooling}, so this fails on the value rather than on casing or on B1's precedence question. It was never raised here directly and it is not the nine-repository defect: both our files say `surface`, in the same casing. `surface` denotes the presentation-and-binding tier — the runtime a human touches, where a decision rendered elsewhere is shown to a named person, that person binds their identity to the act, and the evidence that the presentation happened is produced. It was chosen by elimination on 2026-09-09 (f6376dd), because GH-DEC-2026-012 R1 ruled us out of Engine and left the layer ours to declare, and each remaining value is false of us: not Staff (deterministic by construction, and holding state audit-core depends on at runtime, which §3.4 forbids Staff), not Tooling (we persist nothing another layer reads), not Taxonomy (we are nothing but a runtime position). Faced with a false value that satisfies a validator or the true word and a finding, the true word was written. Position: `surface` names a real tier §3 does not enumerate. The sharpest form is that a standing ruling plus a closed vocabulary leaves this repository no conforming declaration available — the §9.1 defect applied to conformance that §11 names against itself. But the ruling is gate-house's and we do not claim it must go our way: if the vocabulary is ruled closed and a value named, both files change the same day without argument. We ask only that such a ruling show how §3's determinism cut reaches that value given GH-DEC-2026-012 R1, because the next repository in this position will reason from it — and the tier a human touches having no owner is exactly what produced approval-engine's unowned inbox, key-cape's blocked client_id, and this repository. Two observations offered: flex-auth's validator admits three values where §3 enumerates four, so railiance-master's `Taxonomy` fails the validator rather than the standard and is separable without any ruling, leaving `surface` as the only surveyed value outside §3 itself; and §3's row label is `Engines` while declarations use `Engine`, which should be written out as declaration values if the set is ruled closed. The declared value is UNCHANGED on purpose. Changing it ahead of the ruling would pre-empt gate-house and throw away the evidence of what was concluded. layer.yaml, INTENT.md and AGENTS.md now say so in place, so the value is not read as unexamined and no later agent silently "fixes" it. AGENTS.md's layer section was also stale — it still said layer.yaml was unwritten. 28 layer conformance tests pass. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Assistant: claude-code Assistant-Model: opus Assistant-Process: 63291@bnt-lap001 Assistant-Session: 8bd77868-ca68-4f49-bb1e-d539ecc0d703
2026-09-21 02:11:59 +02:00
```
## INFD-IN-0007 — How does section 3's determinism cut reach Staff for this repository?
```yaml
id: INFD-IN-0007
kind: intake
title: How does section 3's determinism cut reach Staff for this repository?
status: open
origin: residual
origin_ref: INFD-IN-0006
priority: low
owner: gate-house
repo: informed-decision
lane: blue
tags:
- decision-request
- cross-repo
- conformance
created: '2026-09-21'
updated: '2026-09-21'
blocks_nothing: true
description: >-
GH-DEC-2026-017 closed INFD-IN-0006 and named the value: this repository is
`layer: Staff, role: pep-shaped`, and that value is APPLIED — both files
changed the day the ruling arrived, unconditionally, as pre-committed. This
intake is not a reservation on it and nothing waits on it. INFD-IN-0006 asked
one non-conditional question in two parts: WHICH value, and HOW section 3's
determinism cut reaches it given GH-DEC-2026-012 R1. The first part is
answered squarely. The second is answered by elimination — not an Engine per
R1, and nothing else in the four is true, therefore Staff, with ops-mason and
ops-warden as the precedent for Staff in the layer column and PEP-shaped in
the role column. That gives the value and it does not reach the objection this
repository actually raised, which was not about elimination but about fit:
section 3.4 defines Staff as interactive and NON-deterministic, working
through agentic capability, and says Staff repositories MUST NOT hold state
that another layer depends on at runtime. This repository is deterministic by
test (the same approval rendered to the same principal in the same role yields
the same view_hash), forbids an agent from completing its protected act at all
(AGENTS.md: humans bind, agents draft), and holds presentation evidence
audit-core depends on. Section 3 makes determinism the primary cut and this
repository falls on the deterministic side of it while being assigned the
non-deterministic layer. ASK: that the answer be written down for the next
repository in this position, which was the stated reason for asking the first
time — either that section 3.4's prohibitions bind a catalogued Staff row
differently than the elimination that reaches the layer, or that the cut is
not what this repository read it to be, or that this is a real tension carried
openly. Taking the section 4 row (docs/section-4-catalog-row.md) sharpens it,
since a catalogued Staff row is measured against section 3.4 directly. This
repository takes Staff either way and is not asking to be moved.
state_hub_intake_id: "01a0c23e-bd53-7ee0-9357-b223aa554842"
```
## INFD-IN-0008 — Admit a `list` action so decisions can be reviewed comfortably
```yaml
id: INFD-IN-0008
kind: intake
title: Admit a `list` action so decisions can be reviewed comfortably
status: open
origin: demand
origin_ref: INFD-WP-0004
priority: high
owner: flex-auth
repo: informed-decision
lane: blue
tags:
- cross-repo
- policy-request
created: '2026-09-21'
updated: '2026-09-21'
description: >-
The INFD-WP-0003 decision overview asks Flex Auth for `read` on each memo, and
the served compact-sitting v2 package refuses every row in production. Its
900-second MFA window is designed for binding, and KeyCape carries forward
earlier authentication timestamps (INFD-IN-0005). It also does not name the
three SECRETS-WP-0010-T03 memos. ASK: admit a `list` action with the same
identity bar minus freshness. It should cover memos from both admitted
packages, preferably as compact-sitting v3 with a resource-type-wide scope.
`read` and every act stay unchanged. Full request, disclosure limits and
fixtures: docs/flex-auth-request-list-action.md.
state_hub_intake_id: "01a0c5b7-77f3-787b-a19f-ffcfa4191213"
```