# Spec bundle — AST-M001 v1

> Provenance: asset `AST-M001` · spec `SPEC-AST-M001-v1` · version 1 · status `published` · hash `824bb833507d7cbe4aaeeb1cd718a495b825445c550767c96abbe9100111c516` · source db

## Ledger summary

| Version | Status | Path | Author | At | Hash |
| --- | --- | --- | --- | --- | --- |
| 1 | published | baseline | seed:fixture | 2026-11-08T05:31:33.238Z | `824bb833507d…` |

## KPI definitions

- **KPI-M01** — Batch Yield (`canonical`) · %
  - Formula: `good_batches / total_batches`
- **KPI-M02** — OEE (`canonical`) · %
  - Formula: `A * P * Q`
- **KPI-M03** — Right-First-Time (`canonical`) · %
  - Formula: `rft_batches / total_batches`

## DashboardSpec (JSON)

```json
{
  "spec_id": "SPEC-AST-M001-v1",
  "asset_id": "AST-M001",
  "version": 1,
  "parent_version": null,
  "status": "published",
  "name": "Plant-A Daily Production Overview",
  "purpose": "Morning line performance for Plant-A wall — Batch Yield, OEE, Right-First-Time.",
  "domain": "Manufacturing",
  "surface": "wall",
  "owners": {
    "business_owner_id": "OWN-G01",
    "technical_owner_id": "OWN-G05"
  },
  "refresh_policy": {
    "mode": "live_sim",
    "source_model_ids": [
      "SM-M01"
    ]
  },
  "pages": [
    {
      "page_id": "page-main",
      "title": "Plant-A lines",
      "rotation_s": 20,
      "visuals": [
        {
          "visual_id": "V-M001-yield",
          "type": "kpi_tile",
          "title": "Batch Yield",
          "kpi_id": "KPI-M01",
          "dims": [],
          "filters": {
            "plant": "Plant-A",
            "line": "L1-L4"
          },
          "grain": "shift",
          "window": "last_24h",
          "unit": "%",
          "threshold": {
            "good": 95,
            "warn": 90,
            "direction": "up_good"
          }
        },
        {
          "visual_id": "V-M001-oee",
          "type": "kpi_tile",
          "title": "OEE",
          "kpi_id": "KPI-M02",
          "dims": [],
          "filters": {
            "plant": "Plant-A",
            "line": "L1-L4"
          },
          "grain": "shift",
          "window": "last_24h",
          "unit": "%",
          "threshold": {
            "good": 85,
            "warn": 75,
            "direction": "up_good"
          }
        },
        {
          "visual_id": "V-M001-rft",
          "type": "kpi_tile",
          "title": "Right-First-Time",
          "kpi_id": "KPI-M03",
          "dims": [],
          "filters": {
            "plant": "Plant-A",
            "line": "L1-L4"
          },
          "grain": "shift",
          "window": "last_24h",
          "unit": "%",
          "threshold": {
            "good": 92,
            "warn": 85,
            "direction": "up_good"
          }
        },
        {
          "visual_id": "V-M001-yield-trend",
          "type": "line",
          "title": "Batch Yield by line",
          "kpi_id": "KPI-M01",
          "dims": [
            "line"
          ],
          "filters": {
            "plant": "Plant-A",
            "line": "L1-L4"
          },
          "grain": "shift",
          "window": "last_24h",
          "unit": "%",
          "threshold": {
            "good": 95,
            "warn": 90,
            "direction": "up_good"
          }
        }
      ]
    }
  ],
  "review_cadence_days": 90,
  "lineage": {
    "upstream_model_ids": [
      "SM-M01"
    ]
  },
  "exceptions": [],
  "rationale": [
    {
      "decision": "v1 wall surface without Open Deviations",
      "because": "Certified morning overview; KPI-M04 deferred to EXTEND v2 (GS-MFG-01).",
      "evidence_refs": [
        "AST-M001",
        "KPI-M01",
        "KPI-M02",
        "KPI-M03"
      ]
    }
  ]
}
```
