From 4cbcf2b9743a99681dce25047bc330aced7002b9 Mon Sep 17 00:00:00 2001 From: ScriptedAlchemy Date: Wed, 30 Sep 2026 01:27:16 +0000 Subject: [PATCH] fix(config): report uncompilable stored index patterns as findings Releases through v1.0.0-beta.63 stored index.exclude.v1 and index.include.v1 patterns without compiling them. The runtime pin dropped such a pattern behind a process-deduplicated tracing::warn!, so a broken exclude silently widened what gets indexed. A stored pattern that does not compile is now a typed setting finding. ConfigurationGet returns it in ResolvedSetting.findings with the pattern, the compiler message and the legal actions (set, unset), and `tracedecay doctor` reports it as an issue naming the key and its repair. The pin keeps applying the remaining patterns: the configuration control plane is built on the same pin, so refusing it would also refuse the set/unset that repairs it. New writes of such a pattern stay refused. The WARNED set is deleted. --- .../src/config/mod.rs | 86 ++++++++------ .../src/configuration/operations.rs | 2 + .../tracedecay-contracts/src/configuration.rs | 25 ++++ crates/tracedecay-contracts/src/lib.rs | 10 +- .../src/invocation/configuration/profile.rs | 2 + .../src/configuration/registry.rs | 4 +- crates/tracedecay-project/src/config/tests.rs | 107 +++++++++++++++++- crates/tracedecay/src/doctor.rs | 71 ++++++++++-- sdks/typescript/src/operations.ts | 8 +- 9 files changed, 258 insertions(+), 57 deletions(-) diff --git a/crates/tracedecay-configuration/src/config/mod.rs b/crates/tracedecay-configuration/src/config/mod.rs index 30520699b4..a110976bf6 100644 --- a/crates/tracedecay-configuration/src/config/mod.rs +++ b/crates/tracedecay-configuration/src/config/mod.rs @@ -13,10 +13,10 @@ pub mod work_executable_binding; pub use tracedecay_global_db::configuration::{registry, resolver}; -use std::collections::HashSet; use std::path::{Path, PathBuf}; -use std::sync::{Arc, Mutex, OnceLock}; +use std::sync::{Arc, OnceLock}; +use tracedecay_contracts::{ConfigurationSettingActionV1, ConfigurationSettingFindingV1}; use tracedecay_domain::configuration::{ ConfigurationRevisionId, ConfigurationSnapshotV1, ConfigurationValueV1, DIAGNOSTICS_PREWARM_SETTING_KEY, INDEX_EXCLUDE_SETTING_KEY, @@ -256,8 +256,8 @@ fn runtime_config_from_snapshot( })?; Ok(RuntimeTraceDecayConfig { index_paths: IndexPathPolicyV1::new( - compilable_index_patterns(snapshot, INDEX_EXCLUDE_SETTING_KEY)?, - compilable_index_patterns(snapshot, INDEX_INCLUDE_SETTING_KEY)?, + applied_index_patterns(snapshot, INDEX_EXCLUDE_SETTING_KEY)?, + applied_index_patterns(snapshot, INDEX_INCLUDE_SETTING_KEY)?, ) .map_err(|error| config_error(format!("resolved index path policy is invalid: {error}")))?, max_file_size: required_unsigned(snapshot, INDEX_MAX_FILE_SIZE_SETTING_KEY)?, @@ -377,40 +377,58 @@ pub fn required_string_list( } } -/// The stored index path patterns that still compile. A new write is refused -/// up front, but an earlier release persisted patterns it never compiled, so -/// one that no longer compiles is skipped with a warning instead of failing -/// the whole runtime configuration and with it every tool. +/// Splits a stored index path pattern list into the patterns indexing +/// applies and a finding for each one that does not compile. /// -/// The pin is rebuilt on every `current()` read, so the warning is logged -/// once per setting and pattern for the process, not once per tool call. -fn compilable_index_patterns( +/// Writes refuse such a pattern, but an earlier release stored patterns it +/// never compiled. Refusing the whole pin would also refuse the `set` and +/// `unset` that repair it, so the pin applies the rest and +/// [`setting_findings`] reports each skipped pattern. +fn partition_index_patterns( + patterns: Vec, +) -> (Vec, Vec) { + let mut applied = Vec::with_capacity(patterns.len()); + let mut findings = Vec::new(); + for pattern in patterns { + match validate_index_path_patterns(std::slice::from_ref(&pattern)) { + Ok(()) => applied.push(pattern), + Err(error) => findings.push(ConfigurationSettingFindingV1::InvalidIndexPathPattern { + pattern, + message: error.message, + legal_actions: vec![ + ConfigurationSettingActionV1::Set, + ConfigurationSettingActionV1::Unset, + ], + }), + } + } + (applied, findings) +} + +fn applied_index_patterns( snapshot: &ConfigurationSnapshotV1, key_name: &str, ) -> Result> { - static WARNED: OnceLock>> = OnceLock::new(); - let mut patterns = required_string_list(snapshot, key_name)?; - patterns.retain( - |pattern| match validate_index_path_patterns(std::slice::from_ref(pattern)) { - Ok(()) => true, - Err(error) => { - let first = WARNED - .get_or_init(Mutex::default) - .lock() - .unwrap_or_else(std::sync::PoisonError::into_inner) - .insert((key_name.to_owned(), pattern.clone())); - if first { - tracing::warn!( - setting = key_name, - %error, - "skipping a stored index path pattern that no longer compiles" - ); - } - false - } - }, - ); - Ok(patterns) + Ok(partition_index_patterns(required_string_list(snapshot, key_name)?).0) +} + +/// The parts of a stored `value` for `key` that the runtime configuration +/// does not apply. +pub fn setting_findings( + key: &SettingKey, + value: &ConfigurationValueV1, +) -> Vec { + match value { + ConfigurationValueV1::StringList(patterns) + if matches!( + key.as_str(), + INDEX_EXCLUDE_SETTING_KEY | INDEX_INCLUDE_SETTING_KEY + ) => + { + partition_index_patterns(patterns.clone()).1 + } + _ => Vec::new(), + } } fn required_lcm_summarizer_executables( diff --git a/crates/tracedecay-configuration/src/configuration/operations.rs b/crates/tracedecay-configuration/src/configuration/operations.rs index 24b233fc02..7c478da49b 100644 --- a/crates/tracedecay-configuration/src/configuration/operations.rs +++ b/crates/tracedecay-configuration/src/configuration/operations.rs @@ -12,6 +12,7 @@ use crate::config::registry::ConfigurationRegistry; use crate::config::scope_control::{ ProtectedChangePlanDraftV1, plan_protected_change, validate_apply_binding, }; +use crate::config::setting_findings; use tracedecay_global_db::configuration::contracts::ports::{ ConfigurationControlStore, ConfigurationMutationAuthorizationPort, ConfigurationOperationFuture, CurrentConfigurationMutationAuthorizationV1, ScopeResolutionPort, @@ -163,6 +164,7 @@ where .cloned() .unwrap_or_else(|| definition.default_value.clone()); Ok(ResolvedSetting { + findings: setting_findings(&key, &effective_value), key: key.clone(), effective_value, revision_id: current.revision_id, diff --git a/crates/tracedecay-contracts/src/configuration.rs b/crates/tracedecay-contracts/src/configuration.rs index 5d32329135..d7c1298b0d 100644 --- a/crates/tracedecay-contracts/src/configuration.rs +++ b/crates/tracedecay-contracts/src/configuration.rs @@ -147,6 +147,31 @@ pub struct ResolvedSetting { pub effective_behavior_digest: ManifestDigest, pub resolution_provenance_digest: ManifestDigest, pub candidates: Vec, + /// Parts of the stored value this release does not apply. Empty when the + /// effective value applies in full. + pub findings: Vec, +} + +/// A stored value the running release keeps but does not apply. The value +/// stays readable so `legal_actions` on the same key can replace it. +#[derive(Clone, Debug, Serialize, Deserialize, JsonSchema, PartialEq, Eq)] +#[serde(tag = "kind", rename_all = "snake_case", deny_unknown_fields)] +pub enum ConfigurationSettingFindingV1 { + /// An `index.exclude.v1` / `index.include.v1` pattern that does not + /// compile. An earlier release stored it unchecked; indexing runs + /// without it. + InvalidIndexPathPattern { + pattern: String, + message: String, + legal_actions: Vec, + }, +} + +#[derive(Clone, Copy, Debug, Serialize, Deserialize, JsonSchema, PartialEq, Eq)] +#[serde(rename_all = "snake_case")] +pub enum ConfigurationSettingActionV1 { + Set, + Unset, } #[derive(Clone, Copy, Debug, Serialize, Deserialize, JsonSchema, PartialEq, Eq)] diff --git a/crates/tracedecay-contracts/src/lib.rs b/crates/tracedecay-contracts/src/lib.rs index 7294288a8a..bb59fe8390 100644 --- a/crates/tracedecay-contracts/src/lib.rs +++ b/crates/tracedecay-contracts/src/lib.rs @@ -127,11 +127,11 @@ pub use configuration::{ ConfigurationGetRequestV1, ConfigurationListRequestV1, ConfigurationMutationReceipt, ConfigurationObservedStateRequestV1, ConfigurationProtectedApplyRequestV1, ConfigurationProtectedPreviewRequestV1, ConfigurationRollbackPreviewRequestV1, - ConfigurationSetRequestV1, ConfigurationUnsetRequestV1, ConfigurationWireRequestV1, - ResolvedSetting, SettingSummary, configuration_surface_catalog_contribution, - configuration_surface_handler_descriptors, configuration_surface_operation, - configuration_surface_request_schema, configuration_surface_result_schema, - configuration_wire_request_from_invocation_payload, + ConfigurationSetRequestV1, ConfigurationSettingActionV1, ConfigurationSettingFindingV1, + ConfigurationUnsetRequestV1, ConfigurationWireRequestV1, ResolvedSetting, SettingSummary, + configuration_surface_catalog_contribution, configuration_surface_handler_descriptors, + configuration_surface_operation, configuration_surface_request_schema, + configuration_surface_result_schema, configuration_wire_request_from_invocation_payload, }; pub use context::{ APPLICATION_REQUEST_ID_HEADER, ApplicationRequestControlV1, CancellationContext, diff --git a/crates/tracedecay-daemon-service/src/invocation/configuration/profile.rs b/crates/tracedecay-daemon-service/src/invocation/configuration/profile.rs index 4eced7b9cb..d71aa731d4 100644 --- a/crates/tracedecay-daemon-service/src/invocation/configuration/profile.rs +++ b/crates/tracedecay-daemon-service/src/invocation/configuration/profile.rs @@ -2,6 +2,7 @@ //! profile's own `ProfileSessions` store owns. No project is opened or named. use super::*; +use tracedecay_configuration::config::setting_findings; use tracedecay_domain::configuration::{ ConfigurationLayerIdV1, SettingKey, USER_CODE_INDEX_WORKERS_SETTING_KEY, UserProfileId, }; @@ -116,6 +117,7 @@ async fn profile_configuration_outcome( .cloned() .ok_or(ConfigurationError::Unavailable)?; let setting = ResolvedSetting { + findings: setting_findings(&request.key, &effective_value), candidates: current .snapshot .provenance diff --git a/crates/tracedecay-global-db/src/configuration/registry.rs b/crates/tracedecay-global-db/src/configuration/registry.rs index f0e1890f04..a929541952 100644 --- a/crates/tracedecay-global-db/src/configuration/registry.rs +++ b/crates/tracedecay-global-db/src/configuration/registry.rs @@ -333,8 +333,8 @@ impl ConfigurationRegistry { /// Stored snapshots are revalidated with `validate_value` on every read, /// so a rule that may tighten across releases must not live there: an /// `index.exclude.v1` pattern an earlier release accepted has to keep - /// loading (the runtime skips what no longer compiles) while a new - /// write of it is refused. + /// loading (the runtime pin leaves it unapplied and reports it as a + /// setting finding) while a new write of it is refused. pub fn validate_written_value( &self, key: &SettingKey, diff --git a/crates/tracedecay-project/src/config/tests.rs b/crates/tracedecay-project/src/config/tests.rs index b6cd21d743..4d86188df0 100644 --- a/crates/tracedecay-project/src/config/tests.rs +++ b/crates/tracedecay-project/src/config/tests.rs @@ -227,9 +227,9 @@ mod runtime_configuration_cutover { ConfigurationIdempotencyKey, ConfigurationLayerIdV1, ConfigurationMutationEffectV1, ConfigurationMutationGrantReceiptV1, ConfigurationMutationOperationV1, ConfigurationMutationSinkV1, ConfigurationRevisionId, ConfigurationValueV1, - DIAGNOSTICS_PREWARM_SETTING_KEY, INDEX_NATIVE_GRAPH_ACTIVATION_SETTING_KEY, - SOURCE_BINDINGS_SETTING_KEY, SYNC_AUTO_WATCH_SETTING_KEY, ScopeSourceBinding, SettingKey, - SourceBindingId, SourceKindV1, + DIAGNOSTICS_PREWARM_SETTING_KEY, INDEX_EXCLUDE_SETTING_KEY, + INDEX_NATIVE_GRAPH_ACTIVATION_SETTING_KEY, SOURCE_BINDINGS_SETTING_KEY, + SYNC_AUTO_WATCH_SETTING_KEY, ScopeSourceBinding, SettingKey, SourceBindingId, SourceKindV1, }; use tracedecay_domain::{AccessPolicyDigest, ActorId, ProjectId, UtcMicros}; @@ -244,6 +244,8 @@ mod runtime_configuration_cutover { use tracedecay_configuration::ProjectConfigurationRuntime; use tracedecay_configuration::SyncConfig; use tracedecay_configuration::config::PinnedRuntimeConfiguration; + use tracedecay_global_db::configuration::GlobalDbConfigurationControlStore; + use tracedecay_global_db::configuration::contracts::types::AuthorizedActor; use tracedecay_global_db::configuration::contracts::{ ConfigurationControlStore, ConfigurationMutationAuthority, DirectConfigurationMutation, }; @@ -504,6 +506,105 @@ mod runtime_configuration_cutover { assert_eq!(runtime.configuration_target(), current.target()); } + /// A release before write-time pattern checks stored `index.exclude.v1` + /// patterns it never compiled. Opening such a store keeps the + /// configuration, and so its repair, available; the stored pattern is left + /// unapplied and `get` names it with the actions that clear it. + #[tokio::test] + async fn a_stored_uncompilable_index_pattern_is_a_typed_setting_finding() { + let profile = TempDir::new().expect("temporary profile root"); + let root = TempDir::new().expect("temporary project root"); + let project_id = project_id("project.configuration-uncompilable-exclude"); + tracedecay_runtime_core::storage::pin_fixture_repository_identity( + root.path(), + project_id.as_str(), + ) + .expect("write enrollment marker"); + let layout = tracedecay_runtime_core::storage::resolve_layout(root.path(), profile.path()) + .expect("resolve store layout"); + std::fs::create_dir_all(&layout.data_root).expect("create data root"); + let host_runtime = + HostAdmissionTestRuntimeV1::project(profile.path(), root.path(), project_id.clone()) + .await + .expect("open retained project runtime"); + let database = host_runtime + .registered_database_arc(tracedecay_sessions::admission::HostAdmissionScope::Project) + .expect("bind registered project database"); + crate::config::install_usecase_runtime_configuration_authority() + .expect("install the root runtime configuration read ports"); + + let target = crate::config::runtime_configuration_target_for_layout(root.path(), &layout) + .expect("configuration target"); + let exclude = SettingKey::new(INDEX_EXCLUDE_SETTING_KEY).unwrap(); + let revision = revision_id("configuration.revision.unchecked-exclude"); + let stored = resolve_configuration( + &ConfigurationRegistry::core().unwrap(), + &[ConfigurationLayerV1 { + layer: ConfigurationLayerIdV1::Project { + project_id: project_id.clone(), + }, + revision_id: revision.clone(), + entries: BTreeMap::from([ + ( + SettingKey::new(SOURCE_BINDINGS_SETTING_KEY).unwrap(), + ConfigurationValueV1::SourceBindings(vec![ + crate::config::daemon_project_source_binding(&target).unwrap(), + ]), + ), + ( + exclude.clone(), + ConfigurationValueV1::StringList(vec![ + "src/[abc".to_owned(), + "docs/**".to_owned(), + ]), + ), + ]), + }], + ) + .expect("read-time validation admits the stored pattern"); + GlobalDbConfigurationControlStore::new_registered(database.as_ref()) + .initialize_canonical(&revision, &stored, UtcMicros(1)) + .await + .expect("seed the store as the earlier release left it"); + + let (_, opened) = crate::config::open_runtime_configuration_for_registered_database( + root.path(), + &layout, + database, + ) + .await + .expect("an unapplied pattern must not refuse the configuration") + .into_parts(); + let (runtime, pinned) = + ProjectConfigurationRuntime::open(opened).expect("open project configuration runtime"); + assert_eq!(pinned.config().index_paths.exclude_patterns(), ["docs/**"]); + + let setting = runtime + .client() + .get( + AuthorizedActor { + actor_id: ActorId::new("actor.configuration-uncompilable-exclude").unwrap(), + }, + exclude, + ) + .await + .expect("the stored setting stays readable"); + let setting = serde_json::to_value(setting).unwrap(); + assert_eq!( + setting["effective_value"], + serde_json::json!({"kind": "string_list", "value": ["src/[abc", "docs/**"]}) + ); + assert_eq!( + setting["findings"], + serde_json::json!([{ + "kind": "invalid_index_path_pattern", + "pattern": "src/[abc", + "message": "unclosed character class; missing ']'", + "legal_actions": ["set", "unset"], + }]) + ); + } + /// One real journey over the production read surfaces: open (as the /// lifecycle does), cached reads through the root cache, the lower cache /// port, and the dashboard read port, a committed configuration change diff --git a/crates/tracedecay/src/doctor.rs b/crates/tracedecay/src/doctor.rs index 18b1a97036..ddab03252f 100644 --- a/crates/tracedecay/src/doctor.rs +++ b/crates/tracedecay/src/doctor.rs @@ -11,9 +11,10 @@ use tracedecay_contracts::project_open::{ use tracedecay_contracts::storage::{ SchemaConvergenceFindingV1, SchemaConvergenceProgressV1, SchemaConvergenceStateV1, }; -use tracedecay_contracts::{ApplicationOutcome, ResolvedSetting}; +use tracedecay_contracts::{ApplicationOutcome, ConfigurationSettingFindingV1, ResolvedSetting}; use tracedecay_domain::configuration::{ - ConfigurationValueV1, SettingKey, USER_UPLOAD_ENABLED_SETTING_KEY, + ConfigurationValueV1, INDEX_EXCLUDE_SETTING_KEY, INDEX_INCLUDE_SETTING_KEY, SettingKey, + USER_UPLOAD_ENABLED_SETTING_KEY, }; use tracedecay_tool_catalog::{ApplicationSurfaceOperation, BindingSurface}; @@ -159,6 +160,9 @@ pub async fn run_doctor( .as_ref() .and_then(|status| status.as_ref().ok()) .and_then(Option::as_ref); + if daemon_status.is_some() { + check_project_index_paths(&mut dc, profile, &project_path).await; + } check_watcher(&mut dc, profile); let upload_enabled = if daemon_listening { configured_upload_enabled(profile) @@ -1199,8 +1203,53 @@ fn check_automation_effect_resets( async fn configured_upload_enabled( profile: &tracedecay_runtime_core::config::ProfileRoot, ) -> tracedecay_domain::errors::Result { + // The setting belongs to the profile: the request names no project. + let setting = configured_setting(profile, None, USER_UPLOAD_ENABLED_SETTING_KEY).await?; + match setting.effective_value { + ConfigurationValueV1::Boolean(enabled) => Ok(enabled), + _ => Err(tracedecay_domain::errors::TraceDecayError::Config { + message: "worldwide counter upload setting is not boolean".to_owned(), + }), + } +} + +/// Reports every stored index path pattern the project's runtime +/// configuration leaves unapplied, with the command that repairs it. +#[hotpath::measure(label = "doctor.config.index_paths", future = true)] +async fn check_project_index_paths( + dc: &mut DoctorCounters, + profile: &tracedecay_runtime_core::config::ProfileRoot, + project_path: &Path, +) { + for key in [INDEX_EXCLUDE_SETTING_KEY, INDEX_INCLUDE_SETTING_KEY] { + match configured_setting(profile, Some(project_path), key).await { + Ok(setting) => { + for finding in setting.findings { + match finding { + ConfigurationSettingFindingV1::InvalidIndexPathPattern { + pattern, + message, + .. + } => dc.fail(&format!( + "{key} stores pattern {pattern:?} that does not compile ({message}); \ + indexing runs without it. Set {key} to patterns that compile or \ + unset it (tracedecay_configuration_set / tracedecay_configuration_unset)" + )), + } + } + } + Err(error) => dc.fail(&format!("{key} could not be read: {error}")), + } + } +} + +async fn configured_setting( + profile: &tracedecay_runtime_core::config::ProfileRoot, + project_path: Option<&Path>, + key: &str, +) -> tracedecay_domain::errors::Result { let operation = ApplicationSurfaceOperation::ConfigurationGet; - let key = SettingKey::new(USER_UPLOAD_ENABLED_SETTING_KEY).map_err(|error| { + let key = SettingKey::new(key).map_err(|error| { tracedecay_domain::errors::TraceDecayError::Config { message: error.to_string(), } @@ -1211,8 +1260,13 @@ async fn configured_upload_enabled( message: format!("could not create Doctor configuration request: {error}"), } })?; - // The setting belongs to the profile: the request names no project. - let handshake = crate::daemon::handshake_for_current_client(profile, None, None, false, false)?; + let handshake = crate::daemon::handshake_for_current_client( + profile, + project_path.map(Path::to_path_buf), + None, + false, + false, + )?; let client = crate::daemon::invocation_client_for_current(profile, handshake)?; let dispatched = resolve_application_surface_dispatch( BindingSurface::Cli, @@ -1257,12 +1311,7 @@ async fn configured_upload_enabled( message: "configuration get returned the wrong setting".to_owned(), }); } - match setting.effective_value { - ConfigurationValueV1::Boolean(enabled) => Ok(enabled), - _ => Err(tracedecay_domain::errors::TraceDecayError::Config { - message: "worldwide counter upload setting is not boolean".to_owned(), - }), - } + Ok(setting) } /// The worldwide-counter upload setting as the profile's configuration owner diff --git a/sdks/typescript/src/operations.ts b/sdks/typescript/src/operations.ts index f287b23091..68b3539923 100644 --- a/sdks/typescript/src/operations.ts +++ b/sdks/typescript/src/operations.ts @@ -240,6 +240,8 @@ export type ConfigurationIdempotencyKey = string; export type ConfigurationLayerIdV1 = { readonly kind: "default"; readonly [key: string]: unknown } | { readonly kind: "user_profile"; readonly profile_id: UserProfileId; readonly [key: string]: unknown } | { readonly kind: "project"; readonly project_id: ProjectId; readonly [key: string]: unknown } | { readonly collection_id: QueryCollectionId; readonly kind: "collection"; readonly [key: string]: unknown }; export type ConfigurationReceiptId = string; export type ConfigurationRevisionId = string; +export type ConfigurationSettingActionV1 = "set" | "unset"; +export type ConfigurationSettingFindingV1 = { readonly kind: "invalid_index_path_pattern"; readonly legal_actions: readonly ConfigurationSettingActionV1[]; readonly message: string; readonly pattern: string }; export type ConfigurationSettlementAuthorityV1 = { readonly policy_digest: AccessPolicyDigest; readonly policy_epoch: number; readonly revalidated_at: UtcMicros }; export type ConfigurationSnapshotId = string; export type ConfigurationValueV1 = { readonly kind: "boolean"; readonly value: boolean; readonly [key: string]: unknown } | { readonly kind: "unsigned"; readonly value: number; readonly [key: string]: unknown } | { readonly kind: "code_index_worker_selection"; readonly value: CodeIndexWorkerSelectionV1; readonly [key: string]: unknown } | { readonly kind: "text"; readonly value: string; readonly [key: string]: unknown } | { readonly kind: "string_list"; readonly value: readonly string[]; readonly [key: string]: unknown } | { readonly kind: "source_bindings"; readonly value: readonly ScopeSourceBinding[]; readonly [key: string]: unknown } | { readonly kind: "access_rules"; readonly value: readonly ScopeAccessRule[]; readonly [key: string]: unknown } | { readonly kind: "analyzer_settings"; readonly value: AnalyzerSettingsV1; readonly [key: string]: unknown } | { readonly kind: "work_topology_policy"; readonly value: WorkTopologyPolicyV1; readonly [key: string]: unknown } | { readonly kind: "work_executable_bindings"; readonly value: readonly WorkExecutableBindingV1[]; readonly [key: string]: unknown } | { readonly kind: "work_expertise_consent"; readonly value: WorkExpertiseConsentV1; readonly [key: string]: unknown } | { readonly kind: "context_scout_settings"; readonly value: ContextScoutSettingsV1; readonly [key: string]: unknown } | { readonly kind: "automation_settings"; readonly value: AutomationSettingsV1; readonly [key: string]: unknown } | { readonly kind: "lcm_summarizer_executables"; readonly value: LcmSummarizerExecutablesV1; readonly [key: string]: unknown }; @@ -1356,7 +1358,7 @@ export type OperationApplicationConfigurationAuditResult = { readonly events: re export type OperationApplicationConfigurationBatchRequest = { readonly expected_revision: ConfigurationRevisionId; readonly idempotency_key: ConfigurationIdempotencyKey; readonly mutations: readonly ConfigurationDirectMutationRequestV1[] }; export type OperationApplicationConfigurationBatchResult = { readonly base_revision_id: ConfigurationRevisionId; readonly created_at: UtcMicros; readonly effective_deadline_at: UtcMicros; readonly operation_digest: ManifestDigest; readonly receipt_id: ConfigurationReceiptId; readonly result_revision_id: ConfigurationRevisionId; readonly settlement_authority: ConfigurationSettlementAuthorityV1; readonly snapshot_id: ConfigurationSnapshotId; readonly [key: string]: unknown }; export type OperationApplicationConfigurationGetRequest = { readonly key: SettingKey }; -export type OperationApplicationConfigurationGetResult = { readonly candidates: readonly ConfigurationCandidateV1[]; readonly effective_behavior_digest: ManifestDigest; readonly effective_value: ConfigurationValueV1; readonly key: SettingKey; readonly resolution_provenance_digest: ManifestDigest; readonly revision_id: ConfigurationRevisionId; readonly snapshot_id: ConfigurationSnapshotId; readonly [key: string]: unknown }; +export type OperationApplicationConfigurationGetResult = { readonly candidates: readonly ConfigurationCandidateV1[]; readonly effective_behavior_digest: ManifestDigest; readonly effective_value: ConfigurationValueV1; readonly findings: readonly ConfigurationSettingFindingV1[]; readonly key: SettingKey; readonly resolution_provenance_digest: ManifestDigest; readonly revision_id: ConfigurationRevisionId; readonly snapshot_id: ConfigurationSnapshotId; readonly [key: string]: unknown }; export type OperationApplicationConfigurationListRequest = { }; export type OperationApplicationConfigurationListResult = readonly SettingSummary[]; export type OperationApplicationConfigurationObservedStateRequest = { }; @@ -1967,6 +1969,8 @@ const DEFINITIONS = { ConfigurationLayerIdV1: {"description":"A typed configuration layer identity. The default layer intentionally has\nno caller-controlled identifier.","oneOf":[{"properties":{"kind":{"const":"default","type":"string"}},"required":["kind"],"type":"object"},{"properties":{"kind":{"const":"user_profile","type":"string"},"profile_id":{"$ref":"#/$defs/UserProfileId"}},"required":["kind","profile_id"],"type":"object"},{"properties":{"kind":{"const":"project","type":"string"},"project_id":{"$ref":"#/$defs/ProjectId"}},"required":["kind","project_id"],"type":"object"},{"properties":{"collection_id":{"$ref":"#/$defs/QueryCollectionId"},"kind":{"const":"collection","type":"string"}},"required":["kind","collection_id"],"type":"object"}]}, ConfigurationReceiptId: {"description":"Strongly typed canonical identity: `ConfigurationReceiptId`.","type":"string"}, ConfigurationRevisionId: {"description":"Strongly typed canonical identity: `ConfigurationRevisionId`.","type":"string"}, + ConfigurationSettingActionV1: {"enum":["set","unset"],"type":"string"}, + ConfigurationSettingFindingV1: {"description":"A stored value the running release keeps but does not apply. The value\nstays readable so `legal_actions` on the same key can replace it.","oneOf":[{"additionalProperties":false,"description":"An `index.exclude.v1` / `index.include.v1` pattern that does not\ncompile. An earlier release stored it unchecked; indexing runs\nwithout it.","properties":{"kind":{"const":"invalid_index_path_pattern","type":"string"},"legal_actions":{"items":{"$ref":"#/$defs/ConfigurationSettingActionV1"},"type":"array"},"message":{"type":"string"},"pattern":{"type":"string"}},"required":["kind","pattern","message","legal_actions"],"type":"object"}]}, ConfigurationSettlementAuthorityV1: {"additionalProperties":false,"description":"Original authorization evidence pinned to a durable configuration effect.\nA retry reauthorizes access separately without replacing these fields.","properties":{"policy_digest":{"$ref":"#/$defs/AccessPolicyDigest"},"policy_epoch":{"format":"uint64","minimum":0,"type":"integer"},"revalidated_at":{"$ref":"#/$defs/UtcMicros"}},"required":["policy_epoch","policy_digest","revalidated_at"],"type":"object"}, ConfigurationSnapshotId: {"description":"Strongly typed canonical identity: `ConfigurationSnapshotId`.","type":"string"}, ConfigurationValueV1: {"description":"Values that the typed registry can accept.","oneOf":[{"properties":{"kind":{"const":"boolean","type":"string"},"value":{"type":"boolean"}},"required":["kind","value"],"type":"object"},{"properties":{"kind":{"const":"unsigned","type":"string"},"value":{"format":"uint64","minimum":0,"type":"integer"}},"required":["kind","value"],"type":"object"},{"properties":{"kind":{"const":"code_index_worker_selection","type":"string"},"value":{"$ref":"#/$defs/CodeIndexWorkerSelectionV1"}},"required":["kind","value"],"type":"object"},{"properties":{"kind":{"const":"text","type":"string"},"value":{"type":"string"}},"required":["kind","value"],"type":"object"},{"properties":{"kind":{"const":"string_list","type":"string"},"value":{"items":{"type":"string"},"type":"array"}},"required":["kind","value"],"type":"object"},{"properties":{"kind":{"const":"source_bindings","type":"string"},"value":{"items":{"$ref":"#/$defs/ScopeSourceBinding"},"type":"array"}},"required":["kind","value"],"type":"object"},{"properties":{"kind":{"const":"access_rules","type":"string"},"value":{"items":{"$ref":"#/$defs/ScopeAccessRule"},"type":"array"}},"required":["kind","value"],"type":"object"},{"properties":{"kind":{"const":"analyzer_settings","type":"string"},"value":{"$ref":"#/$defs/AnalyzerSettingsV1"}},"required":["kind","value"],"type":"object"},{"properties":{"kind":{"const":"work_topology_policy","type":"string"},"value":{"$ref":"#/$defs/WorkTopologyPolicyV1"}},"required":["kind","value"],"type":"object"},{"properties":{"kind":{"const":"work_executable_bindings","type":"string"},"value":{"items":{"$ref":"#/$defs/WorkExecutableBindingV1"},"type":"array"}},"required":["kind","value"],"type":"object"},{"properties":{"kind":{"const":"work_expertise_consent","type":"string"},"value":{"$ref":"#/$defs/WorkExpertiseConsentV1"}},"required":["kind","value"],"type":"object"},{"properties":{"kind":{"const":"context_scout_settings","type":"string"},"value":{"$ref":"#/$defs/ContextScoutSettingsV1"}},"required":["kind","value"],"type":"object"},{"properties":{"kind":{"const":"automation_settings","type":"string"},"value":{"$ref":"#/$defs/AutomationSettingsV1"}},"required":["kind","value"],"type":"object"},{"properties":{"kind":{"const":"lcm_summarizer_executables","type":"string"},"value":{"$ref":"#/$defs/LcmSummarizerExecutablesV1"}},"required":["kind","value"],"type":"object"}]}, @@ -3077,7 +3081,7 @@ const SCHEMAS: readonly CanonicalJsonSchema[] = [ {"$defs":{"AccessRuleId":DEFINITIONS.AccessRuleId,"ActorId":DEFINITIONS.ActorId,"AnalyzerEnvironmentVariable":DEFINITIONS.AnalyzerEnvironmentVariable,"AnalyzerExecutableId":DEFINITIONS.AnalyzerExecutableId,"AnalyzerExecutableReferenceV1":DEFINITIONS.AnalyzerExecutableReferenceV1,"AnalyzerLanguageId":DEFINITIONS.AnalyzerLanguageId,"AnalyzerLanguageSelectionV1":DEFINITIONS.AnalyzerLanguageSelectionV1,"AnalyzerPrivacyClassV1":DEFINITIONS.AnalyzerPrivacyClassV1,"AnalyzerResourceLimitsV1":DEFINITIONS.AnalyzerResourceLimitsV1,"AnalyzerRestartPolicyV1":DEFINITIONS.AnalyzerRestartPolicyV1,"AnalyzerSettingsV1":DEFINITIONS.AnalyzerSettingsV1,"AnalyzerStructuredValueV1":DEFINITIONS.AnalyzerStructuredValueV1,"AuthorityRef":DEFINITIONS.AuthorityRef,"AutomaticWorktreeGcV1":DEFINITIONS.AutomaticWorktreeGcV1,"AutomationBackendV1":DEFINITIONS.AutomationBackendV1,"AutomationHostModeV1":DEFINITIONS.AutomationHostModeV1,"AutomationSettingsV1":DEFINITIONS.AutomationSettingsV1,"AutomationTaskSetV1":DEFINITIONS.AutomationTaskSetV1,"AutomationTaskSettingsV1":DEFINITIONS.AutomationTaskSettingsV1,"BranchCollisionPolicyV1":DEFINITIONS.BranchCollisionPolicyV1,"BranchNameComponentV1":DEFINITIONS.BranchNameComponentV1,"BranchNameSeparatorV1":DEFINITIONS.BranchNameSeparatorV1,"BranchNamingPolicyV1":DEFINITIONS.BranchNamingPolicyV1,"BranchTopologyKindV1":DEFINITIONS.BranchTopologyKindV1,"BranchTopologyPolicyV1":DEFINITIONS.BranchTopologyPolicyV1,"CanonicalGitRefNameV1":DEFINITIONS.CanonicalGitRefNameV1,"CanonicalGitRefPrefix":DEFINITIONS.CanonicalGitRefPrefix,"CapabilityId":DEFINITIONS.CapabilityId,"CodeIndexWorkerSelectionV1":DEFINITIONS.CodeIndexWorkerSelectionV1,"ConfigurationDirectMutationRequestV1":DEFINITIONS.ConfigurationDirectMutationRequestV1,"ConfigurationIdempotencyKey":DEFINITIONS.ConfigurationIdempotencyKey,"ConfigurationLayerIdV1":DEFINITIONS.ConfigurationLayerIdV1,"ConfigurationRevisionId":DEFINITIONS.ConfigurationRevisionId,"ConfigurationValueV1":DEFINITIONS.ConfigurationValueV1,"ContextScoutConfigurationLimitsV1":DEFINITIONS.ContextScoutConfigurationLimitsV1,"ContextScoutConfigurationModeV1":DEFINITIONS.ContextScoutConfigurationModeV1,"ContextScoutConfigurationStateV1":DEFINITIONS.ContextScoutConfigurationStateV1,"ContextScoutConfiguredModelPathV1":DEFINITIONS.ContextScoutConfiguredModelPathV1,"ContextScoutSettingsV1":DEFINITIONS.ContextScoutSettingsV1,"CredentialReferenceId":DEFINITIONS.CredentialReferenceId,"CrossMergeModeV1":DEFINITIONS.CrossMergeModeV1,"CrossMergePolicyV1":DEFINITIONS.CrossMergePolicyV1,"GitHubStackedPullRequestPolicyV1":DEFINITIONS.GitHubStackedPullRequestPolicyV1,"HistoryRewritePolicyV1":DEFINITIONS.HistoryRewritePolicyV1,"LcmSummarizerExecutableV1":DEFINITIONS.LcmSummarizerExecutableV1,"LcmSummarizerExecutablesV1":DEFINITIONS.LcmSummarizerExecutablesV1,"LocatorDigest":DEFINITIONS.LocatorDigest,"ManifestDigest":DEFINITIONS.ManifestDigest,"ProjectId":DEFINITIONS.ProjectId,"ProtectedRefDispositionV1":DEFINITIONS.ProtectedRefDispositionV1,"ProtectedRefRuleV1":DEFINITIONS.ProtectedRefRuleV1,"ProtectedRefSelectorV1":DEFINITIONS.ProtectedRefSelectorV1,"ProviderId":DEFINITIONS.ProviderId,"QueryCollectionId":DEFINITIONS.QueryCollectionId,"RepositoryId":DEFINITIONS.RepositoryId,"RepositoryPlacementScopeV1":DEFINITIONS.RepositoryPlacementScopeV1,"RequiredCheckExpectationV1":DEFINITIONS.RequiredCheckExpectationV1,"RequiredCheckV1":DEFINITIONS.RequiredCheckV1,"ReviewRequirementV1":DEFINITIONS.ReviewRequirementV1,"ReviewTopologyKindV1":DEFINITIONS.ReviewTopologyKindV1,"ReviewTopologyPolicyV1":DEFINITIONS.ReviewTopologyPolicyV1,"RuleEffect":DEFINITIONS.RuleEffect,"ScopeAccessRule":DEFINITIONS.ScopeAccessRule,"ScopeAccessSubjectV1":DEFINITIONS.ScopeAccessSubjectV1,"ScopeControlOperationV1":DEFINITIONS.ScopeControlOperationV1,"ScopeSourceBinding":DEFINITIONS.ScopeSourceBinding,"SensitiveFilesystemLocatorV1":DEFINITIONS.SensitiveFilesystemLocatorV1,"SettingKey":DEFINITIONS.SettingKey,"SourceBindingId":DEFINITIONS.SourceBindingId,"SourceKindV1":DEFINITIONS.SourceKindV1,"TopologyConcurrencyPolicyV1":DEFINITIONS.TopologyConcurrencyPolicyV1,"TopologyEscalationPolicyV1":DEFINITIONS.TopologyEscalationPolicyV1,"TopologyGatePolicyV1":DEFINITIONS.TopologyGatePolicyV1,"TopologyNotificationLevelV1":DEFINITIONS.TopologyNotificationLevelV1,"UserProfileId":DEFINITIONS.UserProfileId,"UtcMicros":DEFINITIONS.UtcMicros,"WorkApprovalPolicy":DEFINITIONS.WorkApprovalPolicy,"WorkContentLocationClassV1":DEFINITIONS.WorkContentLocationClassV1,"WorkEffortClassV1":DEFINITIONS.WorkEffortClassV1,"WorkEgressPolicy":DEFINITIONS.WorkEgressPolicy,"WorkExecutableBindingV1":DEFINITIONS.WorkExecutableBindingV1,"WorkExecutableCapabilityV1":DEFINITIONS.WorkExecutableCapabilityV1,"WorkExecutableReference":DEFINITIONS.WorkExecutableReference,"WorkExecutionLimits":DEFINITIONS.WorkExecutionLimits,"WorkExpertiseCategoryV1":DEFINITIONS.WorkExpertiseCategoryV1,"WorkExpertiseConsentV1":DEFINITIONS.WorkExpertiseConsentV1,"WorkFallbackTopology":DEFINITIONS.WorkFallbackTopology,"WorkFilesystemPolicy":DEFINITIONS.WorkFilesystemPolicy,"WorkOrdinalBandV1":DEFINITIONS.WorkOrdinalBandV1,"WorkProviderRouteId":DEFINITIONS.WorkProviderRouteId,"WorkProviderRouteV1":DEFINITIONS.WorkProviderRouteV1,"WorkRouteCandidateV1":DEFINITIONS.WorkRouteCandidateV1,"WorkRouteExecutionProfileV1":DEFINITIONS.WorkRouteExecutionProfileV1,"WorkSandboxPolicy":DEFINITIONS.WorkSandboxPolicy,"WorkTopologyPolicyV1":DEFINITIONS.WorkTopologyPolicyV1,"WorktreeCleanlinessRequirementV1":DEFINITIONS.WorktreeCleanlinessRequirementV1,"WorktreePlacementModeV1":DEFINITIONS.WorktreePlacementModeV1,"WorktreeRetentionPolicyV1":DEFINITIONS.WorktreeRetentionPolicyV1,"WorktreeRootPolicyV1":DEFINITIONS.WorktreeRootPolicyV1},"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"expected_revision":{"$ref":"#/$defs/ConfigurationRevisionId"},"idempotency_key":{"$ref":"#/$defs/ConfigurationIdempotencyKey"},"mutations":{"items":{"$ref":"#/$defs/ConfigurationDirectMutationRequestV1"},"type":"array"}},"required":["mutations","expected_revision","idempotency_key"],"title":"ConfigurationBatchRequestV1","type":"object"}, {"$defs":{"AccessPolicyDigest":DEFINITIONS.AccessPolicyDigest,"ConfigurationReceiptId":DEFINITIONS.ConfigurationReceiptId,"ConfigurationRevisionId":DEFINITIONS.ConfigurationRevisionId,"ConfigurationSettlementAuthorityV1":DEFINITIONS.ConfigurationSettlementAuthorityV1,"ConfigurationSnapshotId":DEFINITIONS.ConfigurationSnapshotId,"ManifestDigest":DEFINITIONS.ManifestDigest,"UtcMicros":DEFINITIONS.UtcMicros},"$schema":"https://json-schema.org/draft/2020-12/schema","properties":{"base_revision_id":{"$ref":"#/$defs/ConfigurationRevisionId"},"created_at":{"$ref":"#/$defs/UtcMicros"},"effective_deadline_at":{"$ref":"#/$defs/UtcMicros"},"operation_digest":{"$ref":"#/$defs/ManifestDigest"},"receipt_id":{"$ref":"#/$defs/ConfigurationReceiptId"},"result_revision_id":{"$ref":"#/$defs/ConfigurationRevisionId"},"settlement_authority":{"$ref":"#/$defs/ConfigurationSettlementAuthorityV1"},"snapshot_id":{"$ref":"#/$defs/ConfigurationSnapshotId"}},"required":["receipt_id","base_revision_id","result_revision_id","snapshot_id","operation_digest","settlement_authority","created_at","effective_deadline_at"],"title":"ConfigurationMutationReceipt","type":"object"}, {"$defs":{"SettingKey":DEFINITIONS.SettingKey},"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"key":{"$ref":"#/$defs/SettingKey"}},"required":["key"],"title":"ConfigurationGetRequestV1","type":"object"}, - {"$defs":{"AccessRuleId":DEFINITIONS.AccessRuleId,"ActorId":DEFINITIONS.ActorId,"AnalyzerEnvironmentVariable":DEFINITIONS.AnalyzerEnvironmentVariable,"AnalyzerExecutableId":DEFINITIONS.AnalyzerExecutableId,"AnalyzerExecutableReferenceV1":DEFINITIONS.AnalyzerExecutableReferenceV1,"AnalyzerLanguageId":DEFINITIONS.AnalyzerLanguageId,"AnalyzerLanguageSelectionV1":DEFINITIONS.AnalyzerLanguageSelectionV1,"AnalyzerPrivacyClassV1":DEFINITIONS.AnalyzerPrivacyClassV1,"AnalyzerResourceLimitsV1":DEFINITIONS.AnalyzerResourceLimitsV1,"AnalyzerRestartPolicyV1":DEFINITIONS.AnalyzerRestartPolicyV1,"AnalyzerSettingsV1":DEFINITIONS.AnalyzerSettingsV1,"AnalyzerStructuredValueV1":DEFINITIONS.AnalyzerStructuredValueV1,"AuthorityRef":DEFINITIONS.AuthorityRef,"AutomaticWorktreeGcV1":DEFINITIONS.AutomaticWorktreeGcV1,"AutomationBackendV1":DEFINITIONS.AutomationBackendV1,"AutomationHostModeV1":DEFINITIONS.AutomationHostModeV1,"AutomationSettingsV1":DEFINITIONS.AutomationSettingsV1,"AutomationTaskSetV1":DEFINITIONS.AutomationTaskSetV1,"AutomationTaskSettingsV1":DEFINITIONS.AutomationTaskSettingsV1,"BranchCollisionPolicyV1":DEFINITIONS.BranchCollisionPolicyV1,"BranchNameComponentV1":DEFINITIONS.BranchNameComponentV1,"BranchNameSeparatorV1":DEFINITIONS.BranchNameSeparatorV1,"BranchNamingPolicyV1":DEFINITIONS.BranchNamingPolicyV1,"BranchTopologyKindV1":DEFINITIONS.BranchTopologyKindV1,"BranchTopologyPolicyV1":DEFINITIONS.BranchTopologyPolicyV1,"CandidateDispositionV1":DEFINITIONS.CandidateDispositionV1,"CanonicalGitRefNameV1":DEFINITIONS.CanonicalGitRefNameV1,"CanonicalGitRefPrefix":DEFINITIONS.CanonicalGitRefPrefix,"CapabilityId":DEFINITIONS.CapabilityId,"CodeIndexWorkerSelectionV1":DEFINITIONS.CodeIndexWorkerSelectionV1,"ConfigurationCandidateV1":DEFINITIONS.ConfigurationCandidateV1,"ConfigurationLayerIdV1":DEFINITIONS.ConfigurationLayerIdV1,"ConfigurationRevisionId":DEFINITIONS.ConfigurationRevisionId,"ConfigurationSnapshotId":DEFINITIONS.ConfigurationSnapshotId,"ConfigurationValueV1":DEFINITIONS.ConfigurationValueV1,"ContextScoutConfigurationLimitsV1":DEFINITIONS.ContextScoutConfigurationLimitsV1,"ContextScoutConfigurationModeV1":DEFINITIONS.ContextScoutConfigurationModeV1,"ContextScoutConfigurationStateV1":DEFINITIONS.ContextScoutConfigurationStateV1,"ContextScoutConfiguredModelPathV1":DEFINITIONS.ContextScoutConfiguredModelPathV1,"ContextScoutSettingsV1":DEFINITIONS.ContextScoutSettingsV1,"CredentialReferenceId":DEFINITIONS.CredentialReferenceId,"CrossMergeModeV1":DEFINITIONS.CrossMergeModeV1,"CrossMergePolicyV1":DEFINITIONS.CrossMergePolicyV1,"GitHubStackedPullRequestPolicyV1":DEFINITIONS.GitHubStackedPullRequestPolicyV1,"HistoryRewritePolicyV1":DEFINITIONS.HistoryRewritePolicyV1,"LcmSummarizerExecutableV1":DEFINITIONS.LcmSummarizerExecutableV1,"LcmSummarizerExecutablesV1":DEFINITIONS.LcmSummarizerExecutablesV1,"LocatorDigest":DEFINITIONS.LocatorDigest,"ManifestDigest":DEFINITIONS.ManifestDigest,"ProjectId":DEFINITIONS.ProjectId,"ProtectedRefDispositionV1":DEFINITIONS.ProtectedRefDispositionV1,"ProtectedRefRuleV1":DEFINITIONS.ProtectedRefRuleV1,"ProtectedRefSelectorV1":DEFINITIONS.ProtectedRefSelectorV1,"ProviderId":DEFINITIONS.ProviderId,"QueryCollectionId":DEFINITIONS.QueryCollectionId,"RepositoryId":DEFINITIONS.RepositoryId,"RepositoryPlacementScopeV1":DEFINITIONS.RepositoryPlacementScopeV1,"RequiredCheckExpectationV1":DEFINITIONS.RequiredCheckExpectationV1,"RequiredCheckV1":DEFINITIONS.RequiredCheckV1,"ReviewRequirementV1":DEFINITIONS.ReviewRequirementV1,"ReviewTopologyKindV1":DEFINITIONS.ReviewTopologyKindV1,"ReviewTopologyPolicyV1":DEFINITIONS.ReviewTopologyPolicyV1,"RuleEffect":DEFINITIONS.RuleEffect,"ScopeAccessRule":DEFINITIONS.ScopeAccessRule,"ScopeAccessSubjectV1":DEFINITIONS.ScopeAccessSubjectV1,"ScopeControlOperationV1":DEFINITIONS.ScopeControlOperationV1,"ScopeSourceBinding":DEFINITIONS.ScopeSourceBinding,"SensitiveFilesystemLocatorV1":DEFINITIONS.SensitiveFilesystemLocatorV1,"SettingKey":DEFINITIONS.SettingKey,"SourceBindingId":DEFINITIONS.SourceBindingId,"SourceKindV1":DEFINITIONS.SourceKindV1,"TopologyConcurrencyPolicyV1":DEFINITIONS.TopologyConcurrencyPolicyV1,"TopologyEscalationPolicyV1":DEFINITIONS.TopologyEscalationPolicyV1,"TopologyGatePolicyV1":DEFINITIONS.TopologyGatePolicyV1,"TopologyNotificationLevelV1":DEFINITIONS.TopologyNotificationLevelV1,"UserProfileId":DEFINITIONS.UserProfileId,"UtcMicros":DEFINITIONS.UtcMicros,"WorkApprovalPolicy":DEFINITIONS.WorkApprovalPolicy,"WorkContentLocationClassV1":DEFINITIONS.WorkContentLocationClassV1,"WorkEffortClassV1":DEFINITIONS.WorkEffortClassV1,"WorkEgressPolicy":DEFINITIONS.WorkEgressPolicy,"WorkExecutableBindingV1":DEFINITIONS.WorkExecutableBindingV1,"WorkExecutableCapabilityV1":DEFINITIONS.WorkExecutableCapabilityV1,"WorkExecutableReference":DEFINITIONS.WorkExecutableReference,"WorkExecutionLimits":DEFINITIONS.WorkExecutionLimits,"WorkExpertiseCategoryV1":DEFINITIONS.WorkExpertiseCategoryV1,"WorkExpertiseConsentV1":DEFINITIONS.WorkExpertiseConsentV1,"WorkFallbackTopology":DEFINITIONS.WorkFallbackTopology,"WorkFilesystemPolicy":DEFINITIONS.WorkFilesystemPolicy,"WorkOrdinalBandV1":DEFINITIONS.WorkOrdinalBandV1,"WorkProviderRouteId":DEFINITIONS.WorkProviderRouteId,"WorkProviderRouteV1":DEFINITIONS.WorkProviderRouteV1,"WorkRouteCandidateV1":DEFINITIONS.WorkRouteCandidateV1,"WorkRouteExecutionProfileV1":DEFINITIONS.WorkRouteExecutionProfileV1,"WorkSandboxPolicy":DEFINITIONS.WorkSandboxPolicy,"WorkTopologyPolicyV1":DEFINITIONS.WorkTopologyPolicyV1,"WorktreeCleanlinessRequirementV1":DEFINITIONS.WorktreeCleanlinessRequirementV1,"WorktreePlacementModeV1":DEFINITIONS.WorktreePlacementModeV1,"WorktreeRetentionPolicyV1":DEFINITIONS.WorktreeRetentionPolicyV1,"WorktreeRootPolicyV1":DEFINITIONS.WorktreeRootPolicyV1},"$schema":"https://json-schema.org/draft/2020-12/schema","properties":{"candidates":{"items":{"$ref":"#/$defs/ConfigurationCandidateV1"},"type":"array"},"effective_behavior_digest":{"$ref":"#/$defs/ManifestDigest"},"effective_value":{"$ref":"#/$defs/ConfigurationValueV1"},"key":{"$ref":"#/$defs/SettingKey"},"resolution_provenance_digest":{"$ref":"#/$defs/ManifestDigest"},"revision_id":{"$ref":"#/$defs/ConfigurationRevisionId","description":"Current configuration revision accepted by mutation `expected_revision` CAS."},"snapshot_id":{"$ref":"#/$defs/ConfigurationSnapshotId","description":"Content identity of the fully resolved configuration snapshot."}},"required":["key","effective_value","revision_id","snapshot_id","effective_behavior_digest","resolution_provenance_digest","candidates"],"title":"ResolvedSetting","type":"object"}, + {"$defs":{"AccessRuleId":DEFINITIONS.AccessRuleId,"ActorId":DEFINITIONS.ActorId,"AnalyzerEnvironmentVariable":DEFINITIONS.AnalyzerEnvironmentVariable,"AnalyzerExecutableId":DEFINITIONS.AnalyzerExecutableId,"AnalyzerExecutableReferenceV1":DEFINITIONS.AnalyzerExecutableReferenceV1,"AnalyzerLanguageId":DEFINITIONS.AnalyzerLanguageId,"AnalyzerLanguageSelectionV1":DEFINITIONS.AnalyzerLanguageSelectionV1,"AnalyzerPrivacyClassV1":DEFINITIONS.AnalyzerPrivacyClassV1,"AnalyzerResourceLimitsV1":DEFINITIONS.AnalyzerResourceLimitsV1,"AnalyzerRestartPolicyV1":DEFINITIONS.AnalyzerRestartPolicyV1,"AnalyzerSettingsV1":DEFINITIONS.AnalyzerSettingsV1,"AnalyzerStructuredValueV1":DEFINITIONS.AnalyzerStructuredValueV1,"AuthorityRef":DEFINITIONS.AuthorityRef,"AutomaticWorktreeGcV1":DEFINITIONS.AutomaticWorktreeGcV1,"AutomationBackendV1":DEFINITIONS.AutomationBackendV1,"AutomationHostModeV1":DEFINITIONS.AutomationHostModeV1,"AutomationSettingsV1":DEFINITIONS.AutomationSettingsV1,"AutomationTaskSetV1":DEFINITIONS.AutomationTaskSetV1,"AutomationTaskSettingsV1":DEFINITIONS.AutomationTaskSettingsV1,"BranchCollisionPolicyV1":DEFINITIONS.BranchCollisionPolicyV1,"BranchNameComponentV1":DEFINITIONS.BranchNameComponentV1,"BranchNameSeparatorV1":DEFINITIONS.BranchNameSeparatorV1,"BranchNamingPolicyV1":DEFINITIONS.BranchNamingPolicyV1,"BranchTopologyKindV1":DEFINITIONS.BranchTopologyKindV1,"BranchTopologyPolicyV1":DEFINITIONS.BranchTopologyPolicyV1,"CandidateDispositionV1":DEFINITIONS.CandidateDispositionV1,"CanonicalGitRefNameV1":DEFINITIONS.CanonicalGitRefNameV1,"CanonicalGitRefPrefix":DEFINITIONS.CanonicalGitRefPrefix,"CapabilityId":DEFINITIONS.CapabilityId,"CodeIndexWorkerSelectionV1":DEFINITIONS.CodeIndexWorkerSelectionV1,"ConfigurationCandidateV1":DEFINITIONS.ConfigurationCandidateV1,"ConfigurationLayerIdV1":DEFINITIONS.ConfigurationLayerIdV1,"ConfigurationRevisionId":DEFINITIONS.ConfigurationRevisionId,"ConfigurationSettingActionV1":DEFINITIONS.ConfigurationSettingActionV1,"ConfigurationSettingFindingV1":DEFINITIONS.ConfigurationSettingFindingV1,"ConfigurationSnapshotId":DEFINITIONS.ConfigurationSnapshotId,"ConfigurationValueV1":DEFINITIONS.ConfigurationValueV1,"ContextScoutConfigurationLimitsV1":DEFINITIONS.ContextScoutConfigurationLimitsV1,"ContextScoutConfigurationModeV1":DEFINITIONS.ContextScoutConfigurationModeV1,"ContextScoutConfigurationStateV1":DEFINITIONS.ContextScoutConfigurationStateV1,"ContextScoutConfiguredModelPathV1":DEFINITIONS.ContextScoutConfiguredModelPathV1,"ContextScoutSettingsV1":DEFINITIONS.ContextScoutSettingsV1,"CredentialReferenceId":DEFINITIONS.CredentialReferenceId,"CrossMergeModeV1":DEFINITIONS.CrossMergeModeV1,"CrossMergePolicyV1":DEFINITIONS.CrossMergePolicyV1,"GitHubStackedPullRequestPolicyV1":DEFINITIONS.GitHubStackedPullRequestPolicyV1,"HistoryRewritePolicyV1":DEFINITIONS.HistoryRewritePolicyV1,"LcmSummarizerExecutableV1":DEFINITIONS.LcmSummarizerExecutableV1,"LcmSummarizerExecutablesV1":DEFINITIONS.LcmSummarizerExecutablesV1,"LocatorDigest":DEFINITIONS.LocatorDigest,"ManifestDigest":DEFINITIONS.ManifestDigest,"ProjectId":DEFINITIONS.ProjectId,"ProtectedRefDispositionV1":DEFINITIONS.ProtectedRefDispositionV1,"ProtectedRefRuleV1":DEFINITIONS.ProtectedRefRuleV1,"ProtectedRefSelectorV1":DEFINITIONS.ProtectedRefSelectorV1,"ProviderId":DEFINITIONS.ProviderId,"QueryCollectionId":DEFINITIONS.QueryCollectionId,"RepositoryId":DEFINITIONS.RepositoryId,"RepositoryPlacementScopeV1":DEFINITIONS.RepositoryPlacementScopeV1,"RequiredCheckExpectationV1":DEFINITIONS.RequiredCheckExpectationV1,"RequiredCheckV1":DEFINITIONS.RequiredCheckV1,"ReviewRequirementV1":DEFINITIONS.ReviewRequirementV1,"ReviewTopologyKindV1":DEFINITIONS.ReviewTopologyKindV1,"ReviewTopologyPolicyV1":DEFINITIONS.ReviewTopologyPolicyV1,"RuleEffect":DEFINITIONS.RuleEffect,"ScopeAccessRule":DEFINITIONS.ScopeAccessRule,"ScopeAccessSubjectV1":DEFINITIONS.ScopeAccessSubjectV1,"ScopeControlOperationV1":DEFINITIONS.ScopeControlOperationV1,"ScopeSourceBinding":DEFINITIONS.ScopeSourceBinding,"SensitiveFilesystemLocatorV1":DEFINITIONS.SensitiveFilesystemLocatorV1,"SettingKey":DEFINITIONS.SettingKey,"SourceBindingId":DEFINITIONS.SourceBindingId,"SourceKindV1":DEFINITIONS.SourceKindV1,"TopologyConcurrencyPolicyV1":DEFINITIONS.TopologyConcurrencyPolicyV1,"TopologyEscalationPolicyV1":DEFINITIONS.TopologyEscalationPolicyV1,"TopologyGatePolicyV1":DEFINITIONS.TopologyGatePolicyV1,"TopologyNotificationLevelV1":DEFINITIONS.TopologyNotificationLevelV1,"UserProfileId":DEFINITIONS.UserProfileId,"UtcMicros":DEFINITIONS.UtcMicros,"WorkApprovalPolicy":DEFINITIONS.WorkApprovalPolicy,"WorkContentLocationClassV1":DEFINITIONS.WorkContentLocationClassV1,"WorkEffortClassV1":DEFINITIONS.WorkEffortClassV1,"WorkEgressPolicy":DEFINITIONS.WorkEgressPolicy,"WorkExecutableBindingV1":DEFINITIONS.WorkExecutableBindingV1,"WorkExecutableCapabilityV1":DEFINITIONS.WorkExecutableCapabilityV1,"WorkExecutableReference":DEFINITIONS.WorkExecutableReference,"WorkExecutionLimits":DEFINITIONS.WorkExecutionLimits,"WorkExpertiseCategoryV1":DEFINITIONS.WorkExpertiseCategoryV1,"WorkExpertiseConsentV1":DEFINITIONS.WorkExpertiseConsentV1,"WorkFallbackTopology":DEFINITIONS.WorkFallbackTopology,"WorkFilesystemPolicy":DEFINITIONS.WorkFilesystemPolicy,"WorkOrdinalBandV1":DEFINITIONS.WorkOrdinalBandV1,"WorkProviderRouteId":DEFINITIONS.WorkProviderRouteId,"WorkProviderRouteV1":DEFINITIONS.WorkProviderRouteV1,"WorkRouteCandidateV1":DEFINITIONS.WorkRouteCandidateV1,"WorkRouteExecutionProfileV1":DEFINITIONS.WorkRouteExecutionProfileV1,"WorkSandboxPolicy":DEFINITIONS.WorkSandboxPolicy,"WorkTopologyPolicyV1":DEFINITIONS.WorkTopologyPolicyV1,"WorktreeCleanlinessRequirementV1":DEFINITIONS.WorktreeCleanlinessRequirementV1,"WorktreePlacementModeV1":DEFINITIONS.WorktreePlacementModeV1,"WorktreeRetentionPolicyV1":DEFINITIONS.WorktreeRetentionPolicyV1,"WorktreeRootPolicyV1":DEFINITIONS.WorktreeRootPolicyV1},"$schema":"https://json-schema.org/draft/2020-12/schema","properties":{"candidates":{"items":{"$ref":"#/$defs/ConfigurationCandidateV1"},"type":"array"},"effective_behavior_digest":{"$ref":"#/$defs/ManifestDigest"},"effective_value":{"$ref":"#/$defs/ConfigurationValueV1"},"findings":{"description":"Parts of the stored value this release does not apply. Empty when the\neffective value applies in full.","items":{"$ref":"#/$defs/ConfigurationSettingFindingV1"},"type":"array"},"key":{"$ref":"#/$defs/SettingKey"},"resolution_provenance_digest":{"$ref":"#/$defs/ManifestDigest"},"revision_id":{"$ref":"#/$defs/ConfigurationRevisionId","description":"Current configuration revision accepted by mutation `expected_revision` CAS."},"snapshot_id":{"$ref":"#/$defs/ConfigurationSnapshotId","description":"Content identity of the fully resolved configuration snapshot."}},"required":["key","effective_value","revision_id","snapshot_id","effective_behavior_digest","resolution_provenance_digest","candidates","findings"],"title":"ResolvedSetting","type":"object"}, {"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"description":"Typed input for the configuration list read through the daemon\ninvocation boundary.","title":"ConfigurationListRequestV1","type":"object"}, {"$defs":{"RestartRequirementV1":DEFINITIONS.RestartRequirementV1,"SettingKey":DEFINITIONS.SettingKey,"SettingSensitivityV1":DEFINITIONS.SettingSensitivityV1,"SettingSummary":DEFINITIONS.SettingSummary},"$schema":"https://json-schema.org/draft/2020-12/schema","items":{"$ref":"#/$defs/SettingSummary"},"title":"Array_of_SettingSummary","type":"array"}, {"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"title":"ConfigurationObservedStateRequestV1","type":"object"},