Governance Events (Plugin + Config Lifecycle)¶
This page defines the machine-checkable governance event contract used for plugin registration/discovery decisions and ConfigManager lifecycle events.
Scope¶
The contracts apply to runtime governance paths under
calibrated_explanations.governance.* loggers.
Plugin decision events (calibrated_explanations.governance.plugins) cover:
accepted_registrationskipped_untrustedskipped_deniedchecksum_failuredenied_registration
Config lifecycle events (calibrated_explanations.governance.config) cover:
resolveexportvalidation_failure
Event envelope (v1)¶
Plugin schema file:
src/calibrated_explanations/schemas/governance_event_schema_v1.json
Required fields:
schema_versionevent_idevent_namedecisionidentifiersourcetrustedactortimestamp
Optional audit/context fields:
providerreason_codereasoninvocation_idrequest_idtenant_idplugin_identifierdetails
Config schema file:
src/calibrated_explanations/schemas/governance_config_event_schema_v1.json
Required config fields:
schema_versionevent_idevent_name(config.lifecycle)event_type(resolve|export|validation_failure)profile_idconfig_schema_versionstrictsource_countvalidation_issue_counttimestamp
Optional config field:
details
Example payload¶
{
"schema_version": "1.0",
"event_id": "4f35b20f-3558-4f31-b6fc-04c70f9975f0",
"event_name": "plugin.registration.decision",
"decision": "skipped_denied",
"identifier": "third.party.interval",
"provider": "third-party-plugin",
"source": "entrypoint",
"trusted": false,
"actor": "load_entrypoint_plugins",
"reason_code": "denylist",
"reason": "Plugin identifier is denied via CE_DENY_PLUGIN",
"timestamp": "2026-03-19T12:34:56.789012+00:00"
}
Example config lifecycle payloads¶
{
"schema_version": "1.0",
"event_id": "6106f0aa-2e5d-4a01-a8e4-68a3d4bcbac8",
"event_name": "config.lifecycle",
"event_type": "resolve",
"profile_id": "default",
"config_schema_version": "1",
"strict": true,
"source_count": 4,
"validation_issue_count": 0,
"timestamp": "2026-04-08T10:00:00+00:00",
"details": null
}
{
"schema_version": "1.0",
"event_id": "ca594651-8d37-4ddd-a071-bb2bd6f74087",
"event_name": "config.lifecycle",
"event_type": "export",
"profile_id": "default",
"config_schema_version": "1",
"strict": true,
"source_count": 4,
"validation_issue_count": 0,
"timestamp": "2026-04-08T10:00:05+00:00",
"details": {
"diagnostic_only": true
}
}
{
"schema_version": "1.0",
"event_id": "1ea42ce4-fb09-4d40-8ca8-129ca109c6ac",
"event_name": "config.lifecycle",
"event_type": "validation_failure",
"profile_id": "default",
"config_schema_version": "1",
"strict": false,
"source_count": 2,
"validation_issue_count": 1,
"timestamp": "2026-04-08T10:00:09+00:00",
"details": {
"location": "pyproject.plugins",
"issue_count": 1
}
}
Enterprise ingest mapping¶
For enterprise governance pipelines that use ce.* namespaced telemetry fields,
the following mapping is recommended:
decision->ce.governance.decisionidentifier->ce.governance.plugin_identifiersource->ce.governance.sourceactor->ce.governance.actorreason_code->ce.governance.reason_codeevent_id->ce.governance.event_idtimestamp->ce.governance.timestamp
Validation and checks¶
Runtime event payloads are validated by
calibrated_explanations.governance.events.validate_governance_event.Config lifecycle payloads are validated by
calibrated_explanations.governance.events.validate_config_governance_event.CI/local quality gate:
python scripts/quality/check_governance_event_schema.py.
Config lifecycle notes¶
resolveevents are emitted byConfigManager.from_sources()only.Direct
ConfigManager(...)construction for injection/testing is silent forresolveevents.exportevents are diagnostic-only until ADR-034 Open Item 2 is closed.validation_failureevents are emitted in both strict and non-strict validation paths.
Data minimization constraints¶
Governance events must not include raw feature vectors, labels, predictions, or full plugin metadata blobs. Keep payloads limited to identifiers, decision metadata, and reason fields needed for audit reconstruction.
Config lifecycle payloads must not include raw config values, environment
strings, or raw pyproject payload blobs. In particular, validation_failure
details are restricted to location and issue-count metadata (see ADR-034 Open
Item 1 in docs/improvement/adrs/ADR-034-centralized-configuration-management.md).
Entry-point tier: Tier 3