@unified-product-graph/core 0.28.0 → 0.30.0

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.
package/dist/index.d.ts CHANGED
@@ -11,7 +11,7 @@
11
11
  * @see registry/entity-meta.ts for type IDs and maturity
12
12
  * @see grammar/hierarchy.ts for parent-child rules
13
13
  */
14
- type UPGEntityType = 'specification' | 'primitive' | 'operating_lifecycle' | 'operating_stage' | 'product' | 'outcome' | 'objective' | 'key_result' | 'metric' | 'metric_quality_assessment' | 'vision' | 'mission' | 'strategic_theme' | 'initiative' | 'capability' | 'value_stream' | 'strategic_pillar' | 'assumption' | 'decision' | 'constraint' | 'strategic_question' | 'persona' | 'job' | 'need' | 'desired_outcome' | 'job_step' | 'switching_cost' | 'opportunity' | 'solution' | 'feasibility_study' | 'design_sprint' | 'hypothesis' | 'hypothesis_evidence' | 'experiment' | 'experiment_plan' | 'experiment_run' | 'learning' | 'test_plan' | 'evidence' | 'research_plan' | 'competitor' | 'competitor_feature' | 'competitor_signal' | 'market_trend' | 'market_segment' | 'competitive_analysis' | 'classification_axis' | 'classification_value' | 'research_study' | 'insight' | 'participant' | 'observation' | 'quote' | 'affinity_cluster' | 'research_question' | 'interview_guide' | 'survey_response' | 'user_journey' | 'journey_step' | 'journey_phase' | 'journey_action' | 'design_question' | 'design_concept' | 'prototype' | 'wireframe' | 'user_flow' | 'screen' | 'screen_state' | 'surface' | 'annotation' | 'interaction_spec' | 'design_component' | 'design_token' | 'design_system' | 'design_pattern' | 'design_guideline' | 'brand_identity' | 'brand_colour' | 'brand_typography' | 'brand_voice' | 'brand_logo' | 'brand_imagery' | 'feature_area' | 'feature' | 'epic' | 'user_story' | 'story_statement' | 'story_task' | 'acceptance_criterion' | 'release' | 'task' | 'bug' | 'roadmap' | 'roadmap_item' | 'theme' | 'roadmap_theme' | 'changelog' | 'planning_cycle' | 'bounded_context' | 'service' | 'domain_event' | 'api_contract' | 'technical_debt_item' | 'feature_flag' | 'deployment' | 'aggregate' | 'domain_entity' | 'value_object' | 'command' | 'read_model' | 'api_endpoint' | 'database_schema' | 'queue_topic' | 'build_artifact' | 'code_repository' | 'library_dependency' | 'integration_pattern' | 'external_api' | 'data_flow' | 'investigation' | 'root_cause' | 'symptom' | 'fix' | 'funnel' | 'funnel_step' | 'acquisition_channel' | 'growth_campaign' | 'cohort' | 'behavioral_segment' | 'growth_loop' | 'variant' | 'attribution_model' | 'business_model' | 'value_proposition' | 'revenue_stream' | 'pricing_tier' | 'cost_structure' | 'unit_economics' | 'partnership' | 'key_resource' | 'key_activity' | 'customer_relationship' | 'distribution_channel' | 'gtm_strategy' | 'ideal_customer_profile' | 'positioning' | 'messaging' | 'launch' | 'content_strategy' | 'sales_motion' | 'competitive_battle_card' | 'demand_gen_program' | 'territory' | 'objection' | 'rebuttal' | 'proof_point' | 'team' | 'role' | 'stakeholder' | 'person' | 'team_okr' | 'retrospective' | 'dependency' | 'department' | 'skill' | 'ceremony' | 'capacity_plan' | 'data_source' | 'event_schema' | 'dashboard' | 'data_model' | 'data_quality_rule' | 'data_product' | 'data_pipeline' | 'data_lineage' | 'glossary_term' | 'data_domain' | 'report' | 'content_piece' | 'knowledge_base_article' | 'brand_asset' | 'prompt_template' | 'content_calendar' | 'content_theme' | 'documentation_template' | 'document' | 'legal_entity' | 'ip_asset' | 'contract' | 'contract_clause' | 'privacy_policy' | 'compliance_requirement' | 'risk' | 'data_contract' | 'audit_log_policy' | 'compliance_framework' | 'security_audit' | 'service_level_indicator' | 'service_level_objective' | 'error_budget' | 'incident' | 'postmortem' | 'runbook' | 'monitor' | 'alert_rule' | 'ci_pipeline' | 'release_strategy' | 'on_call_rotation' | 'infrastructure_component' | 'threat_model' | 'threat' | 'vulnerability' | 'security_control' | 'security_policy' | 'penetration_test' | 'security_review' | 'data_classification' | 'access_policy' | 'a11y_standard' | 'a11y_guideline' | 'a11y_audit' | 'a11y_issue' | 'a11y_annotation' | 'test_suite' | 'test_case' | 'qa_session' | 'regression_test' | 'test_coverage_report' | 'test_environment' | 'test_result' | 'feedback_program' | 'feature_request' | 'feedback_vote' | 'nps_campaign' | 'user_advisory_board' | 'beta_program' | 'feedback_theme' | 'pricing_strategy' | 'discount_strategy' | 'trial_config' | 'paywall' | 'ai_model' | 'prompt_version' | 'eval_benchmark' | 'eval_run' | 'ai_cost_tracker' | 'hallucination_report' | 'ai_guardrail' | 'model_comparison' | 'ai_experiment' | 'ai_dataset' | 'ai_trace' | 'workflow_template' | 'workflow_run' | 'agent_definition' | 'agent_session' | 'review_gate' | 'approval_record' | 'agent_skill' | 'agent_hook' | 'workflow_artifact' | 'agent_task' | 'organization' | 'portfolio' | 'product_area' | 'workspace' | 'framework_exercise' | 'account' | 'contact' | 'lead' | 'deal' | 'pipeline_sales' | 'pipeline_stage' | 'quote_document' | 'subscription' | 'invoice' | 'forecast' | 'program' | 'project' | 'milestone' | 'risk_register' | 'change_request' | 'deliverable' | 'resource_allocation' | 'status_report' | 'marketing_strategy' | 'marketing_channel' | 'marketing_campaign_plan' | 'email_sequence' | 'social_post' | 'seo_keyword' | 'ad_creative' | 'press_release' | 'event' | 'community_initiative' | 'support_ticket' | 'customer_feedback' | 'churn_reason' | 'customer_health_score' | 'playbook' | 'service_level_agreement' | 'customer_journey_stage' | 'touchpoint' | 'success_milestone' | 'service_blueprint' | 'locale' | 'translation_key' | 'translation_bundle' | 'locale_config' | 'cultural_adaptation' | 'regional_pricing' | 'education_program' | 'tutorial' | 'walkthrough' | 'webinar' | 'certification' | 'help_video' | 'learning_path' | 'partner_program' | 'partner_tier' | 'api_ecosystem' | 'marketplace_listing' | 'developer_portal' | 'integration_partner' | 'partner_revenue_share';
14
+ type UPGEntityType = 'specification' | 'primitive' | 'operating_lifecycle' | 'operating_stage' | 'product' | 'outcome' | 'objective' | 'key_result' | 'metric' | 'metric_quality_assessment' | 'vision' | 'mission' | 'strategic_theme' | 'initiative' | 'capability' | 'value_stream' | 'strategic_pillar' | 'assumption' | 'decision' | 'constraint' | 'strategic_question' | 'persona' | 'job' | 'need' | 'desired_outcome' | 'job_step' | 'switching_cost' | 'opportunity' | 'solution' | 'feasibility_study' | 'design_sprint' | 'hypothesis' | 'hypothesis_evidence' | 'experiment' | 'experiment_plan' | 'experiment_run' | 'learning' | 'test_plan' | 'evidence' | 'research_plan' | 'competitor' | 'competitor_feature' | 'competitor_signal' | 'market_trend' | 'market_segment' | 'competitive_analysis' | 'classification_axis' | 'classification_value' | 'research_study' | 'insight' | 'participant' | 'observation' | 'quote' | 'affinity_cluster' | 'research_question' | 'interview_guide' | 'survey_response' | 'user_journey' | 'journey_step' | 'journey_phase' | 'journey_action' | 'design_question' | 'design_concept' | 'prototype' | 'wireframe' | 'user_flow' | 'screen' | 'screen_state' | 'surface' | 'annotation' | 'interaction_spec' | 'design_component' | 'design_token' | 'design_system' | 'design_pattern' | 'design_guideline' | 'brand_identity' | 'brand_colour' | 'brand_typography' | 'brand_voice' | 'brand_logo' | 'brand_imagery' | 'feature_area' | 'feature' | 'epic' | 'user_story' | 'story_statement' | 'story_task' | 'acceptance_criterion' | 'release' | 'task' | 'bug' | 'roadmap' | 'roadmap_item' | 'theme' | 'roadmap_theme' | 'changelog' | 'planning_cycle' | 'configuration_axis' | 'bounded_context' | 'service' | 'domain_event' | 'api_contract' | 'technical_debt_item' | 'feature_flag' | 'deployment' | 'aggregate' | 'domain_entity' | 'value_object' | 'command' | 'read_model' | 'api_endpoint' | 'database_schema' | 'queue_topic' | 'build_artifact' | 'code_repository' | 'library_dependency' | 'integration_pattern' | 'external_api' | 'data_flow' | 'investigation' | 'root_cause' | 'symptom' | 'fix' | 'funnel' | 'funnel_step' | 'acquisition_channel' | 'growth_campaign' | 'cohort' | 'behavioral_segment' | 'growth_loop' | 'variant' | 'attribution_model' | 'business_model' | 'value_proposition' | 'revenue_stream' | 'pricing_tier' | 'cost_structure' | 'unit_economics' | 'partnership' | 'key_resource' | 'key_activity' | 'customer_relationship' | 'distribution_channel' | 'gtm_strategy' | 'ideal_customer_profile' | 'positioning' | 'messaging' | 'launch' | 'content_strategy' | 'sales_motion' | 'competitive_battle_card' | 'demand_gen_program' | 'territory' | 'objection' | 'rebuttal' | 'proof_point' | 'team' | 'role' | 'stakeholder' | 'person' | 'team_okr' | 'retrospective' | 'dependency' | 'department' | 'skill' | 'ceremony' | 'capacity_plan' | 'data_source' | 'event_schema' | 'dashboard' | 'data_model' | 'data_quality_rule' | 'data_product' | 'data_pipeline' | 'data_lineage' | 'glossary_term' | 'data_domain' | 'report' | 'content_piece' | 'knowledge_base_article' | 'brand_asset' | 'prompt_template' | 'content_calendar' | 'content_theme' | 'documentation_template' | 'document' | 'legal_entity' | 'ip_asset' | 'contract' | 'contract_clause' | 'privacy_policy' | 'compliance_requirement' | 'risk' | 'data_contract' | 'audit_log_policy' | 'compliance_framework' | 'security_audit' | 'service_level_indicator' | 'service_level_objective' | 'error_budget' | 'incident' | 'postmortem' | 'runbook' | 'monitor' | 'alert_rule' | 'ci_pipeline' | 'release_strategy' | 'on_call_rotation' | 'infrastructure_component' | 'threat_model' | 'threat' | 'vulnerability' | 'security_control' | 'security_policy' | 'penetration_test' | 'security_review' | 'data_classification' | 'access_policy' | 'a11y_standard' | 'a11y_guideline' | 'a11y_audit' | 'a11y_issue' | 'a11y_annotation' | 'test_suite' | 'test_case' | 'qa_session' | 'regression_test' | 'test_coverage_report' | 'test_environment' | 'test_result' | 'feedback_program' | 'feature_request' | 'feedback_vote' | 'nps_campaign' | 'user_advisory_board' | 'beta_program' | 'feedback_theme' | 'pricing_strategy' | 'discount_strategy' | 'trial_config' | 'paywall' | 'ai_model' | 'prompt_version' | 'eval_benchmark' | 'eval_run' | 'ai_cost_tracker' | 'hallucination_report' | 'ai_guardrail' | 'model_comparison' | 'ai_experiment' | 'ai_dataset' | 'ai_trace' | 'workflow_template' | 'workflow_run' | 'agent_definition' | 'agent_session' | 'review_gate' | 'approval_record' | 'agent_skill' | 'agent_hook' | 'workflow_artifact' | 'agent_task' | 'organization' | 'portfolio' | 'product_area' | 'workspace' | 'framework_exercise' | 'account' | 'contact' | 'lead' | 'deal' | 'pipeline_sales' | 'pipeline_stage' | 'quote_document' | 'subscription' | 'invoice' | 'forecast' | 'program' | 'project' | 'milestone' | 'risk_register' | 'change_request' | 'deliverable' | 'resource_allocation' | 'status_report' | 'marketing_strategy' | 'marketing_channel' | 'marketing_campaign_plan' | 'email_sequence' | 'social_post' | 'seo_keyword' | 'ad_creative' | 'press_release' | 'event' | 'community_initiative' | 'support_ticket' | 'customer_feedback' | 'churn_reason' | 'customer_health_score' | 'playbook' | 'service_level_agreement' | 'customer_journey_stage' | 'touchpoint' | 'success_milestone' | 'service_blueprint' | 'locale' | 'translation_key' | 'translation_bundle' | 'locale_config' | 'cultural_adaptation' | 'regional_pricing' | 'education_program' | 'tutorial' | 'walkthrough' | 'webinar' | 'certification' | 'help_video' | 'learning_path' | 'partner_program' | 'partner_tier' | 'api_ecosystem' | 'marketplace_listing' | 'developer_portal' | 'integration_partner' | 'partner_revenue_share';
15
15
  /**
16
16
  * No entity types are currently deprecated; this union is `never`. The
17
17
  * deprecated-name bridge, which previously widened this union to early
@@ -138,7 +138,7 @@ interface UPGBaseNode {
138
138
  * wall-clock timestamp: generation is deterministic). This file is a GATED
139
139
  * artifact — check:generated re-runs the generator and fails on any drift, so
140
140
  * edit the sources above, never this file.
141
- * Entity types with properties: 324
141
+ * Entity types with properties: 325
142
142
  */
143
143
  interface PropertyDefinition {
144
144
  type: 'string' | 'number' | 'boolean' | 'string[]' | 'object' | 'object[]' | 'assessment';
@@ -283,6 +283,42 @@ declare const CLASSIFICATION_EDGE_PROPERTY_SCHEMA: PropertySchema;
283
283
  * a stated period); the writers reject any other key.
284
284
  */
285
285
  declare const DEFER_EDGE_PROPERTY_SCHEMA: PropertySchema;
286
+ /**
287
+ * Property schema carried by `surface_varies_by_configuration_axis` (0.30.0).
288
+ *
289
+ * CONDITIONAL EXISTENCE, expressed as an edge. The surface exists in the stored
290
+ * graph regardless; this edge says which members of the configuration family it
291
+ * appears in. No edge at all means invariant, which is why every graph written
292
+ * before this existed keeps meaning exactly what it meant.
293
+ */
294
+ declare const CONFIGURATION_VARIANCE_EDGE_PROPERTY_SCHEMA: PropertySchema;
295
+ /**
296
+ * Property schema carried by the two surface-composition edges
297
+ * (`surface_contains_surface` and `feature_occupies_surface`), 0.30.0.
298
+ *
299
+ * A single `active_when` key qualifies the relationship by a configuration
300
+ * axis: the edge holds only under the named values, and is absent from every
301
+ * other projection.
302
+ *
303
+ * SCOPE IS THE POINT, NOT AN OVERSIGHT. These two edges are the whole legal
304
+ * surface for the qualifier, and `validate_graph` rejects `active_when` on any
305
+ * other edge type. UPG is not adding a general modality system on one field
306
+ * report; it is answering the composition question that report actually asked.
307
+ * Any further edge earns the qualifier on field evidence, one at a time.
308
+ *
309
+ * A QUALIFIER CANNOT EXPRESS NON-EXISTENCE. If the surface itself is absent
310
+ * under a value, say so on the node with `surface_varies_by_configuration_axis`;
311
+ * the projection then drops this edge as dangling and the qualifier is
312
+ * redundant. Reach for `active_when` only when BOTH endpoints exist and the
313
+ * RELATIONSHIP is what changes: the occupant that moves to a different row, the
314
+ * feature that occupies a different place under the flag.
315
+ *
316
+ * ONE AXIS PER QUALIFIER. An edge conditional on two axes at once is a stated
317
+ * non-goal; where it is genuinely needed, the honest model is one axis whose
318
+ * values are the combinations that actually occur, which is the same discipline
319
+ * as "one axis per semantic lever".
320
+ */
321
+ declare const CONFIGURATION_QUALIFIER_EDGE_PROPERTY_SCHEMA: PropertySchema;
286
322
  declare const UPG_EDGE_CATALOG: {
287
323
  product_targets_persona: {
288
324
  forward_verb: string;
@@ -1769,6 +1805,8 @@ declare const UPG_EDGE_CATALOG: {
1769
1805
  classification: "hierarchy";
1770
1806
  source_type: string;
1771
1807
  target_type: string;
1808
+ carries_properties: true;
1809
+ property_schema: PropertySchema;
1772
1810
  };
1773
1811
  surface_serves_job: {
1774
1812
  forward_verb: string;
@@ -1815,12 +1853,44 @@ declare const UPG_EDGE_CATALOG: {
1815
1853
  source_type: string;
1816
1854
  target_type: string;
1817
1855
  };
1856
+ product_defines_configuration_axis: {
1857
+ forward_verb: string;
1858
+ reverse_verb: string;
1859
+ classification: "hierarchy";
1860
+ source_type: string;
1861
+ target_type: string;
1862
+ };
1863
+ feature_flag_drives_configuration_axis: {
1864
+ forward_verb: string;
1865
+ reverse_verb: string;
1866
+ classification: "cross-domain";
1867
+ source_type: string;
1868
+ target_type: string;
1869
+ };
1870
+ surface_varies_by_configuration_axis: {
1871
+ forward_verb: string;
1872
+ reverse_verb: string;
1873
+ classification: "cross-domain";
1874
+ source_type: string;
1875
+ target_type: string;
1876
+ carries_properties: true;
1877
+ property_schema: PropertySchema;
1878
+ };
1879
+ surface_alternates_with_surface: {
1880
+ forward_verb: string;
1881
+ reverse_verb: string;
1882
+ classification: "semantic";
1883
+ source_type: string;
1884
+ target_type: string;
1885
+ };
1818
1886
  feature_occupies_surface: {
1819
1887
  forward_verb: string;
1820
1888
  reverse_verb: string;
1821
1889
  classification: "cross-domain";
1822
1890
  source_type: string;
1823
1891
  target_type: string;
1892
+ carries_properties: true;
1893
+ property_schema: PropertySchema;
1824
1894
  };
1825
1895
  screen_renders_surface: {
1826
1896
  forward_verb: string;
@@ -8715,7 +8785,7 @@ declare const UPG_DOMAINS: readonly [{
8715
8785
  readonly id: "product_spec";
8716
8786
  readonly label: "Product Specification";
8717
8787
  readonly description: "What you are building and shipping. Feature areas group related capabilities. Features, epics, and user stories break work down. Acceptance criteria define done. Tasks and bugs track execution. Releases and changelogs mark what shipped. Roadmaps and roadmap items plan what comes next. Roadmap themes group roadmap work around the customer problem it solves, one level down from the strategic themes in Strategy. Planning cycles are the cadence axis: the named, dated, self-nesting intervals (sprint, iteration, quarter, program increment, cooldown) that work is scheduled through. Translates Strategy into Engineering and tracks delivery through Program Management.";
8718
- readonly types: readonly ["feature", "feature_area", "epic", "user_story", "acceptance_criterion", "release", "task", "bug", "roadmap", "roadmap_item", "roadmap_theme", "changelog", "planning_cycle"];
8788
+ readonly types: readonly ["feature", "feature_area", "epic", "user_story", "acceptance_criterion", "release", "task", "bug", "roadmap", "roadmap_item", "roadmap_theme", "changelog", "planning_cycle", "configuration_axis"];
8719
8789
  }, {
8720
8790
  readonly id: "engineering";
8721
8791
  readonly label: "Engineering";
@@ -9011,6 +9081,203 @@ declare const UPG_CONTAINMENT_FREE_TYPES: ReadonlySet<string>;
9011
9081
  */
9012
9082
  declare function isContainmentFreeType(entityType: string): boolean;
9013
9083
 
9084
+ /**
9085
+ * UPG Configuration Projection (0.30.0).
9086
+ *
9087
+ * The stored graph is the UNION of a configuration family. A single
9088
+ * configuration is a PROJECTION of it, and this is the operator that takes one.
9089
+ *
9090
+ * π(G, C) drops what a named configuration does not contain and leaves
9091
+ * everything else exactly as it was. Facts that carry no configuration
9092
+ * qualification are invariant: they belong to every member of the family, which
9093
+ * is why a graph written before this existed projects to itself under every C
9094
+ * and needs no migration.
9095
+ *
9096
+ * PURE, AND DELIBERATELY STORE-FREE. It takes node and edge arrays and returns
9097
+ * node and edge arrays, so the local file store, the cloud SQL store and a
9098
+ * synthetic store built for validation preview all reuse one definition of what
9099
+ * a projection IS. A projection implemented twice is two projections.
9100
+ *
9101
+ * READ-ONLY. Nothing writes a projected graph back. The union is the file.
9102
+ *
9103
+ * https://unifiedproductgraph.org/spec | MIT
9104
+ */
9105
+ /** The minimum a node must expose to be projected. */
9106
+ interface ProjectableNode {
9107
+ id: string;
9108
+ type?: string;
9109
+ properties?: Record<string, unknown> | undefined;
9110
+ }
9111
+ /** The minimum an edge must expose to be projected. */
9112
+ interface ProjectableEdge {
9113
+ id?: string;
9114
+ source: string;
9115
+ target: string;
9116
+ type?: string;
9117
+ properties?: Record<string, unknown> | undefined;
9118
+ }
9119
+ /**
9120
+ * A configuration: axis node id to the single value that holds on it.
9121
+ *
9122
+ * PARTIAL BY DESIGN. An axis absent from the map is not applied, so every fact
9123
+ * qualified on it is retained. Projecting on nothing returns the union, which
9124
+ * makes a configuration a strictly narrowing filter an agent can apply
9125
+ * incrementally rather than an all-or-nothing mode.
9126
+ */
9127
+ type Configuration = Readonly<Record<string, string>>;
9128
+ /** The edge that declares conditional existence. */
9129
+ declare const VARIES_BY_EDGE = "surface_varies_by_configuration_axis";
9130
+ /** The property carried by that edge. */
9131
+ declare const PRESENT_UNDER_PROPERTY = "present_under";
9132
+ /** The qualifier property carried by the two composition edges. */
9133
+ declare const ACTIVE_WHEN_PROPERTY = "active_when";
9134
+ /**
9135
+ * The only edge types on which `active_when` is legal (D3).
9136
+ *
9137
+ * Scope is enforced, not merely documented: `validate_graph`'s
9138
+ * `configuration_drift` scope reports the qualifier on any other edge type as
9139
+ * an error. The projection operator itself is deliberately permissive here (it
9140
+ * honours a qualifier wherever it finds one) so that a graph carrying an
9141
+ * illegal qualifier still projects predictably while the validator names the
9142
+ * problem. Silently ignoring it would make the drift invisible in the one view
9143
+ * where its effect shows.
9144
+ */
9145
+ declare const QUALIFIABLE_EDGE_TYPES: readonly string[];
9146
+ /** Result of a projection: the surviving nodes and edges, plus what it dropped. */
9147
+ interface ProjectionResult<N extends ProjectableNode = ProjectableNode, E extends ProjectableEdge = ProjectableEdge> {
9148
+ nodes: N[];
9149
+ edges: E[];
9150
+ /** Node ids dropped because the configuration excluded them. */
9151
+ excluded_node_ids: string[];
9152
+ /** Count of edges dropped because their own qualifier excluded them. */
9153
+ deactivated_edge_count: number;
9154
+ /** Count of edges dropped because an endpoint was excluded. */
9155
+ dangling_edge_count: number;
9156
+ }
9157
+ /**
9158
+ * Read a string array property defensively; anything else reads as absent.
9159
+ *
9160
+ * Exported so the drift checker and the read-tool view share one reading of
9161
+ * what a list-valued configuration property is. Three copies of this drifting
9162
+ * apart is how a value the validator accepts becomes a value the projection
9163
+ * ignores.
9164
+ */
9165
+ declare function readStringArray(properties: Record<string, unknown> | undefined, key: string): string[] | undefined;
9166
+ /**
9167
+ * Read an `active_when` qualifier, or undefined when the edge carries none or
9168
+ * carries something malformed.
9169
+ *
9170
+ * A malformed qualifier reads as ABSENT rather than as "excludes everything".
9171
+ * Absence means the relationship is invariant, so a broken qualifier leaves the
9172
+ * edge in every projection: the graph shows too much rather than too little,
9173
+ * and `configuration_drift` reports the malformation by name. The alternative
9174
+ * would let one bad property silently delete structure from every view.
9175
+ */
9176
+ declare function readActiveWhen(edge: ProjectableEdge): {
9177
+ axis: string;
9178
+ values: string[];
9179
+ } | undefined;
9180
+ /**
9181
+ * Project a graph onto one configuration.
9182
+ *
9183
+ * Applied in order, ONCE. The operator is a filter, not a solver:
9184
+ *
9185
+ * 1. NODE EXCLUSION. A node is dropped when it declares variance on an axis
9186
+ * named in `configuration` and the chosen value is not in its
9187
+ * `present_under`. A node that says nothing about a named axis is retained,
9188
+ * because silence means invariant.
9189
+ * 2. EDGE DEACTIVATION. An edge is dropped when its own `active_when` names an
9190
+ * axis in `configuration` and the chosen value is not among its values.
9191
+ * 3. DANGLING REMOVAL. Any surviving edge with an endpoint dropped in step 1
9192
+ * goes too.
9193
+ *
9194
+ * NO CASCADE, AND THIS IS THE SUBTLE PART. A child surface is NOT dropped
9195
+ * because its parent was. The motivating field case is precisely a surface
9196
+ * whose PARENT changes under the flag (a navigation row splits in two and an
9197
+ * occupant moves into the new row), so cascading would delete a surface that is
9198
+ * genuinely present. A surface that survives with no containment parent in that
9199
+ * projection is a modelling gap for the validator to report, not a deletion for
9200
+ * the operator to guess at.
9201
+ *
9202
+ * COMMUTATIVE ACROSS AXES. Each axis's predicate reads only that axis, so
9203
+ * projecting on two axes in either order, or both at once, gives the same
9204
+ * result. Multi-axis projection therefore needs no ordering rule.
9205
+ *
9206
+ * @example
9207
+ * // A graph where the inspector exists only under the split-nav flag.
9208
+ * projectGraph(nodes, edges, { axis_nav: 'legacy_nav' }).nodes
9209
+ * // → every node except the split-nav-only surfaces
9210
+ */
9211
+ declare function projectGraph<N extends ProjectableNode = ProjectableNode, E extends ProjectableEdge = ProjectableEdge>(nodes: N[], edges: E[], configuration: Configuration): ProjectionResult<N, E>;
9212
+ /**
9213
+ * Every configuration this graph can be projected onto, one axis at a time.
9214
+ *
9215
+ * PER-AXIS, NOT CARTESIAN. The list is the union (an empty configuration) plus
9216
+ * one entry per declared value of each axis: `1 + Σ|values|`, linear in the
9217
+ * declarations. The cartesian product across axes is combinatorial and buys
9218
+ * nothing here, because every v1 qualifier reads a single axis and every check
9219
+ * that consumes a projection is surface-local. Cross-axis interaction is a
9220
+ * stated non-goal; when a detector needs it, this is the function that grows.
9221
+ */
9222
+ declare function enumerateProjections(nodes: ProjectableNode[]): Array<{
9223
+ axis?: string;
9224
+ value?: string;
9225
+ configuration: Configuration;
9226
+ }>;
9227
+
9228
+ /**
9229
+ * UPG Configuration Drift (0.30.0).
9230
+ *
9231
+ * Structural checking of the configuration declarations themselves: that an
9232
+ * axis is well formed, that every value named anywhere is a value the axis
9233
+ * actually declares, that the qualifier appears only where it is legal, and
9234
+ * that a declared alternation is consistent with what the declarations imply.
9235
+ *
9236
+ * DRIFT, NOT AN ANTI-PATTERN. These are contradictions inside the model, the
9237
+ * same family as an unknown entity type or a status outside its lifecycle: a
9238
+ * graph carrying one is saying something it cannot mean. Anti-patterns are the
9239
+ * other thing, judgements about a graph that is internally consistent, and
9240
+ * 0.30.0 deliberately mints none of those (a detector with no field evidence
9241
+ * behind it is how a check family gets noisy).
9242
+ *
9243
+ * Runs on the UNION. The declarations are facts about the whole family, so they
9244
+ * are checked once, not once per projection. The single exception is
9245
+ * `orphaned_under_projection`, which by definition can only be seen by taking
9246
+ * one.
9247
+ *
9248
+ * https://unifiedproductgraph.org/spec | MIT
9249
+ */
9250
+
9251
+ /** The kinds of configuration drift the validator reports. */
9252
+ type ConfigurationDriftKind = 'axis_values_empty' | 'axis_default_not_a_value' | 'present_under_empty' | 'present_under_unknown_value' | 'qualifier_axis_unresolved' | 'qualifier_values_empty' | 'qualifier_unknown_value' | 'qualifier_on_illegal_edge' | 'alternation_axis_mismatch' | 'alternation_overlap' | 'orphaned_under_projection';
9253
+ /** One configuration-drift finding. */
9254
+ interface ConfigurationDriftFinding {
9255
+ kind: ConfigurationDriftKind;
9256
+ /**
9257
+ * `error` means the graph contradicts itself and a projection of it cannot be
9258
+ * trusted. `warning` means the graph is coherent but a projection of it has a
9259
+ * gap worth looking at.
9260
+ */
9261
+ severity: 'error' | 'warning';
9262
+ /** The node this finding is about, when it is about a node. */
9263
+ node_id?: string;
9264
+ /** The edge this finding is about, when it is about an edge. */
9265
+ edge_id?: string;
9266
+ /** The axis involved, where one is identifiable. */
9267
+ axis_id?: string;
9268
+ /** Human-readable statement of what is wrong. */
9269
+ message: string;
9270
+ }
9271
+ /**
9272
+ * Check every configuration declaration in a graph.
9273
+ *
9274
+ * @param nodes All nodes in the union.
9275
+ * @param edges All edges in the union.
9276
+ * @returns Findings, in a stable order: axis checks, then variance, then
9277
+ * qualifiers, then alternation, then the per-projection orphan warning.
9278
+ */
9279
+ declare function checkConfigurationDrift(nodes: ProjectableNode[], edges: ProjectableEdge[]): ConfigurationDriftFinding[];
9280
+
9014
9281
  /**
9015
9282
  * UPG Lifecycles. Phase-and-state journeys for entity types with meaningful status.
9016
9283
  *
@@ -10803,6 +11070,23 @@ interface ProductProperties {
10803
11070
  logo_url?: string;
10804
11071
  /** When the product became generally available (ISO 8601) */
10805
11072
  launched_at?: ISODateTime;
11073
+ /**
11074
+ * The product configuration this graph describes, named in plain language.
11075
+ *
11076
+ * A product's composition often differs by feature flag, plan tier,
11077
+ * permission level or beta programme: surfaces appear, disappear, or are
11078
+ * replaced by different surfaces with different occupants. A graph that
11079
+ * models one of those without saying which is qualified by a condition
11080
+ * nobody wrote down, and every fact in it inherits that silence.
11081
+ *
11082
+ * NAMING, NOT CONFIGURING. This is a label for readers. Nothing reads it to
11083
+ * gate, filter, or alter how a tool interprets the graph, and it makes no
11084
+ * claim about which configuration most customers are on.
11085
+ *
11086
+ * @example "Enterprise plan, split-navigation flag on"
11087
+ * @example "Default: free tier, all flags off"
11088
+ */
11089
+ described_configuration?: string;
10806
11090
  }
10807
11091
  /** Vision entity.
10808
11092
  *
@@ -12917,6 +13201,21 @@ interface SurfaceProperties {
12917
13201
  * absence carries the "no cap" reading, rather than a magic sentinel value
12918
13202
  * that every consumer would have to special-case. `0` is a real cap meaning
12919
13203
  * "nothing may occupy this surface" (a reserved place), not "unbounded".
13204
+ *
13205
+ * THREE STATES, AND THEY ARE ALL DIFFERENT. Absent = unbounded, no cap
13206
+ * stated. `0` = a reserved place nothing may occupy. `null` = neither of
13207
+ * those, and nothing this field defines; it is what you get by writing an
13208
+ * explicit null rather than removing the key, and no consumer reads it as a
13209
+ * cap. To return this property to ABSENT, remove the key with
13210
+ * `update_node`'s or `batch_update_nodes`' `unset_properties`, since a
13211
+ * property merge preserves anything you omit.
13212
+ *
13213
+ * UNBOUNDED IS NOT AN EXEMPTION FROM SCRUTINY. The contention detector reads
13214
+ * an absent capacity as a threshold of 1, on the reasoning that a surface
13215
+ * which states no limit has stated no answer either, so several occupants is
13216
+ * exactly the unrecorded decision worth naming. Declaring a real capacity is
13217
+ * therefore the way to quiet the check honestly, and the only way that also
13218
+ * records something true.
12920
13219
  */
12921
13220
  capacity?: number;
12922
13221
  /**
@@ -13790,6 +14089,92 @@ interface PlanningCycleProperties {
13790
14089
  /** Shape Up appetite: the fixed time budget a cycle is willing to spend on a bet (e.g. "6 weeks", "2 weeks"). */
13791
14090
  appetite?: string;
13792
14091
  }
14092
+ /** What kind of lever this axis is. Names the mechanism family so a reader
14093
+ * knows what changing the value would mean operationally.
14094
+ *
14095
+ * - `feature_flag` — a runtime toggle owned by the product team.
14096
+ * - `plan_tier` — what the customer bought.
14097
+ * - `permission_level` — what this user is allowed to see.
14098
+ * - `beta_program` — enrolment in an early-access cohort.
14099
+ * - `other` — a lever that is none of these and is described in the node's
14100
+ * description rather than forced into a category that fits badly.
14101
+ */
14102
+ type ConfigurationAxisKind = 'feature_flag' | 'plan_tier' | 'permission_level' | 'beta_program' | 'other';
14103
+ /** A named dimension along which the product's composition differs.
14104
+ *
14105
+ * The stored graph is the UNION of a configuration family; an axis names one
14106
+ * dimension of that family, and a projection picks one value on it. A graph
14107
+ * that declares no axis describes a product with one configuration, which is
14108
+ * what every graph written before this entity existed already meant. That is
14109
+ * the zero-migration guarantee: silence still means "true everywhere".
14110
+ *
14111
+ * ONE AXIS PER SEMANTIC LEVER, NOT PER CODE FLAG. The unit is the decision a
14112
+ * reader makes ("are we on the new navigation or the old one?"), not the
14113
+ * boolean a deploy system stores. Two flags that cannot be set independently
14114
+ * — one forcing the other on — are ONE axis with two values, and modelling
14115
+ * them as two axes would assert a four-configuration family, three members of
14116
+ * which do not exist. Link each driving flag with
14117
+ * `feature_flag_drives_configuration_axis`: the mechanism lives in
14118
+ * engineering, the lever lives here.
14119
+ *
14120
+ * VALUES ARE CLOSED. Every `present_under` and every `active_when.values`
14121
+ * entry must name a member of this list, and `validate_graph`'s
14122
+ * `configuration_drift` scope says so. An axis whose values are open cannot
14123
+ * support a projection, because nothing bounds the family being projected
14124
+ * from.
14125
+ *
14126
+ * NOT `classification_axis`. That instrument sorts SUBJECTS into cells: a
14127
+ * subject may sit in several at once, each placement carries evidence and
14128
+ * confidence, and the axis describes a landscape. This one selects WHICH
14129
+ * GRAPH YOU ARE READING: exactly one value holds at a time, placements carry
14130
+ * no evidence, and changing the value changes what exists. The shapes rhyme;
14131
+ * the questions do not.
14132
+ *
14133
+ * Per UPG principle P14, structural relationships are edges:
14134
+ * the product that defines it: `product_defines_configuration_axis` (inbound)
14135
+ * the driving mechanism: `feature_flag_drives_configuration_axis` (inbound)
14136
+ * what varies along it: `surface_varies_by_configuration_axis` (inbound)
14137
+ *
14138
+ * @example
14139
+ * const properties: ConfigurationAxisProperties = {
14140
+ * values: ['legacy_nav', 'split_nav'],
14141
+ * default_value: 'legacy_nav',
14142
+ * kind: 'feature_flag',
14143
+ * }
14144
+ */
14145
+ interface ConfigurationAxisProperties {
14146
+ /**
14147
+ * The closed set of values this axis can take. Required: an axis with no
14148
+ * values selects nothing and cannot be projected along.
14149
+ *
14150
+ * Two values is the common case and three is not unusual (a plan ladder).
14151
+ * Order is not significant; the axis is categorical, not ordinal. Where the
14152
+ * ordering does matter (an entitlement ladder in which each tier includes
14153
+ * the one below), that is a classification question, and
14154
+ * `classification_axis` with `axis_kind: 'ordinal'` is the instrument for it.
14155
+ */
14156
+ values: string[];
14157
+ /**
14158
+ * The value this axis is understood to sit at when nobody says otherwise.
14159
+ * Must be a member of `values`.
14160
+ *
14161
+ * NOTHING APPLIES IT AUTOMATICALLY. Omitting `configuration` on a read
14162
+ * returns the UNION, not this projection, because the union is the honest
14163
+ * answer to an unqualified question: it is every configuration at once, and
14164
+ * silently substituting one of them would hide the others from a reader who
14165
+ * did not know to ask. What the field does carry is the declaration
14166
+ * convention for `surface_alternates_with_surface` (declare the edge from the
14167
+ * surface present under the default) and a documented anchor for tools that
14168
+ * later want to offer a starting configuration.
14169
+ *
14170
+ * It is a claim about the model, not about deployment: it says which value
14171
+ * most of the graph was written against, not which configuration most
14172
+ * customers are on.
14173
+ */
14174
+ default_value?: string;
14175
+ /** What kind of lever this is. Names the mechanism family. */
14176
+ kind?: ConfigurationAxisKind;
14177
+ }
13793
14178
 
13794
14179
  /**
13795
14180
  * UPG Property Schemas: Metrics. Unified measurement across the product.
@@ -19686,6 +20071,7 @@ interface UPGPropertyMap {
19686
20071
  changelog: ChangelogProperties;
19687
20072
  /** A named, dated, self-nesting planning interval (sprint / iteration / quarter / PI / cooldown) work is scheduled through: the cadence axis */
19688
20073
  planning_cycle: PlanningCycleProperties;
20074
+ configuration_axis: ConfigurationAxisProperties;
19689
20075
  /** A governed specification (query language, protocol, format) products implement, expose, or conform to */
19690
20076
  specification: SpecificationProperties;
19691
20077
  /** A foundational compositional unit a specification defines (a block, a reference, a query value) */
@@ -20576,9 +20962,17 @@ declare function getBusinessAreasForRegion(regionId: string): string[];
20576
20962
  /**
20577
20963
  * UPG Intelligence Conditions: structured, machine-evaluable graph predicates.
20578
20964
  *
20579
- * Three check types: `EntityCheck` (count by criteria), `RelationshipCheck`
20580
- * (edge existence/count), `BenchmarkCheck` (compare against stage benchmark).
20965
+ * Check types: `EntityCheck` (count by criteria), `RelationshipCheck`
20966
+ * (edge existence/count), `BenchmarkCheck` (compare against stage benchmark),
20967
+ * `EdgeCountVsPropertyCheck` (per-node: edge count against the node's own
20968
+ * numeric property), plus the graph-shape counts (total / domain / orphan).
20581
20969
  * Composable via `and` / `or` operators.
20970
+ *
20971
+ * All but `EdgeCountVsPropertyCheck` are AGGREGATE checks — whole-graph tallies
20972
+ * compared against constants. That is why most detectors here are whole-graph
20973
+ * approximations of per-node rules, and why they can say a graph has a problem
20974
+ * without saying where. `EdgeCountVsPropertyCheck` (0.29.0) is the exception,
20975
+ * and it is what lets a violation name the nodes it is about.
20582
20976
  */
20583
20977
 
20584
20978
  /** Count entities matching criteria */
@@ -20597,6 +20991,18 @@ interface EntityCheck {
20597
20991
  * field nobody filled in, e.g. a `surface` with no `arbitration_rule`.
20598
20992
  * A value-keyed filter cannot express absence, because the collector only
20599
20993
  * indexes values that exist.
20994
+ *
20995
+ * NON-EMPTY VALUE HERE MEANS NON-EMPTY *STRING*. The aggregate indexes
20996
+ * backing this form record string values only, so a numeric `0` or a
20997
+ * boolean `false` counts as ABSENT to this filter. That is a known wart,
20998
+ * documented rather than fixed in 0.29.0: broadening it would change which
20999
+ * graphs existing detectors fire on, which is not a change to make in a
21000
+ * release already carrying correctness fixes. It costs nothing today (no
21001
+ * catalog filter uses this form since the contention branch moved to
21002
+ * `EdgeCountVsPropertyCheck`), and the broadening question is banked as
21003
+ * a tracked follow-up. A detector that needs to see a declared
21004
+ * zero should use `EdgeCountVsPropertyCheck.node_filter`, whose presence
21005
+ * test is deliberately broader.
20600
21006
  * 2. `{ property, value }` (0.17.0) — count entities whose `property` equals
20601
21007
  * `value`, e.g. `metric` where `designation === 'north_star'`.
20602
21008
  * 3. `{ status }` — count entities in a given lifecycle status.
@@ -20693,6 +21099,111 @@ interface OrphanCheck {
20693
21099
  /** Threshold value (not needed for 'zero' / 'nonzero') */
20694
21100
  threshold?: number;
20695
21101
  }
21102
+ /**
21103
+ * Count entities whose EDGE COUNT stands in a stated relation to one of their
21104
+ * own NUMERIC PROPERTIES (0.29.0).
21105
+ *
21106
+ * The first genuinely per-node check form. Every other check in this file is an
21107
+ * aggregate: it compares a whole-graph tally against a constant. This one
21108
+ * compares two values that both live on the same node, so it cannot be
21109
+ * expressed by any composition of the others — a graph-wide edge count says
21110
+ * nothing about which node holds which capacity, and the presence filters key
21111
+ * on whether a property EXISTS, never on what it says relative to anything else.
21112
+ *
21113
+ * The motivating case (feedback `af9ae4c2`, measured on a 43-surface field
21114
+ * graph): `contended-surface-without-arbitration` counted
21115
+ * `feature_occupies_surface` edges and never read `capacity`, so a header row
21116
+ * declaring room for four occupants and holding exactly four was flagged as
21117
+ * contended alongside a capacity-1 panel holding three. Ten surfaces flagged,
21118
+ * three of them wrongly, and all three wrong for this one reason.
21119
+ *
21120
+ * DELIBERATELY GENERAL. The shape is "edge count versus numeric property", not
21121
+ * "occupancy versus capacity". A surface's guest list against its capacity is
21122
+ * the first instance, but the form fits any place the graph states a numeric
21123
+ * intent and the edges record what actually arrived.
21124
+ *
21125
+ * COLLECTORS ARE DRIVEN BY DECLARED SPECS, never by speculative indexing.
21126
+ * `UPG_EDGE_COUNT_SPECS` is derived from the conditions in this catalog, so a
21127
+ * collector computes exactly the per-node tallies some detector asked for, and
21128
+ * seeds every declared spec before walking so that "nothing matched" and "this
21129
+ * collector is stale" stay distinguishable. The evaluator treats the second as
21130
+ * a worst case and over-reports, which is the safe failure for a detector whose
21131
+ * job is noticing omissions.
21132
+ */
21133
+ interface EdgeCountVsPropertyCheck {
21134
+ /** Discriminator, always `'edge_count_vs_property'` for this check type */
21135
+ type: 'edge_count_vs_property';
21136
+ /** The entity type whose nodes are evaluated one at a time. */
21137
+ entity_type: UPGEntityType;
21138
+ /** The edge type counted against each node of `entity_type`. */
21139
+ edge_type: UPGEdgeType;
21140
+ /**
21141
+ * Which end of `edge_type` the evaluated node sits on. `inbound` (the
21142
+ * default) counts edges that POINT AT the node, which is the occupancy
21143
+ * reading: `feature_occupies_surface` runs feature → surface, so a surface's
21144
+ * guest list is its inbound count.
21145
+ */
21146
+ direction?: 'inbound' | 'outbound';
21147
+ /** The node's own numeric property the count is compared against. */
21148
+ property: string;
21149
+ /**
21150
+ * What to compare against when the node does not carry `property` at all.
21151
+ *
21152
+ * ABSENCE IS A READING, NOT A HOLE. On `surface.capacity` absence means
21153
+ * unbounded, and an unbounded surface is not thereby exempt: it has stated no
21154
+ * limit, so it has stated no answer, and more than one occupant is exactly
21155
+ * the situation worth naming. Setting this to `1` encodes that — an
21156
+ * unqualified place holding two things has an unrecorded decision in it.
21157
+ */
21158
+ property_absent_default: number;
21159
+ /**
21160
+ * How a node's edge count must relate to the property value for that node to
21161
+ * be counted. `gt` reads "more arrived than the design said would fit".
21162
+ */
21163
+ node_comparison: 'gt' | 'gte' | 'lt' | 'lte' | 'eq';
21164
+ /**
21165
+ * Optional additional per-node requirement: the node must carry
21166
+ * (`present: true`) or must not carry (`present: false`) a value for
21167
+ * `property`.
21168
+ *
21169
+ * PRESENT MEANS ANY VALUE, NOT ANY NON-EMPTY STRING. Only `undefined`,
21170
+ * `null` and the empty string read as absent here. `capacity: 0` is a real
21171
+ * cap (a reserved place nothing may occupy) and `mutates_content: false` is a
21172
+ * real answer, so treating either as an omission would be wrong: this check
21173
+ * form exists to read NUMERIC intents, and a form that could not see a
21174
+ * declared zero would misread the surfaces it was built for.
21175
+ *
21176
+ * THIS DELIBERATELY DIFFERS FROM `EntityCheck.filter`'s presence form, which
21177
+ * is string-only because the aggregate indexes behind it only hold strings.
21178
+ * The asymmetry is a real difference in what the two can see, not a style
21179
+ * choice, so this field does not borrow that vocabulary. Collectors express
21180
+ * the split as two named predicates (`isPropertyPresent` here,
21181
+ * `isStringPropertyPresent` there) rather than one helper with a comment.
21182
+ *
21183
+ * THIS IS ALSO WHY THE FORM IS PER-NODE RATHER THAN TWO ANDED AGGREGATES.
21184
+ * "Some surface is over capacity" AND "some surface has no arbitration rule"
21185
+ * are both true of a graph where those are DIFFERENT surfaces, so composing
21186
+ * two aggregate checks would keep firing on exactly the graphs this release
21187
+ * exists to stop firing on. Both halves have to be asked of the same node.
21188
+ */
21189
+ node_filter?: {
21190
+ property: string;
21191
+ present: boolean;
21192
+ };
21193
+ /**
21194
+ * Optional exemption, mirroring the 0.28.0 `except_property` /
21195
+ * `except_value` form on `EntityCheck`. A node declaring the exemption is
21196
+ * removed from the evaluated population entirely — it is not counted, and it
21197
+ * is not attributed.
21198
+ */
21199
+ except_property?: string;
21200
+ /** Value of `except_property` that triggers the exemption. */
21201
+ except_value?: string;
21202
+ /** Aggregate comparison applied to the number of nodes that matched. */
21203
+ comparison: 'eq' | 'gt' | 'lt' | 'gte' | 'lte' | 'zero' | 'nonzero';
21204
+ /** Threshold value (not needed for 'zero' / 'nonzero') */
21205
+ threshold?: number;
21206
+ }
20696
21207
  /**
20697
21208
  * A structured, machine-evaluable condition for intelligence prompts.
20698
21209
  *
@@ -20708,7 +21219,7 @@ interface OrphanCheck {
20708
21219
  * ] }
20709
21220
  */
20710
21221
  type IntelligenceCondition = {
20711
- check: EntityCheck | RelationshipCheck | BenchmarkCheck | TotalEntityCountCheck | DomainCountCheck | DomainPopulationCheck | OrphanCheck;
21222
+ check: EntityCheck | RelationshipCheck | BenchmarkCheck | TotalEntityCountCheck | DomainCountCheck | DomainPopulationCheck | OrphanCheck | EdgeCountVsPropertyCheck;
20712
21223
  } | {
20713
21224
  operator: 'and' | 'or';
20714
21225
  checks: IntelligenceCondition[];
@@ -21782,14 +22293,21 @@ interface UPGPresenceExceptSpec {
21782
22293
  * indexes, because those record marginals and the question is an intersection.
21783
22294
  *
21784
22295
  * So the catalog declares what it needs and collectors compute exactly that
21785
- * and no more. Today the list holds one entry (`surface.arbitration_rule`
21786
- * except `composition_mode: 'chained'`); it stays correct without maintenance
21787
- * because it is derived from the conditions themselves.
22296
+ * and no more. It stays correct without maintenance because it is derived from
22297
+ * the conditions themselves.
22298
+ *
22299
+ * EMPTY SINCE 0.29.0, AND THAT IS NOT A REGRESSION. Its one declarer was the
22300
+ * arbitration branch of `contended-surface-without-arbitration`, which moved to
22301
+ * the per-node `edge_count_vs_property` form because the aggregate could not
22302
+ * ask "over capacity" and "no rule" of the SAME surface. The mechanism stays
22303
+ * supported and tested: an except-qualified presence count is still the right
22304
+ * instrument for a detector that needs an intersection of two marginals and no
22305
+ * per-node arithmetic, and a future pattern declaring one gets it for free.
21788
22306
  *
21789
22307
  * @example
21790
- * UPG_PRESENCE_EXCEPT_SPECS[0]
21791
- * // → { entity_type: 'surface', property: 'arbitration_rule',
21792
- * // except_property: 'composition_mode', except_value: 'chained' }
22308
+ * // The shape, as the 0.28.0 contention branch declared it:
22309
+ * // { entity_type: 'surface', property: 'arbitration_rule',
22310
+ * // except_property: 'composition_mode', except_value: 'chained' }
21793
22311
  */
21794
22312
  declare const UPG_PRESENCE_EXCEPT_SPECS: readonly UPGPresenceExceptSpec[];
21795
22313
  /**
@@ -21802,6 +22320,148 @@ declare const UPG_PRESENCE_EXCEPT_SPECS: readonly UPGPresenceExceptSpec[];
21802
22320
  * // → "arbitration_rule!composition_mode=chained"
21803
22321
  */
21804
22322
  declare function presenceExceptKey(property: string, exceptProperty: string, exceptValue: string): string;
22323
+ /**
22324
+ * One `edge_count_vs_property` check declared somewhere in
22325
+ * `UPG_ANTI_PATTERNS`, flattened for collectors (0.29.0).
22326
+ *
22327
+ * @see UPG_EDGE_COUNT_SPECS
22328
+ */
22329
+ interface UPGEdgeCountSpec {
22330
+ /** Entity type whose nodes are evaluated one at a time. */
22331
+ entity_type: string;
22332
+ /** Edge type counted against each node. */
22333
+ edge_type: string;
22334
+ /** Which end of the edge the evaluated node sits on. */
22335
+ direction: 'inbound' | 'outbound';
22336
+ /** The node's own numeric property the count is compared against. */
22337
+ property: string;
22338
+ /** Value used when the node does not carry `property` at all. */
22339
+ property_absent_default: number;
22340
+ /** How the count must relate to the property for the node to match. */
22341
+ node_comparison: 'gt' | 'gte' | 'lt' | 'lte' | 'eq';
22342
+ /** Optional extra per-node presence requirement. */
22343
+ node_filter?: {
22344
+ property: string;
22345
+ present: boolean;
22346
+ };
22347
+ /** Property that removes a node from the evaluated population. */
22348
+ except_property?: string;
22349
+ /** Value of `except_property` that triggers the exclusion. */
22350
+ except_value?: string;
22351
+ }
22352
+ /**
22353
+ * Canonical key for one edge-count spec, shared by the collectors that build
22354
+ * `nodesByEdgeCountSpec` and the evaluator that reads it. Both sides must
22355
+ * agree, so neither spells it inline.
22356
+ *
22357
+ * Every discriminating field is in the key. Two detectors asking about the same
22358
+ * edge and property but with different thresholds, filters or exemptions are
22359
+ * different questions and must not collide on one tally.
22360
+ *
22361
+ * @example
22362
+ * edgeCountSpecKey({ entity_type: 'surface', edge_type: 'feature_occupies_surface',
22363
+ * direction: 'inbound', property: 'capacity', property_absent_default: 1,
22364
+ * node_comparison: 'gt', node_filter: { property: 'arbitration_rule', present: false },
22365
+ * except_property: 'composition_mode', except_value: 'chained' })
22366
+ * // → "surface|feature_occupies_surface|inbound|capacity|1|gt|arbitration_rule=absent|composition_mode=chained"
22367
+ */
22368
+ declare function edgeCountSpecKey(spec: UPGEdgeCountSpec): string;
22369
+ /**
22370
+ * Canonical key for one `entity_count` filter, shared by the collectors that
22371
+ * build `nodesByEntityFilter` and the evaluator that reads it (0.29.0).
22372
+ *
22373
+ * Covers all four filter forms in `EntityCheck.filter`. The key encodes the
22374
+ * filter as the detector wrote it, so a `present: false` filter and a
22375
+ * `present: true` filter over the same property are different keys holding
22376
+ * different node sets, and neither has to be derived from the other by
22377
+ * subtraction.
22378
+ *
22379
+ * @example
22380
+ * entityFilterKey('surface', { property: 'arbitration_state', value: 'none' })
22381
+ * // → "surface|arbitration_state=none"
22382
+ * entityFilterKey('hypothesis', { status: 'drafted' })
22383
+ * // → "hypothesis|status=drafted"
22384
+ */
22385
+ declare function entityFilterKey(entityType: string, filter: Record<string, unknown>): string;
22386
+ /**
22387
+ * Which of the recognised `EntityCheck.filter` shapes this is.
22388
+ *
22389
+ * The presence form deliberately does NOT branch on `except_property` /
22390
+ * `except_value`. Those belong to the aggregate
22391
+ * `countsByTypeAndPropertyPresenceExcept` mechanism, which is still supported
22392
+ * for counting; ATTRIBUTION for that shape has no declarer, no collector path
22393
+ * and no test, and shipping an unexercised parallel path is how the next drift
22394
+ * starts. When a detector declares one, its attribution lands with it and with
22395
+ * a test. Until then such a filter classifies as `presence` and is attributed
22396
+ * on the presence predicate alone, which is a superset and therefore never
22397
+ * names a node the detector did not implicate.
22398
+ */
22399
+ declare function classifyEntityFilter(filter: Record<string, unknown>): 'presence' | 'value' | 'status' | 'unrecognized';
22400
+ /**
22401
+ * One `entity_count` filter declared somewhere in `UPG_ANTI_PATTERNS`,
22402
+ * flattened for collectors (0.29.0). Attribution only: the counts these
22403
+ * filters drive are unchanged and still read the aggregate tallies.
22404
+ *
22405
+ * @see UPG_ENTITY_FILTER_SPECS
22406
+ */
22407
+ interface UPGEntityFilterSpec {
22408
+ /** Entity type the filter is applied to. */
22409
+ entity_type: string;
22410
+ /** The filter exactly as the detector declared it. */
22411
+ filter: Record<string, unknown>;
22412
+ /**
22413
+ * Which recognised shape this filter is, resolved once at derivation.
22414
+ *
22415
+ * Carrying it means a collector switches exhaustively on a closed set rather
22416
+ * than re-sniffing the shape and quietly skipping anything it was not taught.
22417
+ * A silent skip there produces a forever-empty match list: attribution dies
22418
+ * with no error and no failing test, which is the worst possible failure for
22419
+ * a feature whose whole job is to name things.
22420
+ */
22421
+ kind: 'presence' | 'value' | 'status';
22422
+ }
22423
+ /**
22424
+ * Every `entity_count` filter the catalog declares (0.29.0), so collectors can
22425
+ * record which nodes matched each one without indexing the whole graph.
22426
+ *
22427
+ * The catalog declares FOUR filters in total (one status form, three value
22428
+ * forms), which is what makes per-node attribution affordable here: a handful
22429
+ * of predicate evaluations per node, rather than an id list for every (type,
22430
+ * property, value) triple that happens to exist in the data.
22431
+ *
22432
+ * Note there is no `present` form among them since 0.29.0, when the contention
22433
+ * branch moved to `EdgeCountVsPropertyCheck`. The only `present: false` left in
22434
+ * the catalog is that check's `node_filter`, which this walk correctly does not
22435
+ * collect: it is a per-node clause on a different check type, tallied through
22436
+ * `UPG_EDGE_COUNT_SPECS` instead. The count is asserted in the tests rather
22437
+ * than trusted to this comment.
22438
+ */
22439
+ declare const UPG_ENTITY_FILTER_SPECS: readonly UPGEntityFilterSpec[];
22440
+ /**
22441
+ * Normalise one `edge_count_vs_property` check into its spec.
22442
+ *
22443
+ * THE ONLY PLACE THIS SHAPE IS CONSTRUCTED. The spec has nine fields and every
22444
+ * one of them is keyed into `edgeCountSpecKey`, so a second construction site
22445
+ * that forgot to apply the `direction` default (or added a field) would produce
22446
+ * a key that silently misses the collector's entry, and the check would read as
22447
+ * "no node matched" rather than failing. Collector, evaluator and attribution
22448
+ * all route through here.
22449
+ */
22450
+ declare function checkToEdgeCountSpec(check: EdgeCountVsPropertyCheck): UPGEdgeCountSpec;
22451
+ /**
22452
+ * Every per-node edge-count check the catalog declares (0.29.0).
22453
+ *
22454
+ * Same contract as `UPG_PRESENCE_EXCEPT_SPECS`: the catalog states what it
22455
+ * needs, collectors compute exactly that and nothing more. Indexing every
22456
+ * (type, edge type, property) triple speculatively would tax every
22457
+ * `validate_graph` call to serve one detector, and unlike the aggregate counts
22458
+ * these tallies cannot be derived from each other.
22459
+ *
22460
+ * Today the list holds one entry (surface occupancy against `capacity`), and it
22461
+ * stays correct without maintenance because it is derived from the conditions
22462
+ * themselves.
22463
+ */
22464
+ declare const UPG_EDGE_COUNT_SPECS: readonly UPGEdgeCountSpec[];
21805
22465
  /**
21806
22466
  * Look up a curated anti-pattern by its slug id.
21807
22467
  *
@@ -21924,7 +22584,7 @@ declare function isThinCoverageAdvisory(antiPatternId: string, totalEntityCount:
21924
22584
  * Walks `UPG_ANTI_PATTERNS`, evaluates each `structured_condition` against
21925
22585
  * `AntiPatternInputs`, returns the violations.
21926
22586
  *
21927
- * Synchronous. Collectors live per server (`packages/upg-mcp-server/src/lib/anti-pattern-inputs.ts`).
22587
+ * Synchronous. Collectors live outside this package (`packages/upg-sdk/src/lib/anti-pattern-inputs.ts`).
21928
22588
  * Covers every leaf check type in `IntelligenceCondition`; composes recursively.
21929
22589
  *
21930
22590
  * https://unifiedproductgraph.org | MIT
@@ -21990,6 +22650,37 @@ interface AntiPatternInputs {
21990
22650
  * direction for a check whose job is to notice omissions.
21991
22651
  */
21992
22652
  countsByTypeAndPropertyPresenceExcept?: Record<string, Record<string, number>>;
22653
+ /**
22654
+ * Node ids matching each declared per-node edge-count check (0.29.0). Shape:
22655
+ * `edgeCountSpecKey(spec)` → the ids of the nodes that matched.
22656
+ *
22657
+ * The COUNT is the array length, so this input carries both halves of the
22658
+ * check: what fired, and which nodes it fired about. Collectors build it by
22659
+ * walking `UPG_EDGE_COUNT_SPECS`, never speculatively.
22660
+ *
22661
+ * A SEEDED-BUT-EMPTY entry and a MISSING entry mean different things, and
22662
+ * collectors must keep them distinct. Empty means "nothing matched" and the
22663
+ * check clears. Missing means "this collector predates the spec", and the
22664
+ * evaluator falls back to assuming every node of the type matched, preserving
22665
+ * the 0.28.0 property that a stale collector over-reports rather than
22666
+ * silently retiring the detector. Attribution stays empty on that path: a
22667
+ * fabricated node id is worse than an unattributed violation.
22668
+ */
22669
+ nodesByEdgeCountSpec?: Record<string, string[]>;
22670
+ /**
22671
+ * Node ids matching each declared `entity_count` filter (0.29.0), for
22672
+ * ATTRIBUTION ONLY. Shape: `entityFilterKey(entity_type, filter)` → ids.
22673
+ *
22674
+ * Counts are unaffected: every `entity_count` comparison still reads the
22675
+ * aggregate tallies above, exactly as it did before this input existed. This
22676
+ * runs alongside purely so a fired violation can name nodes, which means a
22677
+ * collector that omits it loses attribution and changes no verdict.
22678
+ *
22679
+ * Bounded by declaration, like every other spec-driven input here: the whole
22680
+ * catalog declares four filters, so this is a handful of predicate
22681
+ * evaluations per node rather than an index over every property.
22682
+ */
22683
+ nodesByEntityFilter?: Record<string, string[]>;
21993
22684
  /**
21994
22685
  * Boolean presence per `(source_type, edge_type, target_type)` tuple.
21995
22686
  * Key format: `${source_type}|${edge_type}|${target_type}`.
@@ -22036,6 +22727,32 @@ interface AntiPatternViolation {
22036
22727
  concern: UPGAntiPatternConcern;
22037
22728
  /** Entity-type strings the catalog references. Phase 1: types, not ids. */
22038
22729
  target_entities: string[];
22730
+ /**
22731
+ * The specific nodes this violation is about (0.29.0), where the fired
22732
+ * condition could name them. Sorted, deduplicated, and drawn only from the
22733
+ * branches that actually contributed to the fire.
22734
+ *
22735
+ * ABSENT MEANS "THIS DETECTOR CANNOT NAME NODES", NOT "NO NODES". Most
22736
+ * patterns here are whole-graph approximations of per-node rules: they
22737
+ * compare aggregate tallies against constants, so they can say a graph has a
22738
+ * problem without knowing where it lives. Only checks that evaluate nodes one
22739
+ * at a time attribute, plus the declared `entity_count` filters.
22740
+ *
22741
+ * ATTRIBUTION IS PARTIAL, AND PARTIAL PER TYPE. A violation may name nodes of
22742
+ * one type while saying nothing about another type in `target_entities`: the
22743
+ * contention detector names surfaces and never the features occupying them,
22744
+ * though both types appear there. So a consumer must NOT read a non-empty
22745
+ * list as "these are the only implicated entities".
22746
+ *
22747
+ * The contract for a reverse lookup is: this list is authoritative for the
22748
+ * types it actually covers, and silent about every other type, which must
22749
+ * keep resolving through `target_entities`. Reading it as globally
22750
+ * authoritative makes entities of the uncovered types unreachable, which is
22751
+ * a reachability regression dressed up as precision.
22752
+ *
22753
+ * Optional so every existing consumer keeps compiling and behaving as before.
22754
+ */
22755
+ target_node_ids?: string[];
22039
22756
  description: string;
22040
22757
  why_it_matters: string;
22041
22758
  remediation: string;
@@ -22062,6 +22779,16 @@ interface EvaluateAntiPatternsOptions {
22062
22779
  * })
22063
22780
  */
22064
22781
  declare function evaluateAntiPatterns(inputs: AntiPatternInputs, options?: EvaluateAntiPatternsOptions): AntiPatternViolation[];
22782
+ /**
22783
+ * Walk the condition and return the unique entity-type strings it references.
22784
+ *
22785
+ * This is what fills `target_entities`, so it is the type half of every
22786
+ * consumer's reachability. A check form missing from the walk produces a
22787
+ * violation nothing can find by type, which is why the walk is exported: it is
22788
+ * testable in isolation, against conditions built to defeat the masking that
22789
+ * hides an omission inside a real multi-check pattern.
22790
+ */
22791
+ declare function collectTargetEntities(cond: IntelligenceCondition | undefined): string[];
22065
22792
 
22066
22793
  /**
22067
22794
  * `UPGProductStage` validation and soft-coercion.
@@ -23264,7 +23991,7 @@ declare function checkHeaderSealText(text: string): UPGHeaderSealReport;
23264
23991
  * it stamps the `upg_version` field of every `.upg` file written by the SDK.
23265
23992
  * The `check:version-lockstep` gate enforces this at release time.
23266
23993
  */
23267
- declare const UPG_VERSION: "0.28.0";
23994
+ declare const UPG_VERSION: "0.30.0";
23268
23995
  /**
23269
23996
  * The `.upg` JSON document format version. Written to the `upg_version` field.
23270
23997
  * Evolves independently from `UPG_VERSION` (the catalogue version).
@@ -23389,4 +24116,4 @@ declare const UPG_EDGE_COUNT: number;
23389
24116
  */
23390
24117
  declare const UPG_META_COUNT: number;
23391
24118
 
23392
- export { type A11yAnnotationProperties, type A11yAuditProperties, type A11yGuidelineProperties, type A11yIssueProperties, type A11yStandardProperties, ANALYTICS_DATA_PLAYBOOK, type AcceptanceCriterionProperties, type AccessPolicyProperties, type AccountProperties, type AcquisitionChannelProperties, type AdCreativeProperties, type AffinityClusterProperties, type AgentDefinitionProperties, type AgentHookProperties, type AgentSessionProperties, type AgentSkillProperties, type AgentTaskProperties, type AggregateProperties, type AiCostTrackerProperties, type AiDatasetProperties, type AiExperimentProperties, type AiGuardrailProperties, type AiModelProperties, type AiTraceProperties, type AlertRuleProperties, type AnnotationProperties, type AntiPatternInputs, type AntiPatternViolation, type AnyUPGEntityType, type ApiContractProperties, type ApiEcosystemProperties, type ApiEndpointProperties, type ApproachBinding, type ApproachFilter, type ApproachRun, type ApproachRuntime, type ApprovalRecordProperties, type AssumptionProperties, type AttributionModelProperties, type AuditLogPolicyProperties, BUSINESS_GROWTH_METRIC_DRIVEN_PLAYBOOK, BUSINESS_GTM_GROWTH_PLAYBOOK, BUSINESS_MARKETING_AUDIENCE_FIRST_PLAYBOOK, type BehavioralSegmentProperties, type BenchmarkCheck, type BetaProgramProperties, type BoundedContextProperties, type BrandAssetProperties, type BrandColourProperties, type BrandIdentityProperties, type BrandImageryProperties, type BrandLogoProperties, type BrandTypographyProperties, type BrandVoiceProperties, type BugProperties, type BuildArtifactProperties, type BusinessModelProperties, CLASSIFICATION_EDGE_PROPERTY_SCHEMA, CONTENT_DEPTH_WARNING_RULES, COVERAGE_ANTI_PATTERNS, type Cadence, type CapabilityProperties, type CapacityPlanProperties, type CauseConfidence, type CeremonyProperties, type CertificationProperties, type ChangeRequestProperties, type ChangelogProperties, type ChurnReasonProperties, type CiPipelineProperties, type ClassificationAxisProperties, type ClassificationCapability, type ClassificationCapabilitySurface, type ClassificationCommitment, type ClassificationValueProperties, type CodeRepositoryProperties, type CohortProperties, type ComfortLevel, type CommandProperties, type CommunityInitiativeProperties, type CompetitiveAnalysisProperties, type CompetitiveBattleCardProperties, type CompetitorFeatureProperties, type CompetitorProperties, type CompetitorSignalProperties, type ComplianceFrameworkProperties, type ComplianceRequirementProperties, type Confidence, type ConformanceLevel, type ConstraintKind, type ConstraintOrigin, type ConstraintProperties, type ConstraintStatus, type ContactProperties, type ContentCalendarProperties, type ContentPieceProperties, type ContentStrategyProperties, type ContentThemeProperties, type ContractClauseProperties, type ContractProperties, type CostStructureProperties, type CountBenchmark, type Cron, type CrossProductEligibleEdgeType, type CrossProductScope, type CulturalAdaptationProperties, type CustomerFeedbackProperties, type CustomerHealthScoreProperties, type CustomerJourneyStageProperties, type CustomerRelationshipProperties, DEFAULT_ENTITY_EMOJI, DEFERRED_PROPOSED_BY_CONTRACT, DEFER_EDGE_PROPERTY_SCHEMA, DISCOVERY_RESEARCH_VALIDATION_PLAYBOOK, type DashboardProperties, type DataClassificationProperties, type DataContractProperties, type DataDomainProperties, type DataFlowProperties, type DataLineageProperties, type DataModelProperties, type DataPipelineProperties, type DataProductProperties, type DataQualityRuleProperties, type DataSensitivity, type DataSourceProperties, type DatabaseSchemaProperties, type DealProperties, type DecisionProperties, type DeliberateOnlyEdgeType, type DeliverableProperties, type DemandGenProgramProperties, type DepartmentProperties, type DependencyProperties, type DeploymentProperties, type DeprecatedUPGEntityType, type DesignComponentProperties, type DesignConceptProperties, type DesignGuidelineProperties, type DesignPatternProperties, type DesignQuestionProperties, type DesignSprintProperties, type DesignSystemProperties, type DesignTokenProperties, type DesiredOutcomeProperties, type DeveloperPortalProperties, type DifficultyLevel, type DiscountStrategyProperties, type DistributionChannelProperties, type DocumentProperties, type DocumentationTemplateProperties, type DomainActivation, type DomainCountCheck, type DomainEntityProperties, type DomainEventProperties, type DomainGuideStep, type DomainPopulationCheck, type Duration, ENGINEERING_PLATFORM_PLAYBOOK, ENTITY_EMOJI, EXPERIENCE_DESIGN_BRAND_PLAYBOOK, type EducationProgramProperties, type EmailSequenceProperties, type EmptyCell, type EmptyCellRationaleKind, type EntityCheck, type EntitySequenceStep, type EntityTypeMeta, type EntityTypeResolution, type EntryMode, type EpicProperties, type ErrorBudgetProperties, type EvalBenchmarkProperties, type EvalRunProperties, type EvaluateAntiPatternsOptions, type EventProperties, type EventSchemaProperties, type EvidenceDirection, type EvidenceProperties, type ExperimentPlanProperties, type ExperimentProperties, type ExperimentRunProperties, type ExternalApiProperties, FOUNDATIONS_PLAYBOOK, type FeasibilityStudyProperties, type FeatureAreaProperties, type FeatureFlagProperties, type FeatureProperties, type FeatureRequestProperties, type FeedbackProgramProperties, type FeedbackThemeProperties, type FeedbackVoteProperties, type FixProperties, type ForecastProperties, type FrameworkCategory, type FrameworkComputedProperty, type FrameworkConstant, type FrameworkDataSpec, type FrameworkEducation, type FrameworkEntityTypeSpec, type FrameworkExerciseProperties, type FrameworkInvocationStep, type FrameworkLayout, type FrameworkLevel, type FrameworkOrigin, type FrameworkPresentationSpec, type FrameworkPropertyRequirement, type FrameworkScoringMethod, type FrameworkSlot, type FrameworkStep, type FrameworkStructureSpec, type FrameworkValidationResult, type FrequencyRating, type FunnelProperties, type FunnelStage, type FunnelStepProperties, type GlossaryTermProperties, type GrowthCampaignProperties, type GrowthLoopProperties, type GtmStrategyProperties, type GuardrailStatus, type HallucinationReportProperties, type HealthStatus, type HelpVideoProperties, type HypothesisEvidenceProperties, type HypothesisProperties, type ISO4217, type ISODate, type ISODateTime, type IdealCustomerProfileProperties, type IncidentProperties, type IncidentSeverity, type InfrastructureComponentProperties, type InitiativeProperties, type InsightProperties, type IntegrationPartnerProperties, type IntegrationPatternProperties, type IntelligenceCondition, type InteractionSpecProperties, type InternalDocProperties, type InterviewGuideProperties, type InvestigationProperties, type InvoiceProperties, type IpAssetProperties, type JobProperties, type JobStepProperties, type JourneyActionProperties, type JourneyPhaseProperties, type JourneyStepProperties, type JourneyType, type KeyActivityProperties, type KeyResourceProperties, type KeyResultProperties, type KnowledgeBaseArticleProperties, LEGACY_PRODUCT_STAGES, type LaunchProperties, type LeadProperties, type LearningPathProperties, type LearningProperties, type LegalEntityProperties, type LibraryDependencyProperties, type LifecyclePhase, type LifecycleRenderShape, type LifecycleRenderState, type LifecycleRenderTransition, type LifecycleState, type LocaleConfigProperties, type LocaleProperties, type LogLevel, type LowMedHigh, MARKDOWN_FORMAT_VERSION, MARKET_COMPETITIVE_PLAYBOOK, type MarketSegmentProperties, type MarketTrendProperties, type MarketingCampaignPlanProperties, type MarketingChannelProperties, type MarketingPlatform, type MarketingStrategyProperties, type MarketplaceListingProperties, type MatrixSlot, type MaturityLevel, type MessagingProperties, type MetricCategory, type MetricDataPoint, type MetricDesignation, type MetricHealth, type MetricImpactLevel, type MetricIndicatorDirection, type MetricProperties, type MetricQualityAssessmentProperties, type MetricSegmentType, type MetricStatisticalFunction, type MilestoneProperties, type MissionProperties, type ModelComparisonProperties, type ModifiedProperty, type MonitorProperties, type NamedGroup, type NeedMaturity, type NeedProperties, type NeedValence, type NpsCampaignProperties, OPERATIONS_QUALITY_PLAYBOOK, type ObjectionProperties, type ObjectiveProperties, type ObservationProperties, type OnCallRotationProperties, type OperatingLifecycleProperties, type OperatingStageProperties, type OpportunityProperties, type OrganizationProperties, type OrphanCheck, type OutcomeProperties, PRODUCT_DELIVERY_PLAYBOOK, PROPERTY_MODIFIERS, PROPERTY_MODIFIER_SEMANTICS, PROPERTY_SCALE_MAP, type ParticipantProperties, type PartnerProgramProperties, type PartnerRevenueShareProperties, type PartnerTierProperties, type PartnershipProperties, type PaywallProperties, type PenetrationTestProperties, type PersonProperties, type PersonaProperties, type PipelineSalesProperties, type PipelineStageProperties, type PlanningCycleProperties, type PlaybookBinding, type PlaybookFilter, type PlaybookProperties, type PlaybookRun, type PlaybookRuntime, type PortfolioProperties, type PositioningProperties, type PostmortemProperties, type PressReleaseProperties, type PricingStrategyProperties, type PricingTierProperties, type PrimitiveProperties, type Priority, type PrivacyPolicyProperties, type ProductAreaProperties, type ProductProperties, type ProductStageCoercion, type ProgramProperties, type ProjectProperties, type PromptTemplateProperties, type PromptVersionProperties, type ProofPointProperties, type PropertyDefinition, type PropertyModifier, type PropertySchema, type Protocol, type PrototypeProperties, type ProxyConfidence, type ProxyReason, type QaSessionProperties, type QueueTopicProperties, type QuoteDocumentProperties, type QuoteProperties, RECORD_ENTITY_TYPES, REFLECT_MODES, REGISTRY_PRODUCT_ID, type RatioBenchmark, type ReadModelProperties, type RebuttalProperties, type ReflectMode, type RegionalPricingProperties, type RegressionTestProperties, type RelationshipBenchmark, type RelationshipCheck, type ReleaseProperties, type ReleaseStrategyProperties, type ReportProperties, type ResearchPlanProperties, type ResearchQuestionProperties, type ResearchStudyProperties, type ResourceAllocationProperties, type RetrospectiveProperties, type RevenueStreamProperties, type ReviewGateProperties, type RiskProperties, type RiskRegisterProperties, type RoadmapItemProperties, type RoadmapProperties, type RoadmapThemeProperties, type RoleProperties, type RootCauseProperties, type RuleStrength, type RunContext, type RunbookProperties, STRATEGY_OUTCOMES_PLAYBOOK, type SalesMotionProperties, type ScreenProperties, type ScreenStateProperties, type SecurityAuditProperties, type SecurityControlProperties, type SecurityPolicyProperties, type SecurityReviewProperties, type Semver, type SeoKeywordProperties, type SerializeOptions, type ServiceBlueprintProperties, type ServiceLevelAgreementProperties, type ServiceLevelIndicatorProperties, type ServiceLevelObjectiveProperties, type ServiceProperties, type SignalChannel, type SignalSentiment, type SignalUrgency, type SkillProperties, type SocialPostProperties, type SolutionProperties, type SpecificationProperties, type StageRange, type StakeholderProperties, type StatusCategory, type StatusReportProperties, type Step, type StepKind, type StepOutput, type StepOutputKind, type StoryTaskProperties, type StrategicPillarProperties, type StrategicQuestionProperties, type StrategicThemeProperties, type StructurePattern, type SubSequenceStep, type SubscriptionProperties, type SuccessMilestoneProperties, type SupportTicketProperties, type SurfaceArbitrationState, type SurfaceCardinality, type SurfaceCompositionMode, type SurfaceExtensibility, type SurfaceId, type SurfaceInstanceScope, type SurfaceKind, type SurfacePersistence, type SurfaceProperties, type SurveyResponseProperties, type SwitchingCostProperties, type SymptomProperties, THIN_GRAPH_THRESHOLD, type TableColumn, type TargetCustomerSegmentProperties, type TaskProperties, type TeamOkrProperties, type TeamProperties, type TechnicalDebtItemProperties, type TerritoryProperties, type TestCaseProperties, type TestCoverageReportProperties, type TestEnvironmentProperties, type TestPlanProperties, type TestResultProperties, type TestSuiteProperties, type ThreatModelProperties, type ThreatProperties, type Timeframe, type TotalEntityCountCheck, type TouchpointProperties, type TranslationBundleProperties, type TranslationKeyProperties, type TrialConfigProperties, type TutorialProperties, type UPGAnchorEntity, type UPGAntiPattern, type UPGAntiPatternConcern, type UPGAntiPatternSeverity, type UPGApproach, type UPGApproachEnvelope, type UPGApproachId, type UPGAreaTaxonomyEntry, type UPGAssessment, type UPGBaseNode, type UPGBenchmarkSource, type UPGBoundaryDirection, type UPGBoundaryEdge, type UPGCrossEdge, type UPGCrossEdgeType, type UPGCrossOnlyEdgeType, type UPGCuratedAntiPattern, type UPGDocument, type UPGDomain, type UPGDomainBridge, type UPGDomainId, type UPGDomainPattern, type UPGDomainRing, type UPGDomainUsageGuide, type UPGEdge, type UPGEdgeDefinition, type UPGEdgeMigration, type UPGEdgeMigrationEndpoints, type UPGEdgePickHint, type UPGEdgeType, type UPGEntityType, type UPGEntityTypeMaturity, type UPGEnumScaleDefinition, type UPGEnumScaleValue, type UPGFramework, type UPGFrameworkMeta, type UPGHeader, type UPGHeaderCountsMismatch, type UPGHeaderIntegrity, type UPGHeaderIntegrityMismatch, type UPGHeaderProvenance, type UPGHeaderSealReport, type UPGIntegrity, type UPGLens, type UPGLensIntelligencePrompt, type UPGLifecycle, type UPGMappingConfidence, type UPGMemberKindKey, type UPGNode, type UPGOrganization, type UPGPlaybook, type UPGPortfolio, type UPGPortfolioDocument, type UPGPortfolioKind, type UPGPresenceExceptSpec, type UPGProduct, type UPGProductArea, type UPGProductStage, type UPGPropertyMap, type UPGPropertyMigration, type UPGPropertyMigrationChange, type UPGRegion, type UPGRegionEntityMembership, type UPGRegionEntityRole, type UPGRegionId, type UPGRegionShape, type UPGRegistry, type UPGScalarToEdgeMigration, type UPGScaleDefinition, type UPGScalePoint, type UPGSource, type UPGSplitEdge, type UPGSplitMigration, type UPGSplitRoute, type UPGSplitRouteTarget, type UPGSplitTarget, type UPGTreeChild, type UPGTreeGapPolicy, type UPGTreePattern, type UPGTreePatternDetail, type UPGTreePatternEdge, type UPGTreePatternSummary, type UPGTypeLabel, type UPGTypeMigration, type UPGValidationError, type UPGValidationProfile, type UPGValidationResult, type UPGValidationWarning, type UPGWildcardEndpoint, UPG_ACTIVE_TYPES, UPG_ANTI_PATTERNS, UPG_ANTI_PATTERN_CONCERNS, UPG_APPROACHES, UPG_APPROACHES_BY_ID, UPG_AREA_TAXONOMY, UPG_AREA_TAXONOMY_BY_COVERAGE_KEY, UPG_CANONICAL_FORMAT_VERSION, UPG_CONTAINMENT_FREE_TYPES, UPG_COUNT_BENCHMARKS, UPG_CROSS_EDGE_TYPES, UPG_CROSS_ELIGIBLE_CATALOG_EDGE_TYPES, UPG_CROSS_ONLY_EDGE_TYPES, UPG_DELIBERATE_ONLY_EDGE_TYPES, UPG_DEPRECATED_TYPES, UPG_DOMAINS, UPG_DOMAIN_ACTIVATION, UPG_DOMAIN_COUNT, UPG_DOMAIN_GUIDES, UPG_DOMAIN_RINGS, UPG_EDGE_CATALOG, UPG_EDGE_COUNT, UPG_EDGE_MIGRATIONS, UPG_EDGE_PAIR_MAP, UPG_EDGE_TYPES, UPG_ENTITY_COUNT, UPG_ENTITY_META, UPG_ENTITY_META_BY_ID, UPG_ENTITY_META_BY_NAME, UPG_ENTITY_TO_DOMAIN, UPG_ENUM_SCALES, UPG_FORMAT_VERSION, UPG_FRAMEWORKS, UPG_FRAMEWORKS_BY_CATEGORY, UPG_FRAMEWORKS_BY_ID, UPG_FRAMEWORK_CATEGORIES, UPG_LENSES, UPG_LIFECYCLES, UPG_LIFECYCLE_FREE_TYPES, UPG_LIFECYCLE_PLANNED_TYPES, UPG_META_COUNT, UPG_MIGRATIONS, UPG_PLAYBOOKS, UPG_POLYMORPHIC_EDGE_KEYS, UPG_PORTFOLIO_KINDS, UPG_PORTFOLIO_SHARED_TYPES, UPG_PRESENCE_EXCEPT_SPECS, UPG_PRODUCT_STAGES, UPG_PRODUCT_STAGE_COERCION_MAP, UPG_PROPERTY_MIGRATIONS, UPG_PROPERTY_SCHEMA, UPG_RATIO_BENCHMARKS, UPG_REGIONS, UPG_REGION_COUNT, UPG_REGION_MAP, UPG_RELATIONSHIP_BENCHMARKS, UPG_SCALAR_TO_EDGE_MIGRATIONS, UPG_SCALES, UPG_SPLIT_MIGRATIONS, UPG_STATUS_MIGRATIONS, UPG_STRUCTURE_PATTERNS, UPG_TREE_PATTERNS, UPG_TREE_PATTERNS_BY_ID, UPG_TYPES, UPG_TYPES_SET, UPG_TYPE_ALIASES, UPG_TYPE_LABELS, UPG_TYPE_LABELS_MAP, UPG_TYPE_NAMES, UPG_VALIDATION_PROFILES, UPG_VALID_CHILDREN, UPG_VERSION, UPG_WILDCARD_ENDPOINT, USERS_NEEDS_PLAYBOOK, type UnitEconomicsProperties, UnknownEntityTypeError, type UserAdvisoryBoardProperties, type UserFlowProperties, type UserJourneyProperties, type UserStoryProperties, type ValueObjectProperties, type ValuePropositionProperties, type ValueStreamProperties, type VariantProperties, type VisionProperties, type VulnerabilityProperties, type WalkMigrationChainResult, type WalkthroughProperties, type WebinarProperties, type WireframeProperties, type WorkflowArtifactProperties, type WorkflowRunProperties, type WorkflowTemplateProperties, type WorkspaceProperties, backfillSlug, buildTypeAliases, canBeChildOf, checkHeaderSeal, checkHeaderSealText, coerceProductStage, collectSlugsForType, compareVersions, computeBodyChecksum, concernEvaluatedFor, concernFor, concernGatesFor, crossProductScope, deriveCounts, derivePortfolioCounts, deriveSingleCounts, describeTreePattern, edgeCarriesProperties, evaluateAntiPatterns, findInvalidStatusMigrationTargets, formatUpgText, friendlyToAssessment, generateSlug, getAnchorEntity, getAntiPatternById, getAntiPatterns, getAntiPatternsBySeverity, getAntiPatternsForStage, getAreaTaxonomyEntry, getBenchmark, getBenchmarksByDomain, getBusinessAreasForRegion, getCanonicalPlaybookForRegion, getCoverageKeysForRegion, getDefaultLens, getDeprecatedTypes, getDomainForType, getDomainIdForType, getDomainsInRing, getEdgePropertySchema, getEntityModifierSummary, getEnumScale, getEnumValueMeta, getGuideForDomain, getLens, getLensIds, getLensPlaybook, getLensesForDomain, getLifecycleForType, getLifecycleRenderShape, getMigrationMap, getPlaybookById, getPlaybooksForRegion, getPropertiesForScale, getPropertyDefaultScale, getPropertyMigrations, getPropertyModifier, getPropertySchema, getRegion, getRegionForEntityType, getReplacementType, getRingForDomain, getScalarToEdgeMigrations, getScale, getSplitMigrations, getTreePattern, getTypeId, getTypeName, getTypes, getUPGEdgeMigrations, getValidChildren, getVisibleTypes, hasStatusMigration, isAggregateShapedProperty, isCanonical, isCanonicalProductStage, isContainmentFreeType, isCrossCapable, isCrossProductEligible, isCuratedCrossEligible, isDeliberateOnlyEdge, isDeprecatedType, isDomainGuideStep, isEntitySequenceStep, isFrameworkInvocationStep, isLegacyProductStage, isLifecycleFreeType, isLifecyclePlannedType, isPolymorphicEdge, isPortfolio, isPortfolioSharedType, isRecordEntity, isRegisteredPolymorphicEdge, isRuntimeStateShapedProperty, isSubSequenceStep, isThinCoverageAdvisory, isUPGDocument, listPropertiesByModifier, listStatusMigrations, listTreePatternSummaries, migrateEdge, migrateNode, migrateNodeProperties, migrateProductStage, migrateStatusValue, normalizeDocument, parseUpg, pickCanonicalEdge, presenceExceptKey, resolveAllEdges, resolveContainmentEdge, resolveEntityType, resolveLabel, resolveSlugCollision, resolveTreePatternEdges, ringOrderedDomainIds, rotateSlug, serializeCanonical, validateEdgeProperties, validateProductStageStrict, validateUPGDocument, validateUPGFramework, validationProfileFor, walkMigrationChainToCanonical };
24119
+ export { type A11yAnnotationProperties, type A11yAuditProperties, type A11yGuidelineProperties, type A11yIssueProperties, type A11yStandardProperties, ACTIVE_WHEN_PROPERTY, ANALYTICS_DATA_PLAYBOOK, type AcceptanceCriterionProperties, type AccessPolicyProperties, type AccountProperties, type AcquisitionChannelProperties, type AdCreativeProperties, type AffinityClusterProperties, type AgentDefinitionProperties, type AgentHookProperties, type AgentSessionProperties, type AgentSkillProperties, type AgentTaskProperties, type AggregateProperties, type AiCostTrackerProperties, type AiDatasetProperties, type AiExperimentProperties, type AiGuardrailProperties, type AiModelProperties, type AiTraceProperties, type AlertRuleProperties, type AnnotationProperties, type AntiPatternInputs, type AntiPatternViolation, type AnyUPGEntityType, type ApiContractProperties, type ApiEcosystemProperties, type ApiEndpointProperties, type ApproachBinding, type ApproachFilter, type ApproachRun, type ApproachRuntime, type ApprovalRecordProperties, type AssumptionProperties, type AttributionModelProperties, type AuditLogPolicyProperties, BUSINESS_GROWTH_METRIC_DRIVEN_PLAYBOOK, BUSINESS_GTM_GROWTH_PLAYBOOK, BUSINESS_MARKETING_AUDIENCE_FIRST_PLAYBOOK, type BehavioralSegmentProperties, type BenchmarkCheck, type BetaProgramProperties, type BoundedContextProperties, type BrandAssetProperties, type BrandColourProperties, type BrandIdentityProperties, type BrandImageryProperties, type BrandLogoProperties, type BrandTypographyProperties, type BrandVoiceProperties, type BugProperties, type BuildArtifactProperties, type BusinessModelProperties, CLASSIFICATION_EDGE_PROPERTY_SCHEMA, CONFIGURATION_QUALIFIER_EDGE_PROPERTY_SCHEMA, CONFIGURATION_VARIANCE_EDGE_PROPERTY_SCHEMA, CONTENT_DEPTH_WARNING_RULES, COVERAGE_ANTI_PATTERNS, type Cadence, type CapabilityProperties, type CapacityPlanProperties, type CauseConfidence, type CeremonyProperties, type CertificationProperties, type ChangeRequestProperties, type ChangelogProperties, type ChurnReasonProperties, type CiPipelineProperties, type ClassificationAxisProperties, type ClassificationCapability, type ClassificationCapabilitySurface, type ClassificationCommitment, type ClassificationValueProperties, type CodeRepositoryProperties, type CohortProperties, type ComfortLevel, type CommandProperties, type CommunityInitiativeProperties, type CompetitiveAnalysisProperties, type CompetitiveBattleCardProperties, type CompetitorFeatureProperties, type CompetitorProperties, type CompetitorSignalProperties, type ComplianceFrameworkProperties, type ComplianceRequirementProperties, type Confidence, type Configuration, type ConfigurationAxisKind, type ConfigurationAxisProperties, type ConfigurationDriftFinding, type ConfigurationDriftKind, type ConformanceLevel, type ConstraintKind, type ConstraintOrigin, type ConstraintProperties, type ConstraintStatus, type ContactProperties, type ContentCalendarProperties, type ContentPieceProperties, type ContentStrategyProperties, type ContentThemeProperties, type ContractClauseProperties, type ContractProperties, type CostStructureProperties, type CountBenchmark, type Cron, type CrossProductEligibleEdgeType, type CrossProductScope, type CulturalAdaptationProperties, type CustomerFeedbackProperties, type CustomerHealthScoreProperties, type CustomerJourneyStageProperties, type CustomerRelationshipProperties, DEFAULT_ENTITY_EMOJI, DEFERRED_PROPOSED_BY_CONTRACT, DEFER_EDGE_PROPERTY_SCHEMA, DISCOVERY_RESEARCH_VALIDATION_PLAYBOOK, type DashboardProperties, type DataClassificationProperties, type DataContractProperties, type DataDomainProperties, type DataFlowProperties, type DataLineageProperties, type DataModelProperties, type DataPipelineProperties, type DataProductProperties, type DataQualityRuleProperties, type DataSensitivity, type DataSourceProperties, type DatabaseSchemaProperties, type DealProperties, type DecisionProperties, type DeliberateOnlyEdgeType, type DeliverableProperties, type DemandGenProgramProperties, type DepartmentProperties, type DependencyProperties, type DeploymentProperties, type DeprecatedUPGEntityType, type DesignComponentProperties, type DesignConceptProperties, type DesignGuidelineProperties, type DesignPatternProperties, type DesignQuestionProperties, type DesignSprintProperties, type DesignSystemProperties, type DesignTokenProperties, type DesiredOutcomeProperties, type DeveloperPortalProperties, type DifficultyLevel, type DiscountStrategyProperties, type DistributionChannelProperties, type DocumentProperties, type DocumentationTemplateProperties, type DomainActivation, type DomainCountCheck, type DomainEntityProperties, type DomainEventProperties, type DomainGuideStep, type DomainPopulationCheck, type Duration, ENGINEERING_PLATFORM_PLAYBOOK, ENTITY_EMOJI, EXPERIENCE_DESIGN_BRAND_PLAYBOOK, type EdgeCountVsPropertyCheck, type EducationProgramProperties, type EmailSequenceProperties, type EmptyCell, type EmptyCellRationaleKind, type EntityCheck, type EntitySequenceStep, type EntityTypeMeta, type EntityTypeResolution, type EntryMode, type EpicProperties, type ErrorBudgetProperties, type EvalBenchmarkProperties, type EvalRunProperties, type EvaluateAntiPatternsOptions, type EventProperties, type EventSchemaProperties, type EvidenceDirection, type EvidenceProperties, type ExperimentPlanProperties, type ExperimentProperties, type ExperimentRunProperties, type ExternalApiProperties, FOUNDATIONS_PLAYBOOK, type FeasibilityStudyProperties, type FeatureAreaProperties, type FeatureFlagProperties, type FeatureProperties, type FeatureRequestProperties, type FeedbackProgramProperties, type FeedbackThemeProperties, type FeedbackVoteProperties, type FixProperties, type ForecastProperties, type FrameworkCategory, type FrameworkComputedProperty, type FrameworkConstant, type FrameworkDataSpec, type FrameworkEducation, type FrameworkEntityTypeSpec, type FrameworkExerciseProperties, type FrameworkInvocationStep, type FrameworkLayout, type FrameworkLevel, type FrameworkOrigin, type FrameworkPresentationSpec, type FrameworkPropertyRequirement, type FrameworkScoringMethod, type FrameworkSlot, type FrameworkStep, type FrameworkStructureSpec, type FrameworkValidationResult, type FrequencyRating, type FunnelProperties, type FunnelStage, type FunnelStepProperties, type GlossaryTermProperties, type GrowthCampaignProperties, type GrowthLoopProperties, type GtmStrategyProperties, type GuardrailStatus, type HallucinationReportProperties, type HealthStatus, type HelpVideoProperties, type HypothesisEvidenceProperties, type HypothesisProperties, type ISO4217, type ISODate, type ISODateTime, type IdealCustomerProfileProperties, type IncidentProperties, type IncidentSeverity, type InfrastructureComponentProperties, type InitiativeProperties, type InsightProperties, type IntegrationPartnerProperties, type IntegrationPatternProperties, type IntelligenceCondition, type InteractionSpecProperties, type InternalDocProperties, type InterviewGuideProperties, type InvestigationProperties, type InvoiceProperties, type IpAssetProperties, type JobProperties, type JobStepProperties, type JourneyActionProperties, type JourneyPhaseProperties, type JourneyStepProperties, type JourneyType, type KeyActivityProperties, type KeyResourceProperties, type KeyResultProperties, type KnowledgeBaseArticleProperties, LEGACY_PRODUCT_STAGES, type LaunchProperties, type LeadProperties, type LearningPathProperties, type LearningProperties, type LegalEntityProperties, type LibraryDependencyProperties, type LifecyclePhase, type LifecycleRenderShape, type LifecycleRenderState, type LifecycleRenderTransition, type LifecycleState, type LocaleConfigProperties, type LocaleProperties, type LogLevel, type LowMedHigh, MARKDOWN_FORMAT_VERSION, MARKET_COMPETITIVE_PLAYBOOK, type MarketSegmentProperties, type MarketTrendProperties, type MarketingCampaignPlanProperties, type MarketingChannelProperties, type MarketingPlatform, type MarketingStrategyProperties, type MarketplaceListingProperties, type MatrixSlot, type MaturityLevel, type MessagingProperties, type MetricCategory, type MetricDataPoint, type MetricDesignation, type MetricHealth, type MetricImpactLevel, type MetricIndicatorDirection, type MetricProperties, type MetricQualityAssessmentProperties, type MetricSegmentType, type MetricStatisticalFunction, type MilestoneProperties, type MissionProperties, type ModelComparisonProperties, type ModifiedProperty, type MonitorProperties, type NamedGroup, type NeedMaturity, type NeedProperties, type NeedValence, type NpsCampaignProperties, OPERATIONS_QUALITY_PLAYBOOK, type ObjectionProperties, type ObjectiveProperties, type ObservationProperties, type OnCallRotationProperties, type OperatingLifecycleProperties, type OperatingStageProperties, type OpportunityProperties, type OrganizationProperties, type OrphanCheck, type OutcomeProperties, PRESENT_UNDER_PROPERTY, PRODUCT_DELIVERY_PLAYBOOK, PROPERTY_MODIFIERS, PROPERTY_MODIFIER_SEMANTICS, PROPERTY_SCALE_MAP, type ParticipantProperties, type PartnerProgramProperties, type PartnerRevenueShareProperties, type PartnerTierProperties, type PartnershipProperties, type PaywallProperties, type PenetrationTestProperties, type PersonProperties, type PersonaProperties, type PipelineSalesProperties, type PipelineStageProperties, type PlanningCycleProperties, type PlaybookBinding, type PlaybookFilter, type PlaybookProperties, type PlaybookRun, type PlaybookRuntime, type PortfolioProperties, type PositioningProperties, type PostmortemProperties, type PressReleaseProperties, type PricingStrategyProperties, type PricingTierProperties, type PrimitiveProperties, type Priority, type PrivacyPolicyProperties, type ProductAreaProperties, type ProductProperties, type ProductStageCoercion, type ProgramProperties, type ProjectProperties, type ProjectableEdge, type ProjectableNode, type ProjectionResult, type PromptTemplateProperties, type PromptVersionProperties, type ProofPointProperties, type PropertyDefinition, type PropertyModifier, type PropertySchema, type Protocol, type PrototypeProperties, type ProxyConfidence, type ProxyReason, QUALIFIABLE_EDGE_TYPES, type QaSessionProperties, type QueueTopicProperties, type QuoteDocumentProperties, type QuoteProperties, RECORD_ENTITY_TYPES, REFLECT_MODES, REGISTRY_PRODUCT_ID, type RatioBenchmark, type ReadModelProperties, type RebuttalProperties, type ReflectMode, type RegionalPricingProperties, type RegressionTestProperties, type RelationshipBenchmark, type RelationshipCheck, type ReleaseProperties, type ReleaseStrategyProperties, type ReportProperties, type ResearchPlanProperties, type ResearchQuestionProperties, type ResearchStudyProperties, type ResourceAllocationProperties, type RetrospectiveProperties, type RevenueStreamProperties, type ReviewGateProperties, type RiskProperties, type RiskRegisterProperties, type RoadmapItemProperties, type RoadmapProperties, type RoadmapThemeProperties, type RoleProperties, type RootCauseProperties, type RuleStrength, type RunContext, type RunbookProperties, STRATEGY_OUTCOMES_PLAYBOOK, type SalesMotionProperties, type ScreenProperties, type ScreenStateProperties, type SecurityAuditProperties, type SecurityControlProperties, type SecurityPolicyProperties, type SecurityReviewProperties, type Semver, type SeoKeywordProperties, type SerializeOptions, type ServiceBlueprintProperties, type ServiceLevelAgreementProperties, type ServiceLevelIndicatorProperties, type ServiceLevelObjectiveProperties, type ServiceProperties, type SignalChannel, type SignalSentiment, type SignalUrgency, type SkillProperties, type SocialPostProperties, type SolutionProperties, type SpecificationProperties, type StageRange, type StakeholderProperties, type StatusCategory, type StatusReportProperties, type Step, type StepKind, type StepOutput, type StepOutputKind, type StoryTaskProperties, type StrategicPillarProperties, type StrategicQuestionProperties, type StrategicThemeProperties, type StructurePattern, type SubSequenceStep, type SubscriptionProperties, type SuccessMilestoneProperties, type SupportTicketProperties, type SurfaceArbitrationState, type SurfaceCardinality, type SurfaceCompositionMode, type SurfaceExtensibility, type SurfaceId, type SurfaceInstanceScope, type SurfaceKind, type SurfacePersistence, type SurfaceProperties, type SurveyResponseProperties, type SwitchingCostProperties, type SymptomProperties, THIN_GRAPH_THRESHOLD, type TableColumn, type TargetCustomerSegmentProperties, type TaskProperties, type TeamOkrProperties, type TeamProperties, type TechnicalDebtItemProperties, type TerritoryProperties, type TestCaseProperties, type TestCoverageReportProperties, type TestEnvironmentProperties, type TestPlanProperties, type TestResultProperties, type TestSuiteProperties, type ThreatModelProperties, type ThreatProperties, type Timeframe, type TotalEntityCountCheck, type TouchpointProperties, type TranslationBundleProperties, type TranslationKeyProperties, type TrialConfigProperties, type TutorialProperties, type UPGAnchorEntity, type UPGAntiPattern, type UPGAntiPatternConcern, type UPGAntiPatternSeverity, type UPGApproach, type UPGApproachEnvelope, type UPGApproachId, type UPGAreaTaxonomyEntry, type UPGAssessment, type UPGBaseNode, type UPGBenchmarkSource, type UPGBoundaryDirection, type UPGBoundaryEdge, type UPGCrossEdge, type UPGCrossEdgeType, type UPGCrossOnlyEdgeType, type UPGCuratedAntiPattern, type UPGDocument, type UPGDomain, type UPGDomainBridge, type UPGDomainId, type UPGDomainPattern, type UPGDomainRing, type UPGDomainUsageGuide, type UPGEdge, type UPGEdgeCountSpec, type UPGEdgeDefinition, type UPGEdgeMigration, type UPGEdgeMigrationEndpoints, type UPGEdgePickHint, type UPGEdgeType, type UPGEntityFilterSpec, type UPGEntityType, type UPGEntityTypeMaturity, type UPGEnumScaleDefinition, type UPGEnumScaleValue, type UPGFramework, type UPGFrameworkMeta, type UPGHeader, type UPGHeaderCountsMismatch, type UPGHeaderIntegrity, type UPGHeaderIntegrityMismatch, type UPGHeaderProvenance, type UPGHeaderSealReport, type UPGIntegrity, type UPGLens, type UPGLensIntelligencePrompt, type UPGLifecycle, type UPGMappingConfidence, type UPGMemberKindKey, type UPGNode, type UPGOrganization, type UPGPlaybook, type UPGPortfolio, type UPGPortfolioDocument, type UPGPortfolioKind, type UPGPresenceExceptSpec, type UPGProduct, type UPGProductArea, type UPGProductStage, type UPGPropertyMap, type UPGPropertyMigration, type UPGPropertyMigrationChange, type UPGRegion, type UPGRegionEntityMembership, type UPGRegionEntityRole, type UPGRegionId, type UPGRegionShape, type UPGRegistry, type UPGScalarToEdgeMigration, type UPGScaleDefinition, type UPGScalePoint, type UPGSource, type UPGSplitEdge, type UPGSplitMigration, type UPGSplitRoute, type UPGSplitRouteTarget, type UPGSplitTarget, type UPGTreeChild, type UPGTreeGapPolicy, type UPGTreePattern, type UPGTreePatternDetail, type UPGTreePatternEdge, type UPGTreePatternSummary, type UPGTypeLabel, type UPGTypeMigration, type UPGValidationError, type UPGValidationProfile, type UPGValidationResult, type UPGValidationWarning, type UPGWildcardEndpoint, UPG_ACTIVE_TYPES, UPG_ANTI_PATTERNS, UPG_ANTI_PATTERN_CONCERNS, UPG_APPROACHES, UPG_APPROACHES_BY_ID, UPG_AREA_TAXONOMY, UPG_AREA_TAXONOMY_BY_COVERAGE_KEY, UPG_CANONICAL_FORMAT_VERSION, UPG_CONTAINMENT_FREE_TYPES, UPG_COUNT_BENCHMARKS, UPG_CROSS_EDGE_TYPES, UPG_CROSS_ELIGIBLE_CATALOG_EDGE_TYPES, UPG_CROSS_ONLY_EDGE_TYPES, UPG_DELIBERATE_ONLY_EDGE_TYPES, UPG_DEPRECATED_TYPES, UPG_DOMAINS, UPG_DOMAIN_ACTIVATION, UPG_DOMAIN_COUNT, UPG_DOMAIN_GUIDES, UPG_DOMAIN_RINGS, UPG_EDGE_CATALOG, UPG_EDGE_COUNT, UPG_EDGE_COUNT_SPECS, UPG_EDGE_MIGRATIONS, UPG_EDGE_PAIR_MAP, UPG_EDGE_TYPES, UPG_ENTITY_COUNT, UPG_ENTITY_FILTER_SPECS, UPG_ENTITY_META, UPG_ENTITY_META_BY_ID, UPG_ENTITY_META_BY_NAME, UPG_ENTITY_TO_DOMAIN, UPG_ENUM_SCALES, UPG_FORMAT_VERSION, UPG_FRAMEWORKS, UPG_FRAMEWORKS_BY_CATEGORY, UPG_FRAMEWORKS_BY_ID, UPG_FRAMEWORK_CATEGORIES, UPG_LENSES, UPG_LIFECYCLES, UPG_LIFECYCLE_FREE_TYPES, UPG_LIFECYCLE_PLANNED_TYPES, UPG_META_COUNT, UPG_MIGRATIONS, UPG_PLAYBOOKS, UPG_POLYMORPHIC_EDGE_KEYS, UPG_PORTFOLIO_KINDS, UPG_PORTFOLIO_SHARED_TYPES, UPG_PRESENCE_EXCEPT_SPECS, UPG_PRODUCT_STAGES, UPG_PRODUCT_STAGE_COERCION_MAP, UPG_PROPERTY_MIGRATIONS, UPG_PROPERTY_SCHEMA, UPG_RATIO_BENCHMARKS, UPG_REGIONS, UPG_REGION_COUNT, UPG_REGION_MAP, UPG_RELATIONSHIP_BENCHMARKS, UPG_SCALAR_TO_EDGE_MIGRATIONS, UPG_SCALES, UPG_SPLIT_MIGRATIONS, UPG_STATUS_MIGRATIONS, UPG_STRUCTURE_PATTERNS, UPG_TREE_PATTERNS, UPG_TREE_PATTERNS_BY_ID, UPG_TYPES, UPG_TYPES_SET, UPG_TYPE_ALIASES, UPG_TYPE_LABELS, UPG_TYPE_LABELS_MAP, UPG_TYPE_NAMES, UPG_VALIDATION_PROFILES, UPG_VALID_CHILDREN, UPG_VERSION, UPG_WILDCARD_ENDPOINT, USERS_NEEDS_PLAYBOOK, type UnitEconomicsProperties, UnknownEntityTypeError, type UserAdvisoryBoardProperties, type UserFlowProperties, type UserJourneyProperties, type UserStoryProperties, VARIES_BY_EDGE, type ValueObjectProperties, type ValuePropositionProperties, type ValueStreamProperties, type VariantProperties, type VisionProperties, type VulnerabilityProperties, type WalkMigrationChainResult, type WalkthroughProperties, type WebinarProperties, type WireframeProperties, type WorkflowArtifactProperties, type WorkflowRunProperties, type WorkflowTemplateProperties, type WorkspaceProperties, backfillSlug, buildTypeAliases, canBeChildOf, checkConfigurationDrift, checkHeaderSeal, checkHeaderSealText, checkToEdgeCountSpec, classifyEntityFilter, coerceProductStage, collectSlugsForType, collectTargetEntities, compareVersions, computeBodyChecksum, concernEvaluatedFor, concernFor, concernGatesFor, crossProductScope, deriveCounts, derivePortfolioCounts, deriveSingleCounts, describeTreePattern, edgeCarriesProperties, edgeCountSpecKey, entityFilterKey, enumerateProjections, evaluateAntiPatterns, findInvalidStatusMigrationTargets, formatUpgText, friendlyToAssessment, generateSlug, getAnchorEntity, getAntiPatternById, getAntiPatterns, getAntiPatternsBySeverity, getAntiPatternsForStage, getAreaTaxonomyEntry, getBenchmark, getBenchmarksByDomain, getBusinessAreasForRegion, getCanonicalPlaybookForRegion, getCoverageKeysForRegion, getDefaultLens, getDeprecatedTypes, getDomainForType, getDomainIdForType, getDomainsInRing, getEdgePropertySchema, getEntityModifierSummary, getEnumScale, getEnumValueMeta, getGuideForDomain, getLens, getLensIds, getLensPlaybook, getLensesForDomain, getLifecycleForType, getLifecycleRenderShape, getMigrationMap, getPlaybookById, getPlaybooksForRegion, getPropertiesForScale, getPropertyDefaultScale, getPropertyMigrations, getPropertyModifier, getPropertySchema, getRegion, getRegionForEntityType, getReplacementType, getRingForDomain, getScalarToEdgeMigrations, getScale, getSplitMigrations, getTreePattern, getTypeId, getTypeName, getTypes, getUPGEdgeMigrations, getValidChildren, getVisibleTypes, hasStatusMigration, isAggregateShapedProperty, isCanonical, isCanonicalProductStage, isContainmentFreeType, isCrossCapable, isCrossProductEligible, isCuratedCrossEligible, isDeliberateOnlyEdge, isDeprecatedType, isDomainGuideStep, isEntitySequenceStep, isFrameworkInvocationStep, isLegacyProductStage, isLifecycleFreeType, isLifecyclePlannedType, isPolymorphicEdge, isPortfolio, isPortfolioSharedType, isRecordEntity, isRegisteredPolymorphicEdge, isRuntimeStateShapedProperty, isSubSequenceStep, isThinCoverageAdvisory, isUPGDocument, listPropertiesByModifier, listStatusMigrations, listTreePatternSummaries, migrateEdge, migrateNode, migrateNodeProperties, migrateProductStage, migrateStatusValue, normalizeDocument, parseUpg, pickCanonicalEdge, presenceExceptKey, projectGraph, readActiveWhen, readStringArray, resolveAllEdges, resolveContainmentEdge, resolveEntityType, resolveLabel, resolveSlugCollision, resolveTreePatternEdges, ringOrderedDomainIds, rotateSlug, serializeCanonical, validateEdgeProperties, validateProductStageStrict, validateUPGDocument, validateUPGFramework, validationProfileFor, walkMigrationChainToCanonical };