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

55 lines
3.1 KiB
Markdown

# 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.