{
  "schema": "Nexamas.UI.ProductControlsReadinessTruthManifest/1.0",
  "phase": "AllProductControlsProductionReadyPromotion",
  "purpose": "Ensure product-control readiness manifests stay aligned with the production-gap ledger after all eight governed product controls are explicitly promoted to ProductionReady with closed control-specific gaps.",
  "stageContract": {
    "requiredPreviewStage": "CompactPreview",
    "requiredPreviewIsCommercialProductionReady": false,
    "requiredProductionStage": "ProductionReady",
    "requiredProductionIsCommercialProductionReady": true,
    "requireOpenGapForCompactPreviewControls": true,
    "allowProductionReadyWhenAllDeclaredGapsClosed": true,
    "blockProductionReadyUntilAllDeclaredGapsClosed": true
  },
  "requiredReadinessTruthAssets": [
    "MASSystem/Quality/CommercialReadiness/MASControlProductionGapManifest.vb",
    "MASSystem/Quality/CommercialReadiness/MASControlSpecificProductionGapGate.vb",
    "MASSystem/Quality/CommercialReadiness/MASProductionPromotionRuleManifest.vb",
    "docs/quality-proof/product-controls-readiness-truth-scan.md"
  ],
  "productControls": [
    {
      "id": "treegrid",
      "displayName": "TreeGrid",
      "expectedOpenGapIds": [],
      "expectedClosedGapIds": [
        "treegrid-writeback-adapters",
        "treegrid-incremental-updates",
        "treegrid-final-promotion-pass"
      ]
    },
    {
      "id": "pivottable",
      "displayName": "PivotTable",
      "expectedOpenGapIds": [],
      "expectedClosedGapIds": [
        "pivottable-multilevel-grouping",
        "pivottable-export-writers",
        "pivottable-final-promotion-pass"
      ]
    },
    {
      "id": "kanban",
      "displayName": "KanbanBoard",
      "expectedOpenGapIds": [],
      "expectedClosedGapIds": [
        "kanban-wip-drop-rules",
        "kanban-writeback-policy",
        "kanban-final-promotion-pass"
      ]
    },
    {
      "id": "agenda",
      "displayName": "AgendaView",
      "expectedOpenGapIds": [],
      "expectedClosedGapIds": [
        "agenda-recurrence-timezone",
        "agenda-move-resize-contracts",
        "agenda-final-promotion-pass"
      ]
    },
    {
      "id": "dashboardgrid",
      "displayName": "DashboardGrid",
      "expectedOpenGapIds": [],
      "expectedClosedGapIds": [
        "dashboard-child-hosting",
        "dashboard-provider-refresh",
        "dashboard-public-provider-adapter",
        "dashboard-keyboard-resize-thresholds",
        "dashboard-benchmark-baselines",
        "dashboard-final-promotion-pass"
      ]
    },
    {
      "id": "masterdetail",
      "displayName": "MasterDetailView",
      "expectedOpenGapIds": [],
      "expectedClosedGapIds": [
        "masterdetail-detail-hosting",
        "masterdetail-empty-error-states",
        "masterdetail-item-virtualization",
        "masterdetail-routing-public-adapter",
        "masterdetail-public-adapter-approval",
        "masterdetail-final-promotion-pass"
      ]
    },
    {
      "id": "applayout",
      "displayName": "AppLayout",
      "expectedOpenGapIds": [],
      "expectedClosedGapIds": [
        "applayout-child-slot-hosting",
        "applayout-routing-ownership",
        "applayout-responsive-shell-adoption",
        "applayout-real-host-adoption",
        "applayout-benchmark-baselines",
        "applayout-final-promotion-pass"
      ]
    },
    {
      "id": "splitview",
      "displayName": "SplitView",
      "expectedOpenGapIds": [],
      "expectedClosedGapIds": [
        "splitview-child-content-hosting",
        "splitview-keyboard-splitter",
        "splitview-shell-integration",
        "splitview-host-adoption-proof",
        "splitview-real-host-adoption",
        "splitview-benchmark-baselines",
        "splitview-final-promotion-pass"
      ]
    }
  ]
}
