{
  "schema": "Nexamas.UI.ProductControlsPublicExposureManifest/1.0",
  "phase": "Phase0BaselineAndGovernanceHardening",
  "purpose": "Static public API exposure guardrails for the eight governed product controls. The source-contract test suite rejects accidental public adapter/provider/source/routing/host contract declarations before the commercial policy explicitly approves them.",
  "stripRules": "VB comments and string literal contents are removed before matching so documentation text inside code does not become a false positive.",
  "sourceRoots": [
    {
      "id": "treegrid",
      "displayName": "TreeGrid",
      "sourceRoot": "Component/Data/TreeGrid"
    },
    {
      "id": "pivottable",
      "displayName": "PivotTable",
      "sourceRoot": "Component/Data/PivotTable"
    },
    {
      "id": "kanban",
      "displayName": "KanbanBoard",
      "sourceRoot": "Component/Data/KanbanBoard"
    },
    {
      "id": "agenda",
      "displayName": "AgendaView",
      "sourceRoot": "Component/Data/AgendaView"
    },
    {
      "id": "dashboardgrid",
      "displayName": "DashboardGrid",
      "sourceRoot": "Component/Data/DashboardGrid"
    },
    {
      "id": "masterdetail",
      "displayName": "MasterDetailView",
      "sourceRoot": "Component/Data/MasterDetailView"
    },
    {
      "id": "applayout",
      "displayName": "AppLayout",
      "sourceRoot": "Component/Container/AppLayout"
    },
    {
      "id": "splitview",
      "displayName": "SplitView",
      "sourceRoot": "Component/Container/SplitView"
    }
  ],
  "deniedPublicDeclarationPatterns": [
    {
      "id": "public-adapter-contract",
      "category": "AdapterExposure",
      "pattern": "^\\s*Public\\b.*\\b(Adapter|Adapters|DataAdapter|SourceAdapter)\\b",
      "message": "CompactPreview product controls must not expose public adapter contracts before MASPublicAdapterPolicyManifest approves them."
    },
    {
      "id": "public-provider-contract",
      "category": "ProviderExposure",
      "pattern": "^\\s*Public\\b.*\\b(Provider|Providers|DataProvider|WidgetProvider|EventProvider|ItemProvider)\\b",
      "message": "CompactPreview product controls must not expose public provider contracts before provider lifecycle, docs, samples, and stress proof are approved."
    },
    {
      "id": "public-source-projection-contract",
      "category": "SourceProjectionExposure",
      "pattern": "^\\s*Public\\b.*\\b(SourceProjection|ProjectionSource|DataSource|PivotSource|EventSource|ItemSource|SourceProjector)\\b",
      "message": "Internal source/projection paths must remain Friend-only until write-back, validation, batching, and measured stress evidence exist."
    },
    {
      "id": "public-writeback-validation-contract",
      "category": "WriteBackExposure",
      "pattern": "^\\s*Public\\b.*\\b(WriteBack|Writeback|BatchUpdate|ValidationPipeline|Validator)\\b",
      "message": "Write-back and validation contracts cannot become public before the production promotion rules are closed."
    },
    {
      "id": "public-routing-shell-contract",
      "category": "ShellRoutingExposure",
      "pattern": "^\\s*Public\\b.*\\b(Router|Routing|RouteProvider|ShellAdapter|ShellProvider|HostAdapter|HostProvider)\\b",
      "message": "Routing/shell/host adapter ownership must not leak from CompactPreview controls as public API."
    }
  ],
  "requiredPublicExposureAssets": [
    "eng/tests/Nexamas.UI.ProductControlsGovernanceManifest.json",
    "eng/tests/Nexamas.UI.ProductControlsPublicExposureManifest.json",
    "docs/quality-proof/product-controls-public-exposure-scan.md"
  ]
}