From 2e97f37c01b583ac779310a2aa0d938bb9816604 Mon Sep 17 00:00:00 2001 From: tegwick Date: Thu, 15 Oct 2026 21:41:46 +0200 Subject: [PATCH] Accept native Qonto sender admission and hourly receiver registration Assistant: codex Assistant-Model: gpt-6-astra Assistant-Session: 01a13eab-1e6a-7b33-9c37-372e90ada3a2 --- docs/cadence-registration.md | 12 +++ docs/cross-repo-evidence-admission.md | 16 ++++ .../2026-10-15-cadence-admission/index.json | 13 +++ .../qonto-collector-native-admission.json | 59 +++++++++++++ .../qonto-collector-restart-persistence.json | 37 ++++++++ .../receiver-cadence-release-native.json | 23 +++++ .../receiver-custody-live.json | 87 +++++++++++++++++++ .../receiver-migration-completed.json | 31 +++++++ ...receiver-pre-release-backup-completed.json | 9 ++ ...DIT-WP-0013-cross-repo-sender-admission.md | 41 +++++++-- 10 files changed, 323 insertions(+), 5 deletions(-) create mode 100644 docs/evidence/2026-10-15-cadence-admission/index.json create mode 100644 docs/evidence/2026-10-15-cadence-admission/qonto-collector-native-admission.json create mode 100644 docs/evidence/2026-10-15-cadence-admission/qonto-collector-restart-persistence.json create mode 100644 docs/evidence/2026-10-15-cadence-admission/receiver-cadence-release-native.json create mode 100644 docs/evidence/2026-10-15-cadence-admission/receiver-custody-live.json create mode 100644 docs/evidence/2026-10-15-cadence-admission/receiver-migration-completed.json create mode 100644 docs/evidence/2026-10-15-cadence-admission/receiver-pre-release-backup-completed.json diff --git a/docs/cadence-registration.md b/docs/cadence-registration.md index 928b39f..34d5947 100644 --- a/docs/cadence-registration.md +++ b/docs/cadence-registration.md @@ -73,3 +73,15 @@ isolates instances but does not detect gaps on its own. AUDIT-WP-0013-T05 and NK-WP-0035 remain open until actual accepted records, duplicate/refusal/reconciliation receipts and independent observer evidence are available. Local tests and this prepared ingress are not those receipts. + +## Native registration follow-up — 2026-10-15 + +The initial prepared/source and old-artifact observations above are historical. +Current b479801b (source5227fb1) passed its native capability gate; migration0007 +completed. The guarded protected registry metadata update15→16, ESO projection +and receiver reload succeeded. Existing Approval credentials/scope and sibling +senders were preserved. Approval cadence and four waits7200 are now loaded; +Qonto collector native heartbeat/deny admission and own counts/refusals passed. +Local metadata evidence is in `docs/evidence/2026-10-15-cadence-admission/`. +These receipts do not claim independent operational acceptance, four fresh +Approval heartbeat observations or an actual hourly periodic Qonto observation. diff --git a/docs/cross-repo-evidence-admission.md b/docs/cross-repo-evidence-admission.md index 05bbeb2..bdfa428 100644 --- a/docs/cross-repo-evidence-admission.md +++ b/docs/cross-repo-evidence-admission.md @@ -164,3 +164,19 @@ 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. diff --git a/docs/evidence/2026-10-15-cadence-admission/index.json b/docs/evidence/2026-10-15-cadence-admission/index.json new file mode 100644 index 0000000..2333d32 --- /dev/null +++ b/docs/evidence/2026-10-15-cadence-admission/index.json @@ -0,0 +1,13 @@ +{ + "source": "net-kingdom/docs/evidence/2026-10-15-cadence-adoption", + "sha256": { + "receiver-custody-live.json": "4c50005289cd331fa22d49f8b828e3fd21a4e7077ce855724185051a97baa502", + "qonto-collector-native-admission.json": "573ce4d63af36f2a770cc032150ab3f45a4e507585b45312cacc0db4d8995cc9", + "qonto-collector-restart-persistence.json": "afebe361f85c2558e9c9f9e004cafd7b6d547ca53b0089af103fd17b8b4e5903", + "receiver-migration-completed.json": "83116b8864f3212296b89f3d5af9bafb84a43dd666788a8fcf91c4d74ffa02f0", + "receiver-cadence-release-native.json": "661731e6deb4b550104e1541427fdfdd0b088d33056fc86542796c7c2068b1cb", + "receiver-pre-release-backup-completed.json": "8186dc959bf8516f775116f6c23c4f46f67e5bd56d9fbd3d8dafc3b5a74b4e5d" + }, + "scope": "sender-native admission, receiver release and protected registry delivery; independent operational acceptance remains pending", + "credential_values_emitted": false +} diff --git a/docs/evidence/2026-10-15-cadence-admission/qonto-collector-native-admission.json b/docs/evidence/2026-10-15-cadence-admission/qonto-collector-native-admission.json new file mode 100644 index 0000000..7ba89c4 --- /dev/null +++ b/docs/evidence/2026-10-15-cadence-admission/qonto-collector-native-admission.json @@ -0,0 +1,59 @@ +{ + "own_reconciliation_status": 200, + "own_reconciliation": { + "source": "qonto-assistant", + "tenant": "tenant:friendly:binky", + "since": "2026-10-15T19:36:00+00:00", + "until": "2026-10-15T19:37:05.369346+00:00", + "counts": [ + { + "class": "audit-core.heartbeat", + "count": 1 + }, + { + "class": "audit.deny", + "count": 1 + } + ], + "stream_instance_id": "b351fa6b-e0d6-4f88-b7c9-6bacb1a112b7", + "means": "the count of events audit-core accepted and stored in this window. Divergence from the source's own count is a finding for the source; agreement proves neither completeness nor that any event occurred." + }, + "duplicate_status": 200, + "wrong_source_status": 400, + "wrong_tenant_status": 400, + "read_refusal_status": 403, + "invalid_bearer_status": 401, + "global_pending_count": 0, + "instance_receipts": [ + { + "accepted_at": "2026-10-15T19:36:30.769604+00:00", + "covered_event_classes": [ + "audit.deny" + ], + "event_id": "28dad6de11fb25fe6e0e145351f047360d6898afb53afd4cd677e560ec69132a", + "source": "qonto-assistant", + "status_code": 202, + "stream_instance_id": "b351fa6b-e0d6-4f88-b7c9-6bacb1a112b7", + "stream_sequence": 1, + "tenant": "tenant:friendly:binky", + "type": "audit-core.heartbeat" + }, + { + "accepted_at": "2026-10-15T19:36:30.861014+00:00", + "covered_event_classes": [], + "event_id": "6a9f34445e13062e38ab309a6fc800dc9a2fa24cb8a46ecd919ae18fe9409874", + "source": "qonto-assistant", + "status_code": 202, + "stream_instance_id": "b351fa6b-e0d6-4f88-b7c9-6bacb1a112b7", + "stream_sequence": 2, + "tenant": "tenant:friendly:binky", + "type": "audit.deny" + } + ], + "observed_at": "2026-10-15T19:37:03.422744+00:00", + "credential_values_emitted": false, + "source": "qonto-assistant", + "tenant": "tenant:friendly:binky", + "stream_instance_id": "b351fa6b-e0d6-4f88-b7c9-6bacb1a112b7", + "independent_readback": false +} diff --git a/docs/evidence/2026-10-15-cadence-admission/qonto-collector-restart-persistence.json b/docs/evidence/2026-10-15-cadence-admission/qonto-collector-restart-persistence.json new file mode 100644 index 0000000..2196930 --- /dev/null +++ b/docs/evidence/2026-10-15-cadence-admission/qonto-collector-restart-persistence.json @@ -0,0 +1,37 @@ +{ + "receipts": [ + { + "accepted_at": "2026-10-15T19:36:30.769604+00:00", + "covered_event_classes": [ + "audit.deny" + ], + "event_id": "28dad6de11fb25fe6e0e145351f047360d6898afb53afd4cd677e560ec69132a", + "source": "qonto-assistant", + "status_code": 202, + "stream_instance_id": "b351fa6b-e0d6-4f88-b7c9-6bacb1a112b7", + "stream_sequence": 1, + "tenant": "tenant:friendly:binky", + "type": "audit-core.heartbeat" + }, + { + "accepted_at": "2026-10-15T19:36:30.861014+00:00", + "covered_event_classes": [], + "event_id": "6a9f34445e13062e38ab309a6fc800dc9a2fa24cb8a46ecd919ae18fe9409874", + "source": "qonto-assistant", + "status_code": 202, + "stream_instance_id": "b351fa6b-e0d6-4f88-b7c9-6bacb1a112b7", + "stream_sequence": 2, + "tenant": "tenant:friendly:binky", + "type": "audit.deny" + } + ], + "pending_count": 0, + "started_at": "2026-10-15T19:37:41.503622+00:00", + "pod_uid_before": "1a39bd4b-19dc-4c1f-adaa-56a11423d945", + "native_admission_receipt": "qonto-collector-native-admission.json", + "pod_uid_after": "92ef9104-469c-4b28-a0cc-f781f53bb26e", + "observed_at": "2026-10-15T19:38:35.874453+00:00", + "first_202_receipts_preserved": true, + "pvc": "rapp-qonto-audit-outbox", + "image": "forgejo.coulomb.social/coulomb/rapp-qonto-audit-collector@sha256:82bfd4100e14ddb2cefc4acc02b6b74609846b4a26ad40d9089ed564693f250a" +} diff --git a/docs/evidence/2026-10-15-cadence-admission/receiver-cadence-release-native.json b/docs/evidence/2026-10-15-cadence-admission/receiver-cadence-release-native.json new file mode 100644 index 0000000..8e1589f --- /dev/null +++ b/docs/evidence/2026-10-15-cadence-admission/receiver-cadence-release-native.json @@ -0,0 +1,23 @@ +{ + "image": "forgejo.coulomb.social/coulomb/audit-core@sha256:b479801b0bc76df66a36a85376c45aaf399c6d82feade9ba81430b774c4a8271", + "deployment_uid": "b85fe3d0-75c9-4e0d-8c34-c6f1df0881bb", + "deployment_resource_version": "75784583", + "pod_uid": "22e4df05-dfb0-4e70-8d5a-5a5950c860bd", + "capabilities": { + "load_bearing": true, + "redact": true, + "write_only": true, + "source_exact": true, + "tenant_exact": true + }, + "synthetic_probe_only": true, + "credential_reads": 0, + "cadence_instance_capabilities": { + "cadence_registration": true, + "sqlite_instance_filter": true, + "postgres_instance_filter": true, + "synthetic_cadence_parse": true, + "synthetic_heartbeat_parse": true, + "synthetic_exact_scope": true + } +} diff --git a/docs/evidence/2026-10-15-cadence-admission/receiver-custody-live.json b/docs/evidence/2026-10-15-cadence-admission/receiver-custody-live.json new file mode 100644 index 0000000..14014d2 --- /dev/null +++ b/docs/evidence/2026-10-15-cadence-admission/receiver-custody-live.json @@ -0,0 +1,87 @@ +{ + "schema_version": "platform.cadence-custody/v1", + "status": "delivered_pending_native_producer_and_independent_acceptance", + "credential_values_emitted": false, + "started_at": "2026-10-15T19:35:14.571483+00:00", + "packet_sha256": "81478f43abd2dbcb924966e9a3404e26bc226c91f2921b493ef0d5e2c23d4729", + "receiver_before": { + "image": "forgejo.coulomb.social/coulomb/audit-core@sha256:b479801b0bc76df66a36a85376c45aaf399c6d82feade9ba81430b774c4a8271", + "deployment_uid": "b85fe3d0-75c9-4e0d-8c34-c6f1df0881bb", + "deployment_resource_version": "75784583", + "pod_uid": "22e4df05-dfb0-4e70-8d5a-5a5950c860bd", + "capabilities": { + "load_bearing": true, + "redact": true, + "write_only": true, + "source_exact": true, + "tenant_exact": true + }, + "synthetic_probe_only": true, + "credential_reads": 0, + "cadence_instance_capabilities": { + "cadence_registration": true, + "sqlite_instance_filter": true, + "postgres_instance_filter": true, + "synthetic_cadence_parse": true, + "synthetic_heartbeat_parse": true, + "synthetic_exact_scope": true + } + }, + "phase": "delivery", + "registry_version_before": 15, + "custody_version": 1, + "custody_request_id": "77a526ef-dbcc-147d-b98b-a339f4efcd62", + "approval": { + "sender": "approval-engine", + "source": "approval-engine", + "tenant": "tenant:platform", + "may_read": false, + "emission_cadence_sha256": "cc58c8d53ebf50acf540d73b7607d579942bda7734c3e8722108e9c9204af655", + "heartbeat_classes": { + "issuance": 7200, + "use": 7200, + "supersession": 7200, + "revocation": 7200 + }, + "effective_deadline_seconds": 10800, + "changed": true, + "credentials_preserved": true, + "other_registry_fields_preserved": true + }, + "registry_request_id": "47ca933d-4a5d-699b-c474-094947f78fb9", + "registry_version_after": 16, + "registry_readback_matches": true, + "other_senders_preserved": true, + "approval_credentials_preserved": true, + "reader_exact_path_negatives_and_revocation": true, + "wrong_identity_denied": true, + "coding_agent_deny_wins": true, + "projection_matches": true, + "receiver_registry_projection_matches": true, + "receiver_after": { + "image": "forgejo.coulomb.social/coulomb/audit-core@sha256:b479801b0bc76df66a36a85376c45aaf399c6d82feade9ba81430b774c4a8271", + "deployment_uid": "b85fe3d0-75c9-4e0d-8c34-c6f1df0881bb", + "deployment_resource_version": "75785764", + "pod_uid": "8333754a-eca0-4dd0-9230-72e41bb1e632", + "capabilities": { + "load_bearing": true, + "redact": true, + "write_only": true, + "source_exact": true, + "tenant_exact": true + }, + "synthetic_probe_only": true, + "credential_reads": 0, + "cadence_instance_capabilities": { + "cadence_registration": true, + "sqlite_instance_filter": true, + "postgres_instance_filter": true, + "synthetic_cadence_parse": true, + "synthetic_heartbeat_parse": true, + "synthetic_exact_scope": true + } + }, + "receiver_reloaded": true, + "receiver_runtime_registry_matches": true, + "completed_at": "2026-10-15T19:35:47.205117+00:00" +} diff --git a/docs/evidence/2026-10-15-cadence-admission/receiver-migration-completed.json b/docs/evidence/2026-10-15-cadence-admission/receiver-migration-completed.json new file mode 100644 index 0000000..7345f77 --- /dev/null +++ b/docs/evidence/2026-10-15-cadence-admission/receiver-migration-completed.json @@ -0,0 +1,31 @@ +{ + "job": "audit-core-migrate-nk-wp-0035-r3", + "uid": "ba24c60e-ceb6-4cc2-b8c4-840381deea53", + "status": { + "completionTime": "2026-10-15T19:31:33Z", + "conditions": [ + { + "lastProbeTime": "2026-10-15T19:31:33Z", + "lastTransitionTime": "2026-10-15T19:31:33Z", + "message": "Reached expected number of succeeded pods", + "reason": "CompletionsReached", + "status": "True", + "type": "SuccessCriteriaMet" + }, + { + "lastProbeTime": "2026-10-15T19:31:33Z", + "lastTransitionTime": "2026-10-15T19:31:33Z", + "message": "Reached expected number of succeeded pods", + "reason": "CompletionsReached", + "status": "True", + "type": "Complete" + } + ], + "ready": 0, + "startTime": "2026-10-15T19:31:24Z", + "succeeded": 1, + "terminating": 0, + "uncountedTerminatedPods": {} + }, + "image": "forgejo.coulomb.social/coulomb/audit-core@sha256:b479801b0bc76df66a36a85376c45aaf399c6d82feade9ba81430b774c4a8271" +} diff --git a/docs/evidence/2026-10-15-cadence-admission/receiver-pre-release-backup-completed.json b/docs/evidence/2026-10-15-cadence-admission/receiver-pre-release-backup-completed.json new file mode 100644 index 0000000..34804e6 --- /dev/null +++ b/docs/evidence/2026-10-15-cadence-admission/receiver-pre-release-backup-completed.json @@ -0,0 +1,9 @@ +{ + "name": "platform-pg-nk-wp-0035-pre-cadence", + "uid": "a9789e86-6d8a-414a-a805-404185863f64", + "phase": "completed", + "startedAt": "2026-10-15T19:27:07Z", + "stoppedAt": "2026-10-15T19:27:24Z", + "method": "barmanObjectStore", + "cluster": "platform-pg" +} diff --git a/workplans/AUDIT-WP-0013-cross-repo-sender-admission.md b/workplans/AUDIT-WP-0013-cross-repo-sender-admission.md index c24b6c9..a663791 100644 --- a/workplans/AUDIT-WP-0013-cross-repo-sender-admission.md +++ b/workplans/AUDIT-WP-0013-cross-repo-sender-admission.md @@ -78,10 +78,8 @@ Optional stream_instance_id on GET /v1/reconciliation selects exact retained det ```task id: AUDIT-WP-0013-T05 -status: wait +status: done priority: high -blocking_reason: "rapp-qonto must supply the actual collector binding, scope/selectors, mapping/lag rules and receiver receipts; qonto-assistant must approve classification and per-class cadence." -blocked_on: message-from:rapp-qonto state_hub_task_id: "76b59808-abc3-5b8d-b31a-e3fb611f2cbe" ``` @@ -98,5 +96,38 @@ and process-instance filtering; database migration ledger is0006, source adds additive0007-import-receipts. Current-source receiver release/migration is therefore required before registration acceptance. See docs/cadence-registration.md for execution gates. No protected registry was fetched or changed, no sender token -was minted and no live resource was mutated by this readiness work. T05 stays -wait pending source delivery and actual native custody/mapping receipts. +was minted and no live resource was mutated by this readiness work. The readiness note above describes the initial state; the native admission +follow-up below supersedes that T05 waiting state. + +### Native Qonto receiver admission accepted, 2026-10-15 + +T05 is done for sender-native custody and mapping admission. Independent +KG-WP-0005-T03 operational acceptance is deliberately separate and remains open. +The protected registry CAS advanced15→16 with exact readback, preserving every +existing sender/credential/scope and unrelated KV field. Approval Engine's full +source declaration SHA256cc58c8d53ebf50acf540d73b7607d579942bda7734c3e8722108e9c9204af655 +and issuance/use/supersession/revocation waits7200 are delivered and loaded after +receiver reload. Effective deadline is10800 with grace1.5; this registration +receipt is not yet evidence of four fresh Approval heartbeat observations. + +Receiver b479801b (built from5227fb1) is ready with native cadence/heartbeat and +both-backend process-instance capabilities verified. Migration0007 completed +after the narrow DNS/PostgreSQL migration egress repair (source1269a0e). The +complete local PostgreSQL suite passed333 tests with no skips or failures. + +Actual collector image82bfd410 captured source qonto-assistant in approved tenant +tenant:friendly:binky. Instanceb351fa6b-e0d6-4f88-b7c9-6bacb1a112b7 has original +sequence1 audit.heartbeat mapped one-to-one to audit-core.heartbeat covering +audit.deny and sequence2 audit.deny; both accepted202. Same-instance own +reconciliation returns one of each, duplicate200, wrong source400, wrong +tenant400, archive read403 and invalid bearer401. Pending queue0; first202 +receipts survived collector pod replacement using its persistent outbox. +Audit.allow mapping/classification remains source-tested; no native allow +record or bank operation is claimed by this bounded receipt. + +Exact metadata receipts and SHA256 index are retained in +docs/evidence/2026-10-15-cadence-admission/. These are native sender receipts, +not independent receiver readback. Real elapsed hourly observation, independent +active-instance/class-silence/sequence/count/lag assessment and Approval lifecycle +acceptance remain with NK-WP-0035/KG-WP-0005. Source-global receiver findings must +not misclassify intentional Qonto scale-to-zero as an active-instance omission.