3a7604dec0
P3 (Wave 2, feat) — REQ-190, REQ-199, REQ-208, REQ-209 New components: - core/metrics/powerbi_export.py — exports fact/dim tables + 8 placeholder views to CSV/JSON - tests/test_powerbi_export.py — 6 tests (all pass) - docs/METRICS_VIEWS.md — column-level data dictionary (REQ-209) - metrics/powerbi/NOVA_DASHBOARD_README.md — folder-connector import guide + starter visual model (REQ-208) 8 placeholder views (deferred metrics, headers only): - placeholder_live_infra_health (D-096) - placeholder_live_outbox_rate (D-096) - placeholder_tamper_evident_checkpoints (D-083) - placeholder_onboarding_funnel (D-113/D-114/D-119) - placeholder_drift_detection (D-096 + no scheduler) - placeholder_live_cur_reconciliation (D-096) - placeholder_sla_downtime (D-096) - placeholder_predictive_reactive (future emitter) D-120: Nova-native (CSV/JSON files, no live connector) D-129: PowerBI ingests via folder connector ---ci--- project: acdl phase: 3 milestone: v1.17 status: execute ---/ci---
143 lines
6.4 KiB
Markdown
143 lines
6.4 KiB
Markdown
# Nova Metrics Views — PowerBI Data Dictionary
|
||
|
||
> v1.17 — Strategic Direction, Leadership Metrics & Unified Story (REQ-190, REQ-209)
|
||
> Generated: 2026-08-04
|
||
|
||
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 |