@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.cjs
CHANGED
|
@@ -1690,6 +1690,25 @@ var UPG_EDGE_CATALOG = {
|
|
|
1690
1690
|
// the common case where the product lives in another graph; this catalog entry is
|
|
1691
1691
|
// the within-graph degenerate case (a product's own landing page).
|
|
1692
1692
|
screen_markets_product: { forward_verb: "markets", reverse_verb: "marketed_by", classification: "semantic", source_type: "screen", target_type: "product" },
|
|
1693
|
+
// Connective cross-product references (0.13.1, Data's connective-layer brief).
|
|
1694
|
+
// Dual-registered (also in UPG_CROSS_EDGE_TYPES) for the common cross-graph case;
|
|
1695
|
+
// these catalog entries are the within-graph degenerate case.
|
|
1696
|
+
// - screen_targets_competitor: a comparison / "vs" / positioning screen targets a
|
|
1697
|
+
// competitor (the competitor typically lives in a watched competitor-intel graph).
|
|
1698
|
+
// - feature_surfaces_product: a feature surfaces / embeds another product (a "Canvas"
|
|
1699
|
+
// feature that IS the Canvas product embedded). The feature-granular sibling of
|
|
1700
|
+
// depends_on_product; wires the portfolio from islands into a mesh.
|
|
1701
|
+
// - feature_uses_design_component: a feature consumes a shared design_component (the
|
|
1702
|
+
// feature sibling of screen_renders_design_component; the component lives in the
|
|
1703
|
+
// design-system product graph).
|
|
1704
|
+
// - product_implements_design_system: a product adopts / implements the shared design
|
|
1705
|
+
// system (the adoption semantic, mirroring product_implements_specification). Distinct
|
|
1706
|
+
// from the hierarchy `product_systematised_in_design_system` (structural containment):
|
|
1707
|
+
// same pattern as brand (branded_as = hierarchy, expresses = semantic).
|
|
1708
|
+
screen_targets_competitor: { forward_verb: "targets", reverse_verb: "targeted_by", classification: "semantic", source_type: "screen", target_type: "competitor" },
|
|
1709
|
+
feature_surfaces_product: { forward_verb: "surfaces", reverse_verb: "surfaced_by", classification: "semantic", source_type: "feature", target_type: "product" },
|
|
1710
|
+
feature_uses_design_component: { forward_verb: "uses", reverse_verb: "used_by", classification: "semantic", source_type: "feature", target_type: "design_component" },
|
|
1711
|
+
product_implements_design_system: { forward_verb: "implements", reverse_verb: "implemented_by", classification: "semantic", source_type: "product", target_type: "design_system" },
|
|
1693
1712
|
screen_navigates_to_screen: { forward_verb: "navigates_to", reverse_verb: "navigated_from", classification: "hierarchy", source_type: "screen", target_type: "screen" },
|
|
1694
1713
|
screen_surfaces_feature: { forward_verb: "surfaces", reverse_verb: "surfaced_on", classification: "cross-domain", source_type: "screen", target_type: "feature" },
|
|
1695
1714
|
screen_wireframed_as_wireframe: { forward_verb: "wireframed_as", reverse_verb: "wireframes", classification: "hierarchy", source_type: "screen", target_type: "wireframe" },
|
|
@@ -3371,7 +3390,15 @@ var UPG_CROSS_EDGE_TYPES = [
|
|
|
3371
3390
|
"journey_phase_realises_operating_stage",
|
|
3372
3391
|
"screen_markets_product",
|
|
3373
3392
|
"screen_renders_design_component",
|
|
3374
|
-
"product_expresses_brand_identity"
|
|
3393
|
+
"product_expresses_brand_identity",
|
|
3394
|
+
// Connective cross-product layer (0.13.1) — see UPGCrossEdgeType above.
|
|
3395
|
+
"shares_job",
|
|
3396
|
+
"shares_need",
|
|
3397
|
+
"persona_delegates_to_persona",
|
|
3398
|
+
"screen_targets_competitor",
|
|
3399
|
+
"feature_surfaces_product",
|
|
3400
|
+
"feature_uses_design_component",
|
|
3401
|
+
"product_implements_design_system"
|
|
3375
3402
|
];
|
|
3376
3403
|
var REGISTRY_PRODUCT_ID = "registry";
|
|
3377
3404
|
|
|
@@ -9946,9 +9973,9 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
9946
9973
|
method: { type: "string", enum: ["automated", "manual", "assistive_tech", "expert"], description: "How the audit was conducted" },
|
|
9947
9974
|
scope: { type: "string", description: 'What was audited (e.g. "homepage", "checkout flow")' },
|
|
9948
9975
|
conformance_result: { type: "string", enum: ["pass", "partial", "fail"], description: "Overall conformance result" },
|
|
9949
|
-
violations_count: { type: "number", description: "Number of accessibility violations found" },
|
|
9950
|
-
passes_count: { type: "number", description: "Number of checks that passed" },
|
|
9951
|
-
incomplete_count: { type: "number", description: "Number of checks that could not be completed" },
|
|
9976
|
+
violations_count: { type: "number", description: "Number of accessibility violations found", modifier: "derived" },
|
|
9977
|
+
passes_count: { type: "number", description: "Number of checks that passed", modifier: "derived" },
|
|
9978
|
+
incomplete_count: { type: "number", description: "Number of checks that could not be completed", modifier: "derived" },
|
|
9952
9979
|
score: { type: "number", description: "Aggregate accessibility score (0-100)" },
|
|
9953
9980
|
tool: { type: "string", enum: ["axe-core", "lighthouse", "wave", "manual", "other"], description: "Tool used to perform the audit" },
|
|
9954
9981
|
tool_version: { type: "string", description: "Version of the audit tool" },
|
|
@@ -10008,14 +10035,14 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10008
10035
|
account: {
|
|
10009
10036
|
account_type: { type: "string", enum: ["prospect", "customer", "partner", "churned"], description: "Relationship status of this account" },
|
|
10010
10037
|
industry: { type: "string", description: "Industry vertical the account operates in" },
|
|
10011
|
-
employee_count: { type: "number", description: "Number of employees at the account" },
|
|
10038
|
+
employee_count: { type: "number", description: "Number of employees at the account", modifier: "snapshot" },
|
|
10012
10039
|
annual_revenue: { type: "number", description: "Annual revenue of the account" }
|
|
10013
10040
|
},
|
|
10014
10041
|
// AcquisitionChannelProperties: AcquisitionChannel entity.
|
|
10015
10042
|
acquisition_channel: {
|
|
10016
10043
|
channel_type: { type: "string", enum: ["seo", "paid", "social", "referral", "direct", "content"], description: "Category of the acquisition channel" },
|
|
10017
10044
|
customer_acquisition_cost: { type: "number", description: "Customer acquisition cost for this channel" },
|
|
10018
|
-
monthly_volume: { type: "number", description: "Monthly volume of new users from this channel" }
|
|
10045
|
+
monthly_volume: { type: "number", description: "Monthly volume of new users from this channel", modifier: "snapshot" }
|
|
10019
10046
|
},
|
|
10020
10047
|
// AdCreativeProperties: Ad creative.
|
|
10021
10048
|
ad_creative: {
|
|
@@ -10030,7 +10057,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10030
10057
|
// AffinityClusterProperties: Affinity cluster grouping observations.
|
|
10031
10058
|
affinity_cluster: {
|
|
10032
10059
|
theme: { type: "string", description: "Emergent theme label" },
|
|
10033
|
-
child_observation_count: { type: "number", description: "Observations in this cluster" },
|
|
10060
|
+
child_observation_count: { type: "number", description: "Observations in this cluster", modifier: "derived" },
|
|
10034
10061
|
confidence: {
|
|
10035
10062
|
type: "assessment",
|
|
10036
10063
|
scale_id: "confidence_5",
|
|
@@ -10064,7 +10091,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10064
10091
|
hook_event: { type: "string", description: "Event that triggers this hook" },
|
|
10065
10092
|
hook_action: { type: "string", description: "Action performed when the hook fires" },
|
|
10066
10093
|
hook_status: { type: "string", enum: ["active", "disabled", "error"], description: "Operational status of the hook" },
|
|
10067
|
-
execution_count: { type: "number", description: "Number of times this hook has fired" }
|
|
10094
|
+
execution_count: { type: "number", description: "Number of times this hook has fired", modifier: "snapshot" }
|
|
10068
10095
|
},
|
|
10069
10096
|
// AgentSessionProperties: Agent session.
|
|
10070
10097
|
agent_session: {
|
|
@@ -10081,7 +10108,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10081
10108
|
agent_skill: {
|
|
10082
10109
|
skill_trigger: { type: "string", description: "Event or command that activates this skill" },
|
|
10083
10110
|
skill_description: { type: "string", description: "Human-readable description of what the skill does" },
|
|
10084
|
-
invocation_count: { type: "number", description: "Number of times this skill has been invoked" }
|
|
10111
|
+
invocation_count: { type: "number", description: "Number of times this skill has been invoked", modifier: "snapshot" }
|
|
10085
10112
|
},
|
|
10086
10113
|
// AgentTaskProperties: Agent task. A discrete task assigned to an agent.
|
|
10087
10114
|
agent_task: {
|
|
@@ -10113,7 +10140,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10113
10140
|
ai_dataset: {
|
|
10114
10141
|
dataset_type: { type: "string", enum: ["training", "evaluation", "fine_tuning", "rlhf", "synthetic"], description: "Purpose" },
|
|
10115
10142
|
version: { type: "string", description: "Version" },
|
|
10116
|
-
record_count: { type: "number", description: "Records" },
|
|
10143
|
+
record_count: { type: "number", description: "Records", modifier: "snapshot" },
|
|
10117
10144
|
format: { type: "string", description: 'Format (e.g. "jsonl", "csv", "parquet")' },
|
|
10118
10145
|
storage_uri: { type: "string", description: "Storage URI" },
|
|
10119
10146
|
checksum: { type: "string", description: "Integrity hash" },
|
|
@@ -10138,7 +10165,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10138
10165
|
ai_guardrail: {
|
|
10139
10166
|
guardrail_type: { type: "string", enum: ["content_filter", "rate_limit", "token_limit", "safety", "custom"], description: "Protection category" },
|
|
10140
10167
|
enforcement: { type: "string", enum: ["block", "warn", "log"], description: "Action when triggered" },
|
|
10141
|
-
trigger_count: { type: "number", description: "Times triggered" }
|
|
10168
|
+
trigger_count: { type: "number", description: "Times triggered", modifier: "snapshot" }
|
|
10142
10169
|
},
|
|
10143
10170
|
// AiModelProperties: AI model.
|
|
10144
10171
|
ai_model: {
|
|
@@ -10146,10 +10173,10 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10146
10173
|
model_id: { type: "string", description: 'Unique model identifier (e.g. "claude-sonnet-4-20250514")' },
|
|
10147
10174
|
model_version: { type: "string", description: "Specific version" },
|
|
10148
10175
|
model_purpose: { type: "string", description: "Intended use case" },
|
|
10149
|
-
cost_per_1k_tokens: { type: "number", description: "Cost per 1,000 tokens" },
|
|
10176
|
+
cost_per_1k_tokens: { type: "number", description: "Cost per 1,000 tokens", modifier: "snapshot" },
|
|
10150
10177
|
context_window: { type: "number", description: "Maximum context window (tokens)" },
|
|
10151
|
-
latency_p50_ms: { type: "number", description: "Median latency (p50, ms)" },
|
|
10152
|
-
latency_p99_ms: { type: "number", description: "Tail latency (p99, ms)" },
|
|
10178
|
+
latency_p50_ms: { type: "number", description: "Median latency (p50, ms)", modifier: "snapshot" },
|
|
10179
|
+
latency_p99_ms: { type: "number", description: "Tail latency (p99, ms)", modifier: "snapshot" },
|
|
10153
10180
|
input_schema: { type: "string", description: "Expected input format or schema" },
|
|
10154
10181
|
output_schema: { type: "string", description: "Expected output format or schema" },
|
|
10155
10182
|
aliases: { type: "string[]", description: "Alternative names" },
|
|
@@ -10193,8 +10220,8 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10193
10220
|
// ApiEcosystemProperties: API ecosystem.
|
|
10194
10221
|
api_ecosystem: {
|
|
10195
10222
|
api_style: { type: "string", enum: ["rest", "graphql", "grpc", "webhook", "mixed"], description: "Primary API architecture style" },
|
|
10196
|
-
developer_count: { type: "number", description: "Number of registered developers" },
|
|
10197
|
-
app_count: { type: "number", description: "Number of apps built on the API" }
|
|
10223
|
+
developer_count: { type: "number", description: "Number of registered developers", modifier: "snapshot" },
|
|
10224
|
+
app_count: { type: "number", description: "Number of apps built on the API", modifier: "derived" }
|
|
10198
10225
|
},
|
|
10199
10226
|
// ApiEndpointProperties: API endpoint.
|
|
10200
10227
|
api_endpoint: {
|
|
@@ -10265,7 +10292,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10265
10292
|
// BetaProgramProperties: Beta program.
|
|
10266
10293
|
beta_program: {
|
|
10267
10294
|
beta_type: { type: "string", enum: ["closed", "open", "invite_only"], description: "Access model for the beta" },
|
|
10268
|
-
participant_count: { type: "number", description: "Number of users participating in the beta" }
|
|
10295
|
+
participant_count: { type: "number", description: "Number of users participating in the beta", modifier: "snapshot" }
|
|
10269
10296
|
},
|
|
10270
10297
|
// BoundedContextProperties: DDD bounded context.
|
|
10271
10298
|
bounded_context: {
|
|
@@ -10423,7 +10450,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10423
10450
|
// ChurnReasonProperties: Churn reason.
|
|
10424
10451
|
churn_reason: {
|
|
10425
10452
|
category: { type: "string", description: "High-level category of the churn reason" },
|
|
10426
|
-
frequency_count: { type: "number", description: "Exact count of times this reason has been cited in `frequency_period`" },
|
|
10453
|
+
frequency_count: { type: "number", description: "Exact count of times this reason has been cited in `frequency_period`", modifier: "snapshot" },
|
|
10427
10454
|
frequency_period: { type: "string", description: "The recurrence period the count is measured over (ISO-8601 `Duration`, e.g. `'P30D'`)" },
|
|
10428
10455
|
frequency_rating: { type: "string", enum: ["constant", "regular", "occasional", "rare", "other"], description: "Qualitative frequency tier when an exact count is not known" },
|
|
10429
10456
|
contributing_factors: { type: "string[]", description: "Other factors that contributed to the churn" },
|
|
@@ -10438,8 +10465,8 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10438
10465
|
avg_duration: { type: "string", description: 'Average run duration across recent executions. @example "4m 30s", "12 minutes"' },
|
|
10439
10466
|
last_run_status: { type: "string", enum: ["success", "failure", "cancelled", "skipped", "in_progress"], description: "Result of the most recent run. Current health indicator." },
|
|
10440
10467
|
target_branch: { type: "string", description: 'Primary branch. The branch that triggers production deployments. @example "main", "release/*"' },
|
|
10441
|
-
run_count: { type: "number", description: "Total runs since creation. Indicates activity level. @example 1452" },
|
|
10442
|
-
success_rate: { type: "number", description: "Reliability metric for the pipeline itself: % of runs that succeed. @example 94.3" }
|
|
10468
|
+
run_count: { type: "number", description: "Total runs since creation. Indicates activity level. @example 1452", modifier: "snapshot" },
|
|
10469
|
+
success_rate: { type: "number", description: "Reliability metric for the pipeline itself: % of runs that succeed. @example 94.3", modifier: "snapshot" }
|
|
10443
10470
|
},
|
|
10444
10471
|
// ClassificationAxisProperties: ClassificationAxis: a dimension along which subjects are classified.
|
|
10445
10472
|
classification_axis: {
|
|
@@ -10478,8 +10505,8 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10478
10505
|
// CommunityInitiativeProperties: Community initiative.
|
|
10479
10506
|
community_initiative: {
|
|
10480
10507
|
initiative_type: { type: "string", enum: ["forum", "discord", "slack", "meetup", "ambassador", "other"], description: "Platform or format for the community" },
|
|
10481
|
-
member_count: { type: "number", description: "Current number of community members" },
|
|
10482
|
-
engagement_rate: { type: "number", description: "Percentage of members actively participating" }
|
|
10508
|
+
member_count: { type: "number", description: "Current number of community members", modifier: "snapshot" },
|
|
10509
|
+
engagement_rate: { type: "number", description: "Percentage of members actively participating", modifier: "snapshot" }
|
|
10483
10510
|
},
|
|
10484
10511
|
// CompetitiveAnalysisProperties: Competitive analysis exercise or snapshot.
|
|
10485
10512
|
competitive_analysis: {
|
|
@@ -10505,7 +10532,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10505
10532
|
},
|
|
10506
10533
|
// CompetitiveBattleCardProperties: CompetitiveBattleCard entity.
|
|
10507
10534
|
competitive_battle_card: {
|
|
10508
|
-
win_rate: { type: "number", description: "Historical win rate against this competitor (0-100%)" },
|
|
10535
|
+
win_rate: { type: "number", description: "Historical win rate against this competitor (0-100%)", modifier: "snapshot" },
|
|
10509
10536
|
key_differentiators: { type: "string", description: "Summary of key differentiators versus this competitor" }
|
|
10510
10537
|
},
|
|
10511
10538
|
// CompetitorProperties: A product or approach competing for the same user need.
|
|
@@ -10609,7 +10636,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10609
10636
|
content_calendar: {
|
|
10610
10637
|
calendar_period: { type: "string", description: 'Covered period (e.g. "Q2 2026")' },
|
|
10611
10638
|
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'`." },
|
|
10612
|
-
frequency_count: { type: "number", description: "Exact count in the period. Pairs with `frequency_period`." },
|
|
10639
|
+
frequency_count: { type: "number", description: "Exact count in the period. Pairs with `frequency_period`.", modifier: "snapshot" },
|
|
10613
10640
|
frequency_period: { type: "string", description: "Recurrence period (ISO-8601 `Duration`, e.g. `'P7D'`)" },
|
|
10614
10641
|
frequency_rating: { type: "string", enum: ["constant", "regular", "occasional", "rare", "other"], description: "Qualitative rate tier when an exact rate is unknown" }
|
|
10615
10642
|
},
|
|
@@ -10624,7 +10651,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10624
10651
|
content_types: { type: "string[]", description: "Types of content to produce" },
|
|
10625
10652
|
distribution_channels: { type: "string[]", description: "Channels where content will be distributed" },
|
|
10626
10653
|
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'`." },
|
|
10627
|
-
frequency_count: { type: "number", description: "Exact count of publications in the period. Pairs with `frequency_period`." },
|
|
10654
|
+
frequency_count: { type: "number", description: "Exact count of publications in the period. Pairs with `frequency_period`.", modifier: "snapshot" },
|
|
10628
10655
|
frequency_period: { type: "string", description: "Recurrence period (ISO-8601 `Duration`, e.g. `'P7D'`)" },
|
|
10629
10656
|
frequency_rating: { type: "string", enum: ["constant", "regular", "occasional", "rare", "other"], description: "Qualitative rate tier when an exact rate is unknown" }
|
|
10630
10657
|
},
|
|
@@ -10695,7 +10722,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10695
10722
|
stage_type: { type: "string", enum: ["awareness", "acquisition", "activation", "retention", "revenue", "referral"], description: "Which pirate metric (AAARRR) this stage maps to" },
|
|
10696
10723
|
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." },
|
|
10697
10724
|
avg_duration: { type: "string", description: "Average time a customer spends in this stage" },
|
|
10698
|
-
conversion_rate: { type: "number", description: "Percentage of customers who advance to the next stage" }
|
|
10725
|
+
conversion_rate: { type: "number", description: "Percentage of customers who advance to the next stage", modifier: "snapshot" }
|
|
10699
10726
|
},
|
|
10700
10727
|
// CustomerRelationshipProperties: CustomerRelationship.
|
|
10701
10728
|
customer_relationship: {
|
|
@@ -10708,9 +10735,9 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10708
10735
|
tool: { type: "string", enum: ["looker", "amplitude", "mixpanel", "posthog", "custom"], description: "Analytics tool hosting this dashboard" },
|
|
10709
10736
|
url: { type: "string", description: "URL to the live dashboard" },
|
|
10710
10737
|
audience: { type: "string", description: "Intended audience for this dashboard" },
|
|
10711
|
-
element_count: { type: "number", description: "Number of widgets or panels on the dashboard" },
|
|
10738
|
+
element_count: { type: "number", description: "Number of widgets or panels on the dashboard", modifier: "derived" },
|
|
10712
10739
|
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." },
|
|
10713
|
-
filter_count: { type: "number", description: "Number of user-configurable filters" }
|
|
10740
|
+
filter_count: { type: "number", description: "Number of user-configurable filters", modifier: "derived" }
|
|
10714
10741
|
},
|
|
10715
10742
|
// DataClassificationProperties: Data classification.
|
|
10716
10743
|
data_classification: {
|
|
@@ -10748,9 +10775,9 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10748
10775
|
data_model: {
|
|
10749
10776
|
schema_name: { type: "string", description: "Name of the schema this model belongs to" },
|
|
10750
10777
|
database_name: { type: "string", description: "Name of the database containing this model" },
|
|
10751
|
-
table_count: { type: "number", description: "Number of tables in the model" },
|
|
10752
|
-
column_count: { type: "number", description: "Total number of columns across all tables" },
|
|
10753
|
-
test_count: { type: "number", description: "Number of data tests defined for this model" },
|
|
10778
|
+
table_count: { type: "number", description: "Number of tables in the model", modifier: "derived" },
|
|
10779
|
+
column_count: { type: "number", description: "Total number of columns across all tables", modifier: "derived" },
|
|
10780
|
+
test_count: { type: "number", description: "Number of data tests defined for this model", modifier: "derived" },
|
|
10754
10781
|
model_type: { type: "string", enum: ["relational", "document", "graph", "time_series"], description: "Database paradigm used" },
|
|
10755
10782
|
materialization: { type: "string", enum: ["view", "table", "incremental", "ephemeral", "materialized_view"], description: "How the model is materialised in the warehouse" },
|
|
10756
10783
|
meta: { type: "object", description: "Arbitrary metadata key-value pairs" },
|
|
@@ -10762,7 +10789,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10762
10789
|
schedule: { type: "string", description: "Cron or scheduling expression" },
|
|
10763
10790
|
avg_runtime: { type: "string", description: "Average wall-clock runtime per execution" },
|
|
10764
10791
|
orchestrator: { type: "string", description: 'Orchestration tool (e.g. "Airflow", "Dagster", "dbt Cloud")' },
|
|
10765
|
-
retry_count: { type: "number", description: "Number of automatic retries on failure" },
|
|
10792
|
+
retry_count: { type: "number", description: "Number of automatic retries on failure", modifier: "snapshot" },
|
|
10766
10793
|
retry_delay_seconds: { type: "number", description: "Delay between retries in seconds" },
|
|
10767
10794
|
timeout_seconds: { type: "number", description: "Maximum allowed runtime in seconds before timeout" },
|
|
10768
10795
|
trigger_rule: { type: "string", description: "Rule that determines when this pipeline triggers" },
|
|
@@ -10795,7 +10822,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10795
10822
|
schema_version: { type: "string", description: "Current schema version" },
|
|
10796
10823
|
migration_status: { type: "string", enum: ["current", "pending", "failed"], description: "Pending-migration status" },
|
|
10797
10824
|
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." },
|
|
10798
|
-
table_count: { type: "number", description: "Tables or collections in this schema. Useful for migration scope estimation." }
|
|
10825
|
+
table_count: { type: "number", description: "Tables or collections in this schema. Useful for migration scope estimation.", modifier: "derived" }
|
|
10799
10826
|
},
|
|
10800
10827
|
// DealProperties: Deal.
|
|
10801
10828
|
deal: {
|
|
@@ -10830,7 +10857,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10830
10857
|
},
|
|
10831
10858
|
// DepartmentProperties: Department entity.
|
|
10832
10859
|
department: {
|
|
10833
|
-
headcount: { type: "number", description: "Total number of people in the department" },
|
|
10860
|
+
headcount: { type: "number", description: "Total number of people in the department", modifier: "snapshot" },
|
|
10834
10861
|
budget: { type: "number", description: "Annual budget allocated to the department" },
|
|
10835
10862
|
department_mission: { type: "string", description: "Charter / purpose statement for the department" },
|
|
10836
10863
|
leader: { type: "string", description: "Department leader (person or role reference). Promote to a `node_owned_by_person` edge if ownership must be queryable." },
|
|
@@ -10960,7 +10987,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10960
10987
|
// DeveloperPortalProperties: Developer portal.
|
|
10961
10988
|
developer_portal: {
|
|
10962
10989
|
portal_url: { type: "string", description: "URL of the developer portal" },
|
|
10963
|
-
doc_count: { type: "number", description: "Number of documentation pages" },
|
|
10990
|
+
doc_count: { type: "number", description: "Number of documentation pages", modifier: "derived" },
|
|
10964
10991
|
sandbox_available: { type: "boolean", description: "Whether a sandbox environment is available" }
|
|
10965
10992
|
},
|
|
10966
10993
|
// DiscountStrategyProperties: Discount strategy.
|
|
@@ -10968,7 +10995,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10968
10995
|
discount_type: { type: "string", enum: ["percentage", "fixed", "tiered", "bundle"], description: "How the discount is applied" },
|
|
10969
10996
|
discount_percentage: { type: "number", description: "Discount amount as a percentage (0-100)" },
|
|
10970
10997
|
valid_until: { type: "string", description: "Expiration date of the discount (ISO format)" },
|
|
10971
|
-
redemption_count: { type: "number", description: "Number of times this discount has been redeemed" }
|
|
10998
|
+
redemption_count: { type: "number", description: "Number of times this discount has been redeemed", modifier: "snapshot" }
|
|
10972
10999
|
},
|
|
10973
11000
|
// DistributionChannelProperties: DistributionChannel.
|
|
10974
11001
|
distribution_channel: {
|
|
@@ -10984,7 +11011,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10984
11011
|
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" },
|
|
10985
11012
|
author: { type: "string", description: "Author (free-form: name, email, or handle). Promote to a `node_owned_by_person` edge if ownership must be queryable." },
|
|
10986
11013
|
last_updated: { type: "string", description: "ISO 8601 last-meaningful-update" },
|
|
10987
|
-
word_count: { type: "number", description: "Approximate word count. Useful for planning, indexing, summarisation." },
|
|
11014
|
+
word_count: { type: "number", description: "Approximate word count. Useful for planning, indexing, summarisation.", modifier: "snapshot" },
|
|
10988
11015
|
content_summary: { type: "string", description: "1\u20133 sentence summary. Drives previews, search snippets, embedding context." },
|
|
10989
11016
|
language: { type: "string", description: 'Primary language (BCP 47 tag, e.g. "en", "en-GB", "fr")' }
|
|
10990
11017
|
},
|
|
@@ -11012,9 +11039,9 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
11012
11039
|
// EmailSequenceProperties: Email sequence.
|
|
11013
11040
|
email_sequence: {
|
|
11014
11041
|
sequence_type: { type: "string", enum: ["onboarding", "nurture", "re_engagement", "sales", "other"], description: "Purpose of the email sequence" },
|
|
11015
|
-
email_count: { type: "number", description: "Number of emails in the sequence" },
|
|
11016
|
-
open_rate: { type: "number", description: "Average open rate across the sequence (0-1)" },
|
|
11017
|
-
click_rate: { type: "number", description: "Average click-through rate across the sequence (0-1)" }
|
|
11042
|
+
email_count: { type: "number", description: "Number of emails in the sequence", modifier: "derived" },
|
|
11043
|
+
open_rate: { type: "number", description: "Average open rate across the sequence (0-1)", modifier: "snapshot" },
|
|
11044
|
+
click_rate: { type: "number", description: "Average click-through rate across the sequence (0-1)", modifier: "snapshot" }
|
|
11018
11045
|
},
|
|
11019
11046
|
// EpicProperties: A collection of related user stories that delivers a feature or capability.
|
|
11020
11047
|
epic: {
|
|
@@ -11026,15 +11053,15 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
11026
11053
|
},
|
|
11027
11054
|
// ErrorBudgetProperties: Error budget.
|
|
11028
11055
|
error_budget: {
|
|
11029
|
-
budget_remaining: { type: "number", description: "Remaining budget percentage (0\u2013100). @example 45.2 (45.2% remaining, 54.8% used)" },
|
|
11030
|
-
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." },
|
|
11056
|
+
budget_remaining: { type: "number", description: "Remaining budget percentage (0\u2013100). @example 45.2 (45.2% remaining, 54.8% used)", modifier: "snapshot" },
|
|
11057
|
+
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" },
|
|
11031
11058
|
policy: { type: "string", description: 'Policy when the budget hits 0%. @example "Freeze all non-reliability deploys", "Page engineering lead immediately"' },
|
|
11032
11059
|
budget_window: { type: "string", description: 'Budget window. Defines reset cadence. @example "30 days", "rolling 28 days"' }
|
|
11033
11060
|
},
|
|
11034
11061
|
// EvalBenchmarkProperties: Evaluation benchmark.
|
|
11035
11062
|
eval_benchmark: {
|
|
11036
11063
|
benchmark_type: { type: "string", enum: ["accuracy", "latency", "cost", "safety", "custom"], description: "Measured dimension" },
|
|
11037
|
-
test_case_count: { type: "number", description: "Test cases in the suite" },
|
|
11064
|
+
test_case_count: { type: "number", description: "Test cases in the suite", modifier: "derived" },
|
|
11038
11065
|
passing_threshold: { type: "number", description: "Minimum passing score" },
|
|
11039
11066
|
last_run: { type: "string", description: "ISO date of the most recent run" }
|
|
11040
11067
|
},
|
|
@@ -11056,7 +11083,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
11056
11083
|
event_type: { type: "string", enum: ["conference", "webinar", "meetup", "workshop", "trade_show", "other"], description: "Format of the event" },
|
|
11057
11084
|
event_date: { type: "string", description: "Date of the event (ISO format)" },
|
|
11058
11085
|
location: { type: "string", description: "Venue or virtual platform" },
|
|
11059
|
-
attendee_count: { type: "number", description: "Number of attendees" }
|
|
11086
|
+
attendee_count: { type: "number", description: "Number of attendees", modifier: "snapshot" }
|
|
11060
11087
|
},
|
|
11061
11088
|
// EventSchemaProperties: EventSchema entity.
|
|
11062
11089
|
event_schema: {
|
|
@@ -11219,7 +11246,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
11219
11246
|
feature_flag: {
|
|
11220
11247
|
key: { type: "string", description: 'Required. Stable flag key used in code (e.g. "new-checkout-flow").' },
|
|
11221
11248
|
flag_status: { type: "string", enum: ["on", "off", "rollout"], description: "Activation state. `on` = enabled for all. `off` = disabled for all. `rollout` = partial via targeting_rules." },
|
|
11222
|
-
rollout_pct: { type: "number", description: "Percentage enabled (0\u2013100). Meaningful when `flag_status === 'rollout'`." },
|
|
11249
|
+
rollout_pct: { type: "number", description: "Percentage enabled (0\u2013100). Meaningful when `flag_status === 'rollout'`.", modifier: "snapshot" },
|
|
11223
11250
|
targeting_rules: { type: "string", description: "Human-readable targeting rules. Full rule evaluation happens in the flag service." },
|
|
11224
11251
|
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." },
|
|
11225
11252
|
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." },
|
|
@@ -11229,7 +11256,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
11229
11256
|
// FeatureRequestProperties: Feature request raised by customer, prospect, or internal stakeholder.
|
|
11230
11257
|
feature_request: {
|
|
11231
11258
|
request_source: { type: "string", enum: ["customer", "internal", "prospect", "support", "community"], description: "Where the request originated" },
|
|
11232
|
-
vote_count: { type: "number", description: "Number of votes or upvotes from users" },
|
|
11259
|
+
vote_count: { type: "number", description: "Number of votes or upvotes from users", modifier: "snapshot" },
|
|
11233
11260
|
signal_sentiment: { type: "string", enum: ["positive", "neutral", "negative", "mixed"], description: "Detected sentiment of the request" },
|
|
11234
11261
|
signal_channel: { type: "string", description: "Channel through which the request was received" },
|
|
11235
11262
|
signal_urgency: { type: "string", enum: ["low", "medium", "high", "critical"], description: "Perceived urgency of the request" },
|
|
@@ -11287,7 +11314,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
11287
11314
|
},
|
|
11288
11315
|
// FeedbackVoteProperties: Feedback vote.
|
|
11289
11316
|
feedback_vote: {
|
|
11290
|
-
vote_count: { type: "number", description: "Total number of votes cast" },
|
|
11317
|
+
vote_count: { type: "number", description: "Total number of votes cast", modifier: "snapshot" },
|
|
11291
11318
|
mrr_impact: { type: "number", description: "Combined MRR of voting accounts" }
|
|
11292
11319
|
},
|
|
11293
11320
|
// FixProperties: Specific change that resolved an issue.
|
|
@@ -11327,13 +11354,13 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
11327
11354
|
funnel: {
|
|
11328
11355
|
funnel_type: { type: "string", enum: ["acquisition", "activation", "retention", "revenue", "referral", "custom"], description: "Which stage of the customer lifecycle this funnel measures" },
|
|
11329
11356
|
step_count: { type: "number", description: "Number of steps in the funnel", modifier: "derived" },
|
|
11330
|
-
overall_conversion_rate: { type: "number", description: "End-to-end conversion rate through the funnel (0-1)" }
|
|
11357
|
+
overall_conversion_rate: { type: "number", description: "End-to-end conversion rate through the funnel (0-1)", modifier: "snapshot" }
|
|
11331
11358
|
},
|
|
11332
11359
|
// FunnelStepProperties: FunnelStep entity.
|
|
11333
11360
|
funnel_step: {
|
|
11334
11361
|
step_index: { type: "number", description: "Position of this step in the funnel (0-indexed)" },
|
|
11335
|
-
conversion_rate: { type: "number", description: "Percentage of users who advance from this step" },
|
|
11336
|
-
drop_off_rate: { type: "number", description: "Percentage of users who leave at this step" }
|
|
11362
|
+
conversion_rate: { type: "number", description: "Percentage of users who advance from this step", modifier: "snapshot" },
|
|
11363
|
+
drop_off_rate: { type: "number", description: "Percentage of users who leave at this step", modifier: "snapshot" }
|
|
11337
11364
|
},
|
|
11338
11365
|
// GlossaryTermProperties: GlossaryTerm entity.
|
|
11339
11366
|
glossary_term: {
|
|
@@ -11508,7 +11535,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
11508
11535
|
// InterviewGuideProperties: Interview guide document.
|
|
11509
11536
|
interview_guide: {
|
|
11510
11537
|
guide_type: { type: "string", enum: ["structured", "semi_structured", "unstructured"], description: "Format structure" },
|
|
11511
|
-
question_count: { type: "number", description: "Total questions" },
|
|
11538
|
+
question_count: { type: "number", description: "Total questions", modifier: "derived" },
|
|
11512
11539
|
duration_minutes: { type: "number", description: "Expected length (minutes)" }
|
|
11513
11540
|
},
|
|
11514
11541
|
// InvestigationProperties: Active thread of inquiry: debugging, architecture exploration, RCA.
|
|
@@ -11665,7 +11692,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
11665
11692
|
key_activity: {
|
|
11666
11693
|
activity_type: { type: "string", enum: ["production", "problem_solving", "platform", "network"], description: "Activity nature" },
|
|
11667
11694
|
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`.' },
|
|
11668
|
-
frequency_count: { type: "number", description: "Exact count of runs in the period. Pairs with `frequency_period`." },
|
|
11695
|
+
frequency_count: { type: "number", description: "Exact count of runs in the period. Pairs with `frequency_period`.", modifier: "snapshot" },
|
|
11669
11696
|
frequency_period: { type: "string", description: "Recurrence period (ISO-8601 `Duration`, e.g. `'P7D'`)" },
|
|
11670
11697
|
frequency_rating: { type: "string", enum: ["constant", "regular", "occasional", "rare", "other"], description: "Qualitative tier. Use when an exact rate is unknown." },
|
|
11671
11698
|
operational_owner: { type: "string", description: "Operationally accountable team or individual. Promote to a `node_owned_by_team` edge if ownership must be queryable." },
|
|
@@ -11693,7 +11720,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
11693
11720
|
},
|
|
11694
11721
|
// KeyResultProperties: A measurable result under an objective. The KR in OKR.
|
|
11695
11722
|
key_result: {
|
|
11696
|
-
current_value: { type: "number", description: "Most recent observed value" },
|
|
11723
|
+
current_value: { type: "number", description: "Most recent observed value", modifier: "snapshot" },
|
|
11697
11724
|
target_value: { type: "number", description: "Value for full achievement" },
|
|
11698
11725
|
unit: { type: "string", description: 'Display unit (e.g. "%", "users", "\xA3")' }
|
|
11699
11726
|
},
|
|
@@ -11726,9 +11753,9 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
11726
11753
|
learning_path: {
|
|
11727
11754
|
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." },
|
|
11728
11755
|
path_difficulty: { type: "string", enum: ["beginner", "intermediate", "advanced"], description: "Overall difficulty level of the learning path" },
|
|
11729
|
-
item_count: { type: "number", description: "Number of items (tutorials, videos, etc.) in the path" },
|
|
11756
|
+
item_count: { type: "number", description: "Number of items (tutorials, videos, etc.) in the path", modifier: "derived" },
|
|
11730
11757
|
estimated_hours: { type: "number", description: "Estimated total hours to complete the path" },
|
|
11731
|
-
completion_rate: { type: "number", description: "Percentage of users who complete the full path" }
|
|
11758
|
+
completion_rate: { type: "number", description: "Percentage of users who complete the full path", modifier: "snapshot" }
|
|
11732
11759
|
},
|
|
11733
11760
|
// LegalEntityProperties: Legal entity.
|
|
11734
11761
|
legal_entity: {
|
|
@@ -11746,7 +11773,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
11746
11773
|
dep_type: { type: "string", enum: ["runtime", "dev", "peer", "optional"], description: "Dependency classification" },
|
|
11747
11774
|
license: { type: "string", description: "SPDX license identifier" },
|
|
11748
11775
|
is_outdated: { type: "boolean", description: "Whether a newer version is available" },
|
|
11749
|
-
vulnerability_count: { type: "number", description: "Known vulnerabilities in the installed version. Populated from npm audit, Snyk, etc." }
|
|
11776
|
+
vulnerability_count: { type: "number", description: "Known vulnerabilities in the installed version. Populated from npm audit, Snyk, etc.", modifier: "snapshot" }
|
|
11750
11777
|
},
|
|
11751
11778
|
// LocaleProperties: Locale.
|
|
11752
11779
|
locale: {
|
|
@@ -11766,7 +11793,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
11766
11793
|
// MarketSegmentProperties: MarketSegment entity.
|
|
11767
11794
|
market_segment: {
|
|
11768
11795
|
segment_size: { type: "number", description: "Potential customers in this segment" },
|
|
11769
|
-
growth_rate: { type: "number", description: "YoY growth rate as a decimal. @example 0.15 represents 15%" },
|
|
11796
|
+
growth_rate: { type: "number", description: "YoY growth rate as a decimal. @example 0.15 represents 15%", modifier: "snapshot" },
|
|
11770
11797
|
tam: { type: "number", description: "Total Addressable Market (currency units)" },
|
|
11771
11798
|
sam: { type: "number", description: "Serviceable Addressable Market (currency units)" }
|
|
11772
11799
|
},
|
|
@@ -11824,7 +11851,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
11824
11851
|
// MarketingChannelProperties: Marketing channel.
|
|
11825
11852
|
marketing_channel: {
|
|
11826
11853
|
channel_type: { type: "string", enum: ["social", "email", "seo", "sem", "content", "events", "other"], description: "Category of marketing channel" },
|
|
11827
|
-
monthly_budget: { type: "number", description: "Monthly spend allocated to this channel" },
|
|
11854
|
+
monthly_budget: { type: "number", description: "Monthly spend allocated to this channel", modifier: "snapshot" },
|
|
11828
11855
|
roi: { type: "number", description: "Return on investment ratio" },
|
|
11829
11856
|
channel_status: { type: "string", enum: ["active", "paused", "deprecated"], description: "Operational status of the channel" }
|
|
11830
11857
|
},
|
|
@@ -11859,7 +11886,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
11859
11886
|
impact_level: { type: "string", enum: ["impact", "outcome", "output"], description: "Where this metric sits in the impact hierarchy" },
|
|
11860
11887
|
indicator_direction: { type: "string", enum: ["leading", "lagging"], description: "Whether this metric leads or lags the behaviour it measures" },
|
|
11861
11888
|
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" },
|
|
11862
|
-
current_value: { type: "number", description: "Most recent observed value" },
|
|
11889
|
+
current_value: { type: "number", description: "Most recent observed value", modifier: "snapshot" },
|
|
11863
11890
|
target_value: { type: "number", description: "Value we are aiming to reach" },
|
|
11864
11891
|
unit: { type: "string", description: 'Display unit for the metric value (e.g. "%", "ms", "\xA3")' },
|
|
11865
11892
|
range_min: { type: "number", description: "Minimum expected or baseline value" },
|
|
@@ -11957,11 +11984,11 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
11957
11984
|
nps_campaign: {
|
|
11958
11985
|
campaign_type: { type: "string", enum: ["relationship", "transactional", "feature"], description: "What triggers the NPS survey" },
|
|
11959
11986
|
send_date: { type: "string", description: "Date the survey was sent (ISO format)" },
|
|
11960
|
-
response_count: { type: "number", description: "Number of responses received" },
|
|
11961
|
-
response_rate: { type: "number", description: "Percentage of recipients who responded" },
|
|
11987
|
+
response_count: { type: "number", description: "Number of responses received", modifier: "snapshot" },
|
|
11988
|
+
response_rate: { type: "number", description: "Percentage of recipients who responded", modifier: "snapshot" },
|
|
11962
11989
|
score: { type: "number", description: "Net Promoter Score (-100 to 100)" },
|
|
11963
|
-
promoters_pct: { type: "number", description: "Percentage of respondents who are promoters (9-10)" },
|
|
11964
|
-
detractors_pct: { type: "number", description: "Percentage of respondents who are detractors (0-6)" }
|
|
11990
|
+
promoters_pct: { type: "number", description: "Percentage of respondents who are promoters (9-10)", modifier: "snapshot" },
|
|
11991
|
+
detractors_pct: { type: "number", description: "Percentage of respondents who are detractors (0-6)", modifier: "snapshot" }
|
|
11965
11992
|
},
|
|
11966
11993
|
// ObjectionProperties: Objection entity.
|
|
11967
11994
|
objection: {
|
|
@@ -12118,14 +12145,14 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
12118
12145
|
paywall: {
|
|
12119
12146
|
paywall_type: { type: "string", enum: ["hard", "soft", "metered", "freemium_gate"], description: "How restrictive the paywall is" },
|
|
12120
12147
|
trigger: { type: "string", description: "User action or threshold that triggers the paywall" },
|
|
12121
|
-
conversion_rate: { type: "number", description: "Percentage of users who convert at this paywall" }
|
|
12148
|
+
conversion_rate: { type: "number", description: "Percentage of users who convert at this paywall", modifier: "snapshot" }
|
|
12122
12149
|
},
|
|
12123
12150
|
// PenetrationTestProperties: Penetration test.
|
|
12124
12151
|
penetration_test: {
|
|
12125
12152
|
category: { type: "string", enum: ["external", "internal", "web_app", "api", "mobile"], description: "Test type" },
|
|
12126
12153
|
scope: { type: "string", description: "Systems or features in scope" },
|
|
12127
|
-
findings_count: { type: "number", description: "Total findings" },
|
|
12128
|
-
critical_count: { type: "number", description: "Critical-severity findings" },
|
|
12154
|
+
findings_count: { type: "number", description: "Total findings", modifier: "derived" },
|
|
12155
|
+
critical_count: { type: "number", description: "Critical-severity findings", modifier: "derived" },
|
|
12129
12156
|
start_date: { type: "string", description: "ISO start date" },
|
|
12130
12157
|
end_date: { type: "string", description: "ISO end date" },
|
|
12131
12158
|
report_url: { type: "string", description: "Full report URL" },
|
|
@@ -12156,7 +12183,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
12156
12183
|
// PipelineStageProperties: Pipeline stage.
|
|
12157
12184
|
pipeline_stage: {
|
|
12158
12185
|
stage_order: { type: "number", description: "Position of this stage in the pipeline sequence" },
|
|
12159
|
-
conversion_rate: { type: "number", description: "Percentage of deals that advance from this stage" },
|
|
12186
|
+
conversion_rate: { type: "number", description: "Percentage of deals that advance from this stage", modifier: "snapshot" },
|
|
12160
12187
|
avg_days_in_stage: { type: "number", description: "Average number of days deals spend in this stage" }
|
|
12161
12188
|
},
|
|
12162
12189
|
// PlaybookProperties: Customer success playbook.
|
|
@@ -12381,7 +12408,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
12381
12408
|
// ResearchStudyProperties: Structured user research activity.
|
|
12382
12409
|
research_study: {
|
|
12383
12410
|
method: { type: "string", enum: ["interview", "usability", "survey", "diary", "analytics"], description: "Research method used to conduct the study" },
|
|
12384
|
-
participant_count: { type: "number", description: "Number of participants recruited or observed" },
|
|
12411
|
+
participant_count: { type: "number", description: "Number of participants recruited or observed", modifier: "snapshot" },
|
|
12385
12412
|
start_date: { type: "string", description: "ISO date when the study starts" },
|
|
12386
12413
|
end_date: { type: "string", description: "ISO date when the study ends" }
|
|
12387
12414
|
},
|
|
@@ -12405,7 +12432,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
12405
12432
|
recurring_revenue: { type: "number", description: "Monthly or annual recurring revenue from this stream" },
|
|
12406
12433
|
billing_model: { type: "string", enum: ["subscription", "usage", "one_time", "tiered", "freemium", "other"], description: "Billing mechanics. May differ from `stream_type`." },
|
|
12407
12434
|
recognition_basis: { type: "string", enum: ["accrual", "cash", "deferred"], description: "Accounting basis for revenue recognition" },
|
|
12408
|
-
arr_contribution_pct: { type: "number", description: "Share of total ARR contributed (0\u2013100)" },
|
|
12435
|
+
arr_contribution_pct: { type: "number", description: "Share of total ARR contributed (0\u2013100)", modifier: "snapshot" },
|
|
12409
12436
|
forecast: { type: "string", description: "Free-text forecast or projection" }
|
|
12410
12437
|
},
|
|
12411
12438
|
// ReviewGateProperties: Review gate.
|
|
@@ -12539,7 +12566,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
12539
12566
|
security_audit: {
|
|
12540
12567
|
audit_scope: { type: "string", description: "Systems or processes covered by the audit" },
|
|
12541
12568
|
audit_status: { type: "string", enum: ["scheduled", "in_progress", "completed"], description: "Current progress of the audit" },
|
|
12542
|
-
findings_count: { type: "number", description: "Total number of findings" },
|
|
12569
|
+
findings_count: { type: "number", description: "Total number of findings", modifier: "derived" },
|
|
12543
12570
|
critical_findings: { type: "number", description: "Number of critical-severity findings" }
|
|
12544
12571
|
},
|
|
12545
12572
|
// SecurityControlProperties: Security control.
|
|
@@ -12584,7 +12611,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
12584
12611
|
search_volume: { type: "number", description: "Estimated monthly search volume" },
|
|
12585
12612
|
difficulty: { type: "number", description: "Keyword difficulty score (0-100)" },
|
|
12586
12613
|
intent: { type: "string", enum: ["informational", "navigational", "commercial", "transactional"], description: "Search intent behind the keyword" },
|
|
12587
|
-
current_rank: { type: "number", description: "Current SERP ranking position" },
|
|
12614
|
+
current_rank: { type: "number", description: "Current SERP ranking position", modifier: "snapshot" },
|
|
12588
12615
|
target_rank: { type: "number", description: "Desired ranking position" }
|
|
12589
12616
|
},
|
|
12590
12617
|
// ServiceProperties: Service or microservice.
|
|
@@ -12628,7 +12655,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
12628
12655
|
service_level_objective: {
|
|
12629
12656
|
target_percentage: { type: "number", description: "Target percentage. The reliability commitment. @example 99.9 (three nines), 99.95, 99.99 (four nines)" },
|
|
12630
12657
|
window: { type: "string", description: 'Evaluation window. @example "30 days", "rolling 28 days", "calendar quarter"' },
|
|
12631
|
-
current_percentage: { type: "number", description: "Current achieved percentage. Compared against `target_percentage` for health. @example 99.92 (above a 99.9 target)" },
|
|
12658
|
+
current_percentage: { type: "number", description: "Current achieved percentage. Compared against `target_percentage` for health. @example 99.92 (above a 99.9 target)", modifier: "snapshot" },
|
|
12632
12659
|
slo_type: { type: "string", enum: ["metric", "monitor", "time_slice"], description: "Measurement mechanism. `metric` = ratio (good/total). `monitor` = monitor-based. `time_slice` = uptime windows." },
|
|
12633
12660
|
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%)" }
|
|
12634
12661
|
},
|
|
@@ -12776,7 +12803,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
12776
12803
|
},
|
|
12777
12804
|
// SubscriptionProperties: Subscription.
|
|
12778
12805
|
subscription: {
|
|
12779
|
-
monthly_recurring_revenue: { type: "number", description: "Monthly recurring revenue from this subscription" },
|
|
12806
|
+
monthly_recurring_revenue: { type: "number", description: "Monthly recurring revenue from this subscription", modifier: "snapshot" },
|
|
12780
12807
|
start_date: { type: "string", description: "Subscription start date (ISO format)" },
|
|
12781
12808
|
renewal_date: { type: "string", description: "Next renewal date (ISO format)" },
|
|
12782
12809
|
subscription_status: { type: "string", enum: ["active", "trialing", "past_due", "cancelled", "paused"], description: "Current status of the subscription" }
|
|
@@ -12810,8 +12837,8 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
12810
12837
|
},
|
|
12811
12838
|
// SurveyResponseProperties: Aggregated survey response data.
|
|
12812
12839
|
survey_response: {
|
|
12813
|
-
response_count: { type: "number", description: "Total responses" },
|
|
12814
|
-
completion_rate: { type: "number", description: "Completion (0\u20131)" },
|
|
12840
|
+
response_count: { type: "number", description: "Total responses", modifier: "snapshot" },
|
|
12841
|
+
completion_rate: { type: "number", description: "Completion (0\u20131)", modifier: "snapshot" },
|
|
12815
12842
|
method: { type: "string", enum: ["email", "in_app", "phone", "other"], description: "Distribution method" }
|
|
12816
12843
|
},
|
|
12817
12844
|
// SwitchingCostProperties: SwitchingCost entity.
|
|
@@ -12847,7 +12874,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
12847
12874
|
},
|
|
12848
12875
|
required: ["value", "label"]
|
|
12849
12876
|
},
|
|
12850
|
-
frequency_count: { type: "number", description: "Exact observation count in the period. Pairs with `frequency_period` for a precise rate." },
|
|
12877
|
+
frequency_count: { type: "number", description: "Exact observation count in the period. Pairs with `frequency_period` for a precise rate.", modifier: "snapshot" },
|
|
12851
12878
|
frequency_period: { type: "string", description: "Recurrence period (ISO-8601 `Duration`). @example 'P7D' (per week), 'P1D' (per day), 'PT1H' (per hour)" },
|
|
12852
12879
|
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`." },
|
|
12853
12880
|
affected_users_estimate: { type: "number", description: "Approximate count of users affected. Snapshot estimate." },
|
|
@@ -12971,13 +12998,13 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
12971
12998
|
// TestSuiteProperties: Test suite.
|
|
12972
12999
|
test_suite: {
|
|
12973
13000
|
suite_type: { type: "string", enum: ["unit", "integration", "e2e", "performance", "security", "accessibility"], description: "Category of test suite" },
|
|
12974
|
-
test_count: { type: "number", description: "Number of tests in the suite" },
|
|
12975
|
-
pass_rate: { type: "number", description: "Percentage of tests passing (0-100)" },
|
|
13001
|
+
test_count: { type: "number", description: "Number of tests in the suite", modifier: "derived" },
|
|
13002
|
+
pass_rate: { type: "number", description: "Percentage of tests passing (0-100)", modifier: "snapshot" },
|
|
12976
13003
|
last_run: { type: "string", description: "ISO date of last execution" },
|
|
12977
13004
|
total_duration_ms: { type: "number", description: "Total execution time for the last run, in milliseconds" },
|
|
12978
|
-
failed_count: { type: "number", description: "Number of tests that failed in the last run" },
|
|
12979
|
-
skipped_count: { type: "number", description: "Number of tests that were skipped in the last run" },
|
|
12980
|
-
flaky_count: { type: "number", description: "Number of tests that passed only on retry (flaky) in the last run" }
|
|
13005
|
+
failed_count: { type: "number", description: "Number of tests that failed in the last run", modifier: "snapshot" },
|
|
13006
|
+
skipped_count: { type: "number", description: "Number of tests that were skipped in the last run", modifier: "snapshot" },
|
|
13007
|
+
flaky_count: { type: "number", description: "Number of tests that passed only on retry (flaky) in the last run", modifier: "snapshot" }
|
|
12981
13008
|
},
|
|
12982
13009
|
// ThreatProperties: Threat.
|
|
12983
13010
|
threat: {
|
|
@@ -13017,7 +13044,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
13017
13044
|
scope: { type: "string", description: 'What system, feature, or data flow is being analysed. @example "user authentication", "payment processing", "admin API"' },
|
|
13018
13045
|
last_reviewed: { type: "string", description: 'ISO date last reviewed. Models become stale as systems evolve. @example "2026-03-01"' },
|
|
13019
13046
|
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.' },
|
|
13020
|
-
threat_count: { type: "number", description: "Threats identified. Key metric for scope and completeness. @example 12" }
|
|
13047
|
+
threat_count: { type: "number", description: "Threats identified. Key metric for scope and completeness. @example 12", modifier: "derived" }
|
|
13021
13048
|
},
|
|
13022
13049
|
// TouchpointProperties: Customer touchpoint.
|
|
13023
13050
|
touchpoint: {
|
|
@@ -13041,14 +13068,14 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
13041
13068
|
trial_config: {
|
|
13042
13069
|
trial_type: { type: "string", enum: ["time_limited", "feature_limited", "usage_limited", "reverse"], description: "How the trial is limited" },
|
|
13043
13070
|
duration_days: { type: "number", description: "Length of the trial period in days" },
|
|
13044
|
-
conversion_rate: { type: "number", description: "Percentage of trial users who convert to paid" }
|
|
13071
|
+
conversion_rate: { type: "number", description: "Percentage of trial users who convert to paid", modifier: "snapshot" }
|
|
13045
13072
|
},
|
|
13046
13073
|
// TutorialProperties: Tutorial.
|
|
13047
13074
|
tutorial: {
|
|
13048
13075
|
tutorial_format: { type: "string", enum: ["written", "video", "interactive", "code_along"], description: "Delivery format of the tutorial" },
|
|
13049
13076
|
difficulty: { type: "string", enum: ["beginner", "intermediate", "advanced"], description: "Skill level required to follow the tutorial" },
|
|
13050
13077
|
duration_minutes: { type: "number", description: "Estimated time to complete in minutes" },
|
|
13051
|
-
completion_rate: { type: "number", description: "Percentage of users who complete the tutorial" }
|
|
13078
|
+
completion_rate: { type: "number", description: "Percentage of users who complete the tutorial", modifier: "snapshot" }
|
|
13052
13079
|
},
|
|
13053
13080
|
// UnitEconomicsProperties: UnitEconomics.
|
|
13054
13081
|
unit_economics: {
|
|
@@ -13059,7 +13086,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
13059
13086
|
},
|
|
13060
13087
|
// UserAdvisoryBoardProperties: User advisory board.
|
|
13061
13088
|
user_advisory_board: {
|
|
13062
|
-
member_count: { type: "number", description: "Number of members on the board" },
|
|
13089
|
+
member_count: { type: "number", description: "Number of members on the board", modifier: "snapshot" },
|
|
13063
13090
|
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." },
|
|
13064
13091
|
board_focus: { type: "string", description: "Primary topic or area the board advises on" }
|
|
13065
13092
|
},
|
|
@@ -13141,9 +13168,9 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
13141
13168
|
// WalkthroughProperties: Product walkthrough.
|
|
13142
13169
|
walkthrough: {
|
|
13143
13170
|
walkthrough_type: { type: "string", enum: ["product_tour", "feature_intro", "tooltip_sequence", "checklist"], description: "Format of the in-product walkthrough" },
|
|
13144
|
-
step_count: { type: "number", description: "Number of steps in the walkthrough" },
|
|
13171
|
+
step_count: { type: "number", description: "Number of steps in the walkthrough", modifier: "derived" },
|
|
13145
13172
|
trigger: { type: "string", description: "User action or event that starts the walkthrough" },
|
|
13146
|
-
completion_rate: { type: "number", description: "Percentage of users who complete the walkthrough" }
|
|
13173
|
+
completion_rate: { type: "number", description: "Percentage of users who complete the walkthrough", modifier: "snapshot" }
|
|
13147
13174
|
},
|
|
13148
13175
|
// WebinarProperties: Webinar.
|
|
13149
13176
|
webinar: {
|
|
@@ -13196,7 +13223,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
13196
13223
|
purpose: { type: "string", description: "Free-text description. Pairs with the closed-enum `workspace_purpose`." },
|
|
13197
13224
|
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." },
|
|
13198
13225
|
owner: { type: "string", description: "Workspace owner (handle or email). Display label; canonical owner is `team_owns_workspace` or `persona_owns_workspace`." },
|
|
13199
|
-
member_count: { type: "number", description: "Snapshot count. `team_works_in_workspace` edges are the source of truth." },
|
|
13226
|
+
member_count: { type: "number", description: "Snapshot count. `team_works_in_workspace` edges are the source of truth.", modifier: "derived" },
|
|
13200
13227
|
archived: { type: "boolean", description: "Archived. Archived workspaces remain queryable but hidden from default views." },
|
|
13201
13228
|
archived_at: { type: "string", description: "ISO timestamp archived. Pairs with `archived === true`." },
|
|
13202
13229
|
icon: { type: "string", description: "Display icon (emoji or icon name)" }
|
|
@@ -29517,7 +29544,7 @@ function isCanonical(text) {
|
|
|
29517
29544
|
}
|
|
29518
29545
|
|
|
29519
29546
|
// src/index.ts
|
|
29520
|
-
var UPG_VERSION = "0.13.
|
|
29547
|
+
var UPG_VERSION = "0.13.2";
|
|
29521
29548
|
var UPG_FORMAT_VERSION = "0.4.0";
|
|
29522
29549
|
var MARKDOWN_FORMAT_VERSION = "0.1";
|
|
29523
29550
|
var UPG_TYPES = getTypes();
|