configuration: stabilize managed Copilot OTel startup - #336156
Harald Kirschner (digitarald) wants to merge 2 commits into
Conversation
Expose the policy layer through the extension host's internal configuration inspection result so built-in extensions can distinguish managed values from defaults. Fall back to the early core Copilot OTel policy owners when extension policy references have not registered yet.\n\nFixes #336102\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
There was a problem hiding this comment.
Copilot review overview
🟡 Changes recommended
The new extension-host policy inspection test is nested inside another test and therefore is not registered as intended.
Get a fresh assessment by requesting another Copilot review.
Review tier: Balanced (auto)
Findings: 1
Note
Copilot is running an experiment and ran this review at Balanced.
Open findings (1)
What changed in this PR
Exposes managed policy values to extensions and stabilizes Copilot OTel configuration during startup races.
Changes:
- Adds internal
policyValueinspection support. - Falls back to early core OTel policy owners.
- Adds policy precedence tests.
| File | Description |
|---|---|
src/vs/workbench/api/common/extHostConfiguration.ts |
Exposes inspected policy values. |
src/vs/workbench/api/test/browser/extHostConfiguration.test.ts |
Tests policy inspection. |
extensions/copilot/src/platform/otel/common/otelConfig.ts |
Adds policy fallback resolution. |
extensions/copilot/src/platform/otel/common/test/otelConfig.spec.ts |
Tests fallback and precedence. |
extensions/copilot/src/extension/extension/vscode-node/services.ts |
Applies fallback during OTel startup. |
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
blocks-ci screenshots changedReplace the contents of Updated blocks-ci-screenshots.md<!-- auto-generated by CI — do not edit manually -->
#### baseUI/KeyboardFocusedToggle/Dark

#### baseUI/KeyboardFocusedToggle/DarkHighContrast

#### baseUI/KeyboardFocusedToggle/Light

#### baseUI/KeyboardFocusedToggle/LightHighContrast

#### chat/aiCustomizations/aiCustomizationManagementEditor/AgentHostPromptMigration/Dark

#### chat/aiCustomizations/aiCustomizationManagementEditor/AgentHostPromptMigration/Light

#### chat/aiCustomizations/aiCustomizationManagementEditor/AgentsTab/Dark

#### chat/aiCustomizations/aiCustomizationManagementEditor/AgentsTab/Light

#### chat/aiCustomizations/aiCustomizationManagementEditor/AgentsTabNarrow/Dark

#### chat/aiCustomizations/aiCustomizationManagementEditor/AgentsTabNarrow/Light

#### chat/aiCustomizations/aiCustomizationManagementEditor/CodexSkillMissingDescriptionHover/Dark

#### chat/aiCustomizations/aiCustomizationManagementEditor/CodexSkillMissingDescriptionHover/Light

#### chat/aiCustomizations/aiCustomizationManagementEditor/ConfiguredLocationsMigration/Dark

#### chat/aiCustomizations/aiCustomizationManagementEditor/ConfiguredLocationsMigration/Light

#### chat/aiCustomizations/aiCustomizationManagementEditor/EmbeddedMcpDetailUninstalled/Dark

#### chat/aiCustomizations/aiCustomizationManagementEditor/EmbeddedMcpDetailUninstalled/Light

#### chat/aiCustomizations/aiCustomizationManagementEditor/HooksEmptyWorkspace/Dark

#### chat/aiCustomizations/aiCustomizationManagementEditor/HooksEmptyWorkspace/Light

#### chat/aiCustomizations/aiCustomizationManagementEditor/McpMigration/Dark

#### chat/aiCustomizations/aiCustomizationManagementEditor/McpMigration/Light

#### chat/aiCustomizations/aiCustomizationManagementEditor/McpServerDetailNarrow/Dark

#### chat/aiCustomizations/aiCustomizationManagementEditor/McpServerDetailNarrow/Light

#### chat/aiCustomizations/aiCustomizationManagementEditor/McpServersTab/Dark

