net-kingdom/local-identity/emission-cadence-findings.md
tegwick 36303d25a3 Require explicit cadence profile assessment and correct contract pins
Assistant: codex
Assistant-Model: gpt-6-astra
Assistant-Session: 01a0e77d-47a4-7771-8e34-7339c7fac0e4
2026-09-28 12:40:07 +02:00

3.1 KiB

local-identity emission cadence — fit findings (INFO-WP-0029-T02)

Declaration: local-identity/emission-cadence.yaml, currently pinned to InfoTechCanon candidate bundle b08b4d95fc4b0bd3 (document 0.2.0, wire schema 0.1). The September 21 evaluation used 972c0b6701d1693f, then incorrectly labelled 0.2.0 by the owner brief; that digest actually identifies the 0.1.0 draft. The owner corrected the brief on September 22. The schema bytes are unchanged, and the historical findings below remain valid. 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.

Pin correction and revalidation — 2026-09-28

The current declaration now uses the owner-published candidate bundle digest b08b4d95fc4b0bd3. Schema SHA-256 remains 6d52692eb1e4d1325e0d6062d95acded98beddaae5bcfe24c6f0e91f1b6be6ae. Revalidated against the owner schema with both documented classes explicitly supplied as rare load-bearing: generic-valid, with exactly two rare-heartbeat-missing findings. All 15 focused checker tests pass. No heartbeat, observer feed or runtime emission change is implied by this pin fix.