From 116643fafedf35eda406d37504fb9f563c0d8ca7 Mon Sep 17 00:00:00 2001 From: tegwick Date: Mon, 21 Sep 2026 14:00:17 +0200 Subject: [PATCH] Declare local-identity audit emission cadence for InfoTechCanon adoption Source-owned declaration pinned to contract digest 972c0b6701d1693f (INFO-WP-0029-T02). Valid against the generic contract; fails the NetKingdom profile's rare-heartbeat MUST because local-identity emits no heartbeat. Findings record the session-scoped-silence incompatibility. Co-Authored-By: Claude Opus 5 Assistant: claude-code Assistant-Model: opus Assistant-Process: 236552@bnt-lap001 Assistant-Session: 8916a2bd-1a44-4ff9-83c1-96b34058e603 --- local-identity/emission-cadence-findings.md | 41 +++++++++++++++++++ local-identity/emission-cadence.yaml | 45 +++++++++++++++++++++ 2 files changed, 86 insertions(+) create mode 100644 local-identity/emission-cadence-findings.md create mode 100644 local-identity/emission-cadence.yaml diff --git a/local-identity/emission-cadence-findings.md b/local-identity/emission-cadence-findings.md new file mode 100644 index 0000000..d57150f --- /dev/null +++ b/local-identity/emission-cadence-findings.md @@ -0,0 +1,41 @@ +# local-identity emission cadence — fit findings (INFO-WP-0029-T02) + +Declaration: `local-identity/emission-cadence.yaml`, pinned to InfoTechCanon +emission contract digest `972c0b6701d1693f` (document 0.2.0, wire schema 0.1). +Emitter: `local-identity/src/local_identity/audit.py`. + +## Validation (2026-09-21) + +- **Generic contract: valid.** Checked against + `info-tech-canon/infospace/schemas/emission-cadence.schema.yaml` through + `tools/emission-cadence-profile` (`contract_valid: true`). The + `info_tech_canon emission-review` CLI could not be run locally because + `infospace-bench==0.1.0` is not installable from the package index. +- **NetKingdom security profile v0.1: not conformant.** Both entries raise + `rare-heartbeat-missing` (MUST): rare load-bearing evidence requires a positive + heartbeat, and local-identity emits none. The declaration records + `heartbeat_emitted: false` instead of declaring a heartbeat that does not exist. + +## Incompatibilities found + +1. **Silence is scoped to process lifetime, and the contract has no field for + that.** `serve/*` events can occur only while an attended `local-identity serve` + process is running. CLI events occur only when an operator runs a command. + Neither `expected-rate` (there is no floor rate: `expected_min: 0` would make + silence carry no meaning) nor a heartbeat outside a session expresses "silent + because not running". The contract needs an activity-scope or session-bounded + form, or an explicit statement that session-scoped sources are out of scope. +2. **Only reconciliation fits, and it needs an observer that does not exist.** + The local count is the append-only `audit.log`, which is mode 600 on the + operator's machine. No observer ingests it, so `compare_observed` is a declared + reference and not an existing feed. +3. **Completeness cannot be claimed.** `audit.log_event` drops I/O failures + without reporting them, so the local count can under-count. + `completeness_claimed: false` is recorded. + +## What would close the NetKingdom profile gap + +To close the gap, `serve` would have to emit a periodic `nothing-to-report` +heartbeat and a start/stop pair so that observers can bound the silence. That is +a code change to a bootstrap-only tool and is not planned. This file records the +incompatibility as the adoption result. diff --git a/local-identity/emission-cadence.yaml b/local-identity/emission-cadence.yaml new file mode 100644 index 0000000..c74fde2 --- /dev/null +++ b/local-identity/emission-cadence.yaml @@ -0,0 +1,45 @@ +# Source-owned Emission Cadence declaration for local-identity (INFO-WP-0029-T02). +# Pinned to InfoTechCanon emission contract digest 972c0b6701d1693f +# (document 0.2.0, wire schema 0.1). +# +# This states intended cadence only. It is not evidence that the events are +# emitted, observed, or complete; no observer currently reads this stream. +# Emitter: local-identity/src/local_identity/audit.py (TSV, audit.log, mode 600). +# Fit findings against the contract: local-identity/emission-cadence-findings.md +schema_version: "0.1" +declaration_id: net-kingdom.local-identity.audit.v1 +source: net-kingdom +stream_id: net-kingdom.local-identity.audit +extensions: + netkingdom: + contract_digest: 972c0b6701d1693f + contract_document_version: 0.2.0 +sources: + - source_id: net-kingdom.local-identity.audit.token-issued + source_system: local-identity + event_class: serve/token.token_issued + form: heartbeat-or-reconciliation + reconciliation: + compare_local: audit_log_counts.serve/token.token_issued + compare_observed: evidence_counts.serve/token.token_issued + divergence: finding + extensions: + netkingdom: + evidence_class: load-bearing + rate_monitoring: forbidden + completeness_claimed: false + heartbeat_emitted: false + - source_id: net-kingdom.local-identity.audit.token-revoked + source_system: local-identity + event_class: revoke-token + form: heartbeat-or-reconciliation + reconciliation: + compare_local: audit_log_counts.revoke-token + compare_observed: evidence_counts.revoke-token + divergence: finding + extensions: + netkingdom: + evidence_class: load-bearing + rate_monitoring: forbidden + completeness_claimed: false + heartbeat_emitted: false