{
  "schema": "Nexamas.UI.ProductControlsStrictSourceHygieneManifest/1.0",
  "phase": "Phase2StrictBuildDiscipline",
  "purpose": "Static source hygiene budget for the eight governed product controls. This prevents warning-like source drift before the full compiler warning budget gate is enabled.",
  "requiredStrictSourceHygieneAssets": [
    "eng/tests/Nexamas.UI.ProductControlsStrictSourceHygieneManifest.json",
    "docs/quality-proof/product-controls-strict-source-hygiene-scan.md"
  ],
  "deniedExecutablePatterns": [
    {
      "id": "obsolete-attribute",
      "pattern": "<\\s*(?:Global\\.)?System\\.Obsolete\\b|<\\s*Obsolete\\b",
      "reason": "Product controls must not add obsolete API while still governed unless it is reviewed in the global API deprecation ledger.",
      "scope": "code"
    },
    {
      "id": "todo-fixme-hack",
      "pattern": "\\b(?:TODO|FIXME|HACK)\\b",
      "reason": "Release blockers must be tracked in governance ledgers, not left as source comments in product controls. Literal data such as Kanban column keys like \"todo\" is allowed.",
      "scope": "comment"
    },
    {
      "id": "not-implemented",
      "pattern": "Throw\\s+New\\s+NotImplementedException\\b",
      "reason": "CompactPreview controls may declare gaps, but runtime code must not ship placeholder NotImplemented paths.",
      "scope": "code"
    },
    {
      "id": "debug-console-trace-write",
      "pattern": "\\b(?:Debug|Console|Trace)\\.Write(?:Line)?\\s*\\(",
      "reason": "Product controls must report diagnostics through MAS diagnostics/fault channels, not direct debug/console/trace writes.",
      "scope": "code"
    }
  ],
  "productControls": [
    {
      "id": "treegrid",
      "displayName": "TreeGrid",
      "sourceRoot": "Component/Data/TreeGrid",
      "allowedShadowPatterns": [
        "^\\s*Public\\s+Shadows\\s+Function\\s+WithSize\\(sizeIntent\\s+As\\s+MASSize\\)\\s+As\\s+MASTreeGrid\\b"
      ],
      "expectedAllowedShadowCount": 1,
      "rationale": "The fluent WithSize return-type shadow is an intentional typed-builder compatibility pattern. No other Shadows members are allowed in the product-control source root."
    },
    {
      "id": "pivottable",
      "displayName": "PivotTable",
      "sourceRoot": "Component/Data/PivotTable",
      "allowedShadowPatterns": [
        "^\\s*Public\\s+Shadows\\s+Function\\s+WithSize\\(sizeIntent\\s+As\\s+MASSize\\)\\s+As\\s+MASPivotTable\\b"
      ],
      "expectedAllowedShadowCount": 1,
      "rationale": "The fluent WithSize return-type shadow is an intentional typed-builder compatibility pattern. No other Shadows members are allowed in the product-control source root."
    },
    {
      "id": "kanban",
      "displayName": "KanbanBoard",
      "sourceRoot": "Component/Data/KanbanBoard",
      "allowedShadowPatterns": [
        "^\\s*Public\\s+Shadows\\s+Function\\s+WithSize\\(sizeIntent\\s+As\\s+MASSize\\)\\s+As\\s+MASKanbanBoard\\b"
      ],
      "expectedAllowedShadowCount": 1,
      "rationale": "The fluent WithSize return-type shadow is an intentional typed-builder compatibility pattern. No other Shadows members are allowed in the product-control source root."
    },
    {
      "id": "agenda",
      "displayName": "AgendaView",
      "sourceRoot": "Component/Data/AgendaView",
      "allowedShadowPatterns": [
        "^\\s*Public\\s+Shadows\\s+Function\\s+WithSize\\(sizeIntent\\s+As\\s+MASSize\\)\\s+As\\s+MASAgendaView\\b"
      ],
      "expectedAllowedShadowCount": 1,
      "rationale": "The fluent WithSize return-type shadow is an intentional typed-builder compatibility pattern. No other Shadows members are allowed in the product-control source root."
    },
    {
      "id": "dashboardgrid",
      "displayName": "DashboardGrid",
      "sourceRoot": "Component/Data/DashboardGrid",
      "allowedShadowPatterns": [
        "^\\s*Public\\s+Shadows\\s+Function\\s+WithSize\\(sizeIntent\\s+As\\s+MASSize\\)\\s+As\\s+MASDashboardGrid\\b"
      ],
      "expectedAllowedShadowCount": 1,
      "rationale": "The fluent WithSize return-type shadow is an intentional typed-builder compatibility pattern. No other Shadows members are allowed in the product-control source root."
    },
    {
      "id": "masterdetail",
      "displayName": "MasterDetailView",
      "sourceRoot": "Component/Data/MasterDetailView",
      "allowedShadowPatterns": [
        "^\\s*Public\\s+Shadows\\s+Function\\s+WithSize\\(sizeIntent\\s+As\\s+MASSize\\)\\s+As\\s+MASMasterDetailView\\b"
      ],
      "expectedAllowedShadowCount": 1,
      "rationale": "The fluent WithSize return-type shadow is an intentional typed-builder compatibility pattern. No other Shadows members are allowed in the product-control source root."
    },
    {
      "id": "applayout",
      "displayName": "AppLayout",
      "sourceRoot": "Component/Container/AppLayout",
      "allowedShadowPatterns": [
        "^\\s*Public\\s+Shadows\\s+Function\\s+WithSize\\(sizeIntent\\s+As\\s+MASSize\\)\\s+As\\s+MASAppLayout\\b"
      ],
      "expectedAllowedShadowCount": 1,
      "rationale": "The fluent WithSize return-type shadow is an intentional typed-builder compatibility pattern. No other Shadows members are allowed in the product-control source root."
    },
    {
      "id": "splitview",
      "displayName": "SplitView",
      "sourceRoot": "Component/Container/SplitView",
      "allowedShadowPatterns": [
        "^\\s*Public\\s+Shadows\\s+Function\\s+WithSize\\(sizeIntent\\s+As\\s+MASSize\\)\\s+As\\s+MASSplitView\\b"
      ],
      "expectedAllowedShadowCount": 1,
      "rationale": "The fluent WithSize return-type shadow is an intentional typed-builder compatibility pattern. No other Shadows members are allowed in the product-control source root."
    }
  ]
}
