# Nova Metrics Views — PowerBI Data Dictionary


This document is the column-level data dictionary for the PowerBI export
views in `metrics/powerbi/`. Each fact/dimension table and placeholder
view is documented with: column, type, source/formula, unit, and
grounded/derived/deferred status.

## Fact tables (grounded)

### fact_run
| Column | Type | Source | Unit | Status |
|--------|------|--------|------|--------|
| run_id | TEXT | run_manifest.py | — | grounded |
| contract_id | TEXT | run_manifest.py | — | grounded |
| environment | TEXT | run_manifest.py | dev/qa/prod/dr | grounded |
| started_at | TEXT | run_manifest.py | ISO8601 | grounded |
| completed_at | TEXT | run_manifest.py | ISO8601 | grounded |
| exit_code | INTEGER | run_manifest.py | — | grounded |
| outcome | TEXT | run_manifest.py | succeeded/failed | grounded |
| confidence_score | REAL | confidence_signal.py | 0.0–1.0 | grounded |
| confidence_band | TEXT | confidence_signal.py | pass/warn/block | grounded |
| hitl_block | INTEGER | hitl_gates.py | 0/1 | grounded |
| cost_estimate_usd | REAL | infracost_adapter.py | USD | grounded (Infracost) |
| decision_id | TEXT | decision_ledger.py | — | grounded |

### fact_capability
| Column | Type | Source | Unit | Status |
|--------|------|--------|------|--------|
| capability_id | TEXT | REGRESSION_REPORT.json | CAP-NNN | grounded |
| run_id | TEXT | REGRESSION_REPORT.json | — | grounded |
| name | TEXT | REGRESSION_REPORT.json | — | grounded |
| status | TEXT | REGRESSION_REPORT.json | Verified/Decayed/Broken/Skipped | grounded |
| tier | TEXT | REGRESSION_REPORT.json | local/live-aws/lifecycle-pipeline | grounded |
| duration_ms | REAL | REGRESSION_REPORT.json | milliseconds | grounded |
| detail | TEXT | REGRESSION_REPORT.json | — | grounded |
| run_at_utc | TEXT | REGRESSION_REPORT.json | ISO8601 | grounded |

### fact_decision
| Column | Type | Source | Unit | Status |
|--------|------|--------|------|--------|
| decision_id | TEXT | decision_ledger.py | = run_id | grounded |
| run_id | TEXT | decision_ledger.py | — | grounded |
| chosen_action | TEXT | confidence_signal.py | pass/warn/block | grounded |
| confidence | REAL | confidence_signal.py | 0.0–1.0 | grounded |
| alternatives | TEXT (JSON) | confidence_signal.py | perInput breakdown | grounded |
| human_override | INTEGER | hitl_gates.py | 0/1 | grounded |
| outcome | TEXT | decision_ledger.py | succeeded/failed/pending | grounded |
| event_time | TEXT | decision_ledger.py | ISO8601 | grounded |

### fact_test
| Column | Type | Source | Unit | Status |
|--------|------|--------|------|--------|
| run_id | TEXT | junit XML | — | grounded |
| total_tests | INTEGER | junit XML | count | grounded |
| passed | INTEGER | junit XML | count | grounded |
| failed | INTEGER | junit XML | count | grounded |
| errors | INTEGER | junit XML | count | grounded |
| skipped | INTEGER | junit XML | count | grounded |
| duration_s | REAL | junit XML | seconds | grounded |
| coverage_pct | REAL | coverage.json | % | grounded |
| collected_at | TEXT | collector.py | ISO8601 | grounded |

### fact_cost_estimate
| Column | Type | Source | Unit | Status |
|--------|------|--------|------|--------|
| run_id | TEXT | infracost_adapter.py | — | grounded |
| delta_usd | REAL | Infracost | USD/month | grounded (pre-apply) |
| total_monthly_usd | REAL | Infracost | USD/month | grounded (pre-apply) |
| available | INTEGER | infracost_adapter.py | 0/1 | grounded |
| estimated_at | TEXT | infracost_adapter.py | ISO8601 | grounded |

### fact_lifecycle
| Column | Type | Source | Unit | Status |
|--------|------|--------|------|--------|
| module | TEXT | lifecycle report | — | grounded |
| environment | TEXT | lifecycle report | — | grounded |
| phase | TEXT | lifecycle report | apply/modify/destroy | grounded |
| result | TEXT | lifecycle report | pass/fail | grounded |
| duration_ms | REAL | lifecycle report | milliseconds | grounded |
| run_at | TEXT | lifecycle report | ISO8601 | grounded |

## Dimension tables

### dim_capability
| Column | Type | Source | Status |
|--------|------|--------|--------|
| capability_id | TEXT | REGRESSION_REPORT.json | grounded |
| name | TEXT | REGRESSION_REPORT.json | grounded |
| tier | TEXT | REGRESSION_REPORT.json | grounded |
| source_milestone | TEXT | REGRESSION_REPORT.json | grounded |

### dim_milestone
| Column | Type | Source | Status |
|--------|------|--------|--------|
| milestone | TEXT | REGRESSION_REPORT.json | grounded |
| phase | INTEGER | REGRESSION_REPORT.json | grounded |
| tag | TEXT | — | grounded |
| completed_at | TEXT | REGRESSION_REPORT.json | grounded |

## Placeholder views (deferred — 8 views, headers only, no data)

### placeholder_live_infra_health
- **Blocking decision:** D-096
- **Description:** Live infrastructure health (ECS running count, ALB 5xx, RPS)
- **Columns:** timestamp, resource_id, resource_type, running_count, healthy, downtime_seconds

### placeholder_live_outbox_rate
- **Blocking decision:** D-096
- **Description:** Live outbox write rate / ledger append latency
- **Columns:** timestamp, contract_id, write_latency_ms, append_count

### placeholder_tamper_evident_checkpoints
- **Blocking decision:** D-083
- **Description:** Tamper-evident ledger checkpoints / JWS signature rate
- **Columns:** timestamp, checkpoint_id, jws_signed, object_lock_enabled

### placeholder_onboarding_funnel
- **Blocking decision:** D-113/D-114/D-119
- **Description:** Onboarding funnel: requested → granted conversion
- **Columns:** timestamp, consumer_repo, requested_environment, status, granted_at

### placeholder_drift_detection
- **Blocking decision:** D-096 + no scheduler
- **Description:** Drift detection (scheduled terraform plan -detailed-exitcode)
- **Columns:** timestamp, workspace_id, drift_count, auto_reverted, detection_cycle

### placeholder_live_cur_reconciliation
- **Blocking decision:** D-096
- **Description:** Live cost CUR reconciliation
- **Columns:** timestamp, resource_address, actual_usd, baseline_usd, saved_usd

### placeholder_sla_downtime
- **Blocking decision:** D-096
- **Description:** SLA / unplanned downtime
- **Columns:** timestamp, service, uptime_pct, downtime_minutes, slo_target

### placeholder_predictive_reactive
- **Blocking decision:** future emitter
- **Description:** Predictive vs Reactive ratio
- **Columns:** timestamp, action_id, label, trigger, count