#### chat/aiCustomizations/aiCustomizationManagementEditor/McpServersTab/Light

#### chat/aiCustomizations/aiCustomizationManagementEditor/MigrationDashboard/Dark

#### chat/aiCustomizations/aiCustomizationManagementEditor/MigrationDashboard/Light

#### chat/aiCustomizations/aiCustomizationManagementEditor/PluginCatalogHome/Dark

#### chat/aiCustomizations/aiCustomizationManagementEditor/PluginCatalogHome/Light

#### chat/aiCustomizations/aiCustomizationManagementEditor/PluginCatalogHomeNarrow/Dark

#### chat/aiCustomizations/aiCustomizationManagementEditor/PluginCatalogHomeNarrow/Light

#### chat/aiCustomizations/aiCustomizationManagementEditor/PluginCatalogSearch/Dark

#### chat/aiCustomizations/aiCustomizationManagementEditor/PluginCatalogSearch/Light

#### chat/aiCustomizations/aiCustomizationManagementEditor/PluginDetail/Dark

#### chat/aiCustomizations/aiCustomizationManagementEditor/PluginDetail/Light

#### chat/aiCustomizations/aiCustomizationManagementEditor/PluginsTab/Dark

#### chat/aiCustomizations/aiCustomizationManagementEditor/PluginsTab/Light

#### chat/aiCustomizations/aiCustomizationManagementEditor/PluginsTabNarrow/Dark

#### chat/aiCustomizations/aiCustomizationManagementEditor/PluginsTabNarrow/Light

#### chat/aiCustomizations/aiCustomizationManagementEditor/PromptMigration/Dark

#### chat/aiCustomizations/aiCustomizationManagementEditor/PromptMigration/Light

#### chat/aiCustomizations/aiCustomizationManagementEditor/SessionsCodexSkillMissingDescriptionHover/Dark

#### chat/aiCustomizations/aiCustomizationManagementEditor/SessionsCodexSkillMissingDescriptionHover/Light

#### chat/aiCustomizations/aiCustomizationManagementEditor/ToolsTab/Dark

#### chat/aiCustomizations/aiCustomizationManagementEditor/ToolsTab/Light

#### chat/aiCustomizations/aiCustomizationManagementEditor/ToolsTabNarrow/Dark

#### chat/aiCustomizations/aiCustomizationManagementEditor/ToolsTabNarrow/Light

#### chat/aiCustomizations/aiCustomizationManagementEditor/UserDataMigration/Dark

#### chat/aiCustomizations/aiCustomizationManagementEditor/UserDataMigration/Light

#### chat/aiCustomizations/aiCustomizationManagementEditor/WelcomePage/Dark

#### chat/aiCustomizations/aiCustomizationManagementEditor/WelcomePage/Light

#### chat/chatPetAccessoryRig/chatPetAccessoryRig/AllAccessoriesFacing/Dark

#### chat/chatPetAccessoryRig/chatPetAccessoryRig/AllAccessoriesFacing/Light

#### chat/chatPetAccessoryRig/chatPetAccessoryRig/AllRuntimeStates/Dark

#### chat/chatPetAccessoryRig/chatPetAccessoryRig/AllRuntimeStates/Light

#### chat/chatPetAccessoryRig/chatPetAccessoryRig/CoveredAntennaeComparison/Dark

#### chat/chatPetAccessoryRig/chatPetAccessoryRig/CoveredAntennaeComparison/Light

#### chat/chatPetAccessoryRig/chatPetAccessoryRig/CriticalPoses/Dark

#### chat/chatPetAccessoryRig/chatPetAccessoryRig/CriticalPoses/Light

#### chat/chatPetAccessoryRig/chatPetAccessoryRig/LiveEyeLayering/Dark

#### chat/chatPetAccessoryRig/chatPetAccessoryRig/LiveEyeLayering/Light

#### chat/chatQuestionCarousel/MarkdownLinks/Dark

