@unified-product-graph/core 0.9.6 → 0.9.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.cts CHANGED
@@ -6831,6 +6831,202 @@ declare const UPG_EDGE_CATALOG: {
6831
6831
  source_type: string;
6832
6832
  target_type: string;
6833
6833
  };
6834
+ data_classification_governed_by_privacy_policy: {
6835
+ forward_verb: string;
6836
+ reverse_verb: string;
6837
+ classification: "cross-domain";
6838
+ source_type: string;
6839
+ target_type: string;
6840
+ };
6841
+ design_component_conforms_to_a11y_standard: {
6842
+ forward_verb: string;
6843
+ reverse_verb: string;
6844
+ classification: "cross-domain";
6845
+ source_type: string;
6846
+ target_type: string;
6847
+ };
6848
+ design_component_conforms_to_a11y_guideline: {
6849
+ forward_verb: string;
6850
+ reverse_verb: string;
6851
+ classification: "cross-domain";
6852
+ source_type: string;
6853
+ target_type: string;
6854
+ };
6855
+ feature_request_becomes_feature: {
6856
+ forward_verb: string;
6857
+ reverse_verb: string;
6858
+ classification: "cross-domain";
6859
+ source_type: string;
6860
+ target_type: string;
6861
+ };
6862
+ objective_advances_outcome: {
6863
+ forward_verb: string;
6864
+ reverse_verb: string;
6865
+ classification: "causal";
6866
+ source_type: string;
6867
+ target_type: string;
6868
+ };
6869
+ desired_outcome_reveals_opportunity: {
6870
+ forward_verb: string;
6871
+ reverse_verb: string;
6872
+ classification: "cross-domain";
6873
+ source_type: string;
6874
+ target_type: string;
6875
+ };
6876
+ desired_outcome_quantified_by_metric: {
6877
+ forward_verb: string;
6878
+ reverse_verb: string;
6879
+ classification: "cross-domain";
6880
+ source_type: string;
6881
+ target_type: string;
6882
+ };
6883
+ feasibility_study_informs_decision: {
6884
+ forward_verb: string;
6885
+ reverse_verb: string;
6886
+ classification: "cross-domain";
6887
+ source_type: string;
6888
+ target_type: string;
6889
+ };
6890
+ feasibility_study_recommends_solution: {
6891
+ forward_verb: string;
6892
+ reverse_verb: string;
6893
+ classification: "semantic";
6894
+ source_type: string;
6895
+ target_type: string;
6896
+ };
6897
+ feasibility_study_produces_learning: {
6898
+ forward_verb: string;
6899
+ reverse_verb: string;
6900
+ classification: "cross-domain";
6901
+ source_type: string;
6902
+ target_type: string;
6903
+ };
6904
+ design_sprint_informs_decision: {
6905
+ forward_verb: string;
6906
+ reverse_verb: string;
6907
+ classification: "cross-domain";
6908
+ source_type: string;
6909
+ target_type: string;
6910
+ };
6911
+ design_sprint_recommends_solution: {
6912
+ forward_verb: string;
6913
+ reverse_verb: string;
6914
+ classification: "semantic";
6915
+ source_type: string;
6916
+ target_type: string;
6917
+ };
6918
+ design_sprint_produces_learning: {
6919
+ forward_verb: string;
6920
+ reverse_verb: string;
6921
+ classification: "cross-domain";
6922
+ source_type: string;
6923
+ target_type: string;
6924
+ };
6925
+ affinity_cluster_groups_observation: {
6926
+ forward_verb: string;
6927
+ reverse_verb: string;
6928
+ classification: "hierarchy";
6929
+ source_type: string;
6930
+ target_type: string;
6931
+ };
6932
+ feedback_theme_reveals_opportunity: {
6933
+ forward_verb: string;
6934
+ reverse_verb: string;
6935
+ classification: "cross-domain";
6936
+ source_type: string;
6937
+ target_type: string;
6938
+ };
6939
+ competitor_feature_benchmarks_capability: {
6940
+ forward_verb: string;
6941
+ reverse_verb: string;
6942
+ classification: "cross-domain";
6943
+ source_type: string;
6944
+ target_type: string;
6945
+ };
6946
+ switching_cost_locks_in_competitor: {
6947
+ forward_verb: string;
6948
+ reverse_verb: string;
6949
+ classification: "cross-domain";
6950
+ source_type: string;
6951
+ target_type: string;
6952
+ };
6953
+ test_result_reports_bug: {
6954
+ forward_verb: string;
6955
+ reverse_verb: string;
6956
+ classification: "cross-domain";
6957
+ source_type: string;
6958
+ target_type: string;
6959
+ };
6960
+ content_piece_repurposed_as_social_post: {
6961
+ forward_verb: string;
6962
+ reverse_verb: string;
6963
+ classification: "cross-domain";
6964
+ source_type: string;
6965
+ target_type: string;
6966
+ };
6967
+ translation_key_localises_content_piece: {
6968
+ forward_verb: string;
6969
+ reverse_verb: string;
6970
+ classification: "cross-domain";
6971
+ source_type: string;
6972
+ target_type: string;
6973
+ };
6974
+ translation_key_targets_locale: {
6975
+ forward_verb: string;
6976
+ reverse_verb: string;
6977
+ classification: "semantic";
6978
+ source_type: string;
6979
+ target_type: string;
6980
+ };
6981
+ partner_revenue_share_feeds_revenue_stream: {
6982
+ forward_verb: string;
6983
+ reverse_verb: string;
6984
+ classification: "cross-domain";
6985
+ source_type: string;
6986
+ target_type: string;
6987
+ };
6988
+ retrospective_produces_learning: {
6989
+ forward_verb: string;
6990
+ reverse_verb: string;
6991
+ classification: "cross-domain";
6992
+ source_type: string;
6993
+ target_type: string;
6994
+ };
6995
+ retrospective_yields_decision: {
6996
+ forward_verb: string;
6997
+ reverse_verb: string;
6998
+ classification: "cross-domain";
6999
+ source_type: string;
7000
+ target_type: string;
7001
+ };
7002
+ status_report_reports_on_milestone: {
7003
+ forward_verb: string;
7004
+ reverse_verb: string;
7005
+ classification: "semantic";
7006
+ source_type: string;
7007
+ target_type: string;
7008
+ };
7009
+ quote_document_advances_deal: {
7010
+ forward_verb: string;
7011
+ reverse_verb: string;
7012
+ classification: "causal";
7013
+ source_type: string;
7014
+ target_type: string;
7015
+ };
7016
+ data_quality_rule_governs_data_source: {
7017
+ forward_verb: string;
7018
+ reverse_verb: string;
7019
+ classification: "semantic";
7020
+ source_type: string;
7021
+ target_type: string;
7022
+ };
7023
+ press_release_announces_launch: {
7024
+ forward_verb: string;
7025
+ reverse_verb: string;
7026
+ classification: "cross-domain";
7027
+ source_type: string;
7028
+ target_type: string;
7029
+ };
6834
7030
  };
