f8616b806e
P1 (Wave 1, feat) — REQ-187, REQ-188, REQ-205 (emitter), REQ-206 (emitter) New components: - core/metrics/event_envelope.py — CloudEvents 1.0 envelope + platform.* conventions - core/metrics/run_manifest.py — per-run manifest writer (nova.run.started/completed/failed) - core/metrics/decision_ledger.py — SQLite append-only hash-chain (ai.decision.made + attestation.recorded) - core/metrics/infracost_adapter.py — Infracost post-processor (degraded mode when CLI absent, A6) - schemas/metrics_event.schema.json — CloudEvents envelope schema - schemas/metrics_run_manifest.schema.json — per-run manifest schema - metrics/README.md — backup/restore doc (REQ-201) - tests/test_metrics_emitters.py — 16 tests (all pass) Modified components: - core/confidence_signal.py — emits nova.confidence.computed + nova.ai.decision.made (D-122) - core/hitl_gates.py — emits nova.attestation.recorded on qa/prod/dr gates (D-132) - adapters/terraform/policy/checkov_adapter.py — emits nova.policy.evaluated - pyproject.toml — addopts gains --junitxml + --json-report + --cov (REQ-206) - .gitignore — metrics runtime artifacts ignored D-120: Nova-native (JSONL + SQLite, no Kafka/OTel) D-121: Decision Ledger = outbox_writer extension → SQLite hash-chain D-122: AI decision = confidence_signal + HITL gate (not LLM) D-128: metrics/ at repo root D-132: Attestation instrumentation ---ci--- project: acdl phase: 1 milestone: v1.17 status: execute ---/ci---
36 lines
1.3 KiB
JSON
36 lines
1.3 KiB
JSON
{
|
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
"title": "Nova CloudEvents 1.0 Envelope",
|
|
"description": "CloudEvents 1.0 envelope with Nova platform.* semantic conventions. Used for all metrics events (REQ-187).",
|
|
"type": "object",
|
|
"required": ["specversion", "id", "source", "type", "time", "datacontenttype", "platform", "data"],
|
|
"properties": {
|
|
"specversion": {"type": "string", "const": "1.0"},
|
|
"id": {"type": "string", "minLength": 1},
|
|
"source": {"type": "string", "minLength": 1},
|
|
"type": {"type": "string", "minLength": 1, "pattern": "^nova\\."},
|
|
"time": {"type": "string", "format": "date-time"},
|
|
"subject": {"type": "string"},
|
|
"datacontenttype": {"type": "string", "const": "application/json"},
|
|
"platform": {
|
|
"type": "object",
|
|
"required": ["run_id", "environment"],
|
|
"properties": {
|
|
"tenant_id": {"type": "string"},
|
|
"run_id": {"type": "string", "minLength": 1},
|
|
"contract_id": {"type": "string"},
|
|
"environment": {"type": "string", "enum": ["dev", "qa", "prod", "dr"]},
|
|
"actor": {
|
|
"type": "object",
|
|
"properties": {
|
|
"type": {"type": "string"},
|
|
"id": {"type": "string"}
|
|
}
|
|
},
|
|
"trace_id": {"type": "string"}
|
|
}
|
|
},
|
|
"data": {"type": "object"}
|
|
},
|
|
"additionalProperties": true
|
|
} |