This document defines the canonical runtime hostcall telemetry contract and the deterministic feature extraction path used by the runtime risk scorer.
The telemetry event captures:
- extension identity (
extension_id) - capability and method (
capability,method) - argument shape hash (
args_shape_hash) and canonical params hash (params_hash) - resource target class (
resource_target_class) - policy decision context (
policy_profile,policy_reason) - risk score (
risk_score) - latency and outcome (
latency_ms,outcome,outcome_error_code) - deterministic sequence context (
sequence) - deterministic feature vector (
features) - deterministic explanation payload (
explanation_level,explanation_summary,top_contributors,budget_state)
- Artifact schema:
pi.ext.hostcall_telemetry.v1 - Feature schema:
pi.ext.hostcall_feature_vector.v1 - JSON Schema:
docs/schema/runtime_hostcall_telemetry.json
The Rust artifact export is ExtensionManager::runtime_hostcall_telemetry_artifact().
Each event includes a pre-call sequence snapshot:
sequence_id: monotonic per-extension sequence number (starting at 1)previous_*: previous call identity tupleburst_count_1s/burst_count_10s: call volume in recent windowsrecent_error_count/recent_window_count: short-horizon outcome historyprior_failure_streak: consecutive failures before current call
Feature extraction is deterministic and O(1) per call.
Current vector fields:
base_scorerecent_mean_scorerecent_error_rateburst_density_1sburst_density_10sprior_failure_streak_normdangerous_capabilitytimeout_requestedpolicy_prompt_bias
Extraction budget target:
RUNTIME_HOSTCALL_FEATURE_BUDGET_US = 250
Each event records:
extraction_latency_usextraction_budget_usextraction_budget_exceeded
Each event includes deterministic runtime-risk explanation metadata:
explanation_level: one ofcompact,standard,fullexplanation_summary: stable human-readable action summarytop_contributors: contribution terms sorted by descendingmagnitude, tie-broken bycodebudget_state: strict explanation budget status:time_budget_mselapsed_msterm_budgetterms_emittedexhaustedfallback_mode
Budget-exhaustion behavior is fail-closed for explanation generation:
- on exhaustion, emit conservative deterministic summary payload
- include explicit
budget_state.exhausted=trueandbudget_state.fallback_mode=true - avoid speculative contributor terms in fallback mode
No raw hostcall params are emitted in telemetry artifacts. Only hashes are emitted:
params_hashargs_shape_hash
redaction_summary must describe this policy for downstream audit tooling.
- Identical traces produce identical feature vectors.
- Telemetry events are version-tagged.
- Deserialization is backward-readable via serde defaults for additive fields.
Coverage is enforced by unit + integration tests in:
src/extensions.rsruntime-risk test sectiontests/e2e_runtime_risk_telemetry.rs