#### chat/chatQuestionCarousel/MarkdownLinks/DarkHighContrast

#### chat/chatQuestionCarousel/MarkdownLinks/Light

#### chat/chatQuestionCarousel/MarkdownLinks/LightHighContrast

#### chat/input/chatInput/CompactWithProviderIcon/Dark

#### chat/input/chatInput/CompactWithProviderIcon/Light

#### chat/input/chatInput/CopilotHarnessCompactPickers/Dark

#### chat/input/chatInput/CopilotHarnessCompactPickers/Light

#### chat/petAchievements/standaloneModal/chatPetAchievementsEditor/MixedSelected/Dark

#### chat/petAchievements/standaloneModal/chatPetAchievementsEditor/MixedSelected/Light

#### comments/commentTree/CommentTreeMetadataZoomed/Dark

#### comments/commentTree/CommentTreeMetadataZoomed/DarkHighContrast

#### comments/commentTree/CommentTreeMetadataZoomed/Light

#### comments/commentTree/CommentTreeMetadataZoomed/LightHighContrast

#### editor/codeEditor/CodeEditor/Dark

#### editor/codeEditor/CodeEditor/Light

#### editor/fullwidthCharacterWidth/FullwidthCharacterWidthClassification/Dark

#### editor/fullwidthCharacterWidth/FullwidthCharacterWidthClassification/Light

#### editor/fullwidthCharacterWidth/FullwidthCharacterWidthCode/Dark

#### editor/fullwidthCharacterWidth/FullwidthCharacterWidthCode/Light

#### editor/fullwidthCharacterWidth/FullwidthCharacterWidthFont/Dark

#### editor/fullwidthCharacterWidth/FullwidthCharacterWidthFont/Light

#### editor/fullwidthCharacterWidth/FullwidthCharacterWidthProportionalFont/Dark

#### editor/fullwidthCharacterWidth/FullwidthCharacterWidthProportionalFont/Light

#### editor/fullwidthCharacterWidth/FullwidthCharacterWidthSelection/Dark

#### editor/fullwidthCharacterWidth/FullwidthCharacterWidthSelection/Light

#### editor/fullwidthCharacterWidth/FullwidthCharacterWidthTwoCells/Dark

#### editor/fullwidthCharacterWidth/FullwidthCharacterWidthTwoCells/Light

#### editor/injectedTextDecorations/ColorDecorators/Dark

#### editor/injectedTextDecorations/ColorDecorators/Light

#### editor/injectedTextDecorations/InlayHints/Dark

#### editor/injectedTextDecorations/InlayHints/Light

#### editor/injectedTextDecorations/InlineProgress/Dark

#### editor/injectedTextDecorations/InlineProgress/Light

#### editor/injectedTextDecorations/SelectedColorDecorator/Dark

#### editor/injectedTextDecorations/SelectedColorDecorator/Light

#### editor/inlineChatZoneWidget/InlineChatZoneWidget/Dark

#### editor/inlineChatZoneWidget/InlineChatZoneWidget/Light

#### editor/inlineChatZoneWidget/InlineChatZoneWidgetTerminated/Dark

#### editor/inlineChatZoneWidget/InlineChatZoneWidgetTerminated/Light

#### editor/wordWrapIndicator/WordWrapIndicator/Dark

#### editor/wordWrapIndicator/WordWrapIndicator/DarkHighContrast

#### editor/wordWrapIndicator/WordWrapIndicator/Light

#### editor/wordWrapIndicator/WordWrapIndicatorDisabled/Dark

#### editor/wordWrapIndicator/WordWrapIndicatorDisabled/Light

#### editor/wordWrapIndicator/WordWrapIndicatorFixedColumnBeyondViewport/Dark

#### editor/wordWrapIndicator/WordWrapIndicatorFixedColumnBeyondViewport/Light

#### editor/wordWrapIndicator/WordWrapIndicatorVariableLineHeight/Dark

