@unified-product-graph/core 0.13.0 → 0.13.2
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.cjs +116 -89
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +30 -2
- package/dist/index.d.ts +30 -2
- package/dist/index.js +116 -89
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -1466,6 +1466,25 @@ var UPG_EDGE_CATALOG = {
|
|
|
1466
1466
|
// the common case where the product lives in another graph; this catalog entry is
|
|
1467
1467
|
// the within-graph degenerate case (a product's own landing page).
|
|
1468
1468
|
screen_markets_product: { forward_verb: "markets", reverse_verb: "marketed_by", classification: "semantic", source_type: "screen", target_type: "product" },
|
|
1469
|
+
// Connective cross-product references (0.13.1, Data's connective-layer brief).
|
|
1470
|
+
// Dual-registered (also in UPG_CROSS_EDGE_TYPES) for the common cross-graph case;
|
|
1471
|
+
// these catalog entries are the within-graph degenerate case.
|
|
1472
|
+
// - screen_targets_competitor: a comparison / "vs" / positioning screen targets a
|
|
1473
|
+
// competitor (the competitor typically lives in a watched competitor-intel graph).
|
|
1474
|
+
// - feature_surfaces_product: a feature surfaces / embeds another product (a "Canvas"
|
|
1475
|
+
// feature that IS the Canvas product embedded). The feature-granular sibling of
|
|
1476
|
+
// depends_on_product; wires the portfolio from islands into a mesh.
|
|
1477
|
+
// - feature_uses_design_component: a feature consumes a shared design_component (the
|
|
1478
|
+
// feature sibling of screen_renders_design_component; the component lives in the
|
|
1479
|
+
// design-system product graph).
|
|
1480
|
+
// - product_implements_design_system: a product adopts / implements the shared design
|
|
1481
|
+
// system (the adoption semantic, mirroring product_implements_specification). Distinct
|
|
1482
|
+
// from the hierarchy `product_systematised_in_design_system` (structural containment):
|
|
1483
|
+
// same pattern as brand (branded_as = hierarchy, expresses = semantic).
|
|
1484
|
+
screen_targets_competitor: { forward_verb: "targets", reverse_verb: "targeted_by", classification: "semantic", source_type: "screen", target_type: "competitor" },
|
|
1485
|
+
feature_surfaces_product: { forward_verb: "surfaces", reverse_verb: "surfaced_by", classification: "semantic", source_type: "feature", target_type: "product" },
|
|
1486
|
+
feature_uses_design_component: { forward_verb: "uses", reverse_verb: "used_by", classification: "semantic", source_type: "feature", target_type: "design_component" },
|
|
1487
|
+
product_implements_design_system: { forward_verb: "implements", reverse_verb: "implemented_by", classification: "semantic", source_type: "product", target_type: "design_system" },
|
|
1469
1488
|
screen_navigates_to_screen: { forward_verb: "navigates_to", reverse_verb: "navigated_from", classification: "hierarchy", source_type: "screen", target_type: "screen" },
|
|
1470
1489
|
screen_surfaces_feature: { forward_verb: "surfaces", reverse_verb: "surfaced_on", classification: "cross-domain", source_type: "screen", target_type: "feature" },
|
|
1471
1490
|
screen_wireframed_as_wireframe: { forward_verb: "wireframed_as", reverse_verb: "wireframes", classification: "hierarchy", source_type: "screen", target_type: "wireframe" },
|
|
@@ -3147,7 +3166,15 @@ var UPG_CROSS_EDGE_TYPES = [
|
|
|
3147
3166
|
"journey_phase_realises_operating_stage",
|
|
3148
3167
|
"screen_markets_product",
|
|
3149
3168
|
"screen_renders_design_component",
|
|
3150
|
-
"product_expresses_brand_identity"
|
|
3169
|
+
"product_expresses_brand_identity",
|
|
3170
|
+
// Connective cross-product layer (0.13.1) — see UPGCrossEdgeType above.
|
|
3171
|
+
"shares_job",
|
|
3172
|
+
"shares_need",
|
|
3173
|
+
"persona_delegates_to_persona",
|
|
3174
|
+
"screen_targets_competitor",
|
|
3175
|
+
"feature_surfaces_product",
|
|
3176
|
+
"feature_uses_design_component",
|
|
3177
|
+
"product_implements_design_system"
|
|
3151
3178
|
];
|
|
3152
3179
|
var REGISTRY_PRODUCT_ID = "registry";
|
|
3153
3180
|
|
|
@@ -9722,9 +9749,9 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
9722
9749
|
method: { type: "string", enum: ["automated", "manual", "assistive_tech", "expert"], description: "How the audit was conducted" },
|
|
9723
9750
|
scope: { type: "string", description: 'What was audited (e.g. "homepage", "checkout flow")' },
|
|
9724
9751
|
conformance_result: { type: "string", enum: ["pass", "partial", "fail"], description: "Overall conformance result" },
|
|
9725
|
-
violations_count: { type: "number", description: "Number of accessibility violations found" },
|
|
9726
|
-
passes_count: { type: "number", description: "Number of checks that passed" },
|
|
9727
|
-
incomplete_count: { type: "number", description: "Number of checks that could not be completed" },
|
|
9752
|
+
violations_count: { type: "number", description: "Number of accessibility violations found", modifier: "derived" },
|
|
9753
|
+
passes_count: { type: "number", description: "Number of checks that passed", modifier: "derived" },
|
|
9754
|
+
incomplete_count: { type: "number", description: "Number of checks that could not be completed", modifier: "derived" },
|
|
9728
9755
|
score: { type: "number", description: "Aggregate accessibility score (0-100)" },
|
|
9729
9756
|
tool: { type: "string", enum: ["axe-core", "lighthouse", "wave", "manual", "other"], description: "Tool used to perform the audit" },
|
|
9730
9757
|
tool_version: { type: "string", description: "Version of the audit tool" },
|
|
@@ -9784,14 +9811,14 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
9784
9811
|
account: {
|
|
9785
9812
|
account_type: { type: "string", enum: ["prospect", "customer", "partner", "churned"], description: "Relationship status of this account" },
|
|
9786
9813
|
industry: { type: "string", description: "Industry vertical the account operates in" },
|
|
9787
|
-
employee_count: { type: "number", description: "Number of employees at the account" },
|
|
9814
|
+
employee_count: { type: "number", description: "Number of employees at the account", modifier: "snapshot" },
|
|
9788
9815
|
annual_revenue: { type: "number", description: "Annual revenue of the account" }
|
|
9789
9816
|
},
|
|
9790
9817
|
// AcquisitionChannelProperties: AcquisitionChannel entity.
|
|
9791
9818
|
acquisition_channel: {
|
|
9792
9819
|
channel_type: { type: "string", enum: ["seo", "paid", "social", "referral", "direct", "content"], description: "Category of the acquisition channel" },
|
|
9793
9820
|
customer_acquisition_cost: { type: "number", description: "Customer acquisition cost for this channel" },
|
|
9794
|
-
monthly_volume: { type: "number", description: "Monthly volume of new users from this channel" }
|
|
9821
|
+
monthly_volume: { type: "number", description: "Monthly volume of new users from this channel", modifier: "snapshot" }
|
|
9795
9822
|
},
|
|
9796
9823
|
// AdCreativeProperties: Ad creative.
|
|
9797
9824
|
ad_creative: {
|
|
@@ -9806,7 +9833,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
9806
9833
|
// AffinityClusterProperties: Affinity cluster grouping observations.
|
|
9807
9834
|
affinity_cluster: {
|
|
9808
9835
|
theme: { type: "string", description: "Emergent theme label" },
|
|
9809
|
-
child_observation_count: { type: "number", description: "Observations in this cluster" },
|
|
9836
|
+
child_observation_count: { type: "number", description: "Observations in this cluster", modifier: "derived" },
|
|
9810
9837
|
confidence: {
|
|
9811
9838
|
type: "assessment",
|
|
9812
9839
|
scale_id: "confidence_5",
|
|
@@ -9840,7 +9867,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
9840
9867
|
hook_event: { type: "string", description: "Event that triggers this hook" },
|
|
9841
9868
|
hook_action: { type: "string", description: "Action performed when the hook fires" },
|
|
9842
9869
|
hook_status: { type: "string", enum: ["active", "disabled", "error"], description: "Operational status of the hook" },
|
|
9843
|
-
execution_count: { type: "number", description: "Number of times this hook has fired" }
|
|
9870
|
+
execution_count: { type: "number", description: "Number of times this hook has fired", modifier: "snapshot" }
|
|
9844
9871
|
},
|
|
9845
9872
|
// AgentSessionProperties: Agent session.
|
|
9846
9873
|
agent_session: {
|
|
@@ -9857,7 +9884,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
9857
9884
|
agent_skill: {
|
|
9858
9885
|
skill_trigger: { type: "string", description: "Event or command that activates this skill" },
|
|
9859
9886
|
skill_description: { type: "string", description: "Human-readable description of what the skill does" },
|
|
9860
|
-
invocation_count: { type: "number", description: "Number of times this skill has been invoked" }
|
|
9887
|
+
invocation_count: { type: "number", description: "Number of times this skill has been invoked", modifier: "snapshot" }
|
|
9861
9888
|
},
|
|
9862
9889
|
// AgentTaskProperties: Agent task. A discrete task assigned to an agent.
|
|
9863
9890
|
agent_task: {
|
|
@@ -9889,7 +9916,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
9889
9916
|
ai_dataset: {
|
|
9890
9917
|
dataset_type: { type: "string", enum: ["training", "evaluation", "fine_tuning", "rlhf", "synthetic"], description: "Purpose" },
|
|
9891
9918
|
version: { type: "string", description: "Version" },
|
|
9892
|
-
record_count: { type: "number", description: "Records" },
|
|
9919
|
+
record_count: { type: "number", description: "Records", modifier: "snapshot" },
|
|
9893
9920
|
format: { type: "string", description: 'Format (e.g. "jsonl", "csv", "parquet")' },
|
|
9894
9921
|
storage_uri: { type: "string", description: "Storage URI" },
|
|
9895
9922
|
checksum: { type: "string", description: "Integrity hash" },
|
|
@@ -9914,7 +9941,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
9914
9941
|
ai_guardrail: {
|
|
9915
9942
|
guardrail_type: { type: "string", enum: ["content_filter", "rate_limit", "token_limit", "safety", "custom"], description: "Protection category" },
|
|
9916
9943
|
enforcement: { type: "string", enum: ["block", "warn", "log"], description: "Action when triggered" },
|
|
9917
|
-
trigger_count: { type: "number", description: "Times triggered" }
|
|
9944
|
+
trigger_count: { type: "number", description: "Times triggered", modifier: "snapshot" }
|
|
9918
9945
|
},
|
|
9919
9946
|
// AiModelProperties: AI model.
|
|
9920
9947
|
ai_model: {
|
|
@@ -9922,10 +9949,10 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
9922
9949
|
model_id: { type: "string", description: 'Unique model identifier (e.g. "claude-sonnet-4-20250514")' },
|
|
9923
9950
|
model_version: { type: "string", description: "Specific version" },
|
|
9924
9951
|
model_purpose: { type: "string", description: "Intended use case" },
|
|
9925
|
-
cost_per_1k_tokens: { type: "number", description: "Cost per 1,000 tokens" },
|
|
9952
|
+
cost_per_1k_tokens: { type: "number", description: "Cost per 1,000 tokens", modifier: "snapshot" },
|
|
9926
9953
|
context_window: { type: "number", description: "Maximum context window (tokens)" },
|
|
9927
|
-
latency_p50_ms: { type: "number", description: "Median latency (p50, ms)" },
|
|
9928
|
-
latency_p99_ms: { type: "number", description: "Tail latency (p99, ms)" },
|
|
9954
|
+
latency_p50_ms: { type: "number", description: "Median latency (p50, ms)", modifier: "snapshot" },
|
|
9955
|
+
latency_p99_ms: { type: "number", description: "Tail latency (p99, ms)", modifier: "snapshot" },
|
|
9929
9956
|
input_schema: { type: "string", description: "Expected input format or schema" },
|
|
9930
9957
|
output_schema: { type: "string", description: "Expected output format or schema" },
|
|
9931
9958
|
aliases: { type: "string[]", description: "Alternative names" },
|
|
@@ -9969,8 +9996,8 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
9969
9996
|
// ApiEcosystemProperties: API ecosystem.
|
|
9970
9997
|
api_ecosystem: {
|
|
9971
9998
|
api_style: { type: "string", enum: ["rest", "graphql", "grpc", "webhook", "mixed"], description: "Primary API architecture style" },
|
|
9972
|
-
developer_count: { type: "number", description: "Number of registered developers" },
|
|
9973
|
-
app_count: { type: "number", description: "Number of apps built on the API" }
|
|
9999
|
+
developer_count: { type: "number", description: "Number of registered developers", modifier: "snapshot" },
|
|
10000
|
+
app_count: { type: "number", description: "Number of apps built on the API", modifier: "derived" }
|
|
9974
10001
|
},
|
|
9975
10002
|
// ApiEndpointProperties: API endpoint.
|
|
9976
10003
|
api_endpoint: {
|
|
@@ -10041,7 +10068,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10041
10068
|
// BetaProgramProperties: Beta program.
|
|
10042
10069
|
beta_program: {
|
|
10043
10070
|
beta_type: { type: "string", enum: ["closed", "open", "invite_only"], description: "Access model for the beta" },
|
|
10044
|
-
participant_count: { type: "number", description: "Number of users participating in the beta" }
|
|
10071
|
+
participant_count: { type: "number", description: "Number of users participating in the beta", modifier: "snapshot" }
|
|
10045
10072
|
},
|
|
10046
10073
|
// BoundedContextProperties: DDD bounded context.
|
|
10047
10074
|
bounded_context: {
|
|
@@ -10199,7 +10226,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10199
10226
|
// ChurnReasonProperties: Churn reason.
|
|
10200
10227
|
churn_reason: {
|
|
10201
10228
|
category: { type: "string", description: "High-level category of the churn reason" },
|
|
10202
|
-
frequency_count: { type: "number", description: "Exact count of times this reason has been cited in `frequency_period`" },
|
|
10229
|
+
frequency_count: { type: "number", description: "Exact count of times this reason has been cited in `frequency_period`", modifier: "snapshot" },
|
|
10203
10230
|
frequency_period: { type: "string", description: "The recurrence period the count is measured over (ISO-8601 `Duration`, e.g. `'P30D'`)" },
|
|
10204
10231
|
frequency_rating: { type: "string", enum: ["constant", "regular", "occasional", "rare", "other"], description: "Qualitative frequency tier when an exact count is not known" },
|
|
10205
10232
|
contributing_factors: { type: "string[]", description: "Other factors that contributed to the churn" },
|
|
@@ -10214,8 +10241,8 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10214
10241
|
avg_duration: { type: "string", description: 'Average run duration across recent executions. @example "4m 30s", "12 minutes"' },
|
|
10215
10242
|
last_run_status: { type: "string", enum: ["success", "failure", "cancelled", "skipped", "in_progress"], description: "Result of the most recent run. Current health indicator." },
|
|
10216
10243
|
target_branch: { type: "string", description: 'Primary branch. The branch that triggers production deployments. @example "main", "release/*"' },
|
|
10217
|
-
run_count: { type: "number", description: "Total runs since creation. Indicates activity level. @example 1452" },
|
|
10218
|
-
success_rate: { type: "number", description: "Reliability metric for the pipeline itself: % of runs that succeed. @example 94.3" }
|
|
10244
|
+
run_count: { type: "number", description: "Total runs since creation. Indicates activity level. @example 1452", modifier: "snapshot" },
|
|
10245
|
+
success_rate: { type: "number", description: "Reliability metric for the pipeline itself: % of runs that succeed. @example 94.3", modifier: "snapshot" }
|
|
10219
10246
|
},
|
|
10220
10247
|
// ClassificationAxisProperties: ClassificationAxis: a dimension along which subjects are classified.
|
|
10221
10248
|
classification_axis: {
|
|
@@ -10254,8 +10281,8 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10254
10281
|
// CommunityInitiativeProperties: Community initiative.
|
|
10255
10282
|
community_initiative: {
|
|
10256
10283
|
initiative_type: { type: "string", enum: ["forum", "discord", "slack", "meetup", "ambassador", "other"], description: "Platform or format for the community" },
|
|
10257
|
-
member_count: { type: "number", description: "Current number of community members" },
|
|
10258
|
-
engagement_rate: { type: "number", description: "Percentage of members actively participating" }
|
|
10284
|
+
member_count: { type: "number", description: "Current number of community members", modifier: "snapshot" },
|
|
10285
|
+
engagement_rate: { type: "number", description: "Percentage of members actively participating", modifier: "snapshot" }
|
|
10259
10286
|
},
|
|
10260
10287
|
// CompetitiveAnalysisProperties: Competitive analysis exercise or snapshot.
|
|
10261
10288
|
competitive_analysis: {
|
|
@@ -10281,7 +10308,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10281
10308
|
},
|
|
10282
10309
|
// CompetitiveBattleCardProperties: CompetitiveBattleCard entity.
|
|
10283
10310
|
competitive_battle_card: {
|
|
10284
|
-
win_rate: { type: "number", description: "Historical win rate against this competitor (0-100%)" },
|
|
10311
|
+
win_rate: { type: "number", description: "Historical win rate against this competitor (0-100%)", modifier: "snapshot" },
|
|
10285
10312
|
key_differentiators: { type: "string", description: "Summary of key differentiators versus this competitor" }
|
|
10286
10313
|
},
|
|
10287
10314
|
// CompetitorProperties: A product or approach competing for the same user need.
|
|
@@ -10385,7 +10412,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10385
10412
|
content_calendar: {
|
|
10386
10413
|
calendar_period: { type: "string", description: 'Covered period (e.g. "Q2 2026")' },
|
|
10387
10414
|
publish_cadence: { type: "string", enum: ["continuous", "hourly", "daily", "weekly", "monthly", "quarterly", "yearly", "on_demand", "other"], description: "Publishing cadence (canonical `Cadence` since v0.4.0). Retyped from the legacy free-form `publish_cadence: string`. For exact rates (\"3 per week\"), set `frequency_count` + `frequency_period`. BREAKING in v0.4.0: previous string values like `\"3x/week\"` no longer type-check. Map to `'weekly'` + `frequency_count: 3` + `frequency_period: 'P7D'`." },
|
|
10388
|
-
frequency_count: { type: "number", description: "Exact count in the period. Pairs with `frequency_period`." },
|
|
10415
|
+
frequency_count: { type: "number", description: "Exact count in the period. Pairs with `frequency_period`.", modifier: "snapshot" },
|
|
10389
10416
|
frequency_period: { type: "string", description: "Recurrence period (ISO-8601 `Duration`, e.g. `'P7D'`)" },
|
|
10390
10417
|
frequency_rating: { type: "string", enum: ["constant", "regular", "occasional", "rare", "other"], description: "Qualitative rate tier when an exact rate is unknown" }
|
|
10391
10418
|
},
|
|
@@ -10400,7 +10427,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10400
10427
|
content_types: { type: "string[]", description: "Types of content to produce" },
|
|
10401
10428
|
distribution_channels: { type: "string[]", description: "Channels where content will be distributed" },
|
|
10402
10429
|
cadence: { type: "string", enum: ["continuous", "hourly", "daily", "weekly", "monthly", "quarterly", "yearly", "on_demand", "other"], description: "Publishing cadence (canonical `Cadence` since v0.4.0). Retyped from the legacy free-form `cadence: string` (e.g. \"2x/week\"). For exact rates, set `frequency_count` + `frequency_period`. BREAKING in v0.4.0: previous string values like `\"2x/week\"` no longer type-check. Map to `'weekly'` + `frequency_count: 2` + `frequency_period: 'P7D'`." },
|
|
10403
|
-
frequency_count: { type: "number", description: "Exact count of publications in the period. Pairs with `frequency_period`." },
|
|
10430
|
+
frequency_count: { type: "number", description: "Exact count of publications in the period. Pairs with `frequency_period`.", modifier: "snapshot" },
|
|
10404
10431
|
frequency_period: { type: "string", description: "Recurrence period (ISO-8601 `Duration`, e.g. `'P7D'`)" },
|
|
10405
10432
|
frequency_rating: { type: "string", enum: ["constant", "regular", "occasional", "rare", "other"], description: "Qualitative rate tier when an exact rate is unknown" }
|
|
10406
10433
|
},
|
|
@@ -10471,7 +10498,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10471
10498
|
stage_type: { type: "string", enum: ["awareness", "acquisition", "activation", "retention", "revenue", "referral"], description: "Which pirate metric (AAARRR) this stage maps to" },
|
|
10472
10499
|
stage_order: { type: "number", description: "Display order along the lifecycle timeline (0-indexed). The `*_order` convention shared with `journey_phase.phase_order` and `journey_step.step_order` (UPG-675 / CS-8), so two same-`stage_type` stages are orderable." },
|
|
10473
10500
|
avg_duration: { type: "string", description: "Average time a customer spends in this stage" },
|
|
10474
|
-
conversion_rate: { type: "number", description: "Percentage of customers who advance to the next stage" }
|
|
10501
|
+
conversion_rate: { type: "number", description: "Percentage of customers who advance to the next stage", modifier: "snapshot" }
|
|
10475
10502
|
},
|
|
10476
10503
|
// CustomerRelationshipProperties: CustomerRelationship.
|
|
10477
10504
|
customer_relationship: {
|
|
@@ -10484,9 +10511,9 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10484
10511
|
tool: { type: "string", enum: ["looker", "amplitude", "mixpanel", "posthog", "custom"], description: "Analytics tool hosting this dashboard" },
|
|
10485
10512
|
url: { type: "string", description: "URL to the live dashboard" },
|
|
10486
10513
|
audience: { type: "string", description: "Intended audience for this dashboard" },
|
|
10487
|
-
element_count: { type: "number", description: "Number of widgets or panels on the dashboard" },
|
|
10514
|
+
element_count: { type: "number", description: "Number of widgets or panels on the dashboard", modifier: "derived" },
|
|
10488
10515
|
refresh_cadence: { type: "string", enum: ["continuous", "hourly", "daily", "weekly", "monthly", "quarterly", "yearly", "on_demand", "other"], description: "How often the dashboard data refreshes. Uses the shared `Cadence` scale." },
|
|
10489
|
-
filter_count: { type: "number", description: "Number of user-configurable filters" }
|
|
10516
|
+
filter_count: { type: "number", description: "Number of user-configurable filters", modifier: "derived" }
|
|
10490
10517
|
},
|
|
10491
10518
|
// DataClassificationProperties: Data classification.
|
|
10492
10519
|
data_classification: {
|
|
@@ -10524,9 +10551,9 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10524
10551
|
data_model: {
|
|
10525
10552
|
schema_name: { type: "string", description: "Name of the schema this model belongs to" },
|
|
10526
10553
|
database_name: { type: "string", description: "Name of the database containing this model" },
|
|
10527
|
-
table_count: { type: "number", description: "Number of tables in the model" },
|
|
10528
|
-
column_count: { type: "number", description: "Total number of columns across all tables" },
|
|
10529
|
-
test_count: { type: "number", description: "Number of data tests defined for this model" },
|
|
10554
|
+
table_count: { type: "number", description: "Number of tables in the model", modifier: "derived" },
|
|
10555
|
+
column_count: { type: "number", description: "Total number of columns across all tables", modifier: "derived" },
|
|
10556
|
+
test_count: { type: "number", description: "Number of data tests defined for this model", modifier: "derived" },
|
|
10530
10557
|
model_type: { type: "string", enum: ["relational", "document", "graph", "time_series"], description: "Database paradigm used" },
|
|
10531
10558
|
materialization: { type: "string", enum: ["view", "table", "incremental", "ephemeral", "materialized_view"], description: "How the model is materialised in the warehouse" },
|
|
10532
10559
|
meta: { type: "object", description: "Arbitrary metadata key-value pairs" },
|
|
@@ -10538,7 +10565,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10538
10565
|
schedule: { type: "string", description: "Cron or scheduling expression" },
|
|
10539
10566
|
avg_runtime: { type: "string", description: "Average wall-clock runtime per execution" },
|
|
10540
10567
|
orchestrator: { type: "string", description: 'Orchestration tool (e.g. "Airflow", "Dagster", "dbt Cloud")' },
|
|
10541
|
-
retry_count: { type: "number", description: "Number of automatic retries on failure" },
|
|
10568
|
+
retry_count: { type: "number", description: "Number of automatic retries on failure", modifier: "snapshot" },
|
|
10542
10569
|
retry_delay_seconds: { type: "number", description: "Delay between retries in seconds" },
|
|
10543
10570
|
timeout_seconds: { type: "number", description: "Maximum allowed runtime in seconds before timeout" },
|
|
10544
10571
|
trigger_rule: { type: "string", description: "Rule that determines when this pipeline triggers" },
|
|
@@ -10571,7 +10598,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10571
10598
|
schema_version: { type: "string", description: "Current schema version" },
|
|
10572
10599
|
migration_status: { type: "string", enum: ["current", "pending", "failed"], description: "Pending-migration status" },
|
|
10573
10600
|
owner: { type: "string", description: "Owning person or team responsible for design and migrations. Promote to a `node_owned_by_team` edge if ownership must be queryable." },
|
|
10574
|
-
table_count: { type: "number", description: "Tables or collections in this schema. Useful for migration scope estimation." }
|
|
10601
|
+
table_count: { type: "number", description: "Tables or collections in this schema. Useful for migration scope estimation.", modifier: "derived" }
|
|
10575
10602
|
},
|
|
10576
10603
|
// DealProperties: Deal.
|
|
10577
10604
|
deal: {
|
|
@@ -10606,7 +10633,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10606
10633
|
},
|
|
10607
10634
|
// DepartmentProperties: Department entity.
|
|
10608
10635
|
department: {
|
|
10609
|
-
headcount: { type: "number", description: "Total number of people in the department" },
|
|
10636
|
+
headcount: { type: "number", description: "Total number of people in the department", modifier: "snapshot" },
|
|
10610
10637
|
budget: { type: "number", description: "Annual budget allocated to the department" },
|
|
10611
10638
|
department_mission: { type: "string", description: "Charter / purpose statement for the department" },
|
|
10612
10639
|
leader: { type: "string", description: "Department leader (person or role reference). Promote to a `node_owned_by_person` edge if ownership must be queryable." },
|
|
@@ -10736,7 +10763,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10736
10763
|
// DeveloperPortalProperties: Developer portal.
|
|
10737
10764
|
developer_portal: {
|
|
10738
10765
|
portal_url: { type: "string", description: "URL of the developer portal" },
|
|
10739
|
-
doc_count: { type: "number", description: "Number of documentation pages" },
|
|
10766
|
+
doc_count: { type: "number", description: "Number of documentation pages", modifier: "derived" },
|
|
10740
10767
|
sandbox_available: { type: "boolean", description: "Whether a sandbox environment is available" }
|
|
10741
10768
|
},
|
|
10742
10769
|
// DiscountStrategyProperties: Discount strategy.
|
|
@@ -10744,7 +10771,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10744
10771
|
discount_type: { type: "string", enum: ["percentage", "fixed", "tiered", "bundle"], description: "How the discount is applied" },
|
|
10745
10772
|
discount_percentage: { type: "number", description: "Discount amount as a percentage (0-100)" },
|
|
10746
10773
|
valid_until: { type: "string", description: "Expiration date of the discount (ISO format)" },
|
|
10747
|
-
redemption_count: { type: "number", description: "Number of times this discount has been redeemed" }
|
|
10774
|
+
redemption_count: { type: "number", description: "Number of times this discount has been redeemed", modifier: "snapshot" }
|
|
10748
10775
|
},
|
|
10749
10776
|
// DistributionChannelProperties: DistributionChannel.
|
|
10750
10777
|
distribution_channel: {
|
|
@@ -10760,7 +10787,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10760
10787
|
document_type: { type: "string", enum: ["vision", "plan", "decision", "research", "spec", "audit", "session", "feedback", "case-study", "narrative", "bug-report", "archive-collection", "rfc", "runbook", "guide", "onboarding", "brief", "report", "reference"], description: "Purpose classification" },
|
|
10761
10788
|
author: { type: "string", description: "Author (free-form: name, email, or handle). Promote to a `node_owned_by_person` edge if ownership must be queryable." },
|
|
10762
10789
|
last_updated: { type: "string", description: "ISO 8601 last-meaningful-update" },
|
|
10763
|
-
word_count: { type: "number", description: "Approximate word count. Useful for planning, indexing, summarisation." },
|
|
10790
|
+
word_count: { type: "number", description: "Approximate word count. Useful for planning, indexing, summarisation.", modifier: "snapshot" },
|
|
10764
10791
|
content_summary: { type: "string", description: "1\u20133 sentence summary. Drives previews, search snippets, embedding context." },
|
|
10765
10792
|
language: { type: "string", description: 'Primary language (BCP 47 tag, e.g. "en", "en-GB", "fr")' }
|
|
10766
10793
|
},
|
|
@@ -10788,9 +10815,9 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10788
10815
|
// EmailSequenceProperties: Email sequence.
|
|
10789
10816
|
email_sequence: {
|
|
10790
10817
|
sequence_type: { type: "string", enum: ["onboarding", "nurture", "re_engagement", "sales", "other"], description: "Purpose of the email sequence" },
|
|
10791
|
-
email_count: { type: "number", description: "Number of emails in the sequence" },
|
|
10792
|
-
open_rate: { type: "number", description: "Average open rate across the sequence (0-1)" },
|
|
10793
|
-
click_rate: { type: "number", description: "Average click-through rate across the sequence (0-1)" }
|
|
10818
|
+
email_count: { type: "number", description: "Number of emails in the sequence", modifier: "derived" },
|
|
10819
|
+
open_rate: { type: "number", description: "Average open rate across the sequence (0-1)", modifier: "snapshot" },
|
|
10820
|
+
click_rate: { type: "number", description: "Average click-through rate across the sequence (0-1)", modifier: "snapshot" }
|
|
10794
10821
|
},
|
|
10795
10822
|
// EpicProperties: A collection of related user stories that delivers a feature or capability.
|
|
10796
10823
|
epic: {
|
|
@@ -10802,15 +10829,15 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10802
10829
|
},
|
|
10803
10830
|
// ErrorBudgetProperties: Error budget.
|
|
10804
10831
|
error_budget: {
|
|
10805
|
-
budget_remaining: { type: "number", description: "Remaining budget percentage (0\u2013100). @example 45.2 (45.2% remaining, 54.8% used)" },
|
|
10806
|
-
burn_rate: { type: "number", description: "Consumption rate as a multiplier against sustainable burn. 1.0 = on track. 2.5 = consuming 2.5x faster than sustainable." },
|
|
10832
|
+
budget_remaining: { type: "number", description: "Remaining budget percentage (0\u2013100). @example 45.2 (45.2% remaining, 54.8% used)", modifier: "snapshot" },
|
|
10833
|
+
burn_rate: { type: "number", description: "Consumption rate as a multiplier against sustainable burn. 1.0 = on track. 2.5 = consuming 2.5x faster than sustainable.", modifier: "snapshot" },
|
|
10807
10834
|
policy: { type: "string", description: 'Policy when the budget hits 0%. @example "Freeze all non-reliability deploys", "Page engineering lead immediately"' },
|
|
10808
10835
|
budget_window: { type: "string", description: 'Budget window. Defines reset cadence. @example "30 days", "rolling 28 days"' }
|
|
10809
10836
|
},
|
|
10810
10837
|
// EvalBenchmarkProperties: Evaluation benchmark.
|
|
10811
10838
|
eval_benchmark: {
|
|
10812
10839
|
benchmark_type: { type: "string", enum: ["accuracy", "latency", "cost", "safety", "custom"], description: "Measured dimension" },
|
|
10813
|
-
test_case_count: { type: "number", description: "Test cases in the suite" },
|
|
10840
|
+
test_case_count: { type: "number", description: "Test cases in the suite", modifier: "derived" },
|
|
10814
10841
|
passing_threshold: { type: "number", description: "Minimum passing score" },
|
|
10815
10842
|
last_run: { type: "string", description: "ISO date of the most recent run" }
|
|
10816
10843
|
},
|
|
@@ -10832,7 +10859,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10832
10859
|
event_type: { type: "string", enum: ["conference", "webinar", "meetup", "workshop", "trade_show", "other"], description: "Format of the event" },
|
|
10833
10860
|
event_date: { type: "string", description: "Date of the event (ISO format)" },
|
|
10834
10861
|
location: { type: "string", description: "Venue or virtual platform" },
|
|
10835
|
-
attendee_count: { type: "number", description: "Number of attendees" }
|
|
10862
|
+
attendee_count: { type: "number", description: "Number of attendees", modifier: "snapshot" }
|
|
10836
10863
|
},
|
|
10837
10864
|
// EventSchemaProperties: EventSchema entity.
|
|
10838
10865
|
event_schema: {
|
|
@@ -10995,7 +11022,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10995
11022
|
feature_flag: {
|
|
10996
11023
|
key: { type: "string", description: 'Required. Stable flag key used in code (e.g. "new-checkout-flow").' },
|
|
10997
11024
|
flag_status: { type: "string", enum: ["on", "off", "rollout"], description: "Activation state. `on` = enabled for all. `off` = disabled for all. `rollout` = partial via targeting_rules." },
|
|
10998
|
-
rollout_pct: { type: "number", description: "Percentage enabled (0\u2013100). Meaningful when `flag_status === 'rollout'`." },
|
|
11025
|
+
rollout_pct: { type: "number", description: "Percentage enabled (0\u2013100). Meaningful when `flag_status === 'rollout'`.", modifier: "snapshot" },
|
|
10999
11026
|
targeting_rules: { type: "string", description: "Human-readable targeting rules. Full rule evaluation happens in the flag service." },
|
|
11000
11027
|
owner: { type: "string", description: "Owning person or team responsible for the flag's lifecycle. Promote to a `node_owned_by_person` edge if ownership must be queryable." },
|
|
11001
11028
|
flag_type: { type: "string", enum: ["temporary", "permanent", "experiment"], description: "Lifecycle classification. `temporary` = should be removed after rollout (kill switch, gradual rollout). `permanent` = long-lived feature gate (entitlement flag). `experiment` = A/B test with a defined end condition." },
|
|
@@ -11005,7 +11032,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
11005
11032
|
// FeatureRequestProperties: Feature request raised by customer, prospect, or internal stakeholder.
|
|
11006
11033
|
feature_request: {
|
|
11007
11034
|
request_source: { type: "string", enum: ["customer", "internal", "prospect", "support", "community"], description: "Where the request originated" },
|
|
11008
|
-
vote_count: { type: "number", description: "Number of votes or upvotes from users" },
|
|
11035
|
+
vote_count: { type: "number", description: "Number of votes or upvotes from users", modifier: "snapshot" },
|
|
11009
11036
|
signal_sentiment: { type: "string", enum: ["positive", "neutral", "negative", "mixed"], description: "Detected sentiment of the request" },
|
|
11010
11037
|
signal_channel: { type: "string", description: "Channel through which the request was received" },
|
|
11011
11038
|
signal_urgency: { type: "string", enum: ["low", "medium", "high", "critical"], description: "Perceived urgency of the request" },
|
|
@@ -11063,7 +11090,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
11063
11090
|
},
|
|
11064
11091
|
// FeedbackVoteProperties: Feedback vote.
|
|
11065
11092
|
feedback_vote: {
|
|
11066
|
-
vote_count: { type: "number", description: "Total number of votes cast" },
|
|
11093
|
+
vote_count: { type: "number", description: "Total number of votes cast", modifier: "snapshot" },
|
|
11067
11094
|
mrr_impact: { type: "number", description: "Combined MRR of voting accounts" }
|
|
11068
11095
|
},
|
|
11069
11096
|
// FixProperties: Specific change that resolved an issue.
|
|
@@ -11103,13 +11130,13 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
11103
11130
|
funnel: {
|
|
11104
11131
|
funnel_type: { type: "string", enum: ["acquisition", "activation", "retention", "revenue", "referral", "custom"], description: "Which stage of the customer lifecycle this funnel measures" },
|
|
11105
11132
|
step_count: { type: "number", description: "Number of steps in the funnel", modifier: "derived" },
|
|
11106
|
-
overall_conversion_rate: { type: "number", description: "End-to-end conversion rate through the funnel (0-1)" }
|
|
11133
|
+
overall_conversion_rate: { type: "number", description: "End-to-end conversion rate through the funnel (0-1)", modifier: "snapshot" }
|
|
11107
11134
|
},
|
|
11108
11135
|
// FunnelStepProperties: FunnelStep entity.
|
|
11109
11136
|
funnel_step: {
|
|
11110
11137
|
step_index: { type: "number", description: "Position of this step in the funnel (0-indexed)" },
|
|
11111
|
-
conversion_rate: { type: "number", description: "Percentage of users who advance from this step" },
|
|
11112
|
-
drop_off_rate: { type: "number", description: "Percentage of users who leave at this step" }
|
|
11138
|
+
conversion_rate: { type: "number", description: "Percentage of users who advance from this step", modifier: "snapshot" },
|
|
11139
|
+
drop_off_rate: { type: "number", description: "Percentage of users who leave at this step", modifier: "snapshot" }
|
|
11113
11140
|
},
|
|
11114
11141
|
// GlossaryTermProperties: GlossaryTerm entity.
|
|
11115
11142
|
glossary_term: {
|
|
@@ -11284,7 +11311,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
11284
11311
|
// InterviewGuideProperties: Interview guide document.
|
|
11285
11312
|
interview_guide: {
|
|
11286
11313
|
guide_type: { type: "string", enum: ["structured", "semi_structured", "unstructured"], description: "Format structure" },
|
|
11287
|
-
question_count: { type: "number", description: "Total questions" },
|
|
11314
|
+
question_count: { type: "number", description: "Total questions", modifier: "derived" },
|
|
11288
11315
|
duration_minutes: { type: "number", description: "Expected length (minutes)" }
|
|
11289
11316
|
},
|
|
11290
11317
|
// InvestigationProperties: Active thread of inquiry: debugging, architecture exploration, RCA.
|
|
@@ -11441,7 +11468,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
11441
11468
|
key_activity: {
|
|
11442
11469
|
activity_type: { type: "string", enum: ["production", "problem_solving", "platform", "network"], description: "Activity nature" },
|
|
11443
11470
|
cadence: { type: "string", enum: ["continuous", "hourly", "daily", "weekly", "monthly", "quarterly", "yearly", "on_demand", "other"], description: 'Canonical `Cadence`. Replaces the legacy free-form `frequency: string` in v0.4.0. For exact rates (e.g. "3 times per week") set `frequency_count` + `frequency_period`. For qualitative tiers ("rare" \u2192 "constant") use `frequency_rating`.' },
|
|
11444
|
-
frequency_count: { type: "number", description: "Exact count of runs in the period. Pairs with `frequency_period`." },
|
|
11471
|
+
frequency_count: { type: "number", description: "Exact count of runs in the period. Pairs with `frequency_period`.", modifier: "snapshot" },
|
|
11445
11472
|
frequency_period: { type: "string", description: "Recurrence period (ISO-8601 `Duration`, e.g. `'P7D'`)" },
|
|
11446
11473
|
frequency_rating: { type: "string", enum: ["constant", "regular", "occasional", "rare", "other"], description: "Qualitative tier. Use when an exact rate is unknown." },
|
|
11447
11474
|
operational_owner: { type: "string", description: "Operationally accountable team or individual. Promote to a `node_owned_by_team` edge if ownership must be queryable." },
|
|
@@ -11469,7 +11496,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
11469
11496
|
},
|
|
11470
11497
|
// KeyResultProperties: A measurable result under an objective. The KR in OKR.
|
|
11471
11498
|
key_result: {
|
|
11472
|
-
current_value: { type: "number", description: "Most recent observed value" },
|
|
11499
|
+
current_value: { type: "number", description: "Most recent observed value", modifier: "snapshot" },
|
|
11473
11500
|
target_value: { type: "number", description: "Value for full achievement" },
|
|
11474
11501
|
unit: { type: "string", description: 'Display unit (e.g. "%", "users", "\xA3")' }
|
|
11475
11502
|
},
|
|
@@ -11502,9 +11529,9 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
11502
11529
|
learning_path: {
|
|
11503
11530
|
path_order: { type: "number", description: "Display order of this path within a curriculum or program (0-indexed). The scalar ordering convention shared with `journey_step.step_order` and `journey_action.action_order` (UPG-663 / UPG-674). Makes a learning_path a deterministically orderable sequence among sibling paths rather than a star." },
|
|
11504
11531
|
path_difficulty: { type: "string", enum: ["beginner", "intermediate", "advanced"], description: "Overall difficulty level of the learning path" },
|
|
11505
|
-
item_count: { type: "number", description: "Number of items (tutorials, videos, etc.) in the path" },
|
|
11532
|
+
item_count: { type: "number", description: "Number of items (tutorials, videos, etc.) in the path", modifier: "derived" },
|
|
11506
11533
|
estimated_hours: { type: "number", description: "Estimated total hours to complete the path" },
|
|
11507
|
-
completion_rate: { type: "number", description: "Percentage of users who complete the full path" }
|
|
11534
|
+
completion_rate: { type: "number", description: "Percentage of users who complete the full path", modifier: "snapshot" }
|
|
11508
11535
|
},
|
|
11509
11536
|
// LegalEntityProperties: Legal entity.
|
|
11510
11537
|
legal_entity: {
|
|
@@ -11522,7 +11549,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
11522
11549
|
dep_type: { type: "string", enum: ["runtime", "dev", "peer", "optional"], description: "Dependency classification" },
|
|
11523
11550
|
license: { type: "string", description: "SPDX license identifier" },
|
|
11524
11551
|
is_outdated: { type: "boolean", description: "Whether a newer version is available" },
|
|
11525
|
-
vulnerability_count: { type: "number", description: "Known vulnerabilities in the installed version. Populated from npm audit, Snyk, etc." }
|
|
11552
|
+
vulnerability_count: { type: "number", description: "Known vulnerabilities in the installed version. Populated from npm audit, Snyk, etc.", modifier: "snapshot" }
|
|
11526
11553
|
},
|
|
11527
11554
|
// LocaleProperties: Locale.
|
|
11528
11555
|
locale: {
|
|
@@ -11542,7 +11569,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
11542
11569
|
// MarketSegmentProperties: MarketSegment entity.
|
|
11543
11570
|
market_segment: {
|
|
11544
11571
|
segment_size: { type: "number", description: "Potential customers in this segment" },
|
|
11545
|
-
growth_rate: { type: "number", description: "YoY growth rate as a decimal. @example 0.15 represents 15%" },
|
|
11572
|
+
growth_rate: { type: "number", description: "YoY growth rate as a decimal. @example 0.15 represents 15%", modifier: "snapshot" },
|
|
11546
11573
|
tam: { type: "number", description: "Total Addressable Market (currency units)" },
|
|
11547
11574
|
sam: { type: "number", description: "Serviceable Addressable Market (currency units)" }
|
|
11548
11575
|
},
|
|
@@ -11600,7 +11627,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
11600
11627
|
// MarketingChannelProperties: Marketing channel.
|
|
11601
11628
|
marketing_channel: {
|
|
11602
11629
|
channel_type: { type: "string", enum: ["social", "email", "seo", "sem", "content", "events", "other"], description: "Category of marketing channel" },
|
|
11603
|
-
monthly_budget: { type: "number", description: "Monthly spend allocated to this channel" },
|
|
11630
|
+
monthly_budget: { type: "number", description: "Monthly spend allocated to this channel", modifier: "snapshot" },
|
|
11604
11631
|
roi: { type: "number", description: "Return on investment ratio" },
|
|
11605
11632
|
channel_status: { type: "string", enum: ["active", "paused", "deprecated"], description: "Operational status of the channel" }
|
|
11606
11633
|
},
|
|
@@ -11635,7 +11662,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
11635
11662
|
impact_level: { type: "string", enum: ["impact", "outcome", "output"], description: "Where this metric sits in the impact hierarchy" },
|
|
11636
11663
|
indicator_direction: { type: "string", enum: ["leading", "lagging"], description: "Whether this metric leads or lags the behaviour it measures" },
|
|
11637
11664
|
metric_category: { type: "string", enum: ["acquisition", "activation", "retention", "referral", "revenue", "engagement", "happiness", "task_success", "adoption", "other"], description: "AARRR or HEART category this metric belongs to" },
|
|
11638
|
-
current_value: { type: "number", description: "Most recent observed value" },
|
|
11665
|
+
current_value: { type: "number", description: "Most recent observed value", modifier: "snapshot" },
|
|
11639
11666
|
target_value: { type: "number", description: "Value we are aiming to reach" },
|
|
11640
11667
|
unit: { type: "string", description: 'Display unit for the metric value (e.g. "%", "ms", "\xA3")' },
|
|
11641
11668
|
range_min: { type: "number", description: "Minimum expected or baseline value" },
|
|
@@ -11733,11 +11760,11 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
11733
11760
|
nps_campaign: {
|
|
11734
11761
|
campaign_type: { type: "string", enum: ["relationship", "transactional", "feature"], description: "What triggers the NPS survey" },
|
|
11735
11762
|
send_date: { type: "string", description: "Date the survey was sent (ISO format)" },
|
|
11736
|
-
response_count: { type: "number", description: "Number of responses received" },
|
|
11737
|
-
response_rate: { type: "number", description: "Percentage of recipients who responded" },
|
|
11763
|
+
response_count: { type: "number", description: "Number of responses received", modifier: "snapshot" },
|
|
11764
|
+
response_rate: { type: "number", description: "Percentage of recipients who responded", modifier: "snapshot" },
|
|
11738
11765
|
score: { type: "number", description: "Net Promoter Score (-100 to 100)" },
|
|
11739
|
-
promoters_pct: { type: "number", description: "Percentage of respondents who are promoters (9-10)" },
|
|
11740
|
-
detractors_pct: { type: "number", description: "Percentage of respondents who are detractors (0-6)" }
|
|
11766
|
+
promoters_pct: { type: "number", description: "Percentage of respondents who are promoters (9-10)", modifier: "snapshot" },
|
|
11767
|
+
detractors_pct: { type: "number", description: "Percentage of respondents who are detractors (0-6)", modifier: "snapshot" }
|
|
11741
11768
|
},
|
|
11742
11769
|
// ObjectionProperties: Objection entity.
|
|
11743
11770
|
objection: {
|
|
@@ -11894,14 +11921,14 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
11894
11921
|
paywall: {
|
|
11895
11922
|
paywall_type: { type: "string", enum: ["hard", "soft", "metered", "freemium_gate"], description: "How restrictive the paywall is" },
|
|
11896
11923
|
trigger: { type: "string", description: "User action or threshold that triggers the paywall" },
|
|
11897
|
-
conversion_rate: { type: "number", description: "Percentage of users who convert at this paywall" }
|
|
11924
|
+
conversion_rate: { type: "number", description: "Percentage of users who convert at this paywall", modifier: "snapshot" }
|
|
11898
11925
|
},
|
|
11899
11926
|
// PenetrationTestProperties: Penetration test.
|
|
11900
11927
|
penetration_test: {
|
|
11901
11928
|
category: { type: "string", enum: ["external", "internal", "web_app", "api", "mobile"], description: "Test type" },
|
|
11902
11929
|
scope: { type: "string", description: "Systems or features in scope" },
|
|
11903
|
-
findings_count: { type: "number", description: "Total findings" },
|
|
11904
|
-
critical_count: { type: "number", description: "Critical-severity findings" },
|
|
11930
|
+
findings_count: { type: "number", description: "Total findings", modifier: "derived" },
|
|
11931
|
+
critical_count: { type: "number", description: "Critical-severity findings", modifier: "derived" },
|
|
11905
11932
|
start_date: { type: "string", description: "ISO start date" },
|
|
11906
11933
|
end_date: { type: "string", description: "ISO end date" },
|
|
11907
11934
|
report_url: { type: "string", description: "Full report URL" },
|
|
@@ -11932,7 +11959,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
11932
11959
|
// PipelineStageProperties: Pipeline stage.
|
|
11933
11960
|
pipeline_stage: {
|
|
11934
11961
|
stage_order: { type: "number", description: "Position of this stage in the pipeline sequence" },
|
|
11935
|
-
conversion_rate: { type: "number", description: "Percentage of deals that advance from this stage" },
|
|
11962
|
+
conversion_rate: { type: "number", description: "Percentage of deals that advance from this stage", modifier: "snapshot" },
|
|
11936
11963
|
avg_days_in_stage: { type: "number", description: "Average number of days deals spend in this stage" }
|
|
11937
11964
|
},
|
|
11938
11965
|
// PlaybookProperties: Customer success playbook.
|
|
@@ -12157,7 +12184,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
12157
12184
|
// ResearchStudyProperties: Structured user research activity.
|
|
12158
12185
|
research_study: {
|
|
12159
12186
|
method: { type: "string", enum: ["interview", "usability", "survey", "diary", "analytics"], description: "Research method used to conduct the study" },
|
|
12160
|
-
participant_count: { type: "number", description: "Number of participants recruited or observed" },
|
|
12187
|
+
participant_count: { type: "number", description: "Number of participants recruited or observed", modifier: "snapshot" },
|
|
12161
12188
|
start_date: { type: "string", description: "ISO date when the study starts" },
|
|
12162
12189
|
end_date: { type: "string", description: "ISO date when the study ends" }
|
|
12163
12190
|
},
|
|
@@ -12181,7 +12208,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
12181
12208
|
recurring_revenue: { type: "number", description: "Monthly or annual recurring revenue from this stream" },
|
|
12182
12209
|
billing_model: { type: "string", enum: ["subscription", "usage", "one_time", "tiered", "freemium", "other"], description: "Billing mechanics. May differ from `stream_type`." },
|
|
12183
12210
|
recognition_basis: { type: "string", enum: ["accrual", "cash", "deferred"], description: "Accounting basis for revenue recognition" },
|
|
12184
|
-
arr_contribution_pct: { type: "number", description: "Share of total ARR contributed (0\u2013100)" },
|
|
12211
|
+
arr_contribution_pct: { type: "number", description: "Share of total ARR contributed (0\u2013100)", modifier: "snapshot" },
|
|
12185
12212
|
forecast: { type: "string", description: "Free-text forecast or projection" }
|
|
12186
12213
|
},
|
|
12187
12214
|
// ReviewGateProperties: Review gate.
|
|
@@ -12315,7 +12342,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
12315
12342
|
security_audit: {
|
|
12316
12343
|
audit_scope: { type: "string", description: "Systems or processes covered by the audit" },
|
|
12317
12344
|
audit_status: { type: "string", enum: ["scheduled", "in_progress", "completed"], description: "Current progress of the audit" },
|
|
12318
|
-
findings_count: { type: "number", description: "Total number of findings" },
|
|
12345
|
+
findings_count: { type: "number", description: "Total number of findings", modifier: "derived" },
|
|
12319
12346
|
critical_findings: { type: "number", description: "Number of critical-severity findings" }
|
|
12320
12347
|
},
|
|
12321
12348
|
// SecurityControlProperties: Security control.
|
|
@@ -12360,7 +12387,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
12360
12387
|
search_volume: { type: "number", description: "Estimated monthly search volume" },
|
|
12361
12388
|
difficulty: { type: "number", description: "Keyword difficulty score (0-100)" },
|
|
12362
12389
|
intent: { type: "string", enum: ["informational", "navigational", "commercial", "transactional"], description: "Search intent behind the keyword" },
|
|
12363
|
-
current_rank: { type: "number", description: "Current SERP ranking position" },
|
|
12390
|
+
current_rank: { type: "number", description: "Current SERP ranking position", modifier: "snapshot" },
|
|
12364
12391
|
target_rank: { type: "number", description: "Desired ranking position" }
|
|
12365
12392
|
},
|
|
12366
12393
|
// ServiceProperties: Service or microservice.
|
|
@@ -12404,7 +12431,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
12404
12431
|
service_level_objective: {
|
|
12405
12432
|
target_percentage: { type: "number", description: "Target percentage. The reliability commitment. @example 99.9 (three nines), 99.95, 99.99 (four nines)" },
|
|
12406
12433
|
window: { type: "string", description: 'Evaluation window. @example "30 days", "rolling 28 days", "calendar quarter"' },
|
|
12407
|
-
current_percentage: { type: "number", description: "Current achieved percentage. Compared against `target_percentage` for health. @example 99.92 (above a 99.9 target)" },
|
|
12434
|
+
current_percentage: { type: "number", description: "Current achieved percentage. Compared against `target_percentage` for health. @example 99.92 (above a 99.9 target)", modifier: "snapshot" },
|
|
12408
12435
|
slo_type: { type: "string", enum: ["metric", "monitor", "time_slice"], description: "Measurement mechanism. `metric` = ratio (good/total). `monitor` = monitor-based. `time_slice` = uptime windows." },
|
|
12409
12436
|
warning_threshold: { type: "number", description: "Soft alert threshold before the target breaches. Gives teams time to act. @example 99.95 (warn at 99.95% when target is 99.9%)" }
|
|
12410
12437
|
},
|
|
@@ -12552,7 +12579,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
12552
12579
|
},
|
|
12553
12580
|
// SubscriptionProperties: Subscription.
|
|
12554
12581
|
subscription: {
|
|
12555
|
-
monthly_recurring_revenue: { type: "number", description: "Monthly recurring revenue from this subscription" },
|
|
12582
|
+
monthly_recurring_revenue: { type: "number", description: "Monthly recurring revenue from this subscription", modifier: "snapshot" },
|
|
12556
12583
|
start_date: { type: "string", description: "Subscription start date (ISO format)" },
|
|
12557
12584
|
renewal_date: { type: "string", description: "Next renewal date (ISO format)" },
|
|
12558
12585
|
subscription_status: { type: "string", enum: ["active", "trialing", "past_due", "cancelled", "paused"], description: "Current status of the subscription" }
|
|
@@ -12586,8 +12613,8 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
12586
12613
|
},
|
|
12587
12614
|
// SurveyResponseProperties: Aggregated survey response data.
|
|
12588
12615
|
survey_response: {
|
|
12589
|
-
response_count: { type: "number", description: "Total responses" },
|
|
12590
|
-
completion_rate: { type: "number", description: "Completion (0\u20131)" },
|
|
12616
|
+
response_count: { type: "number", description: "Total responses", modifier: "snapshot" },
|
|
12617
|
+
completion_rate: { type: "number", description: "Completion (0\u20131)", modifier: "snapshot" },
|
|
12591
12618
|
method: { type: "string", enum: ["email", "in_app", "phone", "other"], description: "Distribution method" }
|
|
12592
12619
|
},
|
|
12593
12620
|
// SwitchingCostProperties: SwitchingCost entity.
|
|
@@ -12623,7 +12650,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
12623
12650
|
},
|
|
12624
12651
|
required: ["value", "label"]
|
|
12625
12652
|
},
|
|
12626
|
-
frequency_count: { type: "number", description: "Exact observation count in the period. Pairs with `frequency_period` for a precise rate." },
|
|
12653
|
+
frequency_count: { type: "number", description: "Exact observation count in the period. Pairs with `frequency_period` for a precise rate.", modifier: "snapshot" },
|
|
12627
12654
|
frequency_period: { type: "string", description: "Recurrence period (ISO-8601 `Duration`). @example 'P7D' (per week), 'P1D' (per day), 'PT1H' (per hour)" },
|
|
12628
12655
|
frequency_rating: { type: "string", enum: ["constant", "regular", "occasional", "rare", "other"], description: "Qualitative frequency tier. Canonical replacement for the legacy `'once' | 'sporadic' | 'frequent' | 'constant' | string` shape. Use when an exact rate is unknown. Migration: `once \u2192 rare`, `sporadic \u2192 occasional`, `frequent \u2192 regular`, `constant \u2192 constant`." },
|
|
12629
12656
|
affected_users_estimate: { type: "number", description: "Approximate count of users affected. Snapshot estimate." },
|
|
@@ -12747,13 +12774,13 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
12747
12774
|
// TestSuiteProperties: Test suite.
|
|
12748
12775
|
test_suite: {
|
|
12749
12776
|
suite_type: { type: "string", enum: ["unit", "integration", "e2e", "performance", "security", "accessibility"], description: "Category of test suite" },
|
|
12750
|
-
test_count: { type: "number", description: "Number of tests in the suite" },
|
|
12751
|
-
pass_rate: { type: "number", description: "Percentage of tests passing (0-100)" },
|
|
12777
|
+
test_count: { type: "number", description: "Number of tests in the suite", modifier: "derived" },
|
|
12778
|
+
pass_rate: { type: "number", description: "Percentage of tests passing (0-100)", modifier: "snapshot" },
|
|
12752
12779
|
last_run: { type: "string", description: "ISO date of last execution" },
|
|
12753
12780
|
total_duration_ms: { type: "number", description: "Total execution time for the last run, in milliseconds" },
|
|
12754
|
-
failed_count: { type: "number", description: "Number of tests that failed in the last run" },
|
|
12755
|
-
skipped_count: { type: "number", description: "Number of tests that were skipped in the last run" },
|
|
12756
|
-
flaky_count: { type: "number", description: "Number of tests that passed only on retry (flaky) in the last run" }
|
|
12781
|
+
failed_count: { type: "number", description: "Number of tests that failed in the last run", modifier: "snapshot" },
|
|
12782
|
+
skipped_count: { type: "number", description: "Number of tests that were skipped in the last run", modifier: "snapshot" },
|
|
12783
|
+
flaky_count: { type: "number", description: "Number of tests that passed only on retry (flaky) in the last run", modifier: "snapshot" }
|
|
12757
12784
|
},
|
|
12758
12785
|
// ThreatProperties: Threat.
|
|
12759
12786
|
threat: {
|
|
@@ -12793,7 +12820,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
12793
12820
|
scope: { type: "string", description: 'What system, feature, or data flow is being analysed. @example "user authentication", "payment processing", "admin API"' },
|
|
12794
12821
|
last_reviewed: { type: "string", description: 'ISO date last reviewed. Models become stale as systems evolve. @example "2026-03-01"' },
|
|
12795
12822
|
participants: { type: "string", description: 'Participants in the exercise. @example "Alice Chen (security lead), Bob Park (backend engineer), Carol Liu (architect)". Promote individuals to `node_owned_by_person` edges if participation must be queryable.' },
|
|
12796
|
-
threat_count: { type: "number", description: "Threats identified. Key metric for scope and completeness. @example 12" }
|
|
12823
|
+
threat_count: { type: "number", description: "Threats identified. Key metric for scope and completeness. @example 12", modifier: "derived" }
|
|
12797
12824
|
},
|
|
12798
12825
|
// TouchpointProperties: Customer touchpoint.
|
|
12799
12826
|
touchpoint: {
|
|
@@ -12817,14 +12844,14 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
12817
12844
|
trial_config: {
|
|
12818
12845
|
trial_type: { type: "string", enum: ["time_limited", "feature_limited", "usage_limited", "reverse"], description: "How the trial is limited" },
|
|
12819
12846
|
duration_days: { type: "number", description: "Length of the trial period in days" },
|
|
12820
|
-
conversion_rate: { type: "number", description: "Percentage of trial users who convert to paid" }
|
|
12847
|
+
conversion_rate: { type: "number", description: "Percentage of trial users who convert to paid", modifier: "snapshot" }
|
|
12821
12848
|
},
|
|
12822
12849
|
// TutorialProperties: Tutorial.
|
|
12823
12850
|
tutorial: {
|
|
12824
12851
|
tutorial_format: { type: "string", enum: ["written", "video", "interactive", "code_along"], description: "Delivery format of the tutorial" },
|
|
12825
12852
|
difficulty: { type: "string", enum: ["beginner", "intermediate", "advanced"], description: "Skill level required to follow the tutorial" },
|
|
12826
12853
|
duration_minutes: { type: "number", description: "Estimated time to complete in minutes" },
|
|
12827
|
-
completion_rate: { type: "number", description: "Percentage of users who complete the tutorial" }
|
|
12854
|
+
completion_rate: { type: "number", description: "Percentage of users who complete the tutorial", modifier: "snapshot" }
|
|
12828
12855
|
},
|
|
12829
12856
|
// UnitEconomicsProperties: UnitEconomics.
|
|
12830
12857
|
unit_economics: {
|
|
@@ -12835,7 +12862,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
12835
12862
|
},
|
|
12836
12863
|
// UserAdvisoryBoardProperties: User advisory board.
|
|
12837
12864
|
user_advisory_board: {
|
|
12838
|
-
member_count: { type: "number", description: "Number of members on the board" },
|
|
12865
|
+
member_count: { type: "number", description: "Number of members on the board", modifier: "snapshot" },
|
|
12839
12866
|
meeting_cadence: { type: "string", enum: ["continuous", "hourly", "daily", "weekly", "monthly", "quarterly", "yearly", "on_demand", "other"], description: "How often the board meets. Uses the shared `Cadence` scale." },
|
|
12840
12867
|
board_focus: { type: "string", description: "Primary topic or area the board advises on" }
|
|
12841
12868
|
},
|
|
@@ -12917,9 +12944,9 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
12917
12944
|
// WalkthroughProperties: Product walkthrough.
|
|
12918
12945
|
walkthrough: {
|
|
12919
12946
|
walkthrough_type: { type: "string", enum: ["product_tour", "feature_intro", "tooltip_sequence", "checklist"], description: "Format of the in-product walkthrough" },
|
|
12920
|
-
step_count: { type: "number", description: "Number of steps in the walkthrough" },
|
|
12947
|
+
step_count: { type: "number", description: "Number of steps in the walkthrough", modifier: "derived" },
|
|
12921
12948
|
trigger: { type: "string", description: "User action or event that starts the walkthrough" },
|
|
12922
|
-
completion_rate: { type: "number", description: "Percentage of users who complete the walkthrough" }
|
|
12949
|
+
completion_rate: { type: "number", description: "Percentage of users who complete the walkthrough", modifier: "snapshot" }
|
|
12923
12950
|
},
|
|
12924
12951
|
// WebinarProperties: Webinar.
|
|
12925
12952
|
webinar: {
|
|
@@ -12972,7 +12999,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
12972
12999
|
purpose: { type: "string", description: "Free-text description. Pairs with the closed-enum `workspace_purpose`." },
|
|
12973
13000
|
workspace_purpose: { type: "string", enum: ["discovery", "planning", "retrospective", "design", "research", "strategy", "general"], description: "Closed-enum classifier. Drives template suggestions and surfaces in workspace browsers. `discovery` = persona/job/opportunity exploration. `planning` = roadmap and decision sessions. `retrospective` = reflection on shipped work. `design` = experience or UI exploration. `research` = organising study data and synthesis. `strategy` = high-level direction setting. `general` = catch-all." },
|
|
12974
13001
|
owner: { type: "string", description: "Workspace owner (handle or email). Display label; canonical owner is `team_owns_workspace` or `persona_owns_workspace`." },
|
|
12975
|
-
member_count: { type: "number", description: "Snapshot count. `team_works_in_workspace` edges are the source of truth." },
|
|
13002
|
+
member_count: { type: "number", description: "Snapshot count. `team_works_in_workspace` edges are the source of truth.", modifier: "derived" },
|
|
12976
13003
|
archived: { type: "boolean", description: "Archived. Archived workspaces remain queryable but hidden from default views." },
|
|
12977
13004
|
archived_at: { type: "string", description: "ISO timestamp archived. Pairs with `archived === true`." },
|
|
12978
13005
|
icon: { type: "string", description: "Display icon (emoji or icon name)" }
|
|
@@ -29293,7 +29320,7 @@ function isCanonical(text) {
|
|
|
29293
29320
|
}
|
|
29294
29321
|
|
|
29295
29322
|
// src/index.ts
|
|
29296
|
-
var UPG_VERSION = "0.13.
|
|
29323
|
+
var UPG_VERSION = "0.13.2";
|
|
29297
29324
|
var UPG_FORMAT_VERSION = "0.4.0";
|
|
29298
29325
|
var MARKDOWN_FORMAT_VERSION = "0.1";
|
|
29299
29326
|
var UPG_TYPES = getTypes();
|