{
  "version": 1,
  "scope": "C# typed common flag seams and their property reads; dynamic configuration and external workers still require manual audit",
  "consumers": {
    "src/services/api/SyRF.API.Endpoint/Services/QuestionImport/QuestionImportService.cs": {
      "classification": "existing-runtime",
      "owner": "Question Management maintainers",
      "scope": "API question template download, preview, apply, receipt and history",
      "activationBoundary": "Default-off annotationQuestionImport is checked per request before upload parsing and before importer reads or writes. An admitted apply completes its atomic transaction even if the flag changes during the operation; subsequent requests are refused. The UI mirrors the flag and rejects stale project context. No shared runtime reader enrollment is added.",
      "reads": [
        "IRuntimeFeatureFlagProvider flags, TimeProvider clock, ILogger<QuestionImportService> logger) : IQuestionImportService",
        "public bool Enabled => flags.IsEnabled(\"annotationQuestionImport\");"
      ]
    },
    "src/libs/kernel/SyRF.SharedKernel/Settings/FeatureFlags.cs": {
      "classification": "startup-or-domain-bound",
      "owner": "Shared platform maintainers",
      "scope": "shared library; validate each consuming host",
      "activationBoundary": "Preserve current lifecycle/domain contract; no shared runtime enrollment without operation audit",
      "reads": [
        "public class FeatureFlags"
      ]
    },
    "src/libs/mongo/SyRF.Mongo.Common/RuntimeFeatureFlags/SharedRuntimeFeatureFlagReader.cs": {
      "classification": "shared-reader",
      "owner": "Shared platform maintainers",
      "scope": "shared library; validate each consuming host",
      "activationBoundary": "Immutable capture; API membership admission only when explicitly selected; PM shadow evaluation",
      "reads": [
        "public sealed class SharedRuntimeFeatureFlagReader(IRuntimeFeatureFlagDocumentReader source, TimeProvider timeProvider) : IDisposable"
      ]
    },
    "src/libs/mongo/SyRF.Mongo.Common/RuntimeFeatureFlags/SharedRuntimeFeatureFlagRegistration.cs": {
      "classification": "shared-reader",
      "owner": "Shared platform maintainers",
      "scope": "shared reader used by API and Project Management",
      "activationBoundary": "Production rejects enabled modes; API membership and PM statistics serving require explicit non-production modes and current observations",
      "reads": [
        "configuration.GetValue<bool>(\"FeatureFlags:DisableMembership\"),",
        "configuration.GetValue<bool>(\"FeatureFlags:MaterializedProjectStatisticsServing\"));",
        "services.AddSingleton<SharedRuntimeFeatureFlagReader>();",
        "public sealed class SharedRuntimeFeatureFlagRefreshService(SharedRuntimeFeatureFlagReader reader) : BackgroundService",
        "await reader.RefreshAsync(cancellationToken);",
        "while (await timer.WaitForNextTickAsync(stoppingToken)) await reader.RefreshAsync(stoppingToken);",
        "SharedRuntimeFeatureFlagReader reader, SharedRuntimeFeatureFlagOptions options) : IHealthCheck",
        "var observed = reader.Capture();"
      ]
    },
    "src/libs/project-management/SyRF.ProjectManagement.Core/Services/ProjectStatistics/Control/ProjectStatisticsModeAdministrationService.cs": {
      "classification": "startup-or-domain-bound",
      "owner": "Project Management maintainers",
      "scope": "shared library; validate each consuming host",
      "activationBoundary": "Preserve current lifecycle/domain contract; no shared runtime enrollment without operation audit",
      "reads": [
        "private readonly IProjectStatisticsFlagSource _flags;",
        "IProjectStatisticsFlagSource flags,",
        "var activeReviewerMode = _flags.ActiveReviewerTrackingAvailable;",
        "&& _flags.IsProjectAllowlisted(projectId))"
      ]
    },
    "src/libs/project-management/SyRF.ProjectManagement.Core/Services/ProjectStatistics/Families/Annotation/ProjectAnnotationStatisticsWriter.cs": {
      "classification": "startup-or-domain-bound",
      "owner": "Project Management maintainers",
      "scope": "shared library; validate each consuming host",
      "activationBoundary": "Preserve current lifecycle/domain contract; no shared runtime enrollment without operation audit",
      "reads": [
        "private readonly IProjectStatisticsFlagSource _flags;",
        "IProjectStatisticsFlagSource flags,",
        "_flags.MaterializedWritesRequested",
        "&& AnnotationStatisticsClassifier.Families.All(_flags.IsFamilyServingRequested)",
        "&& _flags.IsProjectAllowlisted(projectId);",
        "&& globalControl.ActiveReviewerTrackingAvailable != _flags.ActiveReviewerTrackingAvailable;"
      ]
    },
    "src/libs/project-management/SyRF.ProjectManagement.Core/Services/ProjectStatistics/Families/Annotation/StageAnnotationAuthoritativeQuery.cs": {
      "classification": "startup-or-domain-bound",
      "owner": "Project Management maintainers",
      "scope": "shared library; validate each consuming host",
      "activationBoundary": "Preserve current lifecycle/domain contract; no shared runtime enrollment without operation audit",
      "reads": [
        "private readonly IProjectStatisticsFlagSource _flags;",
        "IProjectStatisticsFlagSource flags)",
        "&& global.ActiveReviewerTrackingAvailable != _flags.ActiveReviewerTrackingAvailable)"
      ]
    },
    "src/libs/project-management/SyRF.ProjectManagement.Core/Services/ProjectStatistics/Families/Annotation/AnnotationStageBackfillService.cs": {
      "classification": "startup-or-domain-bound",
      "owner": "Project Management maintainers",
      "scope": "shared library; validate each consuming host",
      "activationBoundary": "Delegates to the existing statistics backfill publication guard; preserve the project's domain-bound flag lifecycle until that operation is audited for shared runtime enrollment",
      "reads": [
        "IProjectStatisticsFlagSource flags,"
      ]
    },
    "src/libs/project-management/SyRF.ProjectManagement.Core/Services/ProjectStatistics/Families/Annotation/DomainReconciliationBackfillService.cs": {
      "classification": "startup-or-domain-bound",
      "owner": "Project Management maintainers",
      "scope": "shared library; validate each consuming host",
      "activationBoundary": "Domain reconciliation inherits the existing annotation backfill publication guard; preserve domain-bound flags until the operation is audited for shared runtime enrollment",
      "reads": [
        "IProjectStatisticsFlagSource flags,"
      ]
    },
    "src/libs/project-management/SyRF.ProjectManagement.Core/Services/ProjectStatistics/Families/Annotation/MembershipStageAnnotationBackfillService.cs": {
      "classification": "startup-or-domain-bound",
      "owner": "Project Management maintainers",
      "scope": "shared library; validate each consuming host",
      "activationBoundary": "Membership-stage backfill inherits the existing statistics publication guard; retain startup/domain-bound flags until the backfill and rebuild contract is audited for runtime changes",
      "reads": [
        "IProjectStatisticsFlagSource flags,"
      ]
    },
    "src/libs/project-management/SyRF.ProjectManagement.Core/Services/ProjectStatistics/Families/Annotation/ReviewerAnnotationBackfillService.cs": {
      "classification": "startup-or-domain-bound",
      "owner": "Project Management maintainers",
      "scope": "shared library; validate each consuming host",
      "activationBoundary": "Reviewer annotation backfill inherits the existing statistics publication guard; retain startup/domain-bound flags until the backfill and rebuild contract is audited for runtime changes",
      "reads": [
        "IProjectStatisticsFlagSource flags,"
      ]
    },
    "src/libs/project-management/SyRF.ProjectManagement.Core/Services/ProjectStatistics/Families/Annotation/StageAnnotationBackfillService.cs": {
      "classification": "startup-or-domain-bound",
      "owner": "Project Management maintainers",
      "scope": "shared library; validate each consuming host",
      "activationBoundary": "Preserve current lifecycle/domain contract; no shared runtime enrollment without operation audit",
      "reads": [
        "IProjectStatisticsFlagSource flags,"
      ]
    },
    "src/libs/project-management/SyRF.ProjectManagement.Core/Services/ProjectStatistics/Families/Annotation/StageAnnotationStatisticsQuery.cs": {
      "classification": "startup-or-domain-bound",
      "owner": "Project Management maintainers",
      "scope": "shared library; validate each consuming host",
      "activationBoundary": "Preserve current lifecycle/domain contract; no shared runtime enrollment without operation audit",
      "reads": [
        "private readonly IProjectStatisticsFlagSource _flags;",
        "IProjectStatisticsFlagSource flags,",
        "if (!_flags.PagesConsumerEnabled)",
        "if (!_flags.StageOverviewConsumerEnabled)",
        "if (!_flags.MaterializedWritesRequested)",
        "if (!_flags.MaterializedServingRequested)",
        "if (!_flags.IsFamilyServingRequested(AnnotationStatisticsClassifier.StageFamily))",
        "if (!_flags.IsProjectAllowlisted(projectId))"
      ]
    },
    "src/libs/project-management/SyRF.ProjectManagement.Core/Services/ProjectStatistics/Families/QuestionAnswers/QuestionAnswersAuthoritativeQuery.cs": {
      "classification": "startup-or-domain-bound",
      "owner": "Project Management maintainers",
      "scope": "shared library; validate each consuming host",
      "activationBoundary": "Guarded live question tally refuses when the global active-reviewer tracking capability disagrees with this host's flag; preserve current lifecycle/domain contract",
      "reads": [
        "IProjectStatisticsGlobalControlRepository globals, IProjectStatisticsFlagSource flags)",
        "if (global is not null && global.ActiveReviewerTrackingAvailable != flags.ActiveReviewerTrackingAvailable)"
      ]
    },
    "src/libs/project-management/SyRF.ProjectManagement.Core/Services/ProjectStatistics/Families/QuestionAnswers/QuestionCountsQuery.cs": {
      "classification": "startup-or-domain-bound",
      "owner": "Project Management maintainers",
      "scope": "shared library; validate each consuming host",
      "activationBoundary": "Question-designer count consumer (FEAT-024), default off; the API runtime provider mirrors materializedProjectStatisticsQuestionCounts into FeatureFlags, and the projection path also requires pages consumers, writes, serving, the question family and the project allowlist. Disabled or refused responses keep existing questions locked or legacy editing; never unlock on missing evidence",
      "reads": [
        "IQuestionAnswersAuthoritativeQuery authoritative, IProjectStatisticsFlagSource flags,",
        "FeatureFlags consumerFlags, ILogger<QuestionCountsQuery> logger) : IQuestionCountsQuery",
        "public bool IsEnabled(Guid projectId) => consumerFlags.MaterializedProjectStatisticsQuestionCounts",
        "&& flags.PagesConsumerEnabled && flags.MaterializedWritesRequested && flags.MaterializedServingRequested",
        "&& flags.IsFamilyServingRequested(ProjectStatisticsMetricFamily.QuestionAnswers) && flags.IsProjectAllowlisted(projectId);"
      ]
    },
    "src/libs/project-management/SyRF.ProjectManagement.Core/Services/ProjectStatistics/Families/QuestionAnswers/QuestionAnswersBackfillService.cs": {
      "classification": "startup-or-domain-bound",
      "owner": "Project Management maintainers",
      "scope": "shared library; validate each consuming host",
      "activationBoundary": "Question-answer backfill inherits the existing bounded publication guard; retain startup/domain-bound flags until its rebuild and scope-set verification contract is audited for runtime changes",
      "reads": [
        "IProjectStatisticsFlagSource flags,"
      ]
    },
    "src/libs/project-management/SyRF.ProjectManagement.Core/Services/ProjectStatistics/Families/QuestionAnswers/ProjectStatisticsDefinitionRewriteFence.cs": {
      "classification": "startup-or-domain-bound",
      "owner": "Project Management maintainers",
      "scope": "shared library; validate each consuming host",
      "activationBoundary": "Preserve current lifecycle/domain contract; no shared runtime enrollment without operation audit",
      "reads": [
        "private readonly IProjectStatisticsFlagSource _flags;",
        "IProjectStatisticsFlagSource flags)",
        "(_flags.MaterializedWritesRequested || _flags.MaterializedServingRequested)",
        "&& _flags.IsProjectAllowlisted(projectId);"
      ]
    },
    "src/libs/project-management/SyRF.ProjectManagement.Core/Services/ProjectStatistics/Families/Screening/MembershipScreeningBackfillService.cs": {
      "classification": "startup-or-domain-bound",
      "owner": "Project Management maintainers",
      "scope": "shared library; validate each consuming host",
      "activationBoundary": "Preserve current lifecycle/domain contract; no shared runtime enrollment without operation audit",
      "reads": [
        "IProjectStatisticsFlagSource flags,"
      ]
    },
    "src/libs/project-management/SyRF.ProjectManagement.Core/Services/ProjectStatistics/Families/Screening/ProjectScreeningBackfillService.cs": {
      "classification": "startup-or-domain-bound",
      "owner": "Project Management maintainers",
      "scope": "shared library; validate each consuming host",
      "activationBoundary": "Preserve current lifecycle/domain contract; no shared runtime enrollment without operation audit",
      "reads": [
        "private readonly IProjectStatisticsFlagSource _flags;",
        "IProjectStatisticsFlagSource flags,",
        "if (!_flags.IsProjectAllowlisted(projectId))",
        "if (!_flags.MaterializedWritesRequested)",
        "if (!_flags.IsFamilyServingRequested(_calculator.MetricFamily))"
      ]
    },
    "src/libs/project-management/SyRF.ProjectManagement.Core/Services/ProjectStatistics/Families/Screening/ProjectScreeningStatisticsQueryAdapter.cs": {
      "classification": "startup-or-domain-bound",
      "owner": "Project Management maintainers",
      "scope": "shared library; validate each consuming host",
      "activationBoundary": "Preserve current lifecycle/domain contract; no shared runtime enrollment without operation audit",
      "reads": [
        "private readonly IProjectStatisticsFlagSource _flags;",
        "IProjectStatisticsFlagSource flags,",
        "if (!_flags.MaterializedWritesRequested)",
        "if (!_flags.MaterializedServingRequested)",
        "if (!_flags.IsFamilyServingRequested(ProjectScreeningClassifier.Family))",
        "if (!_flags.IsProjectAllowlisted(projectId))"
      ]
    },
    "src/libs/project-management/SyRF.ProjectManagement.Core/Services/ProjectStatistics/Families/Screening/ProjectScreeningStatisticsWriter.cs": {
      "classification": "startup-or-domain-bound",
      "owner": "Project Management maintainers",
      "scope": "shared library; validate each consuming host",
      "activationBoundary": "Preserve current lifecycle/domain contract; no shared runtime enrollment without operation audit",
      "reads": [
        "private readonly IProjectStatisticsFlagSource _flags;",
        "IProjectStatisticsFlagSource flags,",
        "_flags.MaterializedWritesRequested",
        "&& (_flags.IsFamilyServingRequested(ProjectScreeningClassifier.Family)",
        "|| _flags.IsFamilyServingRequested(ProjectStatisticsMetricFamily.MembershipScreening)",
        "|| _flags.IsFamilyServingRequested(ProjectStatisticsMetricFamily.ReviewerScreening))",
        "&& _flags.IsProjectAllowlisted(projectId);",
        "ReviewerFamilies.Any(_flags.IsFamilyServingRequested) && _reviewerSnapshots is not null",
        "var reviewerFamilies = ReviewerFamilies.Where(_flags.IsFamilyServingRequested).ToArray();",
        "var moves = _flags.IsFamilyServingRequested(ProjectScreeningClassifier.Family)",
        "&& !_flags.IsFamilyServingRequested(ProjectStatisticsMetricFamily.MembershipScreening)",
        "&& !_flags.IsFamilyServingRequested(ProjectStatisticsMetricFamily.ReviewerScreening))",
        "if (!_flags.IsFamilyServingRequested(ProjectScreeningClassifier.Family) && projectMoves.Count > 0)",
        "foreach (var family in ReviewerFamilies.Where(_flags.IsFamilyServingRequested)"
      ]
    },
    "src/libs/project-management/SyRF.ProjectManagement.Core/Services/ProjectStatistics/Families/Screening/ReviewerScreeningBackfillService.cs": {
      "classification": "startup-or-domain-bound",
      "owner": "Project Management maintainers",
      "scope": "shared library; validate each consuming host",
      "activationBoundary": "Preserve current lifecycle/domain contract; no shared runtime enrollment without operation audit",
      "reads": [
        "IProjectStatisticsFlagSource flags,"
      ]
    },
    "src/libs/project-management/SyRF.ProjectManagement.Core/Services/ProjectStatistics/IProjectStatisticsFlagSource.cs": {
      "classification": "startup-or-domain-bound",
      "owner": "Project Management maintainers",
      "scope": "shared library; validate each consuming host",
      "activationBoundary": "Preserve current lifecycle/domain contract; no shared runtime enrollment without operation audit",
      "reads": [
        "public interface IProjectStatisticsFlagSource"
      ]
    },
    "src/libs/project-management/SyRF.ProjectManagement.Core/Services/ProjectStatistics/Lifecycle/ProjectStatisticsDailyObservationRunner.cs": {
      "classification": "startup-or-domain-bound",
      "owner": "Project Management maintainers",
      "scope": "shared library; validate each consuming host",
      "activationBoundary": "Per-delivery check before daily admission; the PM consumer is additionally gated by the default-off ProjectStatisticsDailyObservations:Enabled option and the durable fleet/project gates; no shared runtime enrollment without operation audit",
      "reads": [
        "IProjectStatisticsFlagSource flags,",
        "if (!flags.MaterializedWritesRequested)",
        "if (global.ActiveReviewerTrackingAvailable != flags.ActiveReviewerTrackingAvailable)",
        ".Where(family => family != ProjectStatisticsMetricFamily.DerivedSummary && flags.IsFamilyServingRequested(family))",
        "if (family == ProjectStatisticsMetricFamily.DerivedSummary || !flags.IsFamilyServingRequested(family)) continue;"
      ]
    },
    "src/libs/project-management/SyRF.ProjectManagement.Core/Services/ProjectStatistics/Lifecycle/ProjectStatisticsSourceVisibilityFenceService.cs": {
      "classification": "startup-or-domain-bound",
      "owner": "Project Management maintainers",
      "scope": "shared library; validate each consuming host",
      "activationBoundary": "Preserve current lifecycle/domain contract; no shared runtime enrollment without operation audit",
      "reads": [
        "private readonly IProjectStatisticsFlagSource _flags;",
        "IProjectStatisticsFlagSource flags)",
        "(_flags.MaterializedWritesRequested || _flags.MaterializedServingRequested)",
        "&& _flags.IsProjectAllowlisted(projectId);",
        "if (!_flags.MaterializedWritesRequested || _rebuilds is null)"
      ]
    },
    "src/libs/project-management/SyRF.ProjectManagement.Core/Services/ProjectStatistics/ProjectStatisticsRegistry.cs": {
      "classification": "startup-or-domain-bound",
      "owner": "Project Management maintainers",
      "scope": "shared library; validate each consuming host",
      "activationBoundary": "Preserve current lifecycle/domain contract; no shared runtime enrollment without operation audit",
      "reads": [
        "For<IProjectStatisticsFlagSource>().Use(new StaticProjectStatisticsFlagSource()).Singleton();"
      ]
    },
    "src/libs/project-management/SyRF.ProjectManagement.Core/Services/ProjectStatistics/Read/ProjectStatisticsAuditBundleReader.cs": {
      "classification": "startup-or-domain-bound",
      "owner": "Project Management maintainers",
      "scope": "shared library; validate each consuming host",
      "activationBoundary": "Preserve current lifecycle/domain contract; no shared runtime enrollment without operation audit",
      "reads": [
        "IProjectStatisticsFlagSource flags,",
        "internal sealed class ProjectStatisticsAuditFlagSource : IProjectStatisticsFlagSource",
        "private readonly IProjectStatisticsFlagSource _inner;",
        "public ProjectStatisticsAuditFlagSource(IProjectStatisticsFlagSource inner) =>",
        "public bool MaterializedWritesRequested => _inner.MaterializedWritesRequested;",
        "_inner.MaterializedWritesRequested && _inner.IsFamilyServingRequested(metricFamily);",
        "public bool PagesConsumerEnabled => _inner.PagesConsumerEnabled;",
        "public bool StageOverviewConsumerEnabled => _inner.StageOverviewConsumerEnabled;",
        "public bool SignalRConsumerEnabled => _inner.SignalRConsumerEnabled;",
        "public bool ExportsConsumerEnabled => _inner.ExportsConsumerEnabled;",
        "public bool ActiveReviewerTrackingAvailable => _inner.ActiveReviewerTrackingAvailable;",
        "public bool IsProjectAllowlisted(Guid projectId) => _inner.IsProjectAllowlisted(projectId);"
      ]
    },
    "src/libs/project-management/SyRF.ProjectManagement.Core/Services/ProjectStatistics/Read/ProjectStatisticsBundleReader.cs": {
      "classification": "startup-or-domain-bound",
      "owner": "Project Management maintainers",
      "scope": "shared library; validate each consuming host",
      "activationBoundary": "Preserve current lifecycle/domain contract; no shared runtime enrollment without operation audit",
      "reads": [
        "private readonly IProjectStatisticsFlagSource _flags;",
        "IProjectStatisticsFlagSource flags,",
        "&& globalControl.ActiveReviewerTrackingAvailable != _flags.ActiveReviewerTrackingAvailable)",
        "&& globalControl.ActiveReviewerTrackingAvailable != _flags.ActiveReviewerTrackingAvailable)",
        "if (!_flags.MaterializedServingRequested) return ProjectStatisticsFallbackReason.Disabled;",
        "if (!_flags.IsProjectAllowlisted(projectId)) return ProjectStatisticsFallbackReason.Disabled;"
      ]
    },
    "src/libs/project-management/SyRF.ProjectManagement.Core/Services/ProjectStatistics/StaticProjectStatisticsFlagSource.cs": {
      "classification": "startup-or-domain-bound",
      "owner": "Project Management maintainers",
      "scope": "shared library; validate each consuming host",
      "activationBoundary": "Preserve current lifecycle/domain contract; no shared runtime enrollment without operation audit",
      "reads": [
        "public sealed class StaticProjectStatisticsFlagSource : IProjectStatisticsFlagSource"
      ]
    },
    "src/libs/project-management/SyRF.ProjectManagement.Core/Services/ProjectStatistics/Wiring/FeatureFlagsProjectStatisticsFlagSource.cs": {
      "classification": "startup-or-domain-bound",
      "owner": "Project Management maintainers",
      "scope": "shared library; validate each consuming host",
      "activationBoundary": "Preserve current lifecycle/domain contract; no shared runtime enrollment without operation audit",
      "reads": [
        "public sealed class FeatureFlagsProjectStatisticsFlagSource : IProjectStatisticsFlagSource",
        "private readonly FeatureFlags _featureFlags;",
        "FeatureFlags featureFlags, ProjectStatisticsAllowlist? allowlist = null)",
        "_featureFlags = featureFlags ?? throw new ArgumentNullException(nameof(featureFlags));",
        "public bool MaterializedWritesRequested => _featureFlags.MaterializedProjectStatisticsWrites;",
        "_featureFlags.MaterializedProjectStatisticsServing,",
        "_featureFlags.MaterializedProjectStatisticsWrites);",
        "public bool PagesConsumerEnabled => _featureFlags.MaterializedProjectStatisticsPages;",
        "_featureFlags.MaterializedProjectStatisticsStageOverview;",
        "public bool SignalRConsumerEnabled => _featureFlags.MaterializedProjectStatisticsSignalR;",
        "public bool ExportsConsumerEnabled => _featureFlags.MaterializedProjectStatisticsExports;",
        "public bool ActiveReviewerTrackingAvailable => _featureFlags.ActiveReviewerTrackingAvailable;",
        "ProjectStatisticsFlagMap.IsFamilyServingRequested(metricFamily, _featureFlags);",
        "public bool ReviewerProgressConsumerEnabled => _featureFlags.MaterializedProjectStatisticsReviewerProgress;",
        "public bool StageOverviewBundleConsumerEnabled => _featureFlags.MaterializedProjectStatisticsStageOverviewBundle;",
        "public bool ScreeningInfoConsumerEnabled => _featureFlags.MaterializedProjectStatisticsScreeningInfo;",
        "public bool ProjectReviewerProgressConsumerEnabled => _featureFlags.MaterializedProjectStatisticsProjectReviewerProgress;",
        "public bool MaterializedFoldRequested => _featureFlags.MaterializedProjectStatisticsFold;"
      ]
    },
    "src/libs/project-management/SyRF.ProjectManagement.Core/Services/ProjectStatistics/Wiring/ProjectStatisticsFlagMap.cs": {
      "classification": "startup-or-domain-bound",
      "owner": "Project Management maintainers",
      "scope": "shared library; validate each consuming host",
      "activationBoundary": "Preserve current lifecycle/domain contract; no shared runtime enrollment without operation audit",
      "reads": [
        "ProjectStatisticsMetricFamily metricFamily, FeatureFlags featureFlags) =>",
        "ScreeningKey => featureFlags.MaterializedProjectStatisticsScreening,",
        "MembershipScreeningKey => featureFlags.MaterializedProjectStatisticsMembershipScreening,",
        "AnnotationKey => featureFlags.MaterializedProjectStatisticsAnnotation,",
        "MembershipAnnotationKey => featureFlags.MaterializedProjectStatisticsMembershipAnnotation,",
        "QuestionAnswersKey => featureFlags.MaterializedProjectStatisticsQuestionAnswers,",
        "SearchPopulationKey => featureFlags.MaterializedProjectStatisticsSearchPopulation,",
        "DerivedSummariesKey => featureFlags.MaterializedProjectStatisticsDerivedSummaries,",
        "IProjectStatisticsFlagSource flags)",
        "new(WritesKey, flags.MaterializedWritesRequested),",
        "flags.MaterializedServingRequested, flags.MaterializedWritesRequested)),",
        "flags.IsFamilyServingRequested(ProjectStatisticsMetricFamily.ProjectScreening)),",
        "flags.IsFamilyServingRequested(ProjectStatisticsMetricFamily.MembershipScreening)),",
        "flags.IsFamilyServingRequested(ProjectStatisticsMetricFamily.StageAnnotation)),",
        "flags.IsFamilyServingRequested(",
        "flags.IsFamilyServingRequested(ProjectStatisticsMetricFamily.QuestionAnswers)),",
        "flags.IsFamilyServingRequested(ProjectStatisticsMetricFamily.SearchPopulation)),",
        "flags.IsFamilyServingRequested(ProjectStatisticsMetricFamily.DerivedSummary)),",
        "new(PagesKey, flags.PagesConsumerEnabled),",
        "new(StageOverviewKey, flags.StageOverviewConsumerEnabled),",
        "new(SignalRKey, flags.SignalRConsumerEnabled),",
        "new(ExportsKey, flags.ExportsConsumerEnabled),",
        "new(ReviewerProgressKey, flags.ReviewerProgressConsumerEnabled),",
        "new(StageOverviewBundleKey, flags.StageOverviewBundleConsumerEnabled),",
        "new(ScreeningInfoKey, flags.ScreeningInfoConsumerEnabled),",
        "new(ProjectReviewerProgressKey, flags.ProjectReviewerProgressConsumerEnabled),",
        "new(FoldKey, flags.MaterializedFoldRequested),"
      ]
    },
    "src/libs/project-management/SyRF.ProjectManagement.Core/Services/ProjectStatistics/Write/ProjectStatisticsStagedOperationFenceService.cs": {
      "classification": "startup-or-domain-bound",
      "owner": "Project Management maintainers",
      "scope": "shared library; validate each consuming host",
      "activationBoundary": "Preserve current lifecycle/domain contract; no shared runtime enrollment without operation audit",
      "reads": [
        "private readonly IProjectStatisticsFlagSource _flags;",
        "IProjectStatisticsFlagSource flags)",
        "(_flags.MaterializedWritesRequested || _flags.MaterializedServingRequested)",
        "&& _flags.IsProjectAllowlisted(projectId);"
      ]
    },
    "src/libs/project-management/SyRF.ProjectManagement.Core/Services/StageReviewService.cs": {
      "classification": "startup-or-domain-bound",
      "owner": "Project Management maintainers",
      "scope": "shared library; validate each consuming host",
      "activationBoundary": "Preserve current lifecycle/domain contract; no shared runtime enrollment without operation audit",
      "reads": [
        "private readonly FeatureFlags _featureFlags;",
        "FeatureFlags featureFlags,",
        "_featureFlags = featureFlags;",
        "if (_featureFlags.ReviewEligibilityPolicy)",
        "? _featureFlags.ActiveReviewerTrackingAvailable",
        "_featureFlags.MaterializedProjectStatisticsWrites",
        ": Task.FromResult(_featureFlags.ActiveReviewerTrackingAvailable);",
        "var result = await ReservationChangeSave.TrySaveAsync(_unitOfWork, _featureFlags, study, stageId,",
        "if (existing is null || !_featureFlags.ReviewEligibilityPolicy)",
        "if (_featureFlags.MaterializedProjectStatisticsWrites)",
        "else if (!_featureFlags.ActiveReviewerTrackingAvailable)",
        "if (!_featureFlags.ReviewEligibilityPolicy && alreadyOwnsSlot)"
      ]
    },
    "src/libs/project-management/SyRF.ProjectManagement.Core/Telemetry/ProjectStatisticsDarkStateStartupLog.cs": {
      "classification": "startup-or-domain-bound",
      "owner": "Project Management maintainers",
      "scope": "shared library; validate each consuming host",
      "activationBoundary": "Preserve current lifecycle/domain contract; no shared runtime enrollment without operation audit",
      "reads": [
        "private readonly IProjectStatisticsFlagSource _flags;",
        "IProjectStatisticsFlagSource flags,"
      ]
    },
    "src/libs/project-management/SyRF.ProjectManagement.Mongo.Data/DelegatedWorkRegistry.cs": {
      "classification": "startup-or-domain-bound",
      "owner": "Project Management maintainers",
      "scope": "project-management",
      "activationBoundary": "Application-authority M5a: deployment-only DelegatedWorkAdmissionEnforced selects the delegated-job gate; off keeps every job consumer on its legacy path with no reads; not runtime-overridable",
      "reads": [
        ".Use(context => new DelegatedWorkGateSettings(context.GetInstance<FeatureFlags>().DelegatedWorkAdmissionEnforced))"
      ]
    },
    "src/libs/project-management/SyRF.ProjectManagement.Mongo.Data/ProjectStatisticsFamilyCalculatorRegistry.cs": {
      "classification": "startup-or-domain-bound",
      "owner": "Project Management maintainers",
      "scope": "shared library; validate each consuming host",
      "activationBoundary": "Preserve current lifecycle/domain contract; no shared runtime enrollment without operation audit",
      "reads": [
        "context.GetInstance<IProjectStatisticsFlagSource>(),"
      ]
    },
    "src/libs/project-management/SyRF.ProjectManagement.Mongo.Data/ProjectStatisticsProductionRegistry.cs": {
      "classification": "startup-or-domain-bound",
      "owner": "Project Management maintainers",
      "scope": "shared library; validate each consuming host",
      "activationBoundary": "Preserve current lifecycle/domain contract; no shared runtime enrollment without operation audit",
      "reads": [
        "For<IProjectStatisticsFlagSource>().Use<FeatureFlagsProjectStatisticsFlagSource>().Singleton();"
      ]
    },
    "src/libs/project-management/SyRF.ProjectManagement.Mongo.Data/ProjectStatisticsSourceFenceRegistry.cs": {
      "classification": "startup-or-domain-bound",
      "owner": "Project Management maintainers",
      "scope": "shared library; validate each consuming host",
      "activationBoundary": "Preserve current lifecycle/domain contract; no shared runtime enrollment without operation audit",
      "reads": [
        "context.GetInstance<IProjectStatisticsFlagSource>()))"
      ]
    },
    "src/libs/project-management/SyRF.ProjectManagement.Mongo.Data/Repositories/ProjectStatistics/ProjectScreeningAuthoritativeQuery.cs": {
      "classification": "startup-or-domain-bound",
      "owner": "Project Management maintainers",
      "scope": "shared library; validate each consuming host",
      "activationBoundary": "Preserve current lifecycle/domain contract; no shared runtime enrollment without operation audit",
      "reads": [
        "MongoContext context, IProjectStatisticsSnapshotFactory snapshots, FeatureFlags flags)",
        "if (global is not null && global.ActiveReviewerTrackingAvailable != flags.ActiveReviewerTrackingAvailable)"
      ]
    },
    "src/libs/project-management/SyRF.ProjectManagement.Mongo.Data/Repositories/ProjectStatistics/SearchPopulationBackfillService.cs": {
      "classification": "startup-or-domain-bound",
      "owner": "Project Management maintainers",
      "scope": "shared library; validate each consuming host",
      "activationBoundary": "Preserve current lifecycle/domain contract; no shared runtime enrollment without operation audit",
      "reads": [
        "IProjectStatisticsFlagSource flags,"
      ]
    },
    "src/libs/project-management/SyRF.ProjectManagement.Mongo.Data/Repositories/StudyRepository.AllocationReads.cs": {
      "classification": "startup-or-domain-bound",
      "owner": "Project Management maintainers",
      "scope": "shared library; validate each consuming host",
      "activationBoundary": "Preserve current lifecycle/domain contract; no shared runtime enrollment without operation audit",
      "reads": [
        "var tracking = _featureFlags.ActiveReviewerTrackingAvailable;",
        "stage.SessionCountTarget, project.AgreementThreshold, _featureFlags.ActiveReviewerTrackingAvailable)",
        "if (_featureFlags.ActiveReviewerTrackingAvailable)",
        "var tracking = _featureFlags.ActiveReviewerTrackingAvailable;"
      ]
    },
    "src/libs/project-management/SyRF.ProjectManagement.Mongo.Data/Repositories/StudyRepository.cs": {
      "classification": "startup-or-domain-bound",
      "owner": "Project Management maintainers",
      "scope": "shared library; validate each consuming host",
      "activationBoundary": "Preserve current lifecycle/domain contract; no shared runtime enrollment without operation audit",
      "reads": [
        "private readonly FeatureFlags _featureFlags;",
        "FeatureFlags? featureFlags = null,",
        "_featureFlags = featureFlags ?? new FeatureFlags { ActiveReviewerTrackingEnabled = true };",
        "session: null, _featureFlags.MaterializedProjectStatisticsWrites);",
        "var processFlagValue = _featureFlags.ActiveReviewerTrackingAvailable;",
        "var writesEnabled = _featureFlags.MaterializedProjectStatisticsWrites;",
        "_featureFlags.ActiveReviewerTrackingAvailable));",
        "_featureFlags.ActiveReviewerTrackingAvailable) &",
        "_featureFlags.ActiveReviewerTrackingAvailable",
        "_featureFlags.ActiveReviewerTrackingAvailable))",
        "_featureFlags.ActiveReviewerTrackingAvailable) &",
        "_featureFlags.ActiveReviewerTrackingAvailable) |",
        "if (_featureFlags.ReviewEligibilityPolicy)",
        "var writesEnabled = _featureFlags.MaterializedProjectStatisticsWrites;",
        "if (!_featureFlags.ActiveReviewerTrackingAvailable)",
        "if (!_featureFlags.ActiveReviewerTrackingAvailable)",
        "var writesEnabled = _featureFlags.MaterializedProjectStatisticsWrites;",
        "var writesEnabled = _featureFlags.MaterializedProjectStatisticsWrites;",
        "var trackingAvailable = _featureFlags.ActiveReviewerTrackingAvailable;",
        "var writesEnabled = _featureFlags.MaterializedProjectStatisticsWrites;",
        "var trackingAvailable = _featureFlags.ActiveReviewerTrackingAvailable;",
        "var writesEnabled = _featureFlags.MaterializedProjectStatisticsWrites;",
        "var writesEnabled = _featureFlags.MaterializedProjectStatisticsWrites;",
        "if (await RequireDurableModeAgreementAsync(null, _featureFlags.MaterializedProjectStatisticsWrites)"
      ]
    },
    "src/libs/project-management/SyRF.ProjectManagement.Mongo.Data/Repositories/StudyRepository.ActivityReservations.cs": {
      "classification": "startup-or-domain-bound",
      "owner": "Project Management maintainers",
      "scope": "shared library; validate each consuming host",
      "activationBoundary": "Preserve current lifecycle/domain contract; no shared runtime enrollment without operation audit",
      "reads": [
        "_featureFlags.ProportionalStudyAllocation);",
        "if (!_featureFlags.ReviewEligibilityPolicy)",
        "var statisticsWrites = _featureFlags.MaterializedProjectStatisticsWrites;"
      ]
    },
    "src/libs/project-management/SyRF.ProjectManagement.Mongo.Data/Repositories/StudyRepository.ActivityReviewWrites.cs": {
      "classification": "startup-or-domain-bound",
      "owner": "Project Management maintainers",
      "scope": "shared library; validate each consuming host",
      "activationBoundary": "Preserve current lifecycle/domain contract; no shared runtime enrollment without operation audit",
      "reads": [
        "if (!_featureFlags.ReviewEligibilityPolicy)",
        "var statisticsWrites = _featureFlags.MaterializedProjectStatisticsWrites;",
        "if (!_featureFlags.ReviewEligibilityPolicy)",
        "if (!_featureFlags.ReviewEligibilityPolicy)",
        "var statisticsWrites = _featureFlags.MaterializedProjectStatisticsWrites;",
        "_currentUserService.GetSyrfAppGroups(), _featureFlags.ProportionalStudyAllocation);"
      ]
    },
    "src/libs/webhostconfig/SyRF.WebHostConfig.Common/Extensions/BulkPdfUploadEnablement.cs": {
      "classification": "startup-or-domain-bound",
      "owner": "Shared platform maintainers",
      "scope": "shared library; validate each consuming host",
      "activationBoundary": "Preserve current lifecycle/domain contract; no shared runtime enrollment without operation audit",
      "reads": [
        "public const string UploadsFlagKey = \"FeatureFlags:BulkPdfUpload\";"
      ]
    },
    "src/libs/webhostconfig/SyRF.WebHostConfig.Common/Extensions/SyrfConfigureServices.cs": {
      "classification": "startup-or-domain-bound",
      "owner": "Shared platform maintainers",
      "scope": "shared library; validate each consuming host",
      "activationBoundary": "Preserve current lifecycle/domain contract; no shared runtime enrollment without operation audit",
      "reads": [
        "var featureFlags = configuration.GetSection(\"FeatureFlags\").Get<FeatureFlags>() ?? new FeatureFlags();",
        "ValidateFeatureFlagCompatibility(featureFlags);",
        "services.AddSingleton(featureFlags);",
        "private static void ValidateFeatureFlagCompatibility(FeatureFlags featureFlags)",
        "if (featureFlags.BulkPdfUpload && !featureFlags.DeletionLifecycle)",
        "\"FeatureFlags:BulkPdfUpload requires FeatureFlags:DeletionLifecycle so deletion cannot bypass server-owned upload cleanup.\");"
      ]
    },
    "src/services/api/SyRF.API.Endpoint/Authorization/ApplicationAuthority/ApplicationAuthorityMode.cs": {
      "classification": "startup-or-domain-bound",
      "owner": "API maintainers",
      "scope": "api",
      "activationBoundary": "Application-authority M1a mode, resolved once at API startup from deployed values; deliberately not runtime-overridable; enforced without the base flag fails startup",
      "reads": [
        "public static ApplicationAuthorityMode Resolve(FeatureFlags featureFlags)",
        "ArgumentNullException.ThrowIfNull(featureFlags);",
        "if (featureFlags.SyrfOwnedApplicationRolesEnforced && !featureFlags.SyrfOwnedApplicationRoles)",
        "\"FeatureFlags:SyrfOwnedApplicationRolesEnforced requires FeatureFlags:SyrfOwnedApplicationRoles.\");",
        "return featureFlags switch"
      ]
    },
    "src/services/api/SyRF.API.Endpoint/Authorization/ApplicationAuthority/ApplicationSuspensionSettings.cs": {
      "classification": "startup-or-domain-bound",
      "owner": "API maintainers",
      "scope": "api",
      "activationBoundary": "Application-authority M4a reversible application suspension, resolved once at API startup from deployed values; deliberately not runtime-overridable; on without enforced application authority fails startup",
      "reads": [
        "public static ApplicationSuspensionSettings Resolve(FeatureFlags featureFlags, ApplicationAuthorityMode mode)",
        "ArgumentNullException.ThrowIfNull(featureFlags);",
        "if (featureFlags.ApplicationSuspension && mode != ApplicationAuthorityMode.Enforced)",
        "\"FeatureFlags:ApplicationSuspension requires enforced application authority \" +",
        "\"(FeatureFlags:SyrfOwnedApplicationRoles and FeatureFlags:SyrfOwnedApplicationRolesEnforced).\");",
        "return new ApplicationSuspensionSettings(featureFlags.ApplicationSuspension);"
      ]
    },
    "src/services/api/SyRF.API.Endpoint/Authorization/SupportImpersonation/SupportImpersonationSettings.cs": {
      "classification": "startup-or-domain-bound",
      "owner": "API maintainers",
      "scope": "api",
      "activationBoundary": "Application-authority M2b support-impersonation contract, resolved once at API startup from deployed values; deliberately not runtime-overridable; on without enforced application authority fails startup",
      "reads": [
        "public static SupportImpersonationSettings Resolve(FeatureFlags featureFlags, ApplicationAuthorityMode mode)",
        "ArgumentNullException.ThrowIfNull(featureFlags);",
        "if (featureFlags.ImpersonationReadOnlyEnforcement && mode != ApplicationAuthorityMode.Enforced)",
        "\"FeatureFlags:ImpersonationReadOnlyEnforcement requires enforced application authority \" +",
        "\"(FeatureFlags:SyrfOwnedApplicationRoles and FeatureFlags:SyrfOwnedApplicationRolesEnforced).\");",
        "return new SupportImpersonationSettings(featureFlags.ImpersonationReadOnlyEnforcement);"
      ]
    },
    "src/services/api/SyRF.API.Endpoint/Authorization/FeatureGatedAttribute.cs": {
      "classification": "existing-runtime",
      "owner": "API maintainers",
      "scope": "api",
      "activationBoundary": "Existing runtime path; audit operation capture before shared-provider enrollment",
      "reads": [
        "return services.GetService<SharedRuntimeFeatureFlagReader>()",
        "var featureFlags = services.GetService<IRuntimeFeatureFlagProvider>();",
        "if (featureFlags is null)",
        "Flag.BulkPdfUpload => featureFlags.IsEnabled(\"bulkPdfUpload\"),",
        "Flag.ProportionalStudyAllocation => featureFlags.IsEnabled(\"proportionalStudyAllocation\"),",
        "Flag.ScreeningKeywordHighlighting => featureFlags.IsEnabled(\"screeningKeywordHighlighting\"),",
        "Flag.DisableMembership => featureFlags.IsEnabled(\"disableMembership\"),"
      ]
    },
    "src/services/api/SyRF.API.Endpoint/Controllers/BulkPdfUploadController.cs": {
      "classification": "startup-or-domain-bound",
      "owner": "API maintainers",
      "scope": "api",
      "activationBoundary": "Preserve current lifecycle/domain contract; no shared runtime enrollment without operation audit",
      "reads": [
        "private readonly FeatureFlags _featureFlags;",
        "FeatureFlags featureFlags,",
        "_featureFlags = featureFlags;",
        "private bool FeatureDisabled => !_featureFlags.BulkPdfUpload;"
      ]
    },
    "src/services/api/SyRF.API.Endpoint/Controllers/ProjectController.cs": {
      "classification": "startup-or-domain-bound",
      "owner": "API maintainers",
      "scope": "api",
      "activationBoundary": "Preserve current lifecycle/domain contract; no shared runtime enrollment without operation audit",
      "reads": [
        "private readonly FeatureFlags _featureFlags;",
        "FeatureFlags featureFlags,",
        "_featureFlags = featureFlags;",
        "_featureFlags.DeletionLifecycle);",
        "if (!_featureFlags.ActiveReviewerTrackingEnabled && ContainsActiveReviewerTrackingSetting(patchDoc))",
        "if (!_featureFlags.MaterializedProjectStatisticsPages || !_featureFlags.MaterializedProjectStatisticsProjectOverview)",
        "if (!_featureFlags.ReviewEligibilityPolicy && stageDto.AdditionalScreeningPolicy.HasValue)",
        "if (_featureFlags.ReviewEligibilityPolicy)",
        "if (_featureFlags.ReviewEligibilityPolicy)"
      ]
    },
    "src/services/api/SyRF.API.Endpoint/Controllers/ProjectStatisticsParityAdminController.cs": {
      "classification": "startup-or-domain-bound",
      "owner": "API maintainers",
      "scope": "api",
      "activationBoundary": "Preserve current lifecycle/domain contract; no shared runtime enrollment without operation audit",
      "reads": [
        "IProjectStatisticsFlagSource flags,",
        "if (!flags.IsProjectAllowlisted(projectId))",
        "if (!flags.MaterializedWritesRequested || !flags.IsFamilyServingRequested(ProjectStatisticsMetricFamily.ProjectScreening))"
      ]
    },
    "src/services/api/SyRF.API.Endpoint/Controllers/ProjectStatisticsPilotAdminController.cs": {
      "classification": "startup-or-domain-bound",
      "owner": "API maintainers",
      "scope": "api",
      "activationBoundary": "Preserve current lifecycle/domain contract; no shared runtime enrollment without operation audit",
      "reads": [
        "IProjectStatisticsFlagSource flags,",
        "FeatureFlags featureFlags,",
        "if (!flags.IsProjectAllowlisted(id)) continue;",
        "return Ok(new ProjectStatisticsPilotStatusDto(flags.MaterializedWritesRequested,",
        "flags.MaterializedServingRequested,",
        "flags.IsFamilyServingRequested(ProjectStatisticsMetricFamily.ProjectScreening),",
        "flags.PagesConsumerEnabled, featureFlags.MaterializedProjectStatisticsProjectOverview,"
      ]
    },
    "src/services/api/SyRF.API.Endpoint/Controllers/ReviewController.cs": {
      "classification": "startup-or-domain-bound",
      "owner": "API maintainers",
      "scope": "api",
      "activationBoundary": "Preserve current lifecycle/domain contract; no shared runtime enrollment without operation audit",
      "reads": [
        "IRuntimeFeatureFlagProvider runtimeFeatureFlags,",
        "FeatureFlags featureFlags,",
        "if (featureFlags.ReviewEligibilityPolicy &&",
        "if (featureFlags.ReviewEligibilityPolicy)",
        "var writesEnabled = featureFlags.MaterializedProjectStatisticsWrites;",
        ": featureFlags.ActiveReviewerTrackingAvailable;",
        "(!featureFlags.ReviewEligibilityPolicy ||",
        "activityClaims: featureFlags.ReviewEligibilityPolicy);",
        "if (featureFlags.ReviewEligibilityPolicy)",
        "runtimeFeatureFlags.IsEnabled(RuntimeFeatureFlagKeys.ProportionalStudyAllocation))",
        "keepSlottedClaim: featureFlags.ReviewEligibilityPolicy))",
        "getSavedSession, runtimeFeatureFlags.IsEnabled(RuntimeFeatureFlagKeys.MaxInProgressSessions),",
        "runtimeFeatureFlags.IsEnabled(RuntimeFeatureFlagKeys.ProportionalStudyAllocation));",
        "getSavedSession, runtimeFeatureFlags.IsEnabled(RuntimeFeatureFlagKeys.MaxInProgressSessions),",
        "runtimeFeatureFlags.IsEnabled(RuntimeFeatureFlagKeys.ProportionalStudyAllocation));",
        "restrictToSavedSessions, runtimeFeatureFlags.IsEnabled(RuntimeFeatureFlagKeys.MaxInProgressSessions),",
        "runtimeFeatureFlags.IsEnabled(RuntimeFeatureFlagKeys.ProportionalStudyAllocation));",
        "if (!featureFlags.ReviewEligibilityPolicy && !reconciliation",
        "if (featureFlags.ReviewEligibilityPolicy)",
        "var target = new ReviewScreeningFoldTarget(pmUnitOfWork, reviewSubmissionService, currentUserService, featureFlags,",
        "var writesEnabled = featureFlags.MaterializedProjectStatisticsWrites;",
        ": featureFlags.ActiveReviewerTrackingAvailable;",
        "if (featureFlags.ReviewEligibilityPolicy)",
        "restrictToSavedSessions, runtimeFeatureFlags.IsEnabled(RuntimeFeatureFlagKeys.MaxInProgressSessions),",
        "runtimeFeatureFlags.IsEnabled(RuntimeFeatureFlagKeys.ProportionalStudyAllocation));",
        "if (!featureFlags.MaterializedProjectStatisticsPages || !screeningStatisticsQuery.IsMaterializedReadRequested(projectId))",
        "var ensureAnnotationAccess = featureFlags.MaterializedProjectStatisticsWrites",
        "|| featureFlags.ActiveReviewerTrackingAvailable;",
        "if (!reconciliation && runtimeFeatureFlags.IsEnabled(RuntimeFeatureFlagKeys.ProportionalStudyAllocation) &&",
        "keepSlottedClaim: featureFlags.ReviewEligibilityPolicy))",
        "var hasReachedMaxInProgress = runtimeFeatureFlags.IsEnabled(RuntimeFeatureFlagKeys.MaxInProgressSessions) &&",
        "if (!featureFlags.ActiveReviewerTrackingAvailable ||",
        "if (!featureFlags.ReviewEligibilityPolicy || study is null)",
        "runtimeFeatureFlags.IsEnabled(RuntimeFeatureFlagKeys.ProportionalStudyAllocation));",
        "featureFlags.ReviewEligibilityPolicy",
        "featureFlags.ReviewEligibilityPolicy ? throw new ReviewWriteRefusedException(reason) : flagOffResult;"
      ]
    },
    "src/services/api/SyRF.API.Endpoint/Controllers/RuntimeFeatureFlagsController.cs": {
      "classification": "control-plane",
      "owner": "API maintainers",
      "scope": "api",
      "activationBoundary": "Preserve current lifecycle/domain contract; no shared runtime enrollment without operation audit",
      "reads": [
        "[FromServices] SharedRuntimeFeatureFlagReader reader,",
        "var observed = reader.Capture();"
      ]
    },
    "src/services/api/SyRF.API.Endpoint/Controllers/SearchController.cs": {
      "classification": "startup-or-domain-bound",
      "owner": "API maintainers",
      "scope": "api",
      "activationBoundary": "Preserve current lifecycle/domain contract; no shared runtime enrollment without operation audit",
      "reads": [
        "FeatureFlags featureFlags, ISearchPopulationQuery? searchPopulation = null, ICurrentUserService? currentUser = null,",
        "_featureFlags = featureFlags;",
        "private readonly FeatureFlags _featureFlags;",
        "_featureFlags.DeletionLifecycle);",
        "_featureFlags.DeletionLifecycle);"
      ]
    },
    "src/services/api/SyRF.API.Endpoint/Controllers/StageReviewSettingsController.cs": {
      "classification": "startup-or-domain-bound",
      "owner": "API maintainers",
      "scope": "api",
      "activationBoundary": "Preserve current lifecycle/domain contract; no shared runtime enrollment without operation audit",
      "reads": [
        "ICurrentUserService currentUser, FeatureFlags flags, IStageReviewStatisticsEvidenceReader statisticsEvidence,",
        "if (!flags.ReviewEligibilityPolicy) return NotFound();",
        "if (!flags.ReviewEligibilityPolicy) return NotFound();",
        "var plans = studies.Select(study => (Study: study, Changes: Plan(study, project, stage, flags.ProportionalStudyAllocation))).ToArray();",
        "var statisticsThresholds = flags.MaterializedProjectStatisticsWrites &&"
      ]
    },
    "src/services/api/SyRF.API.Endpoint/Controllers/StageAllocationReadController.cs": {
      "classification": "startup-or-domain-bound",
      "owner": "API maintainers",
      "scope": "api",
      "activationBoundary": "Preserve current lifecycle/domain contract; no shared runtime enrollment without operation audit",
      "reads": [
        "IRuntimeFeatureFlagProvider runtimeFeatureFlags, ICurrentUserService currentUserService) : ControllerBase",
        "if (!runtimeFeatureFlags.IsEnabled(RuntimeFeatureFlagKeys.ProportionalStudyAllocation))",
        "runtimeFeatureFlags.IsEnabled(RuntimeFeatureFlagKeys.MaxInProgressSessions));",
        "if (!runtimeFeatureFlags.IsEnabled(RuntimeFeatureFlagKeys.ProportionalStudyAllocation))",
        "runtimeFeatureFlags.IsEnabled(RuntimeFeatureFlagKeys.MaxInProgressSessions));"
      ]
    },
    "src/services/api/SyRF.API.Endpoint/Controllers/StageWorkloadSharesController.cs": {
      "classification": "startup-or-domain-bound",
      "owner": "API maintainers",
      "scope": "api",
      "activationBoundary": "Preserve current lifecycle/domain contract; no shared runtime enrollment without operation audit",
      "reads": [
        "IRuntimeFeatureFlagProvider runtimeFeatureFlags,",
        "if (request.Enabled && !runtimeFeatureFlags.IsEnabled(RuntimeFeatureFlagKeys.ProportionalStudyAllocation))"
      ]
    },
    "src/services/api/SyRF.API.Endpoint/Infrastructure/ReviewWriteAuthorizationResultHandler.cs": {
      "classification": "startup-or-domain-bound",
      "owner": "API maintainers",
      "scope": "api",
      "activationBoundary": "Preserve current lifecycle/domain contract; no shared runtime enrollment without operation audit",
      "reads": [
        "public sealed class ReviewWriteAuthorizationResultHandler(FeatureFlags featureFlags) : IAuthorizationMiddlewareResultHandler",
        "if (authorizeResult.Forbidden && featureFlags.ReviewEligibilityPolicy && !context.Response.HasStarted &&"
      ]
    },
    "src/services/api/SyRF.API.Endpoint/Program.cs": {
      "classification": "startup-or-domain-bound",
      "owner": "API maintainers",
      "scope": "api",
      "activationBoundary": "Preserve current lifecycle/domain contract; no shared runtime enrollment without operation audit",
      "reads": [
        "var deployedFeatureFlags = context.Configuration.GetSection(\"FeatureFlags\").Get<FeatureFlags>() ?? new FeatureFlags();",
        ".AddSingleton<IRuntimeFeatureFlagProvider>(resolver =>",
        "registry.AddScoped<IProjectStatisticsFlagSource, RuntimeProjectStatisticsFlagSource>();"
      ]
    },
    "src/services/api/SyRF.API.Endpoint/RuntimeFeatureFlags/RuntimeFeatureFlagCatalog.cs": {
      "classification": "control-plane",
      "owner": "API maintainers",
      "scope": "api",
      "activationBoundary": "Preserve current lifecycle/domain contract; no shared runtime enrollment without operation audit",
      "reads": [
        "definition => configuration.GetValue<bool?>($\"FeatureFlags:{definition.ConfigurationProperty}\") ?? false,"
      ]
    },
    "src/services/api/SyRF.API.Endpoint/RuntimeFeatureFlags/RuntimeFeatureFlagModels.cs": {
      "classification": "control-plane",
      "owner": "API maintainers",
      "scope": "api",
      "activationBoundary": "Preserve current lifecycle/domain contract; no shared runtime enrollment without operation audit",
      "reads": [
        "public static bool GetEffectiveValue(string key, bool candidateValue, FeatureFlags backendFlags) => key switch",
        "SignalRActiveKey when backendFlags.ActiveReviewerTrackingEnabled => backendFlags.SignalRActive,",
        "public static void EnsureValidMutation(string key, bool candidateValue, FeatureFlags backendFlags)",
        "if (key == SignalRActiveKey && backendFlags.ActiveReviewerTrackingEnabled &&",
        "candidateValue != backendFlags.SignalRActive)",
        "private static bool IsInvalidBulkPdfEnable(string key, FeatureFlags backendFlags) =>",
        "key == BulkPdfUploadKey && !backendFlags.DeletionLifecycle;"
      ]
    },
    "src/services/api/SyRF.API.Endpoint/RuntimeFeatureFlags/RuntimeFeatureFlagProvider.cs": {
      "classification": "control-plane",
      "owner": "API maintainers",
      "scope": "api",
      "activationBoundary": "Preserve current lifecycle/domain contract; no shared runtime enrollment without operation audit",
      "reads": [
        "public interface IRuntimeFeatureFlagProvider",
        "public sealed class RuntimeFeatureFlagProvider : IRuntimeFeatureFlagProvider",
        "private readonly FeatureFlags _backendFlags;",
        "public RuntimeFeatureFlagProvider(IConfiguration configuration, FeatureFlags backendFlags)",
        "_backendFlags.ProportionalStudyAllocation);",
        "_backendFlags.BulkPdfUpload = values[RuntimeFeatureFlagKeys.BulkPdfUpload];",
        "_backendFlags.MaxInProgressSessions = values[RuntimeFeatureFlagKeys.MaxInProgressSessions];",
        "_backendFlags.ProportionalStudyAllocation = values[RuntimeFeatureFlagKeys.ProportionalStudyAllocation];",
        "value => _backendFlags.MaterializedProjectStatisticsWrites = value);",
        "value => _backendFlags.MaterializedProjectStatisticsServing = value);",
        "value => _backendFlags.MaterializedProjectStatisticsScreening = value);",
        "value => _backendFlags.MaterializedProjectStatisticsMembershipScreening = value);",
        "value => _backendFlags.MaterializedProjectStatisticsAnnotation = value);",
        "value => _backendFlags.MaterializedProjectStatisticsMembershipAnnotation = value);",
        "value => _backendFlags.MaterializedProjectStatisticsQuestionAnswers = value);",
        "value => _backendFlags.MaterializedProjectStatisticsSearchPopulation = value);",
        "value => _backendFlags.MaterializedProjectStatisticsDerivedSummaries = value);",
        "value => _backendFlags.MaterializedProjectStatisticsProjectOverview = value);",
        "value => _backendFlags.MaterializedProjectStatisticsHistory = value);",
        "value => _backendFlags.MaterializedProjectStatisticsReviewerAnnotationHistory = value);",
        "value => _backendFlags.MaterializedProjectStatisticsStageHistory = value);",
        "value => _backendFlags.MaterializedProjectStatisticsReviewerHistory = value);",
        "value => _backendFlags.MaterializedProjectStatisticsQuestionCounts = value);",
        "value => _backendFlags.MaterializedProjectStatisticsSearchCounts = value);",
        "value => _backendFlags.MaterializedProjectStatisticsStageOverview = value);",
        "value => _backendFlags.MaterializedProjectStatisticsPages = value);",
        "value => _backendFlags.MaterializedProjectStatisticsSignalR = value);",
        "value => _backendFlags.MaterializedProjectStatisticsExports = value);",
        "normalized.TryAdd(RuntimeFeatureFlagKeys.ReviewEligibilityPolicy, _backendFlags.ReviewEligibilityPolicy);",
        "_backendFlags.ReviewEligibilityPolicy = values[RuntimeFeatureFlagKeys.ReviewEligibilityPolicy];",
        "value => _backendFlags.MaterializedProjectStatisticsReviewerProgress = value);",
        "value => _backendFlags.MaterializedProjectStatisticsStageOverviewBundle = value);",
        "value => _backendFlags.MaterializedProjectStatisticsScreeningInfo = value);",
        "value => _backendFlags.MaterializedProjectStatisticsProjectReviewerProgress = value);",
        "value => _backendFlags.MaterializedProjectStatisticsFold = value);"
      ]
    },
    "src/services/api/SyRF.API.Endpoint/RuntimeFeatureFlags/RuntimeFeatureFlagStore.cs": {
      "classification": "control-plane",
      "owner": "API maintainers",
      "scope": "api",
      "activationBoundary": "Preserve current lifecycle/domain contract; no shared runtime enrollment without operation audit",
      "reads": [
        "private readonly FeatureFlags _backendFlags;",
        "FeatureFlags backendFlags, TimeProvider timeProvider)",
        "FeatureFlags backendFlags, TimeProvider timeProvider,",
        "FeatureFlags backendFlags)",
        "FeatureFlags backendFlags,",
        "FeatureFlags backendFlags,",
        "FeatureFlags backendFlags,",
        "IReadOnlyDictionary<string, bool> staticValues, FeatureFlags backendFlags)",
        "private static bool ReadDeploymentDependency(string key, FeatureFlags backendFlags) => key switch",
        "\"deletionLifecycle\" => backendFlags.DeletionLifecycle,"
      ]
    },
    "src/services/api/SyRF.API.Endpoint/Services/RuntimeProjectStatisticsFlagSource.cs": {
      "classification": "existing-runtime",
      "owner": "API maintainers",
      "scope": "api",
      "activationBoundary": "Existing runtime path; audit operation capture before shared-provider enrollment",
      "reads": [
        "IRuntimeFeatureFlagProvider runtimeFlags,",
        "FeatureFlags featureFlags,",
        "ProjectStatisticsAllowlist allowlist) : IProjectStatisticsFlagSource",
        "runtimeFlags.IsEnabled(RuntimeFeatureFlagKeys.MaterializedProjectStatisticsWrites);",
        "runtimeFlags.IsEnabled(RuntimeFeatureFlagKeys.MaterializedProjectStatisticsServing),",
        "ProjectStatisticsFlagMap.FamilyFlagKey(metricFamily) is { } key && runtimeFlags.IsEnabled(key);",
        "public bool PagesConsumerEnabled => runtimeFlags.IsEnabled(ProjectStatisticsFlagMap.PagesKey);",
        "runtimeFlags.IsEnabled(ProjectStatisticsFlagMap.StageOverviewKey);",
        "public bool SignalRConsumerEnabled => runtimeFlags.IsEnabled(ProjectStatisticsFlagMap.SignalRKey);",
        "public bool ExportsConsumerEnabled => runtimeFlags.IsEnabled(ProjectStatisticsFlagMap.ExportsKey);",
        "public bool ActiveReviewerTrackingAvailable => featureFlags.ActiveReviewerTrackingAvailable;",
        "public bool ReviewerProgressConsumerEnabled => runtimeFlags.IsEnabled(ProjectStatisticsFlagMap.ReviewerProgressKey);",
        "public bool StageOverviewBundleConsumerEnabled => runtimeFlags.IsEnabled(ProjectStatisticsFlagMap.StageOverviewBundleKey);",
        "public bool ScreeningInfoConsumerEnabled => runtimeFlags.IsEnabled(ProjectStatisticsFlagMap.ScreeningInfoKey);",
        "public bool ProjectReviewerProgressConsumerEnabled => runtimeFlags.IsEnabled(ProjectStatisticsFlagMap.ProjectReviewerProgressKey);",
        "runtimeFlags.IsEnabled(RuntimeFeatureFlagKeys.MaterializedProjectStatisticsFold);"
      ]
    },
    "src/services/api/SyRF.API.Endpoint/Services/SubmitAnnotationSessionService.cs": {
      "classification": "startup-or-domain-bound",
      "owner": "API maintainers",
      "scope": "api",
      "activationBoundary": "Preserve current lifecycle/domain contract; no shared runtime enrollment without operation audit",
      "reads": [
        "private readonly FeatureFlags _featureFlags;",
        "private readonly IRuntimeFeatureFlagProvider _runtimeFeatureFlags;",
        "FeatureFlags featureFlags,",
        "IRuntimeFeatureFlagProvider runtimeFeatureFlags,",
        "_featureFlags = featureFlags;",
        "_runtimeFeatureFlags = runtimeFeatureFlags;",
        "_runtimeFeatureFlags.IsEnabled(RuntimeFeatureFlagKeys.ProportionalStudyAllocation);",
        "if (_featureFlags.ReviewEligibilityPolicy)",
        "var writesEnabled = _featureFlags.MaterializedProjectStatisticsWrites;",
        ": _featureFlags.ActiveReviewerTrackingAvailable;",
        "keepSlottedClaim: _featureFlags.ReviewEligibilityPolicy)",
        "if (_featureFlags.ReviewEligibilityPolicy)",
        "catch (DuplicateAnnotationSessionException) when (_featureFlags.ReviewEligibilityPolicy)",
        "if (_featureFlags.ReviewEligibilityPolicy)"
      ]
    },
    "src/services/api/SyRF.API.Endpoint/SignalR/NotificationHub.cs": {
      "classification": "startup-or-domain-bound",
      "owner": "API maintainers",
      "scope": "api",
      "activationBoundary": "Preserve current lifecycle/domain contract; no shared runtime enrollment without operation audit",
      "reads": [
        "FeatureFlags featureFlags,",
        "ApplicationAuthorityModes.Resolve(featureFlags));",
        "_featureFlags = featureFlags;",
        "private readonly FeatureFlags _featureFlags;",
        "if (!_featureFlags.ActiveReviewerTrackingAvailable)",
        "wasRemoved = await ReservationChangeSave.SaveOrThrowAsync(_pmUnitOfWork, _featureFlags,",
        "var rolledBack = await ReservationChangeSave.TrySaveAsync(_pmUnitOfWork, _featureFlags,",
        "if (await ReservationChangeSave.SaveOrThrowAsync(_pmUnitOfWork, _featureFlags, priorStudy,",
        "if (_featureFlags.MaterializedProjectStatisticsWrites)",
        "else if (!_featureFlags.ActiveReviewerTrackingAvailable)",
        "if (_featureFlags.ReviewEligibilityPolicy)",
        "if (!_featureFlags.ActiveReviewerTrackingAvailable)",
        "var removal = await ReservationChangeSave.TrySaveAsync(_pmUnitOfWork, _featureFlags, study,",
        "if (!_featureFlags.ActiveReviewerTrackingAvailable)",
        "if (!_featureFlags.ActiveReviewerTrackingAvailable)",
        "if (!_featureFlags.ActiveReviewerTrackingAvailable)",
        "if (!_featureFlags.ActiveReviewerTrackingAvailable)",
        "if (!_featureFlags.ActiveReviewerTrackingAvailable)",
        "_featureFlags.MaterializedProjectStatisticsFold, study,",
        "_featureFlags.MaterializedProjectStatisticsFold, study,"
      ]
    },
    "src/services/api/SyRF.API.Endpoint/SignalR/Statistics/ProjectStatisticsChangedConsumer.cs": {
      "classification": "startup-or-domain-bound",
      "owner": "API maintainers",
      "scope": "api",
      "activationBoundary": "Preserve current lifecycle/domain contract; no shared runtime enrollment without operation audit",
      "reads": [
        "IProjectStatisticsFlagSource flags,",
        "if (!flags.SignalRConsumerEnabled) return;",
        "if (!flags.IsProjectAllowlisted(group.Key)) continue;"
      ]
    },
    "src/services/api/SyRF.API.Endpoint/SignalR/Statistics/ProjectStatisticsDispatchService.cs": {
      "classification": "startup-or-domain-bound",
      "owner": "API maintainers",
      "scope": "api",
      "activationBoundary": "Preserve current lifecycle/domain contract; no shared runtime enrollment without operation audit",
      "reads": [
        "if (!scope.ServiceProvider.GetRequiredService<IProjectStatisticsFlagSource>().SignalRConsumerEnabled) continue;"
      ]
    },
    "src/services/api/SyRF.API.Endpoint/SignalR/Statistics/ProjectStatisticsNotificationSink.cs": {
      "classification": "startup-or-domain-bound",
      "owner": "API maintainers",
      "scope": "api",
      "activationBoundary": "Preserve current lifecycle/domain contract; no shared runtime enrollment without operation audit",
      "reads": [
        "IBus bus, IProjectStatisticsControlRepository controls, IProjectStatisticsFlagSource flags)",
        "if (!flags.SignalRConsumerEnabled)"
      ]
    },
    "src/services/identity/SyRF.Identity.Endpoint/Configuration/IdentityHostOptions.cs": {
      "classification": "startup-or-domain-bound",
      "owner": "Shared platform maintainers",
      "scope": "identity",
      "activationBoundary": "Preserve current lifecycle/domain contract; no shared runtime enrollment without operation audit; Application-authority M1c: the API's deployment-only authority pair, bound once at Identity startup (not runtime-overridable); enforced requires the base flag; when enforced, destructive account deletions require the PM pending-deactivation reservation; #3896: applicationSuspension (the API's deployment-only M4a flag, one Helm value) is bound once at Identity startup and requires enforced authority; when on, Identity refuses sign-in and token issuance to suspended accounts",
      "reads": [
        "public IdentityFeatureFlags FeatureFlags { get; init; } = new();",
        "FeatureFlags = configuration.GetSection(\"FeatureFlags\").Get<IdentityFeatureFlags>() ?? new(),",
        "if (options.FeatureFlags.SyrfOwnedApplicationRolesEnforced && !options.FeatureFlags.SyrfOwnedApplicationRoles)",
        "\"FeatureFlags:SyrfOwnedApplicationRolesEnforced requires FeatureFlags:SyrfOwnedApplicationRoles.\");",
        "if (options.FeatureFlags.ApplicationSuspension && !options.FeatureFlags.ApplicationAuthorityEnforced)",
        "\"FeatureFlags:ApplicationSuspension requires enforced application authority \"",
        "+ \"(FeatureFlags:SyrfOwnedApplicationRoles and FeatureFlags:SyrfOwnedApplicationRolesEnforced).\");"
      ]
    },
    "src/services/identity/SyRF.Identity.Endpoint/Program.cs": {
      "classification": "startup-or-domain-bound",
      "owner": "Shared platform maintainers",
      "scope": "identity",
      "activationBoundary": "#3896: applicationSuspension, bound once at Identity startup (not runtime-overridable); on, registers the linearizable PM suspension check (or a fail-closed check without a PM connection in Development); off, the disabled check reads and refuses nothing",
      "reads": [
        "if (hostOptions.FeatureFlags.ApplicationSuspension)",
        "if (hostOptions.FeatureFlags.ApplicationSuspension)"
      ]
    },
    "src/services/identity/SyRF.Identity.Endpoint/Controllers/AccountApiController.cs": {
      "classification": "startup-or-domain-bound",
      "owner": "Shared platform maintainers",
      "scope": "identity",
      "activationBoundary": "Application-authority M1c: the API's deployment-only authority pair, bound once at Identity startup (not runtime-overridable); enforced requires the base flag; when enforced, destructive account deletions require the PM pending-deactivation reservation",
      "reads": [
        "_applicationAuthorityEnforced = hostOptions?.FeatureFlags.ApplicationAuthorityEnforced ?? false;"
      ]
    },
    "src/services/identity/SyRF.Identity.Endpoint/Controllers/AdminApiController.cs": {
      "classification": "startup-or-domain-bound",
      "owner": "Shared platform maintainers",
      "scope": "identity",
      "activationBoundary": "Application-authority M1c: the API's deployment-only authority pair, bound once at Identity startup (not runtime-overridable); enforced requires the base flag; when enforced, destructive account deletions require the PM pending-deactivation reservation",
      "reads": [
        "_applicationAuthorityEnforced = hostOptions?.FeatureFlags.ApplicationAuthorityEnforced ?? false;"
      ]
    },
    "src/services/identity/SyRF.Identity.Endpoint/Controllers/AuthorizationController.cs": {
      "classification": "startup-or-domain-bound",
      "owner": "Shared platform maintainers",
      "scope": "identity",
      "activationBoundary": "Preserve current lifecycle/domain contract; no shared runtime enrollment without operation audit",
      "reads": [
        "if (_hostOptions.FeatureFlags.IdentityClaimRecovery"
      ]
    },
    "src/services/identity/SyRF.Identity.Endpoint/Pages/Account/ClaimPending.cshtml.cs": {
      "classification": "startup-or-domain-bound",
      "owner": "Shared platform maintainers",
      "scope": "identity",
      "activationBoundary": "Preserve current lifecycle/domain contract; no shared runtime enrollment without operation audit",
      "reads": [
        "if (!hostOptions.FeatureFlags.IdentityClaimRecovery)",
        "if (!hostOptions.FeatureFlags.IdentityClaimRecovery)"
      ]
    },
    "src/services/identity/SyRF.Identity.Endpoint/Services/IdentityAdmissionMiddleware.cs": {
      "classification": "startup-or-domain-bound",
      "owner": "Shared platform maintainers",
      "scope": "identity",
      "activationBoundary": "Preserve current lifecycle/domain contract; no shared runtime enrollment without operation audit",
      "reads": [
        "if (IsAllowed(context.Request.Path, hostOptions.FeatureFlags.IdentityClaimRecovery))"
      ]
    },
    "src/services/project-management/SyRF.ProjectManagement.Endpoint/Consumers/CheckConnectionLivenessConsumer.cs": {
      "classification": "startup-or-domain-bound",
      "owner": "Project Management maintainers",
      "scope": "project-management",
      "activationBoundary": "Preserve current lifecycle/domain contract; no shared runtime enrollment without operation audit",
      "reads": [
        "FeatureFlags featureFlags,",
        "await StudyUpsertConflictRetry.ExecuteAsync(featureFlags.MaterializedProjectStatisticsFold, study,"
      ]
    },
    "src/services/project-management/SyRF.ProjectManagement.Endpoint/Consumers/MarkSessionIdleConsumer.cs": {
      "classification": "startup-or-domain-bound",
      "owner": "Project Management maintainers",
      "scope": "project-management",
      "activationBoundary": "Preserve current lifecycle/domain contract; no shared runtime enrollment without operation audit",
      "reads": [
        "FeatureFlags featureFlags,",
        "await StudyUpsertConflictRetry.ExecuteAsync(featureFlags.MaterializedProjectStatisticsFold, study,"
      ]
    },
    "src/services/project-management/SyRF.ProjectManagement.Endpoint/Consumers/RemoveIdleSessionConsumer.cs": {
      "classification": "startup-or-domain-bound",
      "owner": "Project Management maintainers",
      "scope": "project-management",
      "activationBoundary": "Preserve current lifecycle/domain contract; no shared runtime enrollment without operation audit",
      "reads": [
        "FeatureFlags featureFlags,",
        "var wasRemoved = await ReservationChangeSave.SaveOrThrowAsync(pmUnitOfWork, featureFlags, study,",
        "await StudyUpsertConflictRetry.ExecuteAsync(featureFlags.MaterializedProjectStatisticsFold, study,"
      ]
    },
    "src/services/project-management/SyRF.ProjectManagement.Endpoint/Consumers/RemoveSuspendedSessionConsumer.cs": {
      "classification": "startup-or-domain-bound",
      "owner": "Project Management maintainers",
      "scope": "project-management",
      "activationBoundary": "Preserve current lifecycle/domain contract; no shared runtime enrollment without operation audit",
      "reads": [
        "FeatureFlags featureFlags,",
        "await ReservationChangeSave.SaveOrThrowAsync(pmUnitOfWork, featureFlags, study,"
      ]
    },
    "src/services/project-management/SyRF.ProjectManagement.Endpoint/Consumers/StudyUpdateJobFileSavedToS3Comsumer.cs": {
      "classification": "startup-or-domain-bound",
      "owner": "Project Management maintainers",
      "scope": "project-management",
      "activationBoundary": "Preserve current lifecycle/domain contract; no shared runtime enrollment without operation audit; ADR-020: the restoration guard admits execution versions 1 and 2 (version 0 rejected as before); a version 2 job is handed to the atomic executor whatever bulkStudyUpdateAtomicApply says (with the guard off, the version 1 parse refuses it before writing)",
      "reads": [
        "private readonly FeatureFlags _featureFlags;",
        "FeatureFlags featureFlags, IDelegatedWorkGate delegatedWork,",
        "_featureFlags = featureFlags;",
        "if (_featureFlags.BulkStudyUpdateRequireCurrentExecutionVersion)"
      ]
    },
    "src/services/api/SyRF.API.Endpoint/Controllers/ProjectStatisticsHistoryController.cs": {
      "classification": "existing-runtime",
      "owner": "API maintainers",
      "scope": "api",
      "activationBoundary": "History endpoint requires the page, history and screening flags and checks Project.View plus screening-progress permission before snapshot reauthorization",
      "reads": [
        "IPmUnitOfWork unitOfWork, ICurrentUserService currentUser, FeatureFlags flags,",
        "if (!flags.MaterializedProjectStatisticsPages || !flags.MaterializedProjectStatisticsHistory",
        "|| !flags.MaterializedProjectStatisticsScreening)"
      ]
    },
    "src/services/api/SyRF.API.Endpoint/Controllers/StageStatisticsHistoryController.cs": {
      "classification": "existing-runtime",
      "owner": "API maintainers",
      "scope": "api",
      "activationBoundary": "Stage annotation history endpoint requires the page, stage-history and annotation flags and checks Project.View plus the stage's annotation-progress-graph permission before snapshot reauthorization",
      "reads": [
        "IPmUnitOfWork unitOfWork, ICurrentUserService currentUser, FeatureFlags flags,",
        "if (!flags.MaterializedProjectStatisticsPages || !flags.MaterializedProjectStatisticsStageHistory",
        "|| !flags.MaterializedProjectStatisticsAnnotation)"
      ]
    },
    "src/services/api/SyRF.API.Endpoint/Controllers/ReviewerScreeningHistoryController.cs": {
      "classification": "existing-runtime",
      "owner": "API maintainers",
      "scope": "api",
      "activationBoundary": "Reviewer screening history endpoint requires the page, reviewer-history and membership-screening flags and applies the reviewer-leaderboard disclosure tiers (Project.View, screening-progress graph, decisions for peers plus membership visibility) before snapshot reauthorization",
      "reads": [
        "IPmUnitOfWork unitOfWork, ICurrentUserService currentUser, FeatureFlags flags,",
        "var reviewerHistoryRequested = flags.MaterializedProjectStatisticsPages",
        "&& flags.MaterializedProjectStatisticsReviewerHistory",
        "&& flags.MaterializedProjectStatisticsMembershipScreening;"
      ]
    },
    "src/services/api/SyRF.API.Endpoint/Controllers/ReviewerAnnotationHistoryController.cs": {
      "classification": "existing-runtime",
      "owner": "API maintainers",
      "scope": "api",
      "activationBoundary": "Reviewer annotation history endpoint requires the page, reviewer-annotation-history, annotation and membership-annotation flags and applies the membership-stage annotation disclosure tiers (Project.View, the stage's annotation-progress graph, membership visibility for peers, active membership for own history) before snapshot reauthorization",
      "reads": [
        "IPmUnitOfWork unitOfWork, ICurrentUserService currentUser, FeatureFlags flags,",
        "if (!flags.MaterializedProjectStatisticsPages || !flags.MaterializedProjectStatisticsReviewerAnnotationHistory",
        "|| !flags.MaterializedProjectStatisticsAnnotation || !flags.MaterializedProjectStatisticsMembershipAnnotation)"
      ]
    },
    "src/libs/project-management/SyRF.ProjectManagement.Core/Services/ProjectStatistics/Families/Annotation/ReviewerProgressAuthoritativeQuery.cs": {
      "classification": "startup-or-domain-bound",
      "owner": "Project Management maintainers",
      "scope": "shared library; validate each consuming host",
      "activationBoundary": "Preserve current lifecycle/domain contract; no shared runtime enrollment without operation audit",
      "reads": [
        "IProjectStatisticsGlobalControlRepository globals, IProjectStatisticsFlagSource flags)",
        "if (global is not null && global.ActiveReviewerTrackingAvailable != flags.ActiveReviewerTrackingAvailable)",
        "global?.ActiveReviewerTrackingAvailable ?? flags.ActiveReviewerTrackingAvailable,"
      ]
    },
    "src/libs/project-management/SyRF.ProjectManagement.Core/Services/ProjectStatistics/Families/Annotation/ReviewerProgressQuery.cs": {
      "classification": "startup-or-domain-bound",
      "owner": "Project Management maintainers",
      "scope": "shared library; validate each consuming host",
      "activationBoundary": "Preserve current lifecycle/domain contract; no shared runtime enrollment without operation audit",
      "reads": [
        "IProjectStatisticsFlagSource flags, ReviewerProgressAuthoritativeQuery authoritative,",
        "public bool IsMaterializedReadRequested(Guid projectId) => flags.ReviewerProgressConsumerEnabled",
        "&& flags.PagesConsumerEnabled && flags.MaterializedWritesRequested && flags.MaterializedServingRequested",
        "&& flags.IsProjectAllowlisted(projectId)",
        "&& flags.IsFamilyServingRequested(ProjectStatisticsMetricFamily.ReviewerScreening)",
        "&& flags.IsFamilyServingRequested(ProjectStatisticsMetricFamily.ReviewerAnnotation);"
      ]
    },
    "src/libs/project-management/SyRF.ProjectManagement.Core/Services/ProjectStatistics/Lifecycle/ProjectStatisticsHistoryMaintenanceService.cs": {
      "classification": "startup-or-domain-bound",
      "owner": "Project Management maintainers",
      "scope": "shared library; validate each consuming host",
      "activationBoundary": "Administrator-only checkpoint history maintenance (FEAT-024), evaluated per request: ProjectStatistics:HistoryMaintenance:Enabled stays default-off and the project must also be allowlisted; a refusal writes nothing, and every pass serializes with checkpoint admission through the admission-row compare-and-swap",
      "reads": [
        "IProjectStatisticsFlagSource flags,",
        "if (projectId == Guid.Empty || !flags.IsProjectAllowlisted(projectId)) throw Refused(\"ProjectNotAdmitted\");"
      ]
    },
    "src/libs/project-management/SyRF.ProjectManagement.Core/Services/ProjectStatistics/Lifecycle/ProjectStatisticsDeltaMaintenanceService.cs": {
      "classification": "startup-or-domain-bound",
      "owner": "Project Management maintainers",
      "scope": "shared library; validate each consuming host",
      "activationBoundary": "Administrator-only delta ledger maintenance (FEAT-024), evaluated per request: ProjectStatistics:DeltaMaintenance:Enabled stays default-off and the project must also be allowlisted; a refusal writes nothing, and every pass serializes with checkpoint admission, family guards and the project control through compare-and-swap in one snapshot transaction",
      "reads": [
        "IProjectStatisticsFlagSource flags)",
        "if (projectId == Guid.Empty || !flags.IsProjectAllowlisted(projectId))"
      ]
    },
    "src/libs/project-management/SyRF.ProjectManagement.Core/Services/ProjectStatistics/Lifecycle/ProjectStatisticsReceiptMaintenanceService.cs": {
      "classification": "startup-or-domain-bound",
      "owner": "Project Management maintainers",
      "scope": "shared library; validate each consuming host",
      "activationBoundary": "Administrator-only source-receipt maintenance (FEAT-024), evaluated per request: ProjectStatistics:ReceiptMaintenance:Enabled stays default-off and the project must also be allowlisted; a refusal writes nothing, and every pass retires source revisions, deletes receipts and advances the idempotency floor in one snapshot transaction that serializes with source writes through the project-control compare-and-swap",
      "reads": [
        "if (projectId == Guid.Empty || !flags.IsProjectAllowlisted(projectId)) throw Refused(\"ProjectNotAdmitted\");",
        "IProjectStatisticsFlagSource flags,"
      ]
    },
    "src/libs/project-management/SyRF.ProjectManagement.Core/Services/ProjectStatistics/Lifecycle/ProjectStatisticsScheduledMaintenanceRunner.cs": {
      "classification": "startup-or-domain-bound",
      "owner": "Project Management maintainers",
      "scope": "shared library; validate each consuming host",
      "activationBoundary": "Scheduled bounded maintenance (FEAT-024) runs only in the PM host when the default-off ProjectStatisticsMaintenance:Enabled option is true; each run visits at most ProjectsPerRun projects taken from the reviewed ProjectStatistics:ProjectAllowlist, skipping any the host flag source does not also admit; every call still passes the history, delta or receipt service's own default-off ProjectStatistics:*Maintenance:Enabled gate and allowlist check, receipt reclamation additionally needs the default-off ProjectStatisticsMaintenance:ReceiptMaintenanceEnabled, and a typed refusal writes nothing and is retried by the next run",
      "reads": [
        "IProjectStatisticsFlagSource flags,",
        ".Where(projectId => projectId != Guid.Empty && flags.IsProjectAllowlisted(projectId))"
      ]
    },
    "src/libs/project-management/SyRF.ProjectManagement.Core/Services/ProjectStatistics/Fleet/ProjectStatisticsFleetService.cs": {
      "classification": "startup-or-domain-bound",
      "owner": "Project Management maintainers",
      "scope": "shared library; validate each consuming host",
      "activationBoundary": "Admission-only reads (allowlist, write kill switch, family flag) evaluated per create/advance; ProjectStatistics:Fleet:Enabled stays default-off and each dispatched backfill re-checks the same gates",
      "reads": [
        "IProjectStatisticsFlagSource flags,",
        "|| !flags.MaterializedWritesRequested || !flags.IsFamilyServingRequested(target.Family)",
        "|| !flags.IsProjectAllowlisted(target.ProjectId))"
      ]
    },
    "src/libs/project-management/SyRF.ProjectManagement.Core/Services/ProjectStatistics/Families/Annotation/StageOverviewStatisticsQuery.cs": {
      "classification": "startup-or-domain-bound",
      "owner": "Project Management maintainers",
      "scope": "shared library; validate each consuming host",
      "activationBoundary": "Stage Overview bundle consumer (FEAT-024), default off; the API runtime provider mirrors materializedProjectStatisticsStageOverviewBundle into the statistics flag source, and the projection path also requires pages consumers, writes, serving, all four stage-overview families and the project allowlist. A disabled response restores the legacy FullStats page; refusals never fall through to raw facets. The durable reviewer-mode check fails closed with the typed 503. The Screening Information consumer (materializedProjectStatisticsScreeningInfo, default off) uses the same query through IsScreeningEnabled: pages consumers, writes, serving, the project and membership screening families and the project allowlist; a disabled response restores the legacy FullStats page.",
      "reads": [
        "public bool IsEnabled(Guid projectId) => flags.StageOverviewBundleConsumerEnabled && flags.PagesConsumerEnabled",
        "&& flags.MaterializedWritesRequested && flags.MaterializedServingRequested && flags.IsProjectAllowlisted(projectId)",
        ".All(flags.IsFamilyServingRequested);",
        "if (global is not null && global.ActiveReviewerTrackingAvailable != flags.ActiveReviewerTrackingAvailable)",
        "IProjectStatisticsFlagSource flags, ILogger<StageOverviewStatisticsQuery> logger) : IStageOverviewStatisticsQuery",
        "public bool IsScreeningEnabled(Guid projectId) => flags.ScreeningInfoConsumerEnabled && flags.PagesConsumerEnabled",
        "&& flags.MaterializedWritesRequested && flags.MaterializedServingRequested && flags.IsProjectAllowlisted(projectId)",
        ".All(flags.IsFamilyServingRequested);"
      ]
    },
    "src/services/project-management/SyRF.ProjectManagement.Endpoint/Controllers/RuntimeFeatureFlagReaderController.cs": {
      "classification": "control-plane",
      "owner": "Project Management maintainers",
      "scope": "Project Management local diagnostic endpoint",
      "activationBoundary": "Read-only status for the responding instance; no policy mutation or fleet convergence claim",
      "reads": [
        "SharedRuntimeFeatureFlagReader reader,",
        "IProjectStatisticsFlagSource statistics) : ControllerBase",
        "var observed = reader.Capture();",
        "? statistics.MaterializedServingRequested : null,",
        "? statistics.PagesConsumerEnabled : null,",
        "? statistics.SignalRConsumerEnabled : null,"
      ]
    },
    "src/services/project-management/SyRF.ProjectManagement.Endpoint/Program.cs": {
      "classification": "shared-reader",
      "owner": "Project Management maintainers",
      "scope": "Project Management host registration",
      "activationBoundary": "Replace the statistics adapter only when non-production StatisticsServing mode is selected; Shadow and Disabled retain legacy behavior",
      "reads": [
        "registry.For<IProjectStatisticsFlagSource>().Use<SharedProjectStatisticsFlagSource>().Singleton();"
      ]
    },
    "src/services/project-management/SyRF.ProjectManagement.Endpoint/Services/SharedProjectStatisticsFlagSource.cs": {
      "classification": "shared-reader",
      "owner": "Project Management maintainers",
      "scope": "Project Management statistics serving and consumer gates",
      "activationBoundary": "A current shared Off stops new serving and consumer selection; stale or unavailable policy fails closed; deployment writes and serving, durable readiness, and allowlist remain prerequisites",
      "reads": [
        "public sealed class SharedProjectStatisticsFlagSource : IProjectStatisticsFlagSource",
        "private readonly SharedRuntimeFeatureFlagReader _reader;",
        "FeatureFlags featureFlags,",
        "SharedRuntimeFeatureFlagReader reader)",
        "_deployed = new FeatureFlagsProjectStatisticsFlagSource(featureFlags, allowlist);",
        "&& _reader.Evaluate(SharedRuntimeFeatureFlagOptions.StatisticsServingKey, true) == true;",
        "_reader.Evaluate(ProjectStatisticsFlagMap.PagesKey, _deployed.PagesConsumerEnabled) == true;",
        "_reader.Evaluate(ProjectStatisticsFlagMap.StageOverviewKey, _deployed.StageOverviewConsumerEnabled) == true;",
        "_reader.Evaluate(ProjectStatisticsFlagMap.SignalRKey, _deployed.SignalRConsumerEnabled) == true;",
        "_reader.Evaluate(ProjectStatisticsFlagMap.ExportsKey, _deployed.ExportsConsumerEnabled) == true;"
      ]
    },
    "src/libs/project-management/SyRF.ProjectManagement.Core/Services/ProjectStatistics/Families/Annotation/ProjectReviewerProgressQuery.cs": {
      "classification": "startup-or-domain-bound",
      "owner": "Project Management maintainers",
      "scope": "shared library; validate each consuming host",
      "activationBoundary": "Preserve current lifecycle/domain contract; no shared runtime enrollment without operation audit",
      "reads": [
        "IProjectStatisticsFlagSource flags, ILogger<ProjectReviewerProgressQuery> logger) : IProjectReviewerProgressQuery",
        "public bool IsReadRequested(Guid projectId) => flags.ProjectReviewerProgressConsumerEnabled && flags.PagesConsumerEnabled;",
        "public bool IsMaterializedReadRequested(Guid projectId) => flags.ProjectReviewerProgressConsumerEnabled",
        "&& flags.PagesConsumerEnabled && flags.MaterializedWritesRequested && flags.MaterializedServingRequested",
        "&& flags.IsProjectAllowlisted(projectId)",
        "&& flags.IsFamilyServingRequested(ProjectStatisticsMetricFamily.ReviewerScreening)",
        "&& flags.IsFamilyServingRequested(ProjectStatisticsMetricFamily.ReviewerAnnotation);",
        "if (global is not null && global.ActiveReviewerTrackingAvailable != flags.ActiveReviewerTrackingAvailable)",
        "return (project, global?.ActiveReviewerTrackingAvailable ?? flags.ActiveReviewerTrackingAvailable);"
      ]
    },
    "src/libs/project-management/SyRF.ProjectManagement.Core/Services/ProjectStatistics/Families/SearchPopulation/SearchPopulationQuery.cs": {
      "classification": "startup-or-domain-bound",
      "owner": "Project Management maintainers",
      "scope": "shared library; validate each consuming host",
      "activationBoundary": "Imported search count consumer (FEAT-024), default off; the API runtime provider mirrors materializedProjectStatisticsSearchCounts into FeatureFlags, and the projection path also requires pages consumers, writes, serving, the search population family and the project allowlist. Missing, stale or incompatible projections return the authorized metadata snapshot; fences (including active search operation fences) and capacity refuse explicitly",
      "reads": [
        "IProjectStatisticsFlagSource flags,",
        "FeatureFlags consumerFlags, ILogger<SearchPopulationQuery> logger) : ISearchPopulationQuery",
        "public bool IsEnabled(Guid projectId) => consumerFlags.MaterializedProjectStatisticsSearchCounts",
        "&& flags.PagesConsumerEnabled && flags.MaterializedWritesRequested && flags.MaterializedServingRequested",
        "&& flags.IsFamilyServingRequested(ProjectStatisticsMetricFamily.SearchPopulation) && flags.IsProjectAllowlisted(projectId);",
        "if (global is not null && global.ActiveReviewerTrackingAvailable != flags.ActiveReviewerTrackingAvailable)"
      ]
    },
    "src/libs/project-management/SyRF.ProjectManagement.Core/Services/ReviewEligibility/ReviewEligibilityService.cs": {
      "classification": "startup-or-domain-bound",
      "owner": "Project Management maintainers",
      "scope": "shared library; validate each consuming host",
      "activationBoundary": "Default-off reviewEligibilityPolicy; flag off returns before any read or evaluation; no runtime enrollment without operation audit",
      "reads": [
        "FeatureFlags featureFlags,",
        "if (!featureFlags.ReviewEligibilityPolicy)",
        "var trackingAvailable = featureFlags.MaterializedProjectStatisticsWrites",
        ": featureFlags.ActiveReviewerTrackingAvailable;"
      ]
    },
    "src/libs/project-management/SyRF.ProjectManagement.Core/Services/ProjectStatistics/Read/ProjectStatisticsServingGate.cs": {
      "classification": "startup-or-domain-bound",
      "owner": "Project Management maintainers",
      "scope": "shared library; validate each consuming host",
      "activationBoundary": "The serving equality gate extracted unchanged from ProjectStatisticsBundleReader and shared with the #3636 daily copy; it evaluates the same serving, allowlist and family flags per read that the reader always did; no shared runtime enrollment without operation audit",
      "reads": [
        "private readonly IProjectStatisticsFlagSource _flags;",
        "IProjectStatisticsFlagSource flags)",
        "if (!_flags.MaterializedServingRequested)",
        "if (!_flags.IsProjectAllowlisted(projectId))",
        "if (!_flags.IsFamilyServingRequested(family))"
      ]
    },
    "src/libs/project-management/SyRF.ProjectManagement.Core/Services/ProjectStatistics/Lifecycle/ProjectStatisticsCurrentRowCopier.cs": {
      "classification": "startup-or-domain-bound",
      "owner": "Project Management maintainers",
      "scope": "shared library; validate each consuming host",
      "activationBoundary": "Reached only from an ordinary daily observation when the default-off ProjectStatisticsDailyObservations:CopyFreshMaterializedRows option is on; per delivery it checks the durable reviewer mode against the flag and applies the reader's serving gate before copying any row; any refusal calculates from source; no shared runtime enrollment without operation audit; a project with fold history is copied only while its pending set is empty in the same snapshot",
      "reads": [
        "private readonly IProjectStatisticsFlagSource _flags;",
        "IProjectStatisticsFlagSource flags,",
        "if (globalControl.ActiveReviewerTrackingAvailable != _flags.ActiveReviewerTrackingAvailable"
      ]
    },
    "src/libs/project-management/SyRF.ProjectManagement.Core/Services/ProjectStatistics/Lifecycle/ProjectStatisticsDriftCheckRunner.cs": {
      "classification": "startup-or-domain-bound",
      "owner": "Project Management maintainers",
      "scope": "shared library; validate each consuming host",
      "activationBoundary": "The #3636 periodic drift check runs only in the PM host when the default-off ProjectStatisticsDriftCheck:Enabled option is true; each run visits at most ProjectsPerRun projects taken from the reviewed ProjectStatistics:ProjectAllowlist, skipping any the host flag source does not also admit; a refusal, conflict or failure is isolated to its project and retried by the next run",
      "reads": [
        "IProjectStatisticsFlagSource flags,",
        ".Where(projectId => projectId != Guid.Empty && flags.IsProjectAllowlisted(projectId))"
      ]
    },
    "src/libs/project-management/SyRF.ProjectManagement.Core/Services/ProjectStatistics/Lifecycle/ProjectStatisticsDriftCheckService.cs": {
      "classification": "startup-or-domain-bound",
      "owner": "Project Management maintainers",
      "scope": "shared library; validate each consuming host",
      "activationBoundary": "Reached only from the default-off ProjectStatisticsDriftCheck schedule for allowlisted projects; per visit it checks the durable reviewer mode against the flag and compares each requested family's scopes through the reader's own serving gate, so with serving or a family flag off nothing is compared or written; a drifted served row is made Stale in one transaction that re-verifies the identity, and only verification records move otherwise",
      "reads": [
        "private readonly IProjectStatisticsFlagSource _flags;",
        "IProjectStatisticsFlagSource flags,",
        "projectId != Guid.Empty && _allowlist.Contains(projectId) && _flags.IsProjectAllowlisted(projectId);",
        "if (global.ActiveReviewerTrackingAvailable != _flags.ActiveReviewerTrackingAvailable)",
        "if (global.ActiveReviewerTrackingAvailable != _flags.ActiveReviewerTrackingAvailable) return \"ReviewerModeDisagrees\";",
        "if (family == ProjectStatisticsMetricFamily.DerivedSummary || !_flags.IsFamilyServingRequested(family)) continue;"
      ]
    },
    "src/libs/project-management/SyRF.ProjectManagement.Core/Services/ProjectManagementService.cs": {
      "classification": "startup-or-domain-bound",
      "owner": "Project Management maintainers",
      "scope": "shared library; validate each consuming host",
      "activationBoundary": "Default-off reviewEligibilityPolicy; flag off returns before any read or evaluation; no runtime enrollment without operation audit",
      "reads": [
        "private readonly FeatureFlags _featureFlags;",
        "definitionRewriteFence, stagedOperationFences, new FeatureFlags())",
        "FeatureFlags featureFlags)",
        "_featureFlags = featureFlags ?? throw new ArgumentNullException(nameof(featureFlags));",
        "_featureFlags.ReviewEligibilityPolicy && job.ScreeningImportSettings is { UserColumnMap.Count: > 0 } screening",
        "if (_featureFlags.ReviewEligibilityPolicy &&"
      ]
    },
    "src/libs/project-management/SyRF.ProjectManagement.Core/Services/ReviewEligibility/StageReviewStatisticsEvidence.cs": {
      "classification": "startup-or-domain-bound",
      "owner": "Project Management maintainers",
      "scope": "shared library; validate each consuming host",
      "activationBoundary": "Statistics are consulted only when materialized writes, serving, the stage-annotation family and the project allowlist are all on; otherwise the authoritative stage-attributed check decides",
      "reads": [
        "IProjectStatisticsFlagSource flags,",
        "if (!flags.MaterializedWritesRequested || !flags.MaterializedServingRequested ||",
        "!flags.IsFamilyServingRequested(AnnotationStatisticsClassifier.StageFamily) ||",
        "!flags.IsProjectAllowlisted(projectId))"
      ]
    },
    "src/libs/project-management/SyRF.ProjectManagement.Core/Services/StudyReferenceFileParser.cs": {
      "classification": "startup-or-domain-bound",
      "owner": "Project Management maintainers",
      "scope": "shared library; validate each consuming host",
      "activationBoundary": "Default-off reviewEligibilityPolicy; flag off returns before any read or evaluation; no runtime enrollment without operation audit",
      "reads": [
        "private readonly FeatureFlags _featureFlags;",
        "new FeatureFlags())",
        "IFileService fileService, IPmUnitOfWork unitOfWork, FeatureFlags featureFlags)",
        "_featureFlags = featureFlags ?? throw new ArgumentNullException(nameof(featureFlags));",
        "if (screeningUpdates.Length > 0 && _featureFlags.ReviewEligibilityPolicy)",
        "return _featureFlags.ReviewEligibilityPolicy"
      ]
    },
    "src/services/api/SyRF.API.Endpoint/SignalR/ClaimRevocations/ActivityClaimRevocationDispatchService.cs": {
      "classification": "startup-or-domain-bound",
      "owner": "API maintainers",
      "scope": "api",
      "activationBoundary": "Default-off reviewEligibilityPolicy; flag off dispatches and delivers nothing (#3720); no runtime enrollment without operation audit",
      "reads": [
        "if (!scope.ServiceProvider.GetRequiredService<FeatureFlags>().ReviewEligibilityPolicy) continue;"
      ]
    },
    "src/services/api/SyRF.API.Endpoint/SignalR/ClaimRevocations/ActivityClaimRevokedConsumer.cs": {
      "classification": "startup-or-domain-bound",
      "owner": "API maintainers",
      "scope": "api",
      "activationBoundary": "Default-off reviewEligibilityPolicy; flag off dispatches and delivers nothing (#3720); no runtime enrollment without operation audit",
      "reads": [
        "IPmUnitOfWork unitOfWork, IHubContext<NotificationHub, INotificationHubClient> hub, FeatureFlags flags,",
        "if (!flags.ReviewEligibilityPolicy) return false;"
      ]
    },
    "src/libs/project-management/SyRF.ProjectManagement.Core/Services/ReservationChangeSave.cs": {
      "classification": "startup-or-domain-bound",
      "owner": "Project Management maintainers",
      "scope": "shared library; validate each consuming host",
      "activationBoundary": "Preserve current lifecycle/domain contract; no shared runtime enrollment without operation audit",
      "reads": [
        "IPmUnitOfWork unitOfWork, FeatureFlags featureFlags, Study study, Guid stageId, Guid investigatorId,",
        "ArgumentNullException.ThrowIfNull(featureFlags);",
        "if (!featureFlags.MaterializedProjectStatisticsWrites)",
        "IPmUnitOfWork unitOfWork, FeatureFlags featureFlags, Study study, Guid stageId, Guid investigatorId,",
        "result = await TrySaveAsync(unitOfWork, featureFlags, study, stageId, investigatorId, change,"
      ]
    },
    "src/libs/project-management/SyRF.ProjectManagement.Mongo.Data/Repositories/StudyRepository.ReservationStatistics.cs": {
      "classification": "startup-or-domain-bound",
      "owner": "Project Management maintainers",
      "scope": "shared library; validate each consuming host",
      "activationBoundary": "Preserve current lifecycle/domain contract; no shared runtime enrollment without operation audit",
      "reads": [
        "if (!_featureFlags.MaterializedProjectStatisticsWrites)"
      ]
    },
    "src/libs/project-management/SyRF.ProjectManagement.Core/Services/ProjectStatistics/Lifecycle/ProjectStatisticsStaleRepairRunner.cs": {
      "classification": "startup-or-domain-bound",
      "owner": "Project Management maintainers",
      "scope": "shared library; validate each consuming host",
      "activationBoundary": "The FEAT-024 C1 scheduled repair runs only in the PM host when the default-off ProjectStatisticsRepair:Enabled option is true; each run visits at most ProjectsPerRun projects taken from the reviewed ProjectStatistics:ProjectAllowlist, skipping any the host flag source does not also admit; with materialized writes off, a disagreeing durable reviewer mode or a family flag off nothing is inspected or backfilled, and a family is repaired only through its ordinary non-forced backfill, which re-checks the allowlist, write and family flags itself",
      "reads": [
        "private readonly IProjectStatisticsFlagSource _flags;",
        "IProjectStatisticsFlagSource flags,",
        ".Where(projectId => projectId != Guid.Empty && _flags.IsProjectAllowlisted(projectId))",
        "var enabled = _backfills.Where(backfill => _flags.IsFamilyServingRequested(backfill.MetricFamily)).ToArray();",
        "if (!_flags.MaterializedWritesRequested) return ProjectStatisticsStaleRepairReason.WritesDisabled;",
        "if (global.ActiveReviewerTrackingAvailable != _flags.ActiveReviewerTrackingAvailable)"
      ]
    },
    "src/libs/project-management/SyRF.ProjectManagement.Core/Services/ProjectStatistics/Fold/ProjectStatisticsFleetMembershipRenewal.cs": {
      "classification": "startup-or-domain-bound",
      "owner": "Project Management maintainers",
      "scope": "shared library; validate each consuming host",
      "activationBoundary": "Async point fold (FEAT-024) fleet membership, renewed every 30 s by the api and project-management hosts only while the deployment-pinned default-off materializedProjectStatisticsFold flag is on; with it off the pod writes nothing and deletes any record it wrote",
      "reads": [
        "private readonly FeatureFlags _featureFlags;",
        "FeatureFlags featureFlags,",
        "_featureFlags = featureFlags ?? throw new ArgumentNullException(nameof(featureFlags));",
        "if (!_featureFlags.MaterializedProjectStatisticsFold)"
      ]
    },
    "src/libs/project-management/SyRF.ProjectManagement.Core/Services/ProjectStatistics/Fold/ProjectStatisticsFoldAdministration.cs": {
      "classification": "startup-or-domain-bound",
      "owner": "Project Management maintainers",
      "scope": "shared library; validate each consuming host",
      "activationBoundary": "Async point fold (FEAT-024) administrative enable/disable/reset/status behind the administrator-only api/admin/project-statistics/{projectId}/fold routes: enable refuses unless the deployment-pinned default-off materializedProjectStatisticsFold flag is on and the project is allowlisted, then requires the pending index, the fleet declaration with a live fold-worker heartbeat and sufficient coverage, which before slice 6 means the staging pilot only (ProjectStatistics:Fold:AllowPartialCoverage, a positive IsStaging() and a database other than syrftest); no runtime override reaches the coverage rule",
      "reads": [
        "IProjectStatisticsFlagSource flags,",
        "if (!flags.MaterializedFoldRequested)",
        "if (!flags.IsProjectAllowlisted(projectId))",
        "flags.MaterializedFoldRequested, flags.IsProjectAllowlisted(projectId), IsCoverageSufficient(),"
      ]
    },
    "src/libs/project-management/SyRF.ProjectManagement.Core/Services/ProjectStatistics/Fold/ProjectStatisticsFoldWorker.cs": {
      "classification": "startup-or-domain-bound",
      "owner": "Project Management maintainers",
      "scope": "shared library; validate each consuming host",
      "activationBoundary": "Async point fold (FEAT-024) worker; runs only from the PM fold consumer while the deployment-pinned default-off materializedProjectStatisticsFold flag is on, and folds only allowlisted projects with fold history whose control matches this binary's protocol",
      "reads": [
        "private readonly IProjectStatisticsFlagSource _flags;",
        "IProjectStatisticsFlagSource flags,",
        "if (!_flags.IsProjectAllowlisted(projectId)) return ProjectStatisticsFoldRunOutcome.NotAllowlisted;"
      ]
    },
    "src/services/project-management/SyRF.ProjectManagement.Endpoint/Consumers/ProjectStatisticsFoldConsumer.cs": {
      "classification": "startup-or-domain-bound",
      "owner": "Project Management maintainers",
      "scope": "project-management host",
      "activationBoundary": "Async point fold (FEAT-024) fold and sweep consumers acknowledge without work unless the deployment-pinned default-off materializedProjectStatisticsFold flag is on, checked per delivery",
      "reads": [
        "FeatureFlags featureFlags,",
        "if (!featureFlags.MaterializedProjectStatisticsFold) return;",
        "FeatureFlags featureFlags,",
        "if (!featureFlags.MaterializedProjectStatisticsFold) return;"
      ]
    },
    "src/services/project-management/SyRF.ProjectManagement.Endpoint/Services/ProjectStatisticsFoldSchedule.cs": {
      "classification": "startup-or-domain-bound",
      "owner": "Project Management maintainers",
      "scope": "project-management host",
      "activationBoundary": "Async point fold (FEAT-024): the one-minute sweep schedule is registered only when the deployment-pinned default-off materializedProjectStatisticsFold flag is on at startup; the heartbeat renews only while it is on",
      "reads": [
        "IServiceScopeFactory scopes, FeatureFlags featureFlags, ILogger<ProjectStatisticsFoldScheduleService> logger)",
        "if (!featureFlags.MaterializedProjectStatisticsFold) return;",
        "FeatureFlags featureFlags,",
        "if (featureFlags.MaterializedProjectStatisticsFold)"
      ]
    },
    "src/libs/project-management/SyRF.ProjectManagement.Core/Services/ProjectStatistics/Fold/ProjectScreeningFoldSave.cs": {
      "classification": "startup-or-domain-bound",
      "owner": "Project Management maintainers",
      "scope": "shared library; validate each consuming host",
      "activationBoundary": "Async point fold (FEAT-024) slice 2 fold-path screening save, evaluated per request in memory: entered only when statistics writes, the deployment-pinned default-off materializedProjectStatisticsFold flag and the ProjectScreening family are on and the project is allowlisted, then only for a project whose durable control is in fold mode at this binary's protocol; otherwise today's path runs with no added read",
      "reads": [
        "IProjectStatisticsFlagSource flags,",
        "flags.MaterializedWritesRequested",
        "&& flags.MaterializedFoldRequested",
        "&& flags.IsFamilyServingRequested(ProjectStatisticsMetricFamily.ProjectScreening)",
        "&& flags.IsProjectAllowlisted(projectId);"
      ]
    },
    "src/services/api/SyRF.API.Endpoint/Services/ProjectStatisticsFoldSignalCoalescer.cs": {
      "classification": "startup-or-domain-bound",
      "owner": "API maintainers",
      "scope": "api",
      "activationBoundary": "Async point fold (FEAT-024) post-save signal: its publish loop starts only when the deployment-pinned default-off materializedProjectStatisticsFold flag is on at startup; a signal is enqueued only by a confirmed fold-path save",
      "reads": [
        "FeatureFlags featureFlags,",
        "if (!featureFlags.MaterializedProjectStatisticsFold) return;"
      ]
    },
    "src/services/api/SyRF.API.Endpoint/Services/ReviewScreeningFoldTarget.cs": {
      "classification": "startup-or-domain-bound",
      "owner": "API maintainers",
      "scope": "api",
      "activationBoundary": "Async point fold (FEAT-024) writer half of the fold-path screening save; reached only from ProjectScreeningFoldSave for an allowlisted project in fold mode with materializedProjectStatisticsFold on; reads ReviewEligibilityPolicy per attempt exactly as today's screening save does",
      "reads": [
        "FeatureFlags featureFlags,",
        "if (!featureFlags.ReviewEligibilityPolicy && !submission.Reconciliation",
        "if (!featureFlags.ReviewEligibilityPolicy) return new ProjectScreeningFoldAttempt(project);",
        "if (featureFlags.ReviewEligibilityPolicy)"
      ]
    },
    "src/libs/project-management/SyRF.ProjectManagement.Core/Services/BulkStudyUpdate/Atomic/BulkStudyUpdateAdapters.cs": {
      "classification": "startup-or-domain-bound",
      "owner": "Project Management maintainers",
      "scope": "project-management",
      "activationBoundary": "ADR-020 version 2 executor only (reached only for execution version 2 jobs, which the API stamps only with bulkStudyUpdateAtomicApply on); reads reviewEligibilityPolicy to apply the same row rules as version 1",
      "reads": [
        "FeatureFlags featureFlags, ILogger<ProjectBulkStudyUpdateEffects> logger) : IBulkStudyUpdateEffects",
        "public bool ReviewEligibilityPolicy => featureFlags.ReviewEligibilityPolicy;"
      ]
    },
    "src/services/api/SyRF.API.Endpoint/Controllers/StudyController.cs": {
      "classification": "startup-or-domain-bound",
      "owner": "Project Management maintainers",
      "scope": "api",
      "activationBoundary": "ADR-020: bulkStudyUpdateAtomicApply is read once at bulk-update job creation to stamp execution version 2; deployment-only, not runtime-overridable",
      "reads": [
        "IDelegatedWorkAdmissions? delegatedWork = null, FeatureFlags? featureFlags = null) : base(currentUserService)",
        "_featureFlags = featureFlags ?? new FeatureFlags();",
        "private readonly FeatureFlags _featureFlags;",
        "atomic: _featureFlags.BulkStudyUpdateAtomicApply);"
      ]
    },
    "src/libs/project-management/SyRF.ProjectManagement.Core/Services/RiskOfBiasAssessment/RobProcessingService.cs": {
      "classification": "startup-or-domain-bound",
      "owner": "Project Management maintainers",
      "scope": "project-management",
      "activationBoundary": "Application-authority M5b: batchRiskOfBiasAtomicApply is read when a batch RoB run reaches its save; on, the save is all or nothing (RobAtomicApplier); off, results are saved exactly as before; deployment-only, not runtime-overridable",
      "reads": [
        "private readonly FeatureFlags _featureFlags;",
        "FeatureFlags? featureFlags = null)",
        "_featureFlags = featureFlags ?? new FeatureFlags();",
        "if (_featureFlags.BatchRiskOfBiasAtomicApply)"
      ]
    },
    "src/services/project-management/SyRF.ProjectManagement.Endpoint/Services/RobRunRecoveryBackgroundService.cs": {
      "classification": "startup-or-domain-bound",
      "owner": "Project Management maintainers",
      "scope": "project-management",
      "activationBoundary": "Application-authority M5b: batchRiskOfBiasAtomicApply is read once at host start; off, recovery of interrupted all-or-nothing RoB saves never runs and reads nothing; deployment-only, not runtime-overridable",
      "reads": [
        "FeatureFlags featureFlags,",
        "if (!featureFlags.BatchRiskOfBiasAtomicApply) return;"
      ]
    }
  }
}