6835
7031
  /** The `UPGEdgeType` union derived from the registry above. Declared here (not
6836
7032
  * in `shapes/edges.ts`) so the polymorphic list below can reference it
@@ -6976,7 +7172,7 @@ interface UPGProduct {
6976
7172
  /** Product lifecycle stages. Covers the full arc from napkin idea to end-of-life. */
6977
7173
  type UPGProductStage = 'concept' | 'validation' | 'build' | 'beta' | 'launch' | 'growth' | 'mature' | 'maintenance' | 'sunset';
6978
7174
  /** The set of valid cross-product relationship types */
6979
- type UPGCrossEdgeType = 'shares_persona' | 'shares_competitor' | 'shares_metric' | 'depends_on_product' | 'cannibalises' | 'succeeds' | 'hosts' | 'contributes_to' | 'instance_of';
7175
+ type UPGCrossEdgeType = 'shares_persona' | 'shares_competitor' | 'shares_metric' | 'depends_on_product' | 'cannibalises' | 'succeeds' | 'hosts' | 'contributes_to' | 'instance_of' | 'area_serves_persona' | 'area_targets_market_segment' | 'rolls_up_to';
6980
7176
  /**
6981
7177
  * Runtime-checkable list of valid cross-product edge types. Mirrors
6982
7178
  * `UPGCrossEdgeType` for use in validators and writers that need to test
@@ -7011,6 +7207,26 @@ interface UPGCrossEdge {
7011
7207
  target_product_id?: string;
7012
7208
  /** Confidence level if this edge was inferred during import */
