Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Assistant: claude-code Assistant-Model: opus Assistant-Process: 994874@bnt-lap001 Assistant-Session: 6017c416-d619-47eb-bd1a-f670a02d7d87
186 lines
12 KiB
Markdown
186 lines
12 KiB
Markdown
# Cross-repo evidence admission requirements
|
|
|
|
Reviewed 2026-10-04 against audit-core source, intakes, inbox and owner files.
|
|
Work: AUDIT-WP-0013 (senders), AUDIT-WP-0014 (execution receipts), and
|
|
AUDIT-WP-0015 (independent evidence). These are source and metadata commitments;
|
|
activation requires the relevant owner delivery and approved live change.
|
|
|
|
## Flex-auth decision records — AUDIT-WP-0013-T02/T03
|
|
|
|
Owner file: access-engine/workplans/FLEX-WP-0031-decision-record-emission.md,
|
|
reviewed at `257a83e997d7d30d3ace2b4524fab47cdfb7a6de`. T03's durable outbox
|
|
is done. Do not keep registration waiting on an outbox that already exists.
|
|
Audit-core accepts custody admission per AUDIT-IN-0006; it does not decide how
|
|
authorization effects are released.
|
|
|
|
Flex-auth must supply six final non-secret registration payloads and exact
|
|
namespace/pod ingress selectors: ops-warden, tenant-engine, user-engine,
|
|
secrets-engine, informed-decision-t03 and informed-decision-sitting. Each
|
|
identity permits its exact `flex-auth.<pin>` source, write true/read false,
|
|
`tenants: ["*"]` with the existing deny-before-tenant-creation justification,
|
|
load-bearing and explicitly selected `secret_policy: redact` in the protected
|
|
registry. No wildcard source match and no credential in the payload.
|
|
|
|
The emitter actually uses `flex-auth.decision.<effect>` (ClassPrefix in
|
|
internal/emission/outbox.go). Final heartbeat keys must therefore be
|
|
`flex-auth.decision.deny`, `.redact`, `.not_applicable`, `.audit_only`, each at
|
|
86400 seconds; shorthand effect names would monitor the wrong stored class.
|
|
Heartbeat wire type is `audit-core.heartbeat`, with `data.class` set to the
|
|
exact vouched-for class, independent non-empty correlation/id and offset-aware
|
|
occurred_at. Each per-pin canonical `emission_cadence` must name the exact
|
|
source and classes; flex-auth supplies allow's expected rate, window and
|
|
threshold. Audit-core will not choose them for the source. Counts compare
|
|
committed outbox entries, not all released decisions, by identical class/window.
|
|
|
|
The remaining custody owner is railiance-platform; ops-warden must supply a usable sender-mint routing entry.
|
|
The current audit-core-senders entry exists but is draft, unresolvable and
|
|
non-executable, names ops-mason, and describes an old in-cluster generation
|
|
path; it is not the reviewed attended per-pin mint lane. Correct/promote the
|
|
existing routing record or return a concrete owner lane, without creating a
|
|
second competing registry. Use `warden route` before any credential
|
|
request. An attended seed/delivery needs the founder's terminal and per-change
|
|
go. Then audit-core reviews the payloads, prepares exact scope/ingress,
|
|
and verifies accepted/duplicate writes, wrong source/tenant/read refusals,
|
|
reconciliation, per-class missing heartbeats and formerly-valid bearer
|
|
revocation. Source and owner revisions plus sanitized receipts are required.
|
|
|
|
Gate House GH-WP-0004-T12 owes the final decision for FLEX-DEC-2026-018.
|
|
Message `715cf1f2-55dd-4d2d-9b7b-c5dffa0181e5` is explicitly a reading, not
|
|
that decision: current text admits no load-bearing failure-path exception.
|
|
Audit-core retains the non-atomic/non-conformant description for the restrictive
|
|
classes released uncommitted. It will not repurpose attributive
|
|
`completeness_trade`, add a permissive schema field ahead of the ruling, or
|
|
claim atomicity. The final ruling blocks an exception/conformance declaration;
|
|
it does not block preparing transport custody for honestly described evidence.
|
|
|
|
## Qonto collector mapping — AUDIT-WP-0013-T04/T05
|
|
|
|
Accepted bounded receiver admission/mapping commitment for QONTO-WP-0006-T02.
|
|
Qonto source reviewed at `bf8a9ede6704523d4744d63bf481ca8b195d86f4`.
|
|
rapp-qonto owns the collector runtime; its finished RAPP-QONTO-WP-0003 is
|
|
historical rollout evidence, not current collector acceptance. qonto-assistant
|
|
owns the source declaration, class inventory, scope and process counters.
|
|
|
|
| Source class | Proposed receiver type | Required preserved metadata |
|
|
| --- | --- | --- |
|
|
| audit.allow | audit.allow | stream_id, stream_instance_id, stream_sequence, event_class and sanitized identity/egress context |
|
|
| audit.deny | audit.deny | same metadata; rare load-bearing, no expected-rate monitor |
|
|
| audit.heartbeat | audit-core.heartbeat | original event_class audit.heartbeat, timestamp/reason, instance and sequence, both source/window transition counts and window bounds |
|
|
|
|
The adapter must supply every field of docs/event-envelope.md. Stable event id
|
|
and Idempotency-Key must derive deterministically from the original instance
|
|
and sequence so retries cannot mint new accepted records. Tenant and subject
|
|
must come from an owner-approved binding, never inferred from a pod name or a
|
|
convenience tenant. Preserve the original heartbeat event_class in data; do
|
|
not rename Qonto's emitted class in its documentation.
|
|
|
|
A heartbeat can vouch for the quiet deny class through `data.class=audit.deny`.
|
|
Its assertion is no deny transitions in the window, not proof that there were
|
|
no allow transitions. qonto-assistant must approve that mapping and the exact
|
|
per-class heartbeat registration with its canonical declaration and actual
|
|
configured interval (default 86400). If another vouched-for class is needed,
|
|
review fan-out and sequence/count accounting explicitly. Sender-level
|
|
`evidence_kind` has one value: use the source owner's explicit load-bearing
|
|
admission for this mixed stream, retaining attributive allow and load-bearing
|
|
deny/heartbeat in the per-class canonical inventory. No blanket atomicity or
|
|
completeness claim follows from admission.
|
|
|
|
Audit-core now implements `GET /v1/reconciliation`'s optional
|
|
`stream_instance_id`, selecting exact stored `data.stream_instance_id` within
|
|
an authorized source/tenant and acceptance-time window. Duplicates count once;
|
|
restarts never share counts accidentally. This is source-tested and requires a
|
|
reviewed receiver release before live use. It does not turn source-time windows
|
|
into acceptance-time windows. The collector/observer must define bounded lag,
|
|
watermark/sequence boundaries and the comparable accepted-count derivation;
|
|
it must distinguish late arrival from lost evidence. Sender own counts are
|
|
available with read false. Independent kings-guard archive/sequence inspection
|
|
needs its separately scoped read identity/feed, not a writer upgraded to read
|
|
all tenants. No observer access scope is invented here.
|
|
|
|
Unblock inputs from rapp-qonto: collector source/image/config/Deployment pins,
|
|
metadata-only sample envelopes, exact namespace/pod selectors, authoritative
|
|
tenant binding, stable instance/restart/scale-to-zero semantics, retry/drop and
|
|
lag behavior, redacted success/failure receipts and actual accepted receiver
|
|
records. From qonto-assistant: reviewed mapping and per-class cadence,
|
|
classification, retention/access/export/secret policy. Audit-core then prepares
|
|
registration and checks acceptance, retries, retained instance/sequence,
|
|
wrong-scope refusals and accepted-count derivation. King's Guard KG-WP-0005-T03
|
|
subsequently owns independent missing-heartbeat, sequence-gap and count-divergence
|
|
acceptance. T02's sender proof never waits on Qonto T03 observer acceptance.
|
|
No bank keys or bank API traffic are needed for these receipts.
|
|
|
|
## Execution-attribution receipts — AUDIT-WP-0014
|
|
|
|
Proposal reviewed in net-kingdom/canon/standards/playbook-capability-contract_v0.2.md
|
|
at `45a189a39167eef62709df0e857309f7ddc59029` (NK-WP-0040-T02).
|
|
Audit-core accepts the evidence-holder role; Railiance is the proposed emitter
|
|
and must confirm its exact emitting component and sender source. NetKingdom
|
|
owns the canonical receipt schema and validator. Audit-core checks shape and
|
|
credential scope, stores the event and chains it. Custody does not authenticate
|
|
the historical actor chain or decide whether decision_refs authorize execution.
|
|
|
|
Before implementation, NetKingdom must return a versioned schema, artifact
|
|
path/digest, unknown/absent semantics and positive/negative fixtures. All listed
|
|
fields must be represented: initiator issuer/subject, optional delegation,
|
|
executing workload, runtime principal, tenant, environment, run id, source
|
|
commit, artifact digest, target, action, decision refs and time interval with
|
|
clock source and optional established precision bound. Unknown attribution stays
|
|
explicit `unknown`; delegation is absent when none; a time bound is absent when
|
|
not established. No bearer or role response may be embedded.
|
|
|
|
Railiance must supply the exact wire event class and sender, authoritative
|
|
scope, stable retry/id binding to run_id, classification, emission guarantee,
|
|
retention/access/export and secret policy, plus emitter revision and metadata
|
|
fixtures. Audit-core will wrap the receipt in its existing eight-field envelope,
|
|
validate the canonical data schema before accept, enforce declared tenant/source,
|
|
refuse malformed/secret content, retain original unknowns, and prove duplicate
|
|
and conflict behavior. Cross-check receipt tenant with envelope tenant; require
|
|
ordered offset-aware start/end if that is the canonical rule. No independent
|
|
local receipt schema is shipped ahead of the owner schema, and generic JSON
|
|
acceptance is not advertised as receipt-schema validation.
|
|
|
|
NK-WP-0056 names a new emitter, the NetKingdom bounded executor in `sso`. Its
|
|
mapping (one receipt per run plus a `started` event, correlated by `run_id`) is in
|
|
`docs/bounded-executor-receipts.md` (AUDIT-WP-0018).
|
|
|
|
## Independent chain-head custody — AUDIT-WP-0015-T01
|
|
|
|
RESOURCE-WP-0002-T06 is done for encrypted logical database copies. That
|
|
terminal task is not an unfinished chain-head copy commitment. The 2026-09-15
|
|
AUDIT-WP-0009-T12 receipt proves the in-cluster attestor only.
|
|
resource-control and rapp-postgres must name the current offsite operator/owner
|
|
record, return a destination outside cluster and Barman failure domains on the
|
|
existing Nextcloud + age lane, and supply metadata-only upload and independent
|
|
readback receipts for the same chain-head digest, event id/count and observed_at.
|
|
State cadence, freshness/failure handling, access separation and retrieval test.
|
|
No Nextcloud credential belongs in audit-core. Without this return, the control
|
|
remains a database-owner boundary and carries no cluster-owner survival claim.
|
|
|
|
## Refreshed E2 and asm-t08 — AUDIT-WP-0015-T02
|
|
|
|
Whitehat commit `7b5bc1e444cf57ae5d9ba1dac0c0189c0833e278` and message
|
|
`81bebdd8-5ca7-47b3-aafe-1d00ff8be122` leave WHITEHAT-WP-0006-T03 wait.
|
|
The 2026-08-22 E2 run is historical and its -01/-02/-03 engagement ids are
|
|
terminal. Whitehat is not requesting a run. A future run needs a distinct
|
|
engagement, plane admission and rules-of-engagement approvals; audit-core
|
|
creates none of those during this review. The alternative is access-engine's
|
|
confirmation of a flex-auth tenant-A identity with no tenant-B authority.
|
|
asm-t08's surface owner owes component revision, identities, window and technique.
|
|
These remain owner inputs; no field or authorization is fabricated. Original
|
|
AUDIT-WP-0008-T05 remains done for its historical accepted scope.
|
|
|
|
## Qonto native admission update — 2026-10-15
|
|
|
|
AUDIT-WP-0013-T05 is complete for its bounded sender-native admission. The source
|
|
frame is now3600 seconds, receiver wait7200 and effective deadline10800. Sender
|
|
rapp-qonto-collector/source qonto-assistant/tenant tenant:friendly:binky remains
|
|
write-only, explicit redact, with canonical mixed per-class classification.
|
|
The compatible b479801b receiver release and migration0007 are live. Protected
|
|
registry CAS15→16 preserved other senders and all incumbent credentials; ESO
|
|
projection and receiver runtime configuration match. Actual same-instance
|
|
heartbeat/deny delivery, duplicates, scoped reconciliation and wrong-source,
|
|
wrong-tenant, archive-read and invalid-bearer refusals passed. Durable first202
|
|
receipts persisted across collector replacement. See the local
|
|
`docs/evidence/2026-10-15-cadence-admission/index.json` and workplan acceptance
|
|
note for exact limitations. Native allow delivery is not claimed. Independent
|
|
KG operational acceptance and real elapsed hourly observation remain separate.
|