#### editor/wordWrapIndicator/WordWrapIndicatorVariableLineHeight/Light

#### editor/wordWrapIndicator/WordWrapIndicatorViewportWrapping/Dark

#### editor/wordWrapIndicator/WordWrapIndicatorViewportWrapping/Light

#### sessions/accountMenu/petAchievementBadges/chatPetAchievementBadges/AllBadges/Dark

#### sessions/accountMenu/petAchievementBadges/chatPetAchievementBadges/AllBadges/Light

#### sessions/chat/input/chatInput/ResponsiveModelResizeCycleMinimal/Dark

#### sessions/chat/input/chatInput/ResponsiveModelResizeCycleMinimal/Light

#### sessions/chat/newWidget/newChatWidget/NewSessionAttachedContext/Dark

#### sessions/chat/newWidget/newChatWidget/NewSessionAttachedContext/Light

#### sessions/chat/newWidget/newChatWidget/NewSessionAutoModel/Dark

#### sessions/chat/newWidget/newChatWidget/NewSessionAutoModel/Light

#### sessions/chat/newWidget/newChatWidget/NewSessionChatBackground/Dark

#### sessions/chat/newWidget/newChatWidget/NewSessionChatBackground/Light

#### sessions/chat/newWidget/newChatWidget/NewSessionCompactAutoModel/Dark

#### sessions/chat/newWidget/newChatWidget/NewSessionCompactAutoModel/Light

#### sessions/chat/newWidget/newChatWidget/NewSessionGitHubContextPicker/Dark

#### sessions/chat/newWidget/newChatWidget/NewSessionGitHubContextPicker/Light

#### sessions/chat/newWidget/newChatWidget/NewSessionPhoneAttachedContext/Dark

#### sessions/chat/newWidget/newChatWidget/NewSessionPhoneAttachedContext/Light

#### sessions/chat/newWidget/newChatWidget/NewSessionRemoteWorkspace/Dark

#### sessions/chat/newWidget/newChatWidget/NewSessionRemoteWorkspace/Light

#### sessions/chat/newWidget/newChatWidget/NewSessionWorkspacePicker/Dark

#### sessions/chat/newWidget/newChatWidget/NewSessionWorkspacePicker/Light

#### sessions/chat/view/chatView/AssistantResponseBackground/Dark

#### sessions/chat/view/chatView/AssistantResponseBackground/Light

#### sessions/chat/view/chatView/AssistantResponsePlain/Dark

#### sessions/chat/view/chatView/AssistantResponsePlain/Light

#### sessions/chat/view/chatView/CheckpointControlsBackground/Dark

#### sessions/chat/view/chatView/CheckpointControlsBackground/Light

#### sessions/chat/view/chatView/RequestAttachmentBackground/Dark

#### sessions/chat/view/chatView/RequestAttachmentBackground/Light

#### sessions/sessionsList/SessionsList_AutomationsNewBadge_Accent/Dark

#### sessions/sessionsList/SessionsList_AutomationsNewBadge_Accent/DarkHighContrast

#### sessions/sessionsList/SessionsList_AutomationsNewBadge_Accent/Light

#### sessions/sessionsList/SessionsList_AutomationsNewBadge_Narrow/Dark

#### sessions/sessionsList/SessionsList_AutomationsNewBadge_Narrow/DarkHighContrast

#### sessions/sessionsList/SessionsList_AutomationsNewBadge_Narrow/Light

#### sessions/sessionsList/SessionsList_AutomationsNewBadge_Running/Dark

#### sessions/sessionsList/SessionsList_AutomationsNewBadge_Running/DarkHighContrast

#### sessions/sessionsList/SessionsList_AutomationsNewBadge_Running/Light

#### sessions/sessionsList/SessionsList_AutomationsNewBadge_Soft/Dark

#### sessions/sessionsList/SessionsList_AutomationsNewBadge_Soft/DarkHighContrast

#### sessions/sessionsList/SessionsList_AutomationsNewBadge_Soft/Light

#### sessions/sessionsList/SessionsList_AutomationsNewBadge_Unread/Dark

#### sessions/sessionsList/SessionsList_AutomationsNewBadge_Unread/DarkHighContrast

#### sessions/sessionsList/SessionsList_AutomationsNewBadge_Unread/Light

#### sessions/sessionsList/SessionsList_AutomationsNewBadge/Dark

#### sessions/sessionsList/SessionsList_AutomationsNewBadge/DarkHighContrast

#### sessions/sessionsList/SessionsList_AutomationsNewBadge/Light

#### sessions/sessionsList/SessionsList_LightweightNewButton/Dark

#### sessions/sessionsList/SessionsList_LightweightNewButton/DarkHighContrast

#### sessions/sessionsList/SessionsList_LightweightNewButton/Light

#### sessions/sessionsList/SessionsList_LightweightNewButtonWithKeybindingBackground/Dark

#### sessions/sessionsList/SessionsList_LightweightNewButtonWithKeybindingBackground/DarkHighContrast

#### sessions/sessionsList/SessionsList_LightweightNewButtonWithKeybindingBackground/Light

#### sessions/sessionsList/SessionsList_NarrowHoverToolbar/Dark

#### sessions/sessionsList/SessionsList_NarrowHoverToolbar/Light

#### sessions/sessionsList/SessionsList_NestedChatHierarchyGuides/Dark

#### sessions/sessionsList/SessionsList_NestedChatHierarchyGuides/Light

#### sessions/sessionsList/SessionsList_PeerChatInProgress/Dark

#### sessions/sessionsList/SessionsList_PeerChatInProgress/Light

#### sessions/sessionsList/SessionsList_SelectedKeyboardFocus/Dark

#### sessions/sessionsList/SessionsList_SelectedKeyboardFocus/DarkHighContrast

#### sessions/sessionsList/SessionsList_SelectedKeyboardFocus/Light

#### workbench/activityBarMenu/CompactActivityBarMenu_CompactDensity/Dark

#### workbench/activityBarMenu/CompactActivityBarMenu_CompactDensity/DarkHighContrast

#### workbench/activityBarMenu/CompactActivityBarMenu_CompactDensity/Light

#### workbench/activityBarMenu/CompactActivityBarMenu_DefaultDensity/Dark

#### workbench/activityBarMenu/CompactActivityBarMenu_DefaultDensity/DarkHighContrast

#### workbench/activityBarMenu/CompactActivityBarMenu_DefaultDensity/Light
Patch--- test/componentFixtures/blocks-ci-screenshots.md 2026-09-14 16:07:33.408549886 +0000
+++ /tmp/blocks-ci-updated.md 2026-09-14 16:20:20.858427812 +0000
@@ -343,7 +343,7 @@

#### sessions/chat/input/chatInput/ResponsiveModelResizeCycleMinimal/Light
-
+
#### sessions/chat/newWidget/newChatWidget/NewSessionAttachedContext/Dark
 |
|
Thanks for working on this, Harald Kirschner (@digitarald). Superseded by #336701: policy arriving after initialization can still leave affected sessions without exporting enterprise telemetry until a manual reload. The replacement adds guarded recovery to limit that ongoing data loss. |
To clarify the startup case: construct OTel service → await experimentation’s initial fetch → construct watcher and snapshot settings. If policy arrives during that wait, the settings update but the running service doesn’t. The watcher then snapshots the new values and misses the mismatch, leaving telemetry disabled without a reload prompt. Later arrivals can prompt for reload, but that doesn’t cover this startup gap. #336701 compares against the service’s original configuration and adds guarded recovery. |

Summary
Fixes #336102
Validation
Uplift notes
The patch is limited to the extension-host inspection boundary and Copilot OTel configuration snapshot. It does not change public vscode.d.ts API or dependency manifests. Pre-existing legacy runtime forwarding limitations for managed header secrets remain out of scope.