7013
7209
  mapping_confidence?: UPGMappingConfidence;
7210
+ /**
7211
+ * Sanctioned divergence marker (`instance_of` only). When true, registry drift
7212
+ * detection treats an instance title that differs from its canonical as
7213
+ * intentional (an informative product-local name, e.g. "Vercel Platform / SDK"
7214
+ * vs canonical "Vercel"), excluding it from the `title_divergence` count so
7215
+ * `clean` reflects only un-sanctioned drift.
7216
+ */
7217
+ alias?: boolean;
7218
+ /**
7219
+ * Audience relevance for `area_serves_persona` / `area_targets_market_segment`:
7220
+ * whether the audience is a primary or secondary focus of this area. The
7221
+ * primary-vs-secondary distinction is the core value of the area-to-audience matrix.
7222
+ */
7223
+ relevance?: 'primary' | 'secondary';
7224
+ /**
7225
+ * Audience role in this area's context (`area_serves_persona`). Mirrors
7226
+ * `PersonaProperties.audience_role`: the same persona can be a `buyer` for one
7227
+ * area and a `user` for another.
7228
+ */
7229
+ audience_role?: 'buyer' | 'user' | 'champion' | 'influencer' | 'partner';
7014
7230
  }
7015
7231
  /**
7016
7232
  * A product area within a portfolio. The organisational axis (who owns
@@ -11023,6 +11239,14 @@ interface WireframeProperties {
11023
11239
  * }
11024
11240
  */
11025
11241
  interface UserFlowProperties {
11242
+ /**
11243
+ * Display order of this flow among sibling flows (0-indexed). The scalar
11244
+ * ordering convention shared with `journey_step.step_order` and
11245
+ * `journey_action.action_order` (UPG-663 / UPG-674). The free-text `steps`
11246
+ * array below still captures the within-flow narrative; this scalar makes the
11247
+ * flow itself a deterministically orderable sibling.
11248
+ */
11249
+ flow_order?: number;
11026
11250
  /** Initiating event */
11027
11251
  trigger?: string;
11028
11252
  /** Ordered steps */
@@ -11066,6 +11290,13 @@ interface ScreenProperties {
11066
11290
  * }
11067
11291
  */
11068
11292
  interface ScreenStateProperties {
11293
+ /**
11294
+ * Display order of this state within its parent screen (0-indexed). The scalar
11295
+ * ordering convention shared with `journey_step.step_order` and
11296
+ * `journey_action.action_order` (UPG-663 / UPG-674). Orders the states a
11297
+ * screen moves through (e.g. skeleton, loading, populated).
11298
+ */
11299
+ state_order?: number;
11069
11300
  /** State */
11070
11301
  state_name: 'empty' | 'loading' | 'error' | 'populated' | 'skeleton' | 'partial';
11071
11302
  /** Cause for entering this state */
@@ -14855,6 +15086,13 @@ interface ProjectProperties {
14855
15086
  * }
14856
15087
  */
14857
15088
  interface MilestoneProperties {
15089
+ /**
15090
+ * Display order of this milestone within its parent project (0-indexed). The
15091
+ * scalar ordering convention shared with `journey_step.step_order` and
15092
+ * `journey_action.action_order` (UPG-663 / UPG-674). Orders the delivery
15093
+ * milestones a project moves through, independent of `due_date`.
15094
+ */
15095
+ milestone_order?: number;
14858
15096
  /** Target due date (ISO format) */
14859
15097
  due_date?: ISODate;
14860
15098
  /** Whether the milestone was met on time */
@@ -17205,6 +17443,13 @@ interface HelpVideoProperties {
17205
17443
  * }
17206
17444
  */
17207
17445
  interface LearningPathProperties {
17446
+ /**
17447
+ * Display order of this path within a curriculum or program (0-indexed). The
17448
+ * scalar ordering convention shared with `journey_step.step_order` and
17449
+ * `journey_action.action_order` (UPG-663 / UPG-674). Makes a learning_path a
17450
+ * deterministically orderable sequence among sibling paths rather than a star.
17451
+ */
17452
+ path_order?: number;
17208
17453
  /** Overall difficulty level of the learning path */
17209
17454
  path_difficulty?: DifficultyLevel;
17210
17455
  /** Number of items (tutorials, videos, etc.) in the path */
@@ -17242,6 +17487,13 @@ interface PartnerProgramProperties {
17242
17487
  * }
17243
17488
  */
17244
17489
  interface PartnerTierProperties {
17490
+ /**
17491
+ * Display order of this tier among sibling partner tiers (1 = first tier
17492
+ * shown). Mirrors `pricing_tier.tier_order`; part of the spec-wide `*_order`
17493
+ * sequence convention (UPG-663 / UPG-674). Distinct from `tier_level`, which
17494
+ * is a prestige rank, not a presentation order.
17495
+ */
17496
+ tier_order?: number;
17245
17497
  /** Numeric rank of the tier (higher = more prestigious) */
17246
17498
  tier_level?: number;
17247
17499
  /** What a partner must achieve to reach this tier */
@@ -18105,7 +18357,7 @@ type UPGNode<T extends keyof UPGPropertyMap = keyof UPGPropertyMap> = UPGBaseNod
18105
18357
  * AUTO-GENERATED by scripts/generate-property-registry.ts
18106
18358
  * Do not edit manually. Run: npx tsx scripts/generate-property-registry.ts
18107
18359
  *
18108
- * Generated: 2026-06-09T23:36:57.066Z
18360
+ * Generated: 2026-06-10T00:33:26.360Z
18109
18361
  * Entity types with properties: 316
18110
18362
  */
18111
18363
  interface PropertyDefinition {
@@ -20546,7 +20798,7 @@ declare function isCanonical(text: string): boolean;
20546
20798
  * it stamps the `upg_version` field of every `.upg` file written by the SDK.
20547
20799
  * The `check:version-lockstep` gate enforces this at release time.
20548
20800
  */
20549
- declare const UPG_VERSION: "0.9.6";
20801
+ declare const UPG_VERSION: "0.9.8";
20550
20802
  /**
20551
20803
  * The `.upg` JSON document format version. Written to the `upg_version` field.
20552
20804
  * Evolves independently from `UPG_VERSION` (the catalogue version).
package/dist/index.d.ts CHANGED
@@ -6831,6 +6831,202 @@ declare const UPG_EDGE_CATALOG: {
6831
6831
  source_type: string;
6832
6832
  target_type: string;
6833
6833
  };
6834
+ data_classification_governed_by_privacy_policy: {
6835
+ forward_verb: string;
6836
+ reverse_verb: string;
6837
+ classification: "cross-domain";
6838
+ source_type: string;
6839
+ target_type: string;
6840
+ };
6841
+ design_component_conforms_to_a11y_standard: {
6842
+ forward_verb: string;
6843
+ reverse_verb: string;
6844
+ classification: "cross-domain";
6845
+ source_type: string;
6846
+ target_type: string;
6847
+ };
6848
+ design_component_conforms_to_a11y_guideline: {
6849
+ forward_verb: string;
6850
+ reverse_verb: string;
6851
+ classification: "cross-domain";
6852
+ source_type: string;
6853
+ target_type: string;
6854
+ };
6855
+ feature_request_becomes_feature: {
6856
+ forward_verb: string;
6857
+ reverse_verb: string;
6858
+ classification: "cross-domain";
6859
+ source_type: string;
6860
+ target_type: string;
6861
+ };
6862
+ objective_advances_outcome: {
6863
+ forward_verb: string;
6864
+ reverse_verb: string;
6865
+ classification: "causal";
6866
+ source_type: string;
6867
+ target_type: string;
6868
+ };
6869
+ desired_outcome_reveals_opportunity: {
6870
+ forward_verb: string;
6871
+ reverse_verb: string;
6872
+ classification: "cross-domain";
6873
+ source_type: string;
6874
+ target_type: string;
6875
+ };
6876
+ desired_outcome_quantified_by_metric: {
6877
+ forward_verb: string;
6878
+ reverse_verb: string;
6879
+ classification: "cross-domain";
6880
+ source_type: string;
6881
+ target_type: string;
6882
+ };
6883
+ feasibility_study_informs_decision: {
6884
+ forward_verb: string;
6885
+ reverse_verb: string;
6886
+ classification: "cross-domain";
6887
+ source_type: string;
6888
+ target_type: string;
6889
+ };
6890
+ feasibility_study_recommends_solution: {
6891
+ forward_verb: string;
6892
+ reverse_verb: string;
6893
+ classification: "semantic";
6894
+ source_type: string;
6895
+ target_type: string;
6896
+ };
6897
+ feasibility_study_produces_learning: {
6898
+ forward_verb: string;
6899
+ reverse_verb: string;
6900
+ classification: "cross-domain";
6901
+ source_type: string;
6902
+ target_type: string;
6903
+ };
6904
+ design_sprint_informs_decision: {
6905
+ forward_verb: string;
6906
+ reverse_verb: string;
6907
+ classification: "cross-domain";
6908
+ source_type: string;
6909
+ target_type: string;
6910
+ };
6911
+ design_sprint_recommends_solution: {
6912
+ forward_verb: string;
6913
+ reverse_verb: string;
6914
+ classification: "semantic";
6915
+ source_type: string;
6916
+ target_type: string;
6917
+ };
6918
+ design_sprint_produces_learning: {
6919
+ forward_verb: string;
6920
+ reverse_verb: string;
6921
+ classification: "cross-domain";
6922
+ source_type: string;
6923
+ target_type: string;
6924
+ };
6925
+ affinity_cluster_groups_observation: {
6926
+ forward_verb: string;
6927
+ reverse_verb: string;
6928
+ classification: "hierarchy";
6929
+ source_type: string;
6930
+ target_type: string;
6931
+ };
6932
+ feedback_theme_reveals_opportunity: {
6933
+ forward_verb: string;
6934
+ reverse_verb: string;
6935
+ classification: "cross-domain";
6936
+ source_type: string;
6937
+ target_type: string;
6938
+ };
6939
+ competitor_feature_benchmarks_capability: {
6940
+ forward_verb: string;
6941
+ reverse_verb: string;
6942
+ classification: "cross-domain";
6943
+ source_type: string;
6944
+ target_type: string;
6945
+ };
6946
+ switching_cost_locks_in_competitor: {
6947
+ forward_verb: string;
6948
+ reverse_verb: string;
6949
+ classification: "cross-domain";
6950
+ source_type: string;
6951
+ target_type: string;
6952
+ };
6953
+ test_result_reports_bug: {
6954
+ forward_verb: string;
6955
+ reverse_verb: string;
6956
+ classification: "cross-domain";
6957
+ source_type: string;
6958
+ target_type: string;
6959
+ };
6960
+ content_piece_repurposed_as_social_post: {
6961
+ forward_verb: string;
6962
+ reverse_verb: string;
6963
+ classification: "cross-domain";
6964
+ source_type: string;
6965
+ target_type: string;
6966
+ };
6967
+ translation_key_localises_content_piece: {
6968
+ forward_verb: string;
6969
+ reverse_verb: string;
6970
+ classification: "cross-domain";
6971
+ source_type: string;
6972
+ target_type: string;
6973
+ };
6974
+ translation_key_targets_locale: {
6975
+ forward_verb: string;
6976
+ reverse_verb: string;
6977
+ classification: "semantic";
6978
+ source_type: string;
6979
+ target_type: string;
6980
+ };
6981
+ partner_revenue_share_feeds_revenue_stream: {
6982
+ forward_verb: string;
6983
+ reverse_verb: string;
6984
+ classification: "cross-domain";
6985
+ source_type: string;
6986
+ target_type: string;
6987
+ };
6988
+ retrospective_produces_learning: {
6989
+ forward_verb: string;
6990
+ reverse_verb: string;
6991
+ classification: "cross-domain";
6992
+ source_type: string;
6993
+ target_type: string;
6994
+ };
6995
+ retrospective_yields_decision: {
6996
+ forward_verb: string;
6997
+ reverse_verb: string;
6998
+ classification: "cross-domain";
6999
+ source_type: string;
7000
+ target_type: string;
7001
+ };
7002
+ status_report_reports_on_milestone: {
7003
+ forward_verb: string;
7004
+ reverse_verb: string;
7005
+ classification: "semantic";
7006
+ source_type: string;
7007
+ target_type: string;
7008
+ };
7009
+ quote_document_advances_deal: {
7010
+ forward_verb: string;
7011
+ reverse_verb: string;
7012
+ classification: "causal";
7013
+ source_type: string;
7014
+ target_type: string;
7015
+ };
7016
+ data_quality_rule_governs_data_source: {
7017
+ forward_verb: string;
7018
+ reverse_verb: string;
7019
+ classification: "semantic";
7020
+ source_type: string;
7021
+ target_type: string;
7022
+ };
7023
+ press_release_announces_launch: {
7024
+ forward_verb: string;
7025
+ reverse_verb: string;
7026
+ classification: "cross-domain";
7027
+ source_type: string;
7028
+ target_type: string;
7029
+ };
6834
7030
  };
6835
7031
  /** The `UPGEdgeType` union derived from the registry above. Declared here (not
6836
7032
  * in `shapes/edges.ts`) so the polymorphic list below can reference it
@@ -6976,7 +7172,7 @@ interface UPGProduct {
6976
7172
  /** Product lifecycle stages. Covers the full arc from napkin idea to end-of-life. */
6977
7173
  type UPGProductStage = 'concept' | 'validation' | 'build' | 'beta' | 'launch' | 'growth' | 'mature' | 'maintenance' | 'sunset';
6978
7174
  /** The set of valid cross-product relationship types */
6979
- type UPGCrossEdgeType = 'shares_persona' | 'shares_competitor' | 'shares_metric' | 'depends_on_product' | 'cannibalises' | 'succeeds' | 'hosts' | 'contributes_to' | 'instance_of';
7175
+ type UPGCrossEdgeType = 'shares_persona' | 'shares_competitor' | 'shares_metric' | 'depends_on_product' | 'cannibalises' | 'succeeds' | 'hosts' | 'contributes_to' | 'instance_of' | 'area_serves_persona' | 'area_targets_market_segment' | 'rolls_up_to';
6980
7176
  /**
6981
7177
  * Runtime-checkable list of valid cross-product edge types. Mirrors
6982
7178
  * `UPGCrossEdgeType` for use in validators and writers that need to test
@@ -7011,6 +7207,26 @@ interface UPGCrossEdge {
7011
7207
  target_product_id?: string;
7012
7208
  /** Confidence level if this edge was inferred during import */
7013
7209
  mapping_confidence?: UPGMappingConfidence;
7210
+ /**
7211
+ * Sanctioned divergence marker (`instance_of` only). When true, registry drift
7212
+ * detection treats an instance title that differs from its canonical as
7213
+ * intentional (an informative product-local name, e.g. "Vercel Platform / SDK"
7214
+ * vs canonical "Vercel"), excluding it from the `title_divergence` count so
7215
+ * `clean` reflects only un-sanctioned drift.
7216
+ */
7217
+ alias?: boolean;
7218
+ /**
7219
+ * Audience relevance for `area_serves_persona` / `area_targets_market_segment`:
7220
+ * whether the audience is a primary or secondary focus of this area. The
7221
+ * primary-vs-secondary distinction is the core value of the area-to-audience matrix.
7222
+ */
7223
+ relevance?: 'primary' | 'secondary';
7224
+ /**
7225
+ * Audience role in this area's context (`area_serves_persona`). Mirrors
7226
+ * `PersonaProperties.audience_role`: the same persona can be a `buyer` for one
7227
+ * area and a `user` for another.
7228
+ */
7229
+ audience_role?: 'buyer' | 'user' | 'champion' | 'influencer' | 'partner';
7014
7230
  }
7015
7231
  /**
7016
7232
  * A product area within a portfolio. The organisational axis (who owns
@@ -11023,6 +11239,14 @@ interface WireframeProperties {
11023
11239
  * }
11024
11240
  */
11025
11241
  interface UserFlowProperties {
11242
+ /**
11243
+ * Display order of this flow among sibling flows (0-indexed). The scalar
11244
+ * ordering convention shared with `journey_step.step_order` and
11245
+ * `journey_action.action_order` (UPG-663 / UPG-674). The free-text `steps`
11246
+ * array below still captures the within-flow narrative; this scalar makes the
11247
+ * flow itself a deterministically orderable sibling.
11248
+ */
11249
+ flow_order?: number;
11026
11250
  /** Initiating event */
11027
11251
  trigger?: string;
11028
11252
  /** Ordered steps */
@@ -11066,6 +11290,13 @@ interface ScreenProperties {
11066
11290
  * }
11067
11291
  */
11068
11292
  interface ScreenStateProperties {
11293
+ /**
11294
+ * Display order of this state within its parent screen (0-indexed). The scalar
11295
+ * ordering convention shared with `journey_step.step_order` and
11296
+ * `journey_action.action_order` (UPG-663 / UPG-674). Orders the states a
11297
+ * screen moves through (e.g. skeleton, loading, populated).
11298
+ */
11299
+ state_order?: number;
11069
11300
  /** State */
11070
11301
  state_name: 'empty' | 'loading' | 'error' | 'populated' | 'skeleton' | 'partial';
11071
11302
  /** Cause for entering this state */
@@ -14855,6 +15086,13 @@ interface ProjectProperties {
14855
15086
  * }
14856
15087
  */
14857
15088
  interface MilestoneProperties {
15089
+ /**
15090
+ * Display order of this milestone within its parent project (0-indexed). The
15091
+ * scalar ordering convention shared with `journey_step.step_order` and
15092
+ * `journey_action.action_order` (UPG-663 / UPG-674). Orders the delivery
15093
+ * milestones a project moves through, independent of `due_date`.
15094
+ */
15095
+ milestone_order?: number;
14858
15096
  /** Target due date (ISO format) */
14859
15097
  due_date?: ISODate;
14860
15098
  /** Whether the milestone was met on time */
@@ -17205,6 +17443,13 @@ interface HelpVideoProperties {
17205
17443
  * }
17206
17444
  */
17207
17445
  interface LearningPathProperties {
17446
+ /**
17447
+ * Display order of this path within a curriculum or program (0-indexed). The
17448
+ * scalar ordering convention shared with `journey_step.step_order` and
17449
+ * `journey_action.action_order` (UPG-663 / UPG-674). Makes a learning_path a
17450
+ * deterministically orderable sequence among sibling paths rather than a star.
17451
+ */
17452
+ path_order?: number;
17208
17453
  /** Overall difficulty level of the learning path */
17209
17454
  path_difficulty?: DifficultyLevel;
17210
17455
  /** Number of items (tutorials, videos, etc.) in the path */
@@ -17242,6 +17487,13 @@ interface PartnerProgramProperties {
17242
17487
  * }
17243
17488
  */
17244
17489
  interface PartnerTierProperties {
17490
+ /**
17491
+ * Display order of this tier among sibling partner tiers (1 = first tier
17492
+ * shown). Mirrors `pricing_tier.tier_order`; part of the spec-wide `*_order`
17493
+ * sequence convention (UPG-663 / UPG-674). Distinct from `tier_level`, which
17494
+ * is a prestige rank, not a presentation order.
17495
+ */
17496
+ tier_order?: number;
17245
17497
  /** Numeric rank of the tier (higher = more prestigious) */
17246
17498
  tier_level?: number;
17247
17499
  /** What a partner must achieve to reach this tier */
@@ -18105,7 +18357,7 @@ type UPGNode<T extends keyof UPGPropertyMap = keyof UPGPropertyMap> = UPGBaseNod
18105
18357
  * AUTO-GENERATED by scripts/generate-property-registry.ts
18106
18358
  * Do not edit manually. Run: npx tsx scripts/generate-property-registry.ts
18107
18359
  *
18108
- * Generated: 2026-06-09T23:36:57.066Z
18360
+ * Generated: 2026-06-10T00:33:26.360Z
18109
18361
  * Entity types with properties: 316
18110
18362
  */
18111
18363
  interface PropertyDefinition {
@@ -20546,7 +20798,7 @@ declare function isCanonical(text: string): boolean;
20546
20798
  * it stamps the `upg_version` field of every `.upg` file written by the SDK.
20547
20799
  * The `check:version-lockstep` gate enforces this at release time.
20548
20800
  */
20549
- declare const UPG_VERSION: "0.9.6";
20801
+ declare const UPG_VERSION: "0.9.8";
20550
20802
  /**
20551
20803
  * The `.upg` JSON document format version. Written to the `upg_version` field.
20552
20804
  * Evolves independently from `UPG_VERSION` (the catalogue version).