{
  "schema": "Nexamas.UI.ProductControlsReleaseBlockerManifest/1.0",
  "phase": "Phase2StrictBuildDiscipline",
  "purpose": "Static release-blocker scan for the eight governed product controls. This gate blocks placeholder runtime paths and release-blocker comments before a control can be promoted beyond CompactPreview.",
  "requiredReleaseBlockerAssets": [
    "eng/tests/Nexamas.UI.ProductControlsReleaseBlockerManifest.json",
    "docs/quality-proof/product-controls-release-blocker-scan.md"
  ],
  "deniedCommentPatterns": [
    {
      "id": "todo-fixme-hack-release-blocker-comment",
      "pattern": "\\b(?:TODO|FIXME|HACK|RELEASE[- ]?BLOCKER)\\b",
      "reason": "Release blockers must live in the production-gap ledger or issue tracker, not as free-form source comments. Literal data such as Kanban column keys is ignored because only comments are scanned."
    }
  ],
  "deniedCodePatterns": [
    {
      "id": "not-implemented-exception",
      "pattern": "Throw\\s+New\\s+NotImplementedException\\b",
      "reason": "CompactPreview controls may declare gaps, but shipped runtime paths must not throw NotImplementedException placeholders."
    },
    {
      "id": "debugger-break",
      "pattern": "\\bDebugger\\.Break\\s*\\(",
      "reason": "Runtime product controls must not contain debugger breakpoints."
    },
    {
      "id": "thread-sleep",
      "pattern": "\\bThread\\.Sleep\\s*\\(",
      "reason": "Runtime product controls must not use blocking sleeps; timing behavior must flow through controlled clocks/timers."
    }
  ],
  "productControls": [
    {
      "id": "treegrid",
      "displayName": "TreeGrid",
      "sourceRoot": "Component/Data/TreeGrid",
      "rationale": "Production promotion blockers must be tracked through governance ledgers and implemented behavior, not left as comments or placeholder runtime paths inside product-control source roots."
    },
    {
      "id": "pivottable",
      "displayName": "PivotTable",
      "sourceRoot": "Component/Data/PivotTable",
      "rationale": "Production promotion blockers must be tracked through governance ledgers and implemented behavior, not left as comments or placeholder runtime paths inside product-control source roots."
    },
    {
      "id": "kanban",
      "displayName": "KanbanBoard",
      "sourceRoot": "Component/Data/KanbanBoard",
      "rationale": "Production promotion blockers must be tracked through governance ledgers and implemented behavior, not left as comments or placeholder runtime paths inside product-control source roots."
    },
    {
      "id": "agenda",
      "displayName": "AgendaView",
      "sourceRoot": "Component/Data/AgendaView",
      "rationale": "Production promotion blockers must be tracked through governance ledgers and implemented behavior, not left as comments or placeholder runtime paths inside product-control source roots."
    },
    {
      "id": "dashboardgrid",
      "displayName": "DashboardGrid",
      "sourceRoot": "Component/Data/DashboardGrid",
      "rationale": "Production promotion blockers must be tracked through governance ledgers and implemented behavior, not left as comments or placeholder runtime paths inside product-control source roots."
    },
    {
      "id": "masterdetail",
      "displayName": "MasterDetailView",
      "sourceRoot": "Component/Data/MasterDetailView",
      "rationale": "Production promotion blockers must be tracked through governance ledgers and implemented behavior, not left as comments or placeholder runtime paths inside product-control source roots."
    },
    {
      "id": "applayout",
      "displayName": "AppLayout",
      "sourceRoot": "Component/Container/AppLayout",
      "rationale": "Production promotion blockers must be tracked through governance ledgers and implemented behavior, not left as comments or placeholder runtime paths inside product-control source roots."
    },
    {
      "id": "splitview",
      "displayName": "SplitView",
      "sourceRoot": "Component/Container/SplitView",
      "rationale": "Production promotion blockers must be tracked through governance ledgers and implemented behavior, not left as comments or placeholder runtime paths inside product-control source roots."
    }
  ]
}