react-semaphor 0.1.494 → 0.1.496

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (127) hide show
  1. package/dist/analytics-protocol/index.cjs +1 -1
  2. package/dist/analytics-protocol/index.js +233 -218
  3. package/dist/brand-studio/index.cjs +1 -1
  4. package/dist/brand-studio/index.js +4 -4
  5. package/dist/briefings/index.cjs +1 -1
  6. package/dist/briefings/index.js +5 -5
  7. package/dist/chunks/calculated-field-identity-Cq9GwHfE.js +1266 -0
  8. package/dist/chunks/calculated-field-identity-DTfyvvLC.cjs +1 -0
  9. package/dist/chunks/{constants-D47EhfJR.js → constants-CC3WKmqC.js} +14 -14
  10. package/dist/chunks/{constants-BMfm1XgO.cjs → constants-DIuhVR6J.cjs} +1 -1
  11. package/dist/chunks/{dashboard-briefing-launcher-DQFa0Ti1.js → dashboard-briefing-launcher-Bbz4cwHb.js} +9 -9
  12. package/dist/chunks/{dashboard-briefing-launcher-nWBKnd0X.cjs → dashboard-briefing-launcher-CM6LTGw5.cjs} +1 -1
  13. package/dist/chunks/{dashboard-controls-BbPWWVO-.cjs → dashboard-controls-B2nrczJl.cjs} +1 -1
  14. package/dist/chunks/{dashboard-controls-DWpnRtQI.js → dashboard-controls-BsgADy-S.js} +11 -11
  15. package/dist/chunks/{dashboard-date-comparison-definition-CKXgDzSB.js → dashboard-date-comparison-definition-Bqti6YAo.js} +1 -1
  16. package/dist/chunks/{dashboard-date-comparison-definition-DCIUwJnZ.cjs → dashboard-date-comparison-definition-C69F-zaC.cjs} +1 -1
  17. package/dist/chunks/{dashboard-json-DyTQysQF.js → dashboard-json-CA-BChbt.js} +7 -7
  18. package/dist/chunks/{dashboard-json-BFJNDHxv.cjs → dashboard-json-CwRRBSSL.cjs} +1 -1
  19. package/dist/chunks/edit-dashboard-visual-BlS27LDw.cjs +172 -0
  20. package/dist/chunks/{edit-dashboard-visual-D-gauuNQ.js → edit-dashboard-visual-CEiPgdkX.js} +7903 -7939
  21. package/dist/chunks/{editor-action-buttons-DMgnHVY1.js → editor-action-buttons-6HBjjcfK.js} +6 -6
  22. package/dist/chunks/{editor-action-buttons-B7YezrkC.cjs → editor-action-buttons-kk2BNiTe.cjs} +1 -1
  23. package/dist/chunks/{field-aggregations-J7de9KZm.js → field-aggregations-C8kZqMTD.js} +11 -11
  24. package/dist/chunks/{field-aggregations-hx8odlTh.cjs → field-aggregations-naKZ7S2Q.cjs} +1 -1
  25. package/dist/chunks/{index-DXQsuuMQ.cjs → index-BSRwdFTN.cjs} +226 -225
  26. package/dist/chunks/{index-Df4YBtX5.cjs → index-CCa-A-Yx.cjs} +1 -1
  27. package/dist/chunks/{index-CPWfCksu.js → index-Cgoz65yM.js} +39519 -38739
  28. package/dist/chunks/{index-BDtC8et3.js → index-oll4m-qi.js} +11 -11
  29. package/dist/chunks/{matrix-analytical-definition-DAFStKt2.js → matrix-analytical-definition-B1xhoCak.js} +1 -1
  30. package/dist/chunks/{matrix-analytical-definition-B3p3vF0K.cjs → matrix-analytical-definition-BK5y9XHH.cjs} +1 -1
  31. package/dist/chunks/{matrix-card-5R39CCdj.js → matrix-card-BEb6hr8i.js} +2 -2
  32. package/dist/chunks/{matrix-card-DzkJRoM4.cjs → matrix-card-Ii8yYSnw.cjs} +1 -1
  33. package/dist/chunks/{matrix-control-sources-BWbqiGmN.cjs → matrix-control-sources-CdegRBcA.cjs} +1 -1
  34. package/dist/chunks/{matrix-control-sources-DxjWV8ry.js → matrix-control-sources-cbYmqWNg.js} +5 -5
  35. package/dist/chunks/{matrix-definition-Z80mIEfu.cjs → matrix-definition-CSNthxru.cjs} +1 -1
  36. package/dist/chunks/{matrix-definition-BcJi7qGZ.js → matrix-definition-CZM5-YJX.js} +1 -1
  37. package/dist/chunks/{matrix-formatter-3QR1mqhn.cjs → matrix-formatter-C19PZAal.cjs} +1 -1
  38. package/dist/chunks/{matrix-formatter-youWVghC.js → matrix-formatter-CiXzpX6X.js} +27 -27
  39. package/dist/chunks/matrix-member-presentation-CQHvq18l.cjs +1 -0
  40. package/dist/chunks/matrix-member-presentation-CabW8mJc.js +105 -0
  41. package/dist/chunks/{matrix-operation-contract-D5I-t3i7.js → matrix-operation-contract-0Nor-C71.js} +21 -21
  42. package/dist/chunks/{matrix-operation-contract-BiUMcd6G.cjs → matrix-operation-contract-o9GXbiHw.cjs} +1 -1
  43. package/dist/chunks/{metric-comparison-vr9j4Z_Z.js → metric-comparison-Br8l0WkK.js} +1 -1
  44. package/dist/chunks/{metric-comparison-D1VRq5Os.cjs → metric-comparison-DeiOjEm5.cjs} +1 -1
  45. package/dist/chunks/{operators-C8TxpM4C.js → operators-B3zZoskU.js} +28 -10
  46. package/dist/chunks/operators-DEfKaU_V.cjs +1 -0
  47. package/dist/chunks/{pivot-header-presentation-Dcd4IBM5.cjs → pivot-header-presentation-DRv-cSIP.cjs} +1 -1
  48. package/dist/chunks/{pivot-header-presentation-BslEo_4O.js → pivot-header-presentation-DW-ti5ek.js} +3 -3
  49. package/dist/chunks/{pivot-result-identity-CmvwpG4K.cjs → pivot-result-identity-DEenUrMj.cjs} +1 -1
  50. package/dist/chunks/{pivot-result-identity-CMz27nri.js → pivot-result-identity-sZc1RaIz.js} +1 -1
  51. package/dist/chunks/{pivot-result-lifecycle-H_pntnd9.cjs → pivot-result-lifecycle-D81qcCcZ.cjs} +1 -1
  52. package/dist/chunks/{pivot-result-lifecycle-BCoOFUiU.js → pivot-result-lifecycle-DJ40gdwk.js} +7 -7
  53. package/dist/chunks/{raw-temporal-DcHmXurp.cjs → raw-temporal-DDTt2yv5.cjs} +1 -1
  54. package/dist/chunks/{raw-temporal-YWo1GEmr.js → raw-temporal-DHCZrFe7.js} +15 -15
  55. package/dist/chunks/{raw-temporal-contract-Bg1mtRGE.cjs → raw-temporal-contract-BcbV56Rc.cjs} +1 -1
  56. package/dist/chunks/{raw-temporal-contract-DY-Jd4Sc.js → raw-temporal-contract-CkvdtPYA.js} +1 -1
  57. package/dist/chunks/{report-preferences-dialog-Bt8T3To1.js → report-preferences-dialog-CVRJOCQu.js} +6 -6
  58. package/dist/chunks/{report-preferences-dialog-oT-C29vV.cjs → report-preferences-dialog-DGEq-iBF.cjs} +1 -1
  59. package/dist/chunks/{report-runtime-context-nCHl3uHC.js → report-runtime-context-BlDpc-F-.js} +1 -1
  60. package/dist/chunks/{report-runtime-context-Bb0ejvVq.cjs → report-runtime-context-lSIvyKm2.cjs} +1 -1
  61. package/dist/chunks/{semantic-format-CMPIcb8l.cjs → semantic-format--_VEin18.cjs} +1 -1
  62. package/dist/chunks/{semantic-format-UvUAyZS-.js → semantic-format-ew5zviaT.js} +2 -2
  63. package/dist/chunks/{source-entity-resolution-Dm4in31q.js → source-entity-resolution-79Rihbk3.js} +121 -107
  64. package/dist/chunks/source-entity-resolution-DPjslVgx.cjs +1 -0
  65. package/dist/chunks/{switch-DHOv6xHT.js → switch-BmyuyM7e.js} +4736 -4697
  66. package/dist/chunks/switch-nDjQC2y3.cjs +139 -0
  67. package/dist/chunks/{temporal-bucket-contract-CPuYzg7A.cjs → temporal-bucket-contract-BYR6tj6F.cjs} +1 -1
  68. package/dist/chunks/{temporal-bucket-contract-Bx5TJXF3.js → temporal-bucket-contract-C-kKQ_W4.js} +1 -1
  69. package/dist/chunks/{token-types-5buW2I6f.js → token-types-BIYFAsGq.js} +1 -1
  70. package/dist/chunks/{token-types-hl08eNuY.cjs → token-types-CkAGFhiW.cjs} +1 -1
  71. package/dist/chunks/{update-policy-BP_2uCgs.cjs → update-policy-BCtFr2Qh.cjs} +1 -1
  72. package/dist/chunks/{update-policy-D3I1J2kl.js → update-policy-CP_A1IVD.js} +2 -2
  73. package/dist/chunks/{validators-BpJDwDnG.js → validators-D-_IT-Xw.js} +1134 -1013
  74. package/dist/chunks/validators-ux2obZB9.cjs +1 -0
  75. package/dist/dashboard/index.cjs +1 -1
  76. package/dist/dashboard/index.js +1 -1
  77. package/dist/dashboard-authoring/index.cjs +3 -3
  78. package/dist/dashboard-authoring/index.js +157 -150
  79. package/dist/data-app-builder/index.cjs +1 -1
  80. package/dist/data-app-builder/index.js +2 -2
  81. package/dist/data-app-codegen/index.cjs +1 -1
  82. package/dist/data-app-codegen/index.js +2 -2
  83. package/dist/data-app-codegen-node/index.cjs +2 -2
  84. package/dist/data-app-codegen-node/index.js +33 -36
  85. package/dist/data-app-sdk/index.cjs +2 -2
  86. package/dist/data-app-sdk/index.js +232 -230
  87. package/dist/data-app-sdk-adapters/index.cjs +1 -1
  88. package/dist/data-app-sdk-adapters/index.js +3 -3
  89. package/dist/data-app-sdk-validation/index.cjs +1 -1
  90. package/dist/data-app-sdk-validation/index.js +5 -5
  91. package/dist/format-utils/index.cjs +1 -1
  92. package/dist/format-utils/index.js +26 -26
  93. package/dist/index.cjs +1 -1
  94. package/dist/index.js +15 -15
  95. package/dist/report-runtime-context/index.cjs +1 -1
  96. package/dist/report-runtime-context/index.js +2 -2
  97. package/dist/style.css +1 -1
  98. package/dist/surfboard/index.cjs +1 -1
  99. package/dist/surfboard/index.js +2 -2
  100. package/dist/types/analytics-protocol.d.ts +265 -1
  101. package/dist/types/briefings.d.ts +55 -0
  102. package/dist/types/dashboard-assistant.d.ts +55 -1
  103. package/dist/types/dashboard-authoring.d.ts +140 -2
  104. package/dist/types/dashboard.d.ts +57 -0
  105. package/dist/types/data-app-builder.d.ts +32 -1
  106. package/dist/types/data-app-codegen-node.d.ts +32 -1
  107. package/dist/types/data-app-codegen.d.ts +32 -1
  108. package/dist/types/data-app-sdk-adapters.d.ts +32 -1
  109. package/dist/types/data-app-sdk-validation.d.ts +55 -1
  110. package/dist/types/data-app-sdk.d.ts +60 -1
  111. package/dist/types/format-utils.d.ts +9 -0
  112. package/dist/types/index.cjs +1 -1
  113. package/dist/types/index.js +4 -4
  114. package/dist/types/main.d.ts +122 -1
  115. package/dist/types/shared.d.ts +55 -0
  116. package/dist/types/surfboard.d.ts +57 -0
  117. package/dist/types/types.d.ts +57 -0
  118. package/package.json +1 -1
  119. package/dist/chunks/calculated-field-identity-CSabKrXt.js +0 -1117
  120. package/dist/chunks/calculated-field-identity-D4VOHjBJ.cjs +0 -1
  121. package/dist/chunks/edit-dashboard-visual-Dtacp_qY.cjs +0 -172
  122. package/dist/chunks/matrix-member-presentation-BEWAH5xK.js +0 -24
  123. package/dist/chunks/matrix-member-presentation-DtLGyv8w.cjs +0 -1
  124. package/dist/chunks/operators-DrTQsJXv.cjs +0 -1
  125. package/dist/chunks/source-entity-resolution-DeH38dTU.cjs +0 -1
  126. package/dist/chunks/switch-CatLIoK-.cjs +0 -139
  127. package/dist/chunks/validators-4dRtYUI1.cjs +0 -1
@@ -1839,6 +1839,13 @@ export declare function applyDashboardChangePlan(input: {
1839
1839
  cardArtifacts: GeneratedDashboardCardArtifact[];
1840
1840
  }): DashboardChangeCompileResult;
1841
1841
 
1842
+ /**
1843
+ * The only way an override enters a dependency policy: explicit mode, unique
1844
+ * ids, restricted to what the policy includes. Returns the same object when
1845
+ * nothing applies so callers can cheaply detect "no override".
1846
+ */
1847
+ export declare function applyOptionDependencyOverride(dependencies: SemaphorOptionDependencies, omitInputIds: readonly string[] | undefined): SemaphorOptionDependencies;
1848
+
1842
1849
  export declare const AUTOMATIC_TEMPORAL_BUCKET_FORMAT: TemporalBucketFormat;
1843
1850
 
1844
1851
  declare type AxisConfig = {
@@ -5697,6 +5704,14 @@ export declare const DASHBOARD_AUTHORING_BREAKPOINTS: readonly ["lg", "md", "sm"
5697
5704
 
5698
5705
  export declare const DASHBOARD_AUTHORING_MAX_GENERATED_CARDS = 15;
5699
5706
 
5707
+ /**
5708
+ * Dashboard filters narrow their option lists by every applicable peer
5709
+ * selection unless the author chose otherwise. This differs from the SDK
5710
+ * protocol, where an omitted policy means independent; dashboard adapters
5711
+ * therefore resolve the policy here and always send it explicitly.
5712
+ */
5713
+ export declare const DASHBOARD_DEFAULT_OPTION_DEPENDENCIES: SemaphorOptionDependencies;
5714
+
5700
5715
  declare type DashboardAIContext = AIContext & {
5701
5716
  mode?: DashboardAIContextMode;
5702
5717
  };
@@ -5866,7 +5881,17 @@ export declare type DashboardFilterMappingContractIssue = {
5866
5881
  bindingId?: string;
5867
5882
  };
5868
5883
 
5869
- export declare type DashboardFilterMappingContractIssueCode = 'invalid_input' | 'both_filter_definitions' | 'missing_filter_definition' | 'orphaned_filter_reference' | 'invalid_filter_reference' | 'duplicate_filter_reference' | 'global_date_reference' | 'unsupported_mapped_scope' | 'invalid_application' | 'duplicate_card_application' | 'unknown_card' | 'invalid_binding_id' | 'unsupported_target' | 'invalid_target_field' | 'unknown_target_data_type' | 'unavailable_card_source' | 'invalid_option_source';
5884
+ export declare type DashboardFilterMappingContractIssueCode = 'invalid_input' | 'both_filter_definitions' | 'missing_filter_definition' | 'orphaned_filter_reference' | 'invalid_filter_reference' | 'duplicate_filter_reference' | 'global_date_reference' | 'unsupported_mapped_scope' | 'invalid_application' | 'duplicate_card_application' | 'unknown_card' | 'invalid_binding_id' | 'unsupported_target' | 'invalid_target_field' | 'unknown_target_data_type' | 'unavailable_card_source' | 'invalid_option_source' | 'invalid_option_dependencies' | 'invalid_option_population';
5885
+
5886
+ /**
5887
+ * Persisted policy for which peer selections narrow a filter's option list.
5888
+ * Omitted means All applicable for dashboards; see
5889
+ * `resolveDashboardOptionDependencies`.
5890
+ */
5891
+ export declare type DashboardFilterOptionDependencies = SemaphorOptionDependencies;
5892
+
5893
+ /** Persisted population that fixes relevance for fact-bridged cascades. */
5894
+ export declare type DashboardFilterOptionPopulation = SemaphorOptionPopulation;
5870
5895
 
5871
5896
  /** Persisted label/value option definition for a mapped dashboard filter. */
5872
5897
  export declare type DashboardFilterOptionSource = SemaphorInputOptionSource;
@@ -6015,6 +6040,40 @@ export declare type DashboardLayoutCompileInput = {
6015
6040
 
6016
6041
  export declare type DashboardLayoutCompileResult = PersistedFrameLayouts;
6017
6042
 
6043
+ /**
6044
+ * Structured option context sent with standard filter-values requests. The
6045
+ * policy is always explicit here; the server never infers a dashboard default.
6046
+ */
6047
+ export declare type DashboardOptionContext = {
6048
+ inputId: string;
6049
+ dependencies: SemaphorOptionDependencies;
6050
+ population?: SemaphorOptionPopulation;
6051
+ inputs: DashboardOptionContextBinding[];
6052
+ };
6053
+
6054
+ /** One peer filter input the option request may reference. */
6055
+ export declare type DashboardOptionContextBinding = Pick<SemaphorInputBinding, 'inputId' | 'kind' | 'relationshipHint'> & {
6056
+ /** Backing dashboard filter id; the server maps active_filters through it. */
6057
+ filterId: string;
6058
+ };
6059
+
6060
+ export declare type DashboardOptionDependenciesResolution = {
6061
+ ok: true;
6062
+ dependencies: SemaphorOptionDependencies;
6063
+ } | {
6064
+ ok: false;
6065
+ error: string;
6066
+ issues: string[];
6067
+ };
6068
+
6069
+ export declare type DashboardOptionPopulationResolution = {
6070
+ ok: true;
6071
+ population: SemaphorOptionPopulation | undefined;
6072
+ } | {
6073
+ ok: false;
6074
+ error: string;
6075
+ };
6076
+
6018
6077
  export declare type DashboardPlan = {
6019
6078
  version: 1;
6020
6079
  id: string;
@@ -8254,6 +8313,8 @@ declare type EmbeddedFilterDashboardInput = FilterDashboardInputBase & {
8254
8313
  filter: TFilter;
8255
8314
  filterReference?: never;
8256
8315
  optionSource?: DashboardFilterOptionSource;
8316
+ optionDependencies?: DashboardFilterOptionDependencies;
8317
+ optionPopulation?: DashboardFilterOptionPopulation;
8257
8318
  application?: DashboardFilterApplication;
8258
8319
  };
8259
8320
 
@@ -8455,6 +8516,15 @@ declare interface Field {
8455
8516
  * Human-friendly, localizable display name for the UI (table headers, chart axes, etc.).
8456
8517
  */
8457
8518
  label: string;
8519
+ /**
8520
+ * Set only when `label` was synthesized from `name` because the source
8521
+ * provided no authored label (raw database objects). Field pickers follow
8522
+ * the naming rule in `@/lib/fields/field-display`: an authored semantic
8523
+ * label is shown as is, otherwise the physical column name. A field whose
8524
+ * `label` still equals `derivedLabel` has no authored label; any later
8525
+ * edit to `label` makes it authored without touching this marker.
8526
+ */
8527
+ derivedLabel?: string;
8458
8528
  /**
8459
8529
  * Unique, stable, machine-friendly reference name for SQL (AS alias), exports, and scripting.
8460
8530
  * If not provided, should be auto-generated from label or name.
@@ -9564,6 +9634,8 @@ declare type NormalizedFilterDashboardInput = FilterDashboardInputBase & {
9564
9634
  kind: 'filter';
9565
9635
  filter: TFilter;
9566
9636
  optionSource?: DashboardFilterOptionSource;
9637
+ optionDependencies?: DashboardFilterOptionDependencies;
9638
+ optionPopulation?: DashboardFilterOptionPopulation;
9567
9639
  application?: DashboardFilterApplication;
9568
9640
  definitionOrigin: 'embedded' | 'dashboardFilter';
9569
9641
  };
@@ -11294,6 +11366,14 @@ declare type RangeValue = {
11294
11366
  /** Strict consumer boundary, not an upcaster for the old matrixIntent. */
11295
11367
  export declare function readMatrixCardConfig(card: MatrixCardInput): MatrixConfig | undefined;
11296
11368
 
11369
+ /**
11370
+ * Rewrites explicit dependency references when an input's stable identity
11371
+ * changes, for example when a plain filter is promoted to a reference-backed
11372
+ * input or demoted back. Returns the same array when nothing referenced the
11373
+ * old id.
11374
+ */
11375
+ export declare function rebindDashboardOptionDependencyInputId<TInput extends object>(inputs: TInput[], fromInputId: string, toInputId: string): TInput[];
11376
+
11297
11377
  /** Reconcile effective structural bindings without inventing presentation or saved defaults. */
11298
11378
  export declare function reconcileMatrixSpecStructure(beforeSpec: MatrixSpec, afterSpec: MatrixSpec, authoringDraft?: boolean): {
11299
11379
  spec: MatrixSpec;
@@ -11310,6 +11390,8 @@ declare type ReferencedFilterDashboardInput = FilterDashboardInputBase & {
11310
11390
  filterId: string;
11311
11391
  };
11312
11392
  optionSource?: DashboardFilterOptionSource;
11393
+ optionDependencies?: DashboardFilterOptionDependencies;
11394
+ optionPopulation?: DashboardFilterOptionPopulation;
11313
11395
  application?: DashboardFilterApplication;
11314
11396
  };
11315
11397
 
@@ -11400,6 +11482,21 @@ export declare function resolveDashboardFilterInheritedTarget(params: {
11400
11482
  acceptedTargets: DashboardFilterTarget[];
11401
11483
  }): DashboardFilterAutomaticTargetResolution;
11402
11484
 
11485
+ /**
11486
+ * Resolves an authored dashboard option dependency policy to the explicit
11487
+ * policy sent to the server. Omission means All applicable. Present values are
11488
+ * validated with the dashboard profile and returned in canonical shape; nothing
11489
+ * here mutates saved definitions.
11490
+ */
11491
+ export declare function resolveDashboardOptionDependencies(value: unknown): DashboardOptionDependenciesResolution;
11492
+
11493
+ /**
11494
+ * Validates an authored option population. Omission means the option source
11495
+ * itself. A related population must name a complete semantic source; physical
11496
+ * relationship discovery is not part of this feature.
11497
+ */
11498
+ export declare function resolveDashboardOptionPopulation(value: unknown): DashboardOptionPopulationResolution;
11499
+
11403
11500
  /**
11404
11501
  * Resolves one accepted SQL-card target without inspecting authored SQL.
11405
11502
  * Authoring may provide the grounded candidate set to reject an unqualified
@@ -11482,6 +11579,17 @@ export declare function resolveTemporalResultOwner(input: TemporalResultOwnerInp
11482
11579
  /** Saved and unsaved rules share structural reference cleanup; never broaden a stale scope. */
11483
11580
  export declare function retainMatrixConditionalFormatting<T extends TableConditionalFormatting | undefined>(before: MatrixSpec, spec: MatrixSpec, formatting: T, notices: MatrixAuthoringNotice[]): T;
11484
11581
 
11582
+ /**
11583
+ * Which peer inputs a policy considers. Mirrors the server resolver's
11584
+ * membership rule so clients can scope request payloads and cache identity;
11585
+ * applicability and relationship proof remain server-owned.
11586
+ */
11587
+ export declare function selectDashboardOptionDependencyInputIds(params: {
11588
+ targetInputId: string;
11589
+ dependencies: SemaphorOptionDependencies;
11590
+ peerInputIds: readonly string[];
11591
+ }): string[];
11592
+
11485
11593
  declare type SelectedEntities = SelectedEntity[];
11486
11594
 
11487
11595
  declare type SelectedEntity = DatabaseEntityReference | DataModelEntityReference | DatasetEntityReference | FileEntityReference;
@@ -11627,6 +11735,15 @@ declare type SemaphorInputOptionsIntent = SemaphorInputOptionSource & {
11627
11735
  dependencies?: SemaphorOptionDependencies;
11628
11736
  search?: string;
11629
11737
  limit?: number;
11738
+ /**
11739
+ * Authoritative selected-value relevance check: return only options whose
11740
+ * value is one of these exact raw values, under the same dependency and
11741
+ * population context, with no search or paging. Bounded by
11742
+ * `MAX_OPTION_MATCH_VALUES`. The result's `match.complete` says whether
11743
+ * absence from the returned options proves no match. Scalars only; see
11744
+ * `parseOptionMatchValues`.
11745
+ */
11746
+ matchValues?: Array<string | number | boolean>;
11630
11747
  inputs?: SemaphorInputBinding[];
11631
11748
  derivedFields?: SemaphorDerivedFieldDefinition[];
11632
11749
  };
@@ -11702,11 +11819,24 @@ declare type SemaphorMetricIntent = {
11702
11819
  };
11703
11820
 
11704
11821
  declare type SemaphorOptionDependencies = {
11705
- mode?: 'independent' | 'explicit';
11822
+ /** Omitted mode means independent for protocol callers. Dashboard authoring
11823
+ * normalizes omission separately through `resolveDashboardOptionDependencies`. */
11824
+ mode?: SemaphorOptionDependencyMode;
11706
11825
  includeInputIds?: string[];
11707
11826
  excludeInputIds?: string[];
11827
+ /**
11828
+ * Ephemeral browse override: explicit dependencies the viewer asked to
11829
+ * browse without. Only valid in explicit mode, only for ids in
11830
+ * `includeInputIds`, and only honored by the server when that dependency
11831
+ * would otherwise fail with an overridable reason (see
11832
+ * `OVERRIDABLE_OPTION_DEPENDENCY_REASONS`). Never persisted, never applied
11833
+ * to card predicates; it lives in one browse request and its cache identity.
11834
+ */
11835
+ omitInputIds?: string[];
11708
11836
  };
11709
11837
 
11838
+ declare type SemaphorOptionDependencyMode = 'independent' | 'explicit' | 'all_applicable';
11839
+
11710
11840
  declare type SemaphorOptionPopulation = {
11711
11841
  kind: 'option_source';
11712
11842
  baseSource?: never;
@@ -15094,4 +15224,12 @@ declare interface WindowTransform {
15094
15224
  };
15095
15225
  }
15096
15226
 
15227
+ /**
15228
+ * Applies an ephemeral browse override to a resolved option context. Only an
15229
+ * explicit policy can be overridden, and only for ids it includes; anything
15230
+ * else returns the context unchanged. The override rides the request and its
15231
+ * cache identity and is never written back to the dashboard.
15232
+ */
15233
+ export declare function withDashboardOptionDependencyOverride(context: DashboardOptionContext, omitInputIds: readonly string[] | undefined): DashboardOptionContext;
15234
+
15097
15235
  export { }
@@ -4151,6 +4151,16 @@ export declare type DashboardFilterExcludedCardApplication = {
4151
4151
  cardId: string;
4152
4152
  };
4153
4153
 
4154
+ /**
4155
+ * Persisted policy for which peer selections narrow a filter's option list.
4156
+ * Omitted means All applicable for dashboards; see
4157
+ * `resolveDashboardOptionDependencies`.
4158
+ */
4159
+ declare type DashboardFilterOptionDependencies = SemaphorOptionDependencies;
4160
+
4161
+ /** Persisted population that fixes relevance for fact-bridged cascades. */
4162
+ declare type DashboardFilterOptionPopulation = SemaphorOptionPopulation;
4163
+
4154
4164
  /** Persisted label/value option definition for a mapped dashboard filter. */
4155
4165
  export declare type DashboardFilterOptionSource = SemaphorInputOptionSource;
4156
4166
 
@@ -4923,6 +4933,8 @@ export declare type EmbeddedFilterDashboardInput = FilterDashboardInputBase & {
4923
4933
  filter: TFilter;
4924
4934
  filterReference?: never;
4925
4935
  optionSource?: DashboardFilterOptionSource;
4936
+ optionDependencies?: DashboardFilterOptionDependencies;
4937
+ optionPopulation?: DashboardFilterOptionPopulation;
4926
4938
  application?: DashboardFilterApplication;
4927
4939
  };
4928
4940
 
@@ -5137,6 +5149,15 @@ declare interface Field {
5137
5149
  * Human-friendly, localizable display name for the UI (table headers, chart axes, etc.).
5138
5150
  */
5139
5151
  label: string;
5152
+ /**
5153
+ * Set only when `label` was synthesized from `name` because the source
5154
+ * provided no authored label (raw database objects). Field pickers follow
5155
+ * the naming rule in `@/lib/fields/field-display`: an authored semantic
5156
+ * label is shown as is, otherwise the physical column name. A field whose
5157
+ * `label` still equals `derivedLabel` has no authored label; any later
5158
+ * edit to `label` makes it authored without touching this marker.
5159
+ */
5160
+ derivedLabel?: string;
5140
5161
  /**
5141
5162
  * Unique, stable, machine-friendly reference name for SQL (AS alias), exports, and scripting.
5142
5163
  * If not provided, should be auto-generated from label or name.
@@ -5900,6 +5921,8 @@ export declare type NormalizedFilterDashboardInput = FilterDashboardInputBase &
5900
5921
  kind: 'filter';
5901
5922
  filter: TFilter;
5902
5923
  optionSource?: DashboardFilterOptionSource;
5924
+ optionDependencies?: DashboardFilterOptionDependencies;
5925
+ optionPopulation?: DashboardFilterOptionPopulation;
5903
5926
  application?: DashboardFilterApplication;
5904
5927
  definitionOrigin: 'embedded' | 'dashboardFilter';
5905
5928
  };
@@ -7667,6 +7690,8 @@ export declare type ReferencedFilterDashboardInput = FilterDashboardInputBase &
7667
7690
  filterId: string;
7668
7691
  };
7669
7692
  optionSource?: DashboardFilterOptionSource;
7693
+ optionDependencies?: DashboardFilterOptionDependencies;
7694
+ optionPopulation?: DashboardFilterOptionPopulation;
7670
7695
  application?: DashboardFilterApplication;
7671
7696
  };
7672
7697
 
@@ -7957,6 +7982,38 @@ declare type SemaphorInputOptionSource = {
7957
7982
  disambiguationFields?: SemaphorFieldRef[];
7958
7983
  };
7959
7984
 
7985
+ declare type SemaphorOptionDependencies = {
7986
+ /** Omitted mode means independent for protocol callers. Dashboard authoring
7987
+ * normalizes omission separately through `resolveDashboardOptionDependencies`. */
7988
+ mode?: SemaphorOptionDependencyMode;
7989
+ includeInputIds?: string[];
7990
+ excludeInputIds?: string[];
7991
+ /**
7992
+ * Ephemeral browse override: explicit dependencies the viewer asked to
7993
+ * browse without. Only valid in explicit mode, only for ids in
7994
+ * `includeInputIds`, and only honored by the server when that dependency
7995
+ * would otherwise fail with an overridable reason (see
7996
+ * `OVERRIDABLE_OPTION_DEPENDENCY_REASONS`). Never persisted, never applied
7997
+ * to card predicates; it lives in one browse request and its cache identity.
7998
+ */
7999
+ omitInputIds?: string[];
8000
+ };
8001
+
8002
+ declare type SemaphorOptionDependencyMode = 'independent' | 'explicit' | 'all_applicable';
8003
+
8004
+ declare type SemaphorOptionPopulation = {
8005
+ kind: 'option_source';
8006
+ baseSource?: never;
8007
+ } | {
8008
+ kind: 'related_population';
8009
+ baseSource: SemaphorSourceRef;
8010
+ relationshipHint?: SemaphorRelationshipHint;
8011
+ };
8012
+
8013
+ declare type SemaphorRelationshipHint = {
8014
+ relationshipIds?: string[];
8015
+ };
8016
+
7960
8017
  declare type SemaphorScalarValueFormat = {
7961
8018
  type: 'number' | 'currency' | 'percent' | 'percentage' | 'scientific';
7962
8019
  minimumFractionDigits?: number;
@@ -4111,6 +4111,15 @@ declare interface Field {
4111
4111
  * Human-friendly, localizable display name for the UI (table headers, chart axes, etc.).
4112
4112
  */
4113
4113
  label: string;
4114
+ /**
4115
+ * Set only when `label` was synthesized from `name` because the source
4116
+ * provided no authored label (raw database objects). Field pickers follow
4117
+ * the naming rule in `@/lib/fields/field-display`: an authored semantic
4118
+ * label is shown as is, otherwise the physical column name. A field whose
4119
+ * `label` still equals `derivedLabel` has no authored label; any later
4120
+ * edit to `label` makes it authored without touching this marker.
4121
+ */
4122
+ derivedLabel?: string;
4114
4123
  /**
4115
4124
  * Unique, stable, machine-friendly reference name for SQL (AS alias), exports, and scripting.
4116
4125
  * If not provided, should be auto-generated from label or name.
@@ -4491,6 +4500,15 @@ declare type SemaphorInputOptionsIntent = SemaphorInputOptionSource & {
4491
4500
  dependencies?: SemaphorOptionDependencies;
4492
4501
  search?: string;
4493
4502
  limit?: number;
4503
+ /**
4504
+ * Authoritative selected-value relevance check: return only options whose
4505
+ * value is one of these exact raw values, under the same dependency and
4506
+ * population context, with no search or paging. Bounded by
4507
+ * `MAX_OPTION_MATCH_VALUES`. The result's `match.complete` says whether
4508
+ * absence from the returned options proves no match. Scalars only; see
4509
+ * `parseOptionMatchValues`.
4510
+ */
4511
+ matchValues?: Array<string | number | boolean>;
4494
4512
  inputs?: SemaphorInputBinding[];
4495
4513
  derivedFields?: SemaphorDerivedFieldDefinition[];
4496
4514
  };
@@ -4543,11 +4561,24 @@ declare type SemaphorMetricIntent = {
4543
4561
  };
4544
4562
 
4545
4563
  declare type SemaphorOptionDependencies = {
4546
- mode?: 'independent' | 'explicit';
4564
+ /** Omitted mode means independent for protocol callers. Dashboard authoring
4565
+ * normalizes omission separately through `resolveDashboardOptionDependencies`. */
4566
+ mode?: SemaphorOptionDependencyMode;
4547
4567
  includeInputIds?: string[];
4548
4568
  excludeInputIds?: string[];
4569
+ /**
4570
+ * Ephemeral browse override: explicit dependencies the viewer asked to
4571
+ * browse without. Only valid in explicit mode, only for ids in
4572
+ * `includeInputIds`, and only honored by the server when that dependency
4573
+ * would otherwise fail with an overridable reason (see
4574
+ * `OVERRIDABLE_OPTION_DEPENDENCY_REASONS`). Never persisted, never applied
4575
+ * to card predicates; it lives in one browse request and its cache identity.
4576
+ */
4577
+ omitInputIds?: string[];
4549
4578
  };
4550
4579
 
4580
+ declare type SemaphorOptionDependencyMode = 'independent' | 'explicit' | 'all_applicable';
4581
+
4551
4582
  declare type SemaphorOptionPopulation = {
4552
4583
  kind: 'option_source';
4553
4584
  baseSource?: never;
@@ -3620,6 +3620,15 @@ declare interface Field {
3620
3620
  * Human-friendly, localizable display name for the UI (table headers, chart axes, etc.).
3621
3621
  */
3622
3622
  label: string;
3623
+ /**
3624
+ * Set only when `label` was synthesized from `name` because the source
3625
+ * provided no authored label (raw database objects). Field pickers follow
3626
+ * the naming rule in `@/lib/fields/field-display`: an authored semantic
3627
+ * label is shown as is, otherwise the physical column name. A field whose
3628
+ * `label` still equals `derivedLabel` has no authored label; any later
3629
+ * edit to `label` makes it authored without touching this marker.
3630
+ */
3631
+ derivedLabel?: string;
3623
3632
  /**
3624
3633
  * Unique, stable, machine-friendly reference name for SQL (AS alias), exports, and scripting.
3625
3634
  * If not provided, should be auto-generated from label or name.
@@ -5359,6 +5368,15 @@ declare type SemaphorInputOptionsIntent = SemaphorInputOptionSource & {
5359
5368
  dependencies?: SemaphorOptionDependencies;
5360
5369
  search?: string;
5361
5370
  limit?: number;
5371
+ /**
5372
+ * Authoritative selected-value relevance check: return only options whose
5373
+ * value is one of these exact raw values, under the same dependency and
5374
+ * population context, with no search or paging. Bounded by
5375
+ * `MAX_OPTION_MATCH_VALUES`. The result's `match.complete` says whether
5376
+ * absence from the returned options proves no match. Scalars only; see
5377
+ * `parseOptionMatchValues`.
5378
+ */
5379
+ matchValues?: Array<string | number | boolean>;
5362
5380
  inputs?: SemaphorInputBinding[];
5363
5381
  derivedFields?: SemaphorDerivedFieldDefinition[];
5364
5382
  };
@@ -5413,11 +5431,24 @@ declare type SemaphorMetricIntent = {
5413
5431
  };
5414
5432
 
5415
5433
  declare type SemaphorOptionDependencies = {
5416
- mode?: 'independent' | 'explicit';
5434
+ /** Omitted mode means independent for protocol callers. Dashboard authoring
5435
+ * normalizes omission separately through `resolveDashboardOptionDependencies`. */
5436
+ mode?: SemaphorOptionDependencyMode;
5417
5437
  includeInputIds?: string[];
5418
5438
  excludeInputIds?: string[];
5439
+ /**
5440
+ * Ephemeral browse override: explicit dependencies the viewer asked to
5441
+ * browse without. Only valid in explicit mode, only for ids in
5442
+ * `includeInputIds`, and only honored by the server when that dependency
5443
+ * would otherwise fail with an overridable reason (see
5444
+ * `OVERRIDABLE_OPTION_DEPENDENCY_REASONS`). Never persisted, never applied
5445
+ * to card predicates; it lives in one browse request and its cache identity.
5446
+ */
5447
+ omitInputIds?: string[];
5419
5448
  };
5420
5449
 
5450
+ declare type SemaphorOptionDependencyMode = 'independent' | 'explicit' | 'all_applicable';
5451
+
5421
5452
  declare type SemaphorOptionPopulation = {
5422
5453
  kind: 'option_source';
5423
5454
  baseSource?: never;
@@ -3618,6 +3618,15 @@ declare interface Field {
3618
3618
  * Human-friendly, localizable display name for the UI (table headers, chart axes, etc.).
3619
3619
  */
3620
3620
  label: string;
3621
+ /**
3622
+ * Set only when `label` was synthesized from `name` because the source
3623
+ * provided no authored label (raw database objects). Field pickers follow
3624
+ * the naming rule in `@/lib/fields/field-display`: an authored semantic
3625
+ * label is shown as is, otherwise the physical column name. A field whose
3626
+ * `label` still equals `derivedLabel` has no authored label; any later
3627
+ * edit to `label` makes it authored without touching this marker.
3628
+ */
3629
+ derivedLabel?: string;
3621
3630
  /**
3622
3631
  * Unique, stable, machine-friendly reference name for SQL (AS alias), exports, and scripting.
3623
3632
  * If not provided, should be auto-generated from label or name.
@@ -5331,6 +5340,15 @@ declare type SemaphorInputOptionsIntent = SemaphorInputOptionSource & {
5331
5340
  dependencies?: SemaphorOptionDependencies;
5332
5341
  search?: string;
5333
5342
  limit?: number;
5343
+ /**
5344
+ * Authoritative selected-value relevance check: return only options whose
5345
+ * value is one of these exact raw values, under the same dependency and
5346
+ * population context, with no search or paging. Bounded by
5347
+ * `MAX_OPTION_MATCH_VALUES`. The result's `match.complete` says whether
5348
+ * absence from the returned options proves no match. Scalars only; see
5349
+ * `parseOptionMatchValues`.
5350
+ */
5351
+ matchValues?: Array<string | number | boolean>;
5334
5352
  inputs?: SemaphorInputBinding[];
5335
5353
  derivedFields?: SemaphorDerivedFieldDefinition[];
5336
5354
  };
@@ -5385,11 +5403,24 @@ declare type SemaphorMetricIntent = {
5385
5403
  };
5386
5404
 
5387
5405
  declare type SemaphorOptionDependencies = {
5388
- mode?: 'independent' | 'explicit';
5406
+ /** Omitted mode means independent for protocol callers. Dashboard authoring
5407
+ * normalizes omission separately through `resolveDashboardOptionDependencies`. */
5408
+ mode?: SemaphorOptionDependencyMode;
5389
5409
  includeInputIds?: string[];
5390
5410
  excludeInputIds?: string[];
5411
+ /**
5412
+ * Ephemeral browse override: explicit dependencies the viewer asked to
5413
+ * browse without. Only valid in explicit mode, only for ids in
5414
+ * `includeInputIds`, and only honored by the server when that dependency
5415
+ * would otherwise fail with an overridable reason (see
5416
+ * `OVERRIDABLE_OPTION_DEPENDENCY_REASONS`). Never persisted, never applied
5417
+ * to card predicates; it lives in one browse request and its cache identity.
5418
+ */
5419
+ omitInputIds?: string[];
5391
5420
  };
5392
5421
 
5422
+ declare type SemaphorOptionDependencyMode = 'independent' | 'explicit' | 'all_applicable';
5423
+
5393
5424
  declare type SemaphorOptionPopulation = {
5394
5425
  kind: 'option_source';
5395
5426
  baseSource?: never;
@@ -3586,6 +3586,15 @@ declare interface Field {
3586
3586
  * Human-friendly, localizable display name for the UI (table headers, chart axes, etc.).
3587
3587
  */
3588
3588
  label: string;
3589
+ /**
3590
+ * Set only when `label` was synthesized from `name` because the source
3591
+ * provided no authored label (raw database objects). Field pickers follow
3592
+ * the naming rule in `@/lib/fields/field-display`: an authored semantic
3593
+ * label is shown as is, otherwise the physical column name. A field whose
3594
+ * `label` still equals `derivedLabel` has no authored label; any later
3595
+ * edit to `label` makes it authored without touching this marker.
3596
+ */
3597
+ derivedLabel?: string;
3589
3598
  /**
3590
3599
  * Unique, stable, machine-friendly reference name for SQL (AS alias), exports, and scripting.
3591
3600
  * If not provided, should be auto-generated from label or name.
@@ -4836,6 +4845,15 @@ declare type SemaphorInputOptionsIntent = SemaphorInputOptionSource & {
4836
4845
  dependencies?: SemaphorOptionDependencies;
4837
4846
  search?: string;
4838
4847
  limit?: number;
4848
+ /**
4849
+ * Authoritative selected-value relevance check: return only options whose
4850
+ * value is one of these exact raw values, under the same dependency and
4851
+ * population context, with no search or paging. Bounded by
4852
+ * `MAX_OPTION_MATCH_VALUES`. The result's `match.complete` says whether
4853
+ * absence from the returned options proves no match. Scalars only; see
4854
+ * `parseOptionMatchValues`.
4855
+ */
4856
+ matchValues?: Array<string | number | boolean>;
4839
4857
  inputs?: SemaphorInputBinding[];
4840
4858
  derivedFields?: SemaphorDerivedFieldDefinition[];
4841
4859
  };
@@ -4940,11 +4958,24 @@ declare type SemaphorMetricQuerySpec = SemaphorQuerySourceSpec & SemaphorAppDeri
4940
4958
  declare type SemaphorNonEmptyArray<T> = [T, ...T[]];
4941
4959
 
4942
4960
  declare type SemaphorOptionDependencies = {
4943
- mode?: 'independent' | 'explicit';
4961
+ /** Omitted mode means independent for protocol callers. Dashboard authoring
4962
+ * normalizes omission separately through `resolveDashboardOptionDependencies`. */
4963
+ mode?: SemaphorOptionDependencyMode;
4944
4964
  includeInputIds?: string[];
4945
4965
  excludeInputIds?: string[];
4966
+ /**
4967
+ * Ephemeral browse override: explicit dependencies the viewer asked to
4968
+ * browse without. Only valid in explicit mode, only for ids in
4969
+ * `includeInputIds`, and only honored by the server when that dependency
4970
+ * would otherwise fail with an overridable reason (see
4971
+ * `OVERRIDABLE_OPTION_DEPENDENCY_REASONS`). Never persisted, never applied
4972
+ * to card predicates; it lives in one browse request and its cache identity.
4973
+ */
4974
+ omitInputIds?: string[];
4946
4975
  };
4947
4976
 
4977
+ declare type SemaphorOptionDependencyMode = 'independent' | 'explicit' | 'all_applicable';
4978
+
4948
4979
  declare type SemaphorOptionPopulation = {
4949
4980
  kind: 'option_source';
4950
4981
  baseSource?: never;
@@ -3586,6 +3586,15 @@ declare interface Field {
3586
3586
  * Human-friendly, localizable display name for the UI (table headers, chart axes, etc.).
3587
3587
  */
3588
3588
  label: string;
3589
+ /**
3590
+ * Set only when `label` was synthesized from `name` because the source
3591
+ * provided no authored label (raw database objects). Field pickers follow
3592
+ * the naming rule in `@/lib/fields/field-display`: an authored semantic
3593
+ * label is shown as is, otherwise the physical column name. A field whose
3594
+ * `label` still equals `derivedLabel` has no authored label; any later
3595
+ * edit to `label` makes it authored without touching this marker.
3596
+ */
3597
+ derivedLabel?: string;
3589
3598
  /**
3590
3599
  * Unique, stable, machine-friendly reference name for SQL (AS alias), exports, and scripting.
3591
3600
  * If not provided, should be auto-generated from label or name.
@@ -8208,6 +8217,15 @@ declare type SemaphorInputOptionsIntent = SemaphorInputOptionSource & {
8208
8217
  dependencies?: SemaphorOptionDependencies;
8209
8218
  search?: string;
8210
8219
  limit?: number;
8220
+ /**
8221
+ * Authoritative selected-value relevance check: return only options whose
8222
+ * value is one of these exact raw values, under the same dependency and
8223
+ * population context, with no search or paging. Bounded by
8224
+ * `MAX_OPTION_MATCH_VALUES`. The result's `match.complete` says whether
8225
+ * absence from the returned options proves no match. Scalars only; see
8226
+ * `parseOptionMatchValues`.
8227
+ */
8228
+ matchValues?: Array<string | number | boolean>;
8211
8229
  inputs?: SemaphorInputBinding[];
8212
8230
  derivedFields?: SemaphorDerivedFieldDefinition[];
8213
8231
  };
@@ -8244,6 +8262,9 @@ declare type SemaphorInputOptionsQuerySpec = Omit<SemaphorQuerySourceSpec, 'sour
8244
8262
 
8245
8263
  declare type SemaphorInputOptionsResult = SemaphorAnalyticsResultBase & {
8246
8264
  kind: 'inputOptions';
8265
+ dependencyOutcomes?: SemaphorOptionDependencyOutcome[];
8266
+ /** Present when the intent carried `matchValues`. */
8267
+ match?: SemaphorOptionMatchResult;
8247
8268
  options: Array<{
8248
8269
  label: string;
8249
8270
  value: unknown;
@@ -8348,9 +8369,42 @@ declare type SemaphorMetricResult = SemaphorAnalyticsResultBase & {
8348
8369
  declare type SemaphorNonEmptyArray<T> = [T, ...T[]];
8349
8370
 
8350
8371
  declare type SemaphorOptionDependencies = {
8351
- mode?: 'independent' | 'explicit';
8372
+ /** Omitted mode means independent for protocol callers. Dashboard authoring
8373
+ * normalizes omission separately through `resolveDashboardOptionDependencies`. */
8374
+ mode?: SemaphorOptionDependencyMode;
8352
8375
  includeInputIds?: string[];
8353
8376
  excludeInputIds?: string[];
8377
+ /**
8378
+ * Ephemeral browse override: explicit dependencies the viewer asked to
8379
+ * browse without. Only valid in explicit mode, only for ids in
8380
+ * `includeInputIds`, and only honored by the server when that dependency
8381
+ * would otherwise fail with an overridable reason (see
8382
+ * `OVERRIDABLE_OPTION_DEPENDENCY_REASONS`). Never persisted, never applied
8383
+ * to card predicates; it lives in one browse request and its cache identity.
8384
+ */
8385
+ omitInputIds?: string[];
8386
+ };
8387
+
8388
+ declare type SemaphorOptionDependencyMode = 'independent' | 'explicit' | 'all_applicable';
8389
+
8390
+ /** Per-candidate classification of an option query's dependencies. Describes
8391
+ * which viewer selections constrained the option list; it never substitutes
8392
+ * for execution success or failure. */
8393
+ declare type SemaphorOptionDependencyOutcome = {
8394
+ inputId: string;
8395
+ status: SemaphorOptionDependencyOutcomeStatus;
8396
+ reason?: SemaphorOptionDependencyOutcomeReason;
8397
+ };
8398
+
8399
+ declare type SemaphorOptionDependencyOutcomeReason = 'unrelated' | 'population_required' | 'missing_dependency' | 'missing_relationship' | 'ambiguous_relationship' | 'invalid_metadata' | 'unsupported_dependency' | 'override_not_eligible';
8400
+
8401
+ declare type SemaphorOptionDependencyOutcomeStatus = 'applied' | 'inactive' | 'skipped' | 'overridden' | 'error';
8402
+
8403
+ declare type SemaphorOptionMatchResult = {
8404
+ /** True only when every submitted value was evaluated by a complete exact
8405
+ * check; only then may absence be read as `no_match`. */
8406
+ complete: boolean;
8407
+ reason?: 'unsupported' | 'truncated';
8354
8408
  };
8355
8409
 
8356
8410
  declare type SemaphorOptionPopulation = {