@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/CHANGELOG.md +48 -0
- package/README.md +1 -1
- package/dist/index.cjs +654 -18
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +742 -15
- package/dist/index.d.ts +742 -15
- package/dist/index.js +636 -18
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
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:
|
|
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
|
-
*
|
|
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.
|
|
21786
|
-
*
|
|
21787
|
-
*
|
|
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
|
-
*
|
|
21791
|
-
* //
|
|
21792
|
-
* //
|
|
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
|
|
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.
|
|
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 };
|