@unified-product-graph/core 0.13.1 → 0.14.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +151 -188
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +16 -73
- package/dist/index.d.ts +16 -73
- package/dist/index.js +151 -188
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -7605,6 +7605,53 @@ function getDeprecatedTypes() {
|
|
|
7605
7605
|
return deprecated;
|
|
7606
7606
|
}
|
|
7607
7607
|
var UPG_PROPERTY_MIGRATIONS = {
|
|
7608
|
+
// ── v0.14.0: Pattern E — remove deprecated/ghost properties (UPG-574) ────────
|
|
7609
|
+
//
|
|
7610
|
+
// Properties marked deprecated (some "Removed in 0.9.1") that were never
|
|
7611
|
+
// actually removed, plus superseded soft-aliases. The RICE / opportunity-sizing
|
|
7612
|
+
// scoring inputs were framework-scoped from 0.9.0: their value lives on the
|
|
7613
|
+
// `framework_exercise` includes-edge of the rice-scoring / opportunity-sizing
|
|
7614
|
+
// framework, not on the entity. The remaining four are superseded by a sibling
|
|
7615
|
+
// (cause_category, rule_strength, size_estimate, effort). Loaders drop the
|
|
7616
|
+
// stranded keys; the values were never canonical on the entity.
|
|
7617
|
+
"0.14.0": [
|
|
7618
|
+
{
|
|
7619
|
+
kind: "drop_props",
|
|
7620
|
+
type: "opportunity",
|
|
7621
|
+
drop_props: ["reach", "frequency", "pain", "opportunity_score"],
|
|
7622
|
+
reason: "UPG-574: opportunity scoring (reach/frequency/pain/opportunity_score) was framework-scoped from 0.9.0 (opportunity-sizing). Apply the framework and read the value off the framework_exercise edge; the entity props are removed in 0.14.0."
|
|
7623
|
+
},
|
|
7624
|
+
{
|
|
7625
|
+
kind: "drop_props",
|
|
7626
|
+
type: "solution",
|
|
7627
|
+
drop_props: ["reach", "impact", "confidence", "effort", "rice_score"],
|
|
7628
|
+
reason: "UPG-574: RICE inputs (reach/impact/confidence/effort) and the computed rice_score were framework-scoped from 0.9.0 (rice-scoring). Apply the framework and read the score off the framework_exercise edge; the entity props are removed in 0.14.0."
|
|
7629
|
+
},
|
|
7630
|
+
{
|
|
7631
|
+
kind: "drop_props",
|
|
7632
|
+
type: "root_cause",
|
|
7633
|
+
drop_props: ["category", "verified"],
|
|
7634
|
+
reason: "UPG-574: root_cause.category was a legacy free-form field superseded by the closed-enum cause_category; verified duplicated cause_confidence === confirmed. Both removed in 0.14.0."
|
|
7635
|
+
},
|
|
7636
|
+
{
|
|
7637
|
+
kind: "drop_props",
|
|
7638
|
+
type: "design_guideline",
|
|
7639
|
+
drop_props: ["strictness"],
|
|
7640
|
+
reason: "UPG-574: design_guideline.strictness was superseded by rule_strength (a richer imperative-force enum). Removed in 0.14.0."
|
|
7641
|
+
},
|
|
7642
|
+
{
|
|
7643
|
+
kind: "drop_props",
|
|
7644
|
+
type: "behavioral_segment",
|
|
7645
|
+
drop_props: ["size"],
|
|
7646
|
+
reason: "UPG-574: behavioral_segment.size was a v0.2 alias for size_estimate. Removed in 0.14.0; use size_estimate."
|
|
7647
|
+
},
|
|
7648
|
+
{
|
|
7649
|
+
kind: "drop_props",
|
|
7650
|
+
type: "task",
|
|
7651
|
+
drop_props: ["estimate"],
|
|
7652
|
+
reason: "UPG-574: task.estimate was a story_task-collapse relic that duplicated effort. Removed in 0.14.0; use effort."
|
|
7653
|
+
}
|
|
7654
|
+
],
|
|
7608
7655
|
// ── v0.12.0: P14 Bucket C — drop the one non-derived denormalized aggregate ──
|
|
7609
7656
|
//
|
|
7610
7657
|
// The count caches (feature_count, evidence_count, workflow step_count /
|
|
@@ -9973,9 +10020,9 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
9973
10020
|
method: { type: "string", enum: ["automated", "manual", "assistive_tech", "expert"], description: "How the audit was conducted" },
|
|
9974
10021
|
scope: { type: "string", description: 'What was audited (e.g. "homepage", "checkout flow")' },
|
|
9975
10022
|
conformance_result: { type: "string", enum: ["pass", "partial", "fail"], description: "Overall conformance result" },
|
|
9976
|
-
violations_count: { type: "number", description: "Number of accessibility violations found" },
|
|
9977
|
-
passes_count: { type: "number", description: "Number of checks that passed" },
|
|
9978
|
-
incomplete_count: { type: "number", description: "Number of checks that could not be completed" },
|
|
10023
|
+
violations_count: { type: "number", description: "Number of accessibility violations found", modifier: "derived" },
|
|
10024
|
+
passes_count: { type: "number", description: "Number of checks that passed", modifier: "derived" },
|
|
10025
|
+
incomplete_count: { type: "number", description: "Number of checks that could not be completed", modifier: "derived" },
|
|
9979
10026
|
score: { type: "number", description: "Aggregate accessibility score (0-100)" },
|
|
9980
10027
|
tool: { type: "string", enum: ["axe-core", "lighthouse", "wave", "manual", "other"], description: "Tool used to perform the audit" },
|
|
9981
10028
|
tool_version: { type: "string", description: "Version of the audit tool" },
|
|
@@ -10035,14 +10082,14 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10035
10082
|
account: {
|
|
10036
10083
|
account_type: { type: "string", enum: ["prospect", "customer", "partner", "churned"], description: "Relationship status of this account" },
|
|
10037
10084
|
industry: { type: "string", description: "Industry vertical the account operates in" },
|
|
10038
|
-
employee_count: { type: "number", description: "Number of employees at the account" },
|
|
10085
|
+
employee_count: { type: "number", description: "Number of employees at the account", modifier: "snapshot" },
|
|
10039
10086
|
annual_revenue: { type: "number", description: "Annual revenue of the account" }
|
|
10040
10087
|
},
|
|
10041
10088
|
// AcquisitionChannelProperties: AcquisitionChannel entity.
|
|
10042
10089
|
acquisition_channel: {
|
|
10043
10090
|
channel_type: { type: "string", enum: ["seo", "paid", "social", "referral", "direct", "content"], description: "Category of the acquisition channel" },
|
|
10044
10091
|
customer_acquisition_cost: { type: "number", description: "Customer acquisition cost for this channel" },
|
|
10045
|
-
monthly_volume: { type: "number", description: "Monthly volume of new users from this channel" }
|
|
10092
|
+
monthly_volume: { type: "number", description: "Monthly volume of new users from this channel", modifier: "snapshot" }
|
|
10046
10093
|
},
|
|
10047
10094
|
// AdCreativeProperties: Ad creative.
|
|
10048
10095
|
ad_creative: {
|
|
@@ -10057,7 +10104,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10057
10104
|
// AffinityClusterProperties: Affinity cluster grouping observations.
|
|
10058
10105
|
affinity_cluster: {
|
|
10059
10106
|
theme: { type: "string", description: "Emergent theme label" },
|
|
10060
|
-
child_observation_count: { type: "number", description: "Observations in this cluster" },
|
|
10107
|
+
child_observation_count: { type: "number", description: "Observations in this cluster", modifier: "derived" },
|
|
10061
10108
|
confidence: {
|
|
10062
10109
|
type: "assessment",
|
|
10063
10110
|
scale_id: "confidence_5",
|
|
@@ -10091,7 +10138,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10091
10138
|
hook_event: { type: "string", description: "Event that triggers this hook" },
|
|
10092
10139
|
hook_action: { type: "string", description: "Action performed when the hook fires" },
|
|
10093
10140
|
hook_status: { type: "string", enum: ["active", "disabled", "error"], description: "Operational status of the hook" },
|
|
10094
|
-
execution_count: { type: "number", description: "Number of times this hook has fired" }
|
|
10141
|
+
execution_count: { type: "number", description: "Number of times this hook has fired", modifier: "snapshot" }
|
|
10095
10142
|
},
|
|
10096
10143
|
// AgentSessionProperties: Agent session.
|
|
10097
10144
|
agent_session: {
|
|
@@ -10108,7 +10155,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10108
10155
|
agent_skill: {
|
|
10109
10156
|
skill_trigger: { type: "string", description: "Event or command that activates this skill" },
|
|
10110
10157
|
skill_description: { type: "string", description: "Human-readable description of what the skill does" },
|
|
10111
|
-
invocation_count: { type: "number", description: "Number of times this skill has been invoked" }
|
|
10158
|
+
invocation_count: { type: "number", description: "Number of times this skill has been invoked", modifier: "snapshot" }
|
|
10112
10159
|
},
|
|
10113
10160
|
// AgentTaskProperties: Agent task. A discrete task assigned to an agent.
|
|
10114
10161
|
agent_task: {
|
|
@@ -10140,7 +10187,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10140
10187
|
ai_dataset: {
|
|
10141
10188
|
dataset_type: { type: "string", enum: ["training", "evaluation", "fine_tuning", "rlhf", "synthetic"], description: "Purpose" },
|
|
10142
10189
|
version: { type: "string", description: "Version" },
|
|
10143
|
-
record_count: { type: "number", description: "Records" },
|
|
10190
|
+
record_count: { type: "number", description: "Records", modifier: "snapshot" },
|
|
10144
10191
|
format: { type: "string", description: 'Format (e.g. "jsonl", "csv", "parquet")' },
|
|
10145
10192
|
storage_uri: { type: "string", description: "Storage URI" },
|
|
10146
10193
|
checksum: { type: "string", description: "Integrity hash" },
|
|
@@ -10165,7 +10212,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10165
10212
|
ai_guardrail: {
|
|
10166
10213
|
guardrail_type: { type: "string", enum: ["content_filter", "rate_limit", "token_limit", "safety", "custom"], description: "Protection category" },
|
|
10167
10214
|
enforcement: { type: "string", enum: ["block", "warn", "log"], description: "Action when triggered" },
|
|
10168
|
-
trigger_count: { type: "number", description: "Times triggered" }
|
|
10215
|
+
trigger_count: { type: "number", description: "Times triggered", modifier: "snapshot" }
|
|
10169
10216
|
},
|
|
10170
10217
|
// AiModelProperties: AI model.
|
|
10171
10218
|
ai_model: {
|
|
@@ -10173,10 +10220,10 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10173
10220
|
model_id: { type: "string", description: 'Unique model identifier (e.g. "claude-sonnet-4-20250514")' },
|
|
10174
10221
|
model_version: { type: "string", description: "Specific version" },
|
|
10175
10222
|
model_purpose: { type: "string", description: "Intended use case" },
|
|
10176
|
-
cost_per_1k_tokens: { type: "number", description: "Cost per 1,000 tokens" },
|
|
10223
|
+
cost_per_1k_tokens: { type: "number", description: "Cost per 1,000 tokens", modifier: "snapshot" },
|
|
10177
10224
|
context_window: { type: "number", description: "Maximum context window (tokens)" },
|
|
10178
|
-
latency_p50_ms: { type: "number", description: "Median latency (p50, ms)" },
|
|
10179
|
-
latency_p99_ms: { type: "number", description: "Tail latency (p99, ms)" },
|
|
10225
|
+
latency_p50_ms: { type: "number", description: "Median latency (p50, ms)", modifier: "snapshot" },
|
|
10226
|
+
latency_p99_ms: { type: "number", description: "Tail latency (p99, ms)", modifier: "snapshot" },
|
|
10180
10227
|
input_schema: { type: "string", description: "Expected input format or schema" },
|
|
10181
10228
|
output_schema: { type: "string", description: "Expected output format or schema" },
|
|
10182
10229
|
aliases: { type: "string[]", description: "Alternative names" },
|
|
@@ -10220,8 +10267,8 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10220
10267
|
// ApiEcosystemProperties: API ecosystem.
|
|
10221
10268
|
api_ecosystem: {
|
|
10222
10269
|
api_style: { type: "string", enum: ["rest", "graphql", "grpc", "webhook", "mixed"], description: "Primary API architecture style" },
|
|
10223
|
-
developer_count: { type: "number", description: "Number of registered developers" },
|
|
10224
|
-
app_count: { type: "number", description: "Number of apps built on the API" }
|
|
10270
|
+
developer_count: { type: "number", description: "Number of registered developers", modifier: "snapshot" },
|
|
10271
|
+
app_count: { type: "number", description: "Number of apps built on the API", modifier: "derived" }
|
|
10225
10272
|
},
|
|
10226
10273
|
// ApiEndpointProperties: API endpoint.
|
|
10227
10274
|
api_endpoint: {
|
|
@@ -10284,15 +10331,14 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10284
10331
|
source: { type: "string", enum: ["clickstream", "survey", "interview", "mixed", "inferred", "imported"], description: "Membership data source. Drives confidence weighting and refresh policy." },
|
|
10285
10332
|
included_behaviors: { type: "string[]", description: "Qualifying behaviours (positive criteria, free-text labels)" },
|
|
10286
10333
|
excluded_behaviors: { type: "string[]", description: "Excluding behaviours (negative criteria, free-text labels)" },
|
|
10287
|
-
size_estimate: { type: "number", description: "Estimated current size. Snapshot value." },
|
|
10288
|
-
size: { type: "number", description: "Size. Alias retained for the v0.2 baseline." },
|
|
10334
|
+
size_estimate: { type: "number", description: "Estimated current size. Snapshot value. (`size`, the v0.2 alias, removed in 0.14.0, UPG-574.)" },
|
|
10289
10335
|
validity_period_start: { type: "string", description: "ISO start of the validity window. Behavioural definitions decay; outside the window the snapshot should be re-computed." },
|
|
10290
10336
|
validity_period_end: { type: "string", description: "End of the window over which the segment definition is considered valid (ISO format)" }
|
|
10291
10337
|
},
|
|
10292
10338
|
// BetaProgramProperties: Beta program.
|
|
10293
10339
|
beta_program: {
|
|
10294
10340
|
beta_type: { type: "string", enum: ["closed", "open", "invite_only"], description: "Access model for the beta" },
|
|
10295
|
-
participant_count: { type: "number", description: "Number of users participating in the beta" }
|
|
10341
|
+
participant_count: { type: "number", description: "Number of users participating in the beta", modifier: "snapshot" }
|
|
10296
10342
|
},
|
|
10297
10343
|
// BoundedContextProperties: DDD bounded context.
|
|
10298
10344
|
bounded_context: {
|
|
@@ -10450,7 +10496,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10450
10496
|
// ChurnReasonProperties: Churn reason.
|
|
10451
10497
|
churn_reason: {
|
|
10452
10498
|
category: { type: "string", description: "High-level category of the churn reason" },
|
|
10453
|
-
frequency_count: { type: "number", description: "Exact count of times this reason has been cited in `frequency_period`" },
|
|
10499
|
+
frequency_count: { type: "number", description: "Exact count of times this reason has been cited in `frequency_period`", modifier: "snapshot" },
|
|
10454
10500
|
frequency_period: { type: "string", description: "The recurrence period the count is measured over (ISO-8601 `Duration`, e.g. `'P30D'`)" },
|
|
10455
10501
|
frequency_rating: { type: "string", enum: ["constant", "regular", "occasional", "rare", "other"], description: "Qualitative frequency tier when an exact count is not known" },
|
|
10456
10502
|
contributing_factors: { type: "string[]", description: "Other factors that contributed to the churn" },
|
|
@@ -10465,8 +10511,8 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10465
10511
|
avg_duration: { type: "string", description: 'Average run duration across recent executions. @example "4m 30s", "12 minutes"' },
|
|
10466
10512
|
last_run_status: { type: "string", enum: ["success", "failure", "cancelled", "skipped", "in_progress"], description: "Result of the most recent run. Current health indicator." },
|
|
10467
10513
|
target_branch: { type: "string", description: 'Primary branch. The branch that triggers production deployments. @example "main", "release/*"' },
|
|
10468
|
-
run_count: { type: "number", description: "Total runs since creation. Indicates activity level. @example 1452" },
|
|
10469
|
-
success_rate: { type: "number", description: "Reliability metric for the pipeline itself: % of runs that succeed. @example 94.3" }
|
|
10514
|
+
run_count: { type: "number", description: "Total runs since creation. Indicates activity level. @example 1452", modifier: "snapshot" },
|
|
10515
|
+
success_rate: { type: "number", description: "Reliability metric for the pipeline itself: % of runs that succeed. @example 94.3", modifier: "snapshot" }
|
|
10470
10516
|
},
|
|
10471
10517
|
// ClassificationAxisProperties: ClassificationAxis: a dimension along which subjects are classified.
|
|
10472
10518
|
classification_axis: {
|
|
@@ -10505,8 +10551,8 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10505
10551
|
// CommunityInitiativeProperties: Community initiative.
|
|
10506
10552
|
community_initiative: {
|
|
10507
10553
|
initiative_type: { type: "string", enum: ["forum", "discord", "slack", "meetup", "ambassador", "other"], description: "Platform or format for the community" },
|
|
10508
|
-
member_count: { type: "number", description: "Current number of community members" },
|
|
10509
|
-
engagement_rate: { type: "number", description: "Percentage of members actively participating" }
|
|
10554
|
+
member_count: { type: "number", description: "Current number of community members", modifier: "snapshot" },
|
|
10555
|
+
engagement_rate: { type: "number", description: "Percentage of members actively participating", modifier: "snapshot" }
|
|
10510
10556
|
},
|
|
10511
10557
|
// CompetitiveAnalysisProperties: Competitive analysis exercise or snapshot.
|
|
10512
10558
|
competitive_analysis: {
|
|
@@ -10532,7 +10578,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10532
10578
|
},
|
|
10533
10579
|
// CompetitiveBattleCardProperties: CompetitiveBattleCard entity.
|
|
10534
10580
|
competitive_battle_card: {
|
|
10535
|
-
win_rate: { type: "number", description: "Historical win rate against this competitor (0-100%)" },
|
|
10581
|
+
win_rate: { type: "number", description: "Historical win rate against this competitor (0-100%)", modifier: "snapshot" },
|
|
10536
10582
|
key_differentiators: { type: "string", description: "Summary of key differentiators versus this competitor" }
|
|
10537
10583
|
},
|
|
10538
10584
|
// CompetitorProperties: A product or approach competing for the same user need.
|
|
@@ -10636,7 +10682,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10636
10682
|
content_calendar: {
|
|
10637
10683
|
calendar_period: { type: "string", description: 'Covered period (e.g. "Q2 2026")' },
|
|
10638
10684
|
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'`." },
|
|
10639
|
-
frequency_count: { type: "number", description: "Exact count in the period. Pairs with `frequency_period`." },
|
|
10685
|
+
frequency_count: { type: "number", description: "Exact count in the period. Pairs with `frequency_period`.", modifier: "snapshot" },
|
|
10640
10686
|
frequency_period: { type: "string", description: "Recurrence period (ISO-8601 `Duration`, e.g. `'P7D'`)" },
|
|
10641
10687
|
frequency_rating: { type: "string", enum: ["constant", "regular", "occasional", "rare", "other"], description: "Qualitative rate tier when an exact rate is unknown" }
|
|
10642
10688
|
},
|
|
@@ -10651,7 +10697,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10651
10697
|
content_types: { type: "string[]", description: "Types of content to produce" },
|
|
10652
10698
|
distribution_channels: { type: "string[]", description: "Channels where content will be distributed" },
|
|
10653
10699
|
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'`." },
|
|
10654
|
-
frequency_count: { type: "number", description: "Exact count of publications in the period. Pairs with `frequency_period`." },
|
|
10700
|
+
frequency_count: { type: "number", description: "Exact count of publications in the period. Pairs with `frequency_period`.", modifier: "snapshot" },
|
|
10655
10701
|
frequency_period: { type: "string", description: "Recurrence period (ISO-8601 `Duration`, e.g. `'P7D'`)" },
|
|
10656
10702
|
frequency_rating: { type: "string", enum: ["constant", "regular", "occasional", "rare", "other"], description: "Qualitative rate tier when an exact rate is unknown" }
|
|
10657
10703
|
},
|
|
@@ -10722,7 +10768,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10722
10768
|
stage_type: { type: "string", enum: ["awareness", "acquisition", "activation", "retention", "revenue", "referral"], description: "Which pirate metric (AAARRR) this stage maps to" },
|
|
10723
10769
|
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." },
|
|
10724
10770
|
avg_duration: { type: "string", description: "Average time a customer spends in this stage" },
|
|
10725
|
-
conversion_rate: { type: "number", description: "Percentage of customers who advance to the next stage" }
|
|
10771
|
+
conversion_rate: { type: "number", description: "Percentage of customers who advance to the next stage", modifier: "snapshot" }
|
|
10726
10772
|
},
|
|
10727
10773
|
// CustomerRelationshipProperties: CustomerRelationship.
|
|
10728
10774
|
customer_relationship: {
|
|
@@ -10735,9 +10781,9 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10735
10781
|
tool: { type: "string", enum: ["looker", "amplitude", "mixpanel", "posthog", "custom"], description: "Analytics tool hosting this dashboard" },
|
|
10736
10782
|
url: { type: "string", description: "URL to the live dashboard" },
|
|
10737
10783
|
audience: { type: "string", description: "Intended audience for this dashboard" },
|
|
10738
|
-
element_count: { type: "number", description: "Number of widgets or panels on the dashboard" },
|
|
10784
|
+
element_count: { type: "number", description: "Number of widgets or panels on the dashboard", modifier: "derived" },
|
|
10739
10785
|
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." },
|
|
10740
|
-
filter_count: { type: "number", description: "Number of user-configurable filters" }
|
|
10786
|
+
filter_count: { type: "number", description: "Number of user-configurable filters", modifier: "derived" }
|
|
10741
10787
|
},
|
|
10742
10788
|
// DataClassificationProperties: Data classification.
|
|
10743
10789
|
data_classification: {
|
|
@@ -10775,9 +10821,9 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10775
10821
|
data_model: {
|
|
10776
10822
|
schema_name: { type: "string", description: "Name of the schema this model belongs to" },
|
|
10777
10823
|
database_name: { type: "string", description: "Name of the database containing this model" },
|
|
10778
|
-
table_count: { type: "number", description: "Number of tables in the model" },
|
|
10779
|
-
column_count: { type: "number", description: "Total number of columns across all tables" },
|
|
10780
|
-
test_count: { type: "number", description: "Number of data tests defined for this model" },
|
|
10824
|
+
table_count: { type: "number", description: "Number of tables in the model", modifier: "derived" },
|
|
10825
|
+
column_count: { type: "number", description: "Total number of columns across all tables", modifier: "derived" },
|
|
10826
|
+
test_count: { type: "number", description: "Number of data tests defined for this model", modifier: "derived" },
|
|
10781
10827
|
model_type: { type: "string", enum: ["relational", "document", "graph", "time_series"], description: "Database paradigm used" },
|
|
10782
10828
|
materialization: { type: "string", enum: ["view", "table", "incremental", "ephemeral", "materialized_view"], description: "How the model is materialised in the warehouse" },
|
|
10783
10829
|
meta: { type: "object", description: "Arbitrary metadata key-value pairs" },
|
|
@@ -10789,7 +10835,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10789
10835
|
schedule: { type: "string", description: "Cron or scheduling expression" },
|
|
10790
10836
|
avg_runtime: { type: "string", description: "Average wall-clock runtime per execution" },
|
|
10791
10837
|
orchestrator: { type: "string", description: 'Orchestration tool (e.g. "Airflow", "Dagster", "dbt Cloud")' },
|
|
10792
|
-
retry_count: { type: "number", description: "Number of automatic retries on failure" },
|
|
10838
|
+
retry_count: { type: "number", description: "Number of automatic retries on failure", modifier: "snapshot" },
|
|
10793
10839
|
retry_delay_seconds: { type: "number", description: "Delay between retries in seconds" },
|
|
10794
10840
|
timeout_seconds: { type: "number", description: "Maximum allowed runtime in seconds before timeout" },
|
|
10795
10841
|
trigger_rule: { type: "string", description: "Rule that determines when this pipeline triggers" },
|
|
@@ -10822,7 +10868,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10822
10868
|
schema_version: { type: "string", description: "Current schema version" },
|
|
10823
10869
|
migration_status: { type: "string", enum: ["current", "pending", "failed"], description: "Pending-migration status" },
|
|
10824
10870
|
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." },
|
|
10825
|
-
table_count: { type: "number", description: "Tables or collections in this schema. Useful for migration scope estimation." }
|
|
10871
|
+
table_count: { type: "number", description: "Tables or collections in this schema. Useful for migration scope estimation.", modifier: "derived" }
|
|
10826
10872
|
},
|
|
10827
10873
|
// DealProperties: Deal.
|
|
10828
10874
|
deal: {
|
|
@@ -10857,7 +10903,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10857
10903
|
},
|
|
10858
10904
|
// DepartmentProperties: Department entity.
|
|
10859
10905
|
department: {
|
|
10860
|
-
headcount: { type: "number", description: "Total number of people in the department" },
|
|
10906
|
+
headcount: { type: "number", description: "Total number of people in the department", modifier: "snapshot" },
|
|
10861
10907
|
budget: { type: "number", description: "Annual budget allocated to the department" },
|
|
10862
10908
|
department_mission: { type: "string", description: "Charter / purpose statement for the department" },
|
|
10863
10909
|
leader: { type: "string", description: "Department leader (person or role reference). Promote to a `node_owned_by_person` edge if ownership must be queryable." },
|
|
@@ -10902,8 +10948,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10902
10948
|
guideline_category: { type: "string", enum: ["spacing", "color", "typography", "layout", "interaction", "content"], description: "Category covered" },
|
|
10903
10949
|
applies_to: { type: "string", description: "Applicable elements or contexts" },
|
|
10904
10950
|
rationale: { type: "string", description: "Reasoning. Why this rule exists." },
|
|
10905
|
-
rule_strength: { type: "string", enum: ["must", "must_not", "exception", "warning", "guideline"], description: "Imperative force.
|
|
10906
|
-
strictness: { type: "string", enum: ["must", "should", "may"], description: "RFC-2119-flavoured binding strength" },
|
|
10951
|
+
rule_strength: { type: "string", enum: ["must", "must_not", "exception", "warning", "guideline"], description: "Imperative force. (Superseded the removed `strictness` field in 0.14.0, UPG-574.)" },
|
|
10907
10952
|
exception_policy: { type: "string", description: "Exception request or documentation process" }
|
|
10908
10953
|
},
|
|
10909
10954
|
// DesignPatternProperties: Reusable design pattern.
|
|
@@ -10987,7 +11032,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10987
11032
|
// DeveloperPortalProperties: Developer portal.
|
|
10988
11033
|
developer_portal: {
|
|
10989
11034
|
portal_url: { type: "string", description: "URL of the developer portal" },
|
|
10990
|
-
doc_count: { type: "number", description: "Number of documentation pages" },
|
|
11035
|
+
doc_count: { type: "number", description: "Number of documentation pages", modifier: "derived" },
|
|
10991
11036
|
sandbox_available: { type: "boolean", description: "Whether a sandbox environment is available" }
|
|
10992
11037
|
},
|
|
10993
11038
|
// DiscountStrategyProperties: Discount strategy.
|
|
@@ -10995,7 +11040,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10995
11040
|
discount_type: { type: "string", enum: ["percentage", "fixed", "tiered", "bundle"], description: "How the discount is applied" },
|
|
10996
11041
|
discount_percentage: { type: "number", description: "Discount amount as a percentage (0-100)" },
|
|
10997
11042
|
valid_until: { type: "string", description: "Expiration date of the discount (ISO format)" },
|
|
10998
|
-
redemption_count: { type: "number", description: "Number of times this discount has been redeemed" }
|
|
11043
|
+
redemption_count: { type: "number", description: "Number of times this discount has been redeemed", modifier: "snapshot" }
|
|
10999
11044
|
},
|
|
11000
11045
|
// DistributionChannelProperties: DistributionChannel.
|
|
11001
11046
|
distribution_channel: {
|
|
@@ -11011,7 +11056,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
11011
11056
|
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" },
|
|
11012
11057
|
author: { type: "string", description: "Author (free-form: name, email, or handle). Promote to a `node_owned_by_person` edge if ownership must be queryable." },
|
|
11013
11058
|
last_updated: { type: "string", description: "ISO 8601 last-meaningful-update" },
|
|
11014
|
-
word_count: { type: "number", description: "Approximate word count. Useful for planning, indexing, summarisation." },
|
|
11059
|
+
word_count: { type: "number", description: "Approximate word count. Useful for planning, indexing, summarisation.", modifier: "snapshot" },
|
|
11015
11060
|
content_summary: { type: "string", description: "1\u20133 sentence summary. Drives previews, search snippets, embedding context." },
|
|
11016
11061
|
language: { type: "string", description: 'Primary language (BCP 47 tag, e.g. "en", "en-GB", "fr")' }
|
|
11017
11062
|
},
|
|
@@ -11039,9 +11084,9 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
11039
11084
|
// EmailSequenceProperties: Email sequence.
|
|
11040
11085
|
email_sequence: {
|
|
11041
11086
|
sequence_type: { type: "string", enum: ["onboarding", "nurture", "re_engagement", "sales", "other"], description: "Purpose of the email sequence" },
|
|
11042
|
-
email_count: { type: "number", description: "Number of emails in the sequence" },
|
|
11043
|
-
open_rate: { type: "number", description: "Average open rate across the sequence (0-1)" },
|
|
11044
|
-
click_rate: { type: "number", description: "Average click-through rate across the sequence (0-1)" }
|
|
11087
|
+
email_count: { type: "number", description: "Number of emails in the sequence", modifier: "derived" },
|
|
11088
|
+
open_rate: { type: "number", description: "Average open rate across the sequence (0-1)", modifier: "snapshot" },
|
|
11089
|
+
click_rate: { type: "number", description: "Average click-through rate across the sequence (0-1)", modifier: "snapshot" }
|
|
11045
11090
|
},
|
|
11046
11091
|
// EpicProperties: A collection of related user stories that delivers a feature or capability.
|
|
11047
11092
|
epic: {
|
|
@@ -11053,15 +11098,15 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
11053
11098
|
},
|
|
11054
11099
|
// ErrorBudgetProperties: Error budget.
|
|
11055
11100
|
error_budget: {
|
|
11056
|
-
budget_remaining: { type: "number", description: "Remaining budget percentage (0\u2013100). @example 45.2 (45.2% remaining, 54.8% used)" },
|
|
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." },
|
|
11101
|
+
budget_remaining: { type: "number", description: "Remaining budget percentage (0\u2013100). @example 45.2 (45.2% remaining, 54.8% used)", modifier: "snapshot" },
|
|
11102
|
+
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" },
|
|
11058
11103
|
policy: { type: "string", description: 'Policy when the budget hits 0%. @example "Freeze all non-reliability deploys", "Page engineering lead immediately"' },
|
|
11059
11104
|
budget_window: { type: "string", description: 'Budget window. Defines reset cadence. @example "30 days", "rolling 28 days"' }
|
|
11060
11105
|
},
|
|
11061
11106
|
// EvalBenchmarkProperties: Evaluation benchmark.
|
|
11062
11107
|
eval_benchmark: {
|
|
11063
11108
|
benchmark_type: { type: "string", enum: ["accuracy", "latency", "cost", "safety", "custom"], description: "Measured dimension" },
|
|
11064
|
-
test_case_count: { type: "number", description: "Test cases in the suite" },
|
|
11109
|
+
test_case_count: { type: "number", description: "Test cases in the suite", modifier: "derived" },
|
|
11065
11110
|
passing_threshold: { type: "number", description: "Minimum passing score" },
|
|
11066
11111
|
last_run: { type: "string", description: "ISO date of the most recent run" }
|
|
11067
11112
|
},
|
|
@@ -11083,7 +11128,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
11083
11128
|
event_type: { type: "string", enum: ["conference", "webinar", "meetup", "workshop", "trade_show", "other"], description: "Format of the event" },
|
|
11084
11129
|
event_date: { type: "string", description: "Date of the event (ISO format)" },
|
|
11085
11130
|
location: { type: "string", description: "Venue or virtual platform" },
|
|
11086
|
-
attendee_count: { type: "number", description: "Number of attendees" }
|
|
11131
|
+
attendee_count: { type: "number", description: "Number of attendees", modifier: "snapshot" }
|
|
11087
11132
|
},
|
|
11088
11133
|
// EventSchemaProperties: EventSchema entity.
|
|
11089
11134
|
event_schema: {
|
|
@@ -11246,7 +11291,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
11246
11291
|
feature_flag: {
|
|
11247
11292
|
key: { type: "string", description: 'Required. Stable flag key used in code (e.g. "new-checkout-flow").' },
|
|
11248
11293
|
flag_status: { type: "string", enum: ["on", "off", "rollout"], description: "Activation state. `on` = enabled for all. `off` = disabled for all. `rollout` = partial via targeting_rules." },
|
|
11249
|
-
rollout_pct: { type: "number", description: "Percentage enabled (0\u2013100). Meaningful when `flag_status === 'rollout'`." },
|
|
11294
|
+
rollout_pct: { type: "number", description: "Percentage enabled (0\u2013100). Meaningful when `flag_status === 'rollout'`.", modifier: "snapshot" },
|
|
11250
11295
|
targeting_rules: { type: "string", description: "Human-readable targeting rules. Full rule evaluation happens in the flag service." },
|
|
11251
11296
|
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." },
|
|
11252
11297
|
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." },
|
|
@@ -11256,7 +11301,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
11256
11301
|
// FeatureRequestProperties: Feature request raised by customer, prospect, or internal stakeholder.
|
|
11257
11302
|
feature_request: {
|
|
11258
11303
|
request_source: { type: "string", enum: ["customer", "internal", "prospect", "support", "community"], description: "Where the request originated" },
|
|
11259
|
-
vote_count: { type: "number", description: "Number of votes or upvotes from users" },
|
|
11304
|
+
vote_count: { type: "number", description: "Number of votes or upvotes from users", modifier: "snapshot" },
|
|
11260
11305
|
signal_sentiment: { type: "string", enum: ["positive", "neutral", "negative", "mixed"], description: "Detected sentiment of the request" },
|
|
11261
11306
|
signal_channel: { type: "string", description: "Channel through which the request was received" },
|
|
11262
11307
|
signal_urgency: { type: "string", enum: ["low", "medium", "high", "critical"], description: "Perceived urgency of the request" },
|
|
@@ -11314,7 +11359,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
11314
11359
|
},
|
|
11315
11360
|
// FeedbackVoteProperties: Feedback vote.
|
|
11316
11361
|
feedback_vote: {
|
|
11317
|
-
vote_count: { type: "number", description: "Total number of votes cast" },
|
|
11362
|
+
vote_count: { type: "number", description: "Total number of votes cast", modifier: "snapshot" },
|
|
11318
11363
|
mrr_impact: { type: "number", description: "Combined MRR of voting accounts" }
|
|
11319
11364
|
},
|
|
11320
11365
|
// FixProperties: Specific change that resolved an issue.
|
|
@@ -11354,13 +11399,13 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
11354
11399
|
funnel: {
|
|
11355
11400
|
funnel_type: { type: "string", enum: ["acquisition", "activation", "retention", "revenue", "referral", "custom"], description: "Which stage of the customer lifecycle this funnel measures" },
|
|
11356
11401
|
step_count: { type: "number", description: "Number of steps in the funnel", modifier: "derived" },
|
|
11357
|
-
overall_conversion_rate: { type: "number", description: "End-to-end conversion rate through the funnel (0-1)" }
|
|
11402
|
+
overall_conversion_rate: { type: "number", description: "End-to-end conversion rate through the funnel (0-1)", modifier: "snapshot" }
|
|
11358
11403
|
},
|
|
11359
11404
|
// FunnelStepProperties: FunnelStep entity.
|
|
11360
11405
|
funnel_step: {
|
|
11361
11406
|
step_index: { type: "number", description: "Position of this step in the funnel (0-indexed)" },
|
|
11362
|
-
conversion_rate: { type: "number", description: "Percentage of users who advance from this step" },
|
|
11363
|
-
drop_off_rate: { type: "number", description: "Percentage of users who leave at this step" }
|
|
11407
|
+
conversion_rate: { type: "number", description: "Percentage of users who advance from this step", modifier: "snapshot" },
|
|
11408
|
+
drop_off_rate: { type: "number", description: "Percentage of users who leave at this step", modifier: "snapshot" }
|
|
11364
11409
|
},
|
|
11365
11410
|
// GlossaryTermProperties: GlossaryTerm entity.
|
|
11366
11411
|
glossary_term: {
|
|
@@ -11535,7 +11580,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
11535
11580
|
// InterviewGuideProperties: Interview guide document.
|
|
11536
11581
|
interview_guide: {
|
|
11537
11582
|
guide_type: { type: "string", enum: ["structured", "semi_structured", "unstructured"], description: "Format structure" },
|
|
11538
|
-
question_count: { type: "number", description: "Total questions" },
|
|
11583
|
+
question_count: { type: "number", description: "Total questions", modifier: "derived" },
|
|
11539
11584
|
duration_minutes: { type: "number", description: "Expected length (minutes)" }
|
|
11540
11585
|
},
|
|
11541
11586
|
// InvestigationProperties: Active thread of inquiry: debugging, architecture exploration, RCA.
|
|
@@ -11692,7 +11737,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
11692
11737
|
key_activity: {
|
|
11693
11738
|
activity_type: { type: "string", enum: ["production", "problem_solving", "platform", "network"], description: "Activity nature" },
|
|
11694
11739
|
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`.' },
|
|
11695
|
-
frequency_count: { type: "number", description: "Exact count of runs in the period. Pairs with `frequency_period`." },
|
|
11740
|
+
frequency_count: { type: "number", description: "Exact count of runs in the period. Pairs with `frequency_period`.", modifier: "snapshot" },
|
|
11696
11741
|
frequency_period: { type: "string", description: "Recurrence period (ISO-8601 `Duration`, e.g. `'P7D'`)" },
|
|
11697
11742
|
frequency_rating: { type: "string", enum: ["constant", "regular", "occasional", "rare", "other"], description: "Qualitative tier. Use when an exact rate is unknown." },
|
|
11698
11743
|
operational_owner: { type: "string", description: "Operationally accountable team or individual. Promote to a `node_owned_by_team` edge if ownership must be queryable." },
|
|
@@ -11720,7 +11765,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
11720
11765
|
},
|
|
11721
11766
|
// KeyResultProperties: A measurable result under an objective. The KR in OKR.
|
|
11722
11767
|
key_result: {
|
|
11723
|
-
current_value: { type: "number", description: "Most recent observed value" },
|
|
11768
|
+
current_value: { type: "number", description: "Most recent observed value", modifier: "snapshot" },
|
|
11724
11769
|
target_value: { type: "number", description: "Value for full achievement" },
|
|
11725
11770
|
unit: { type: "string", description: 'Display unit (e.g. "%", "users", "\xA3")' }
|
|
11726
11771
|
},
|
|
@@ -11753,9 +11798,9 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
11753
11798
|
learning_path: {
|
|
11754
11799
|
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." },
|
|
11755
11800
|
path_difficulty: { type: "string", enum: ["beginner", "intermediate", "advanced"], description: "Overall difficulty level of the learning path" },
|
|
11756
|
-
item_count: { type: "number", description: "Number of items (tutorials, videos, etc.) in the path" },
|
|
11801
|
+
item_count: { type: "number", description: "Number of items (tutorials, videos, etc.) in the path", modifier: "derived" },
|
|
11757
11802
|
estimated_hours: { type: "number", description: "Estimated total hours to complete the path" },
|
|
11758
|
-
completion_rate: { type: "number", description: "Percentage of users who complete the full path" }
|
|
11803
|
+
completion_rate: { type: "number", description: "Percentage of users who complete the full path", modifier: "snapshot" }
|
|
11759
11804
|
},
|
|
11760
11805
|
// LegalEntityProperties: Legal entity.
|
|
11761
11806
|
legal_entity: {
|
|
@@ -11773,7 +11818,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
11773
11818
|
dep_type: { type: "string", enum: ["runtime", "dev", "peer", "optional"], description: "Dependency classification" },
|
|
11774
11819
|
license: { type: "string", description: "SPDX license identifier" },
|
|
11775
11820
|
is_outdated: { type: "boolean", description: "Whether a newer version is available" },
|
|
11776
|
-
vulnerability_count: { type: "number", description: "Known vulnerabilities in the installed version. Populated from npm audit, Snyk, etc." }
|
|
11821
|
+
vulnerability_count: { type: "number", description: "Known vulnerabilities in the installed version. Populated from npm audit, Snyk, etc.", modifier: "snapshot" }
|
|
11777
11822
|
},
|
|
11778
11823
|
// LocaleProperties: Locale.
|
|
11779
11824
|
locale: {
|
|
@@ -11793,7 +11838,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
11793
11838
|
// MarketSegmentProperties: MarketSegment entity.
|
|
11794
11839
|
market_segment: {
|
|
11795
11840
|
segment_size: { type: "number", description: "Potential customers in this segment" },
|
|
11796
|
-
growth_rate: { type: "number", description: "YoY growth rate as a decimal. @example 0.15 represents 15%" },
|
|
11841
|
+
growth_rate: { type: "number", description: "YoY growth rate as a decimal. @example 0.15 represents 15%", modifier: "snapshot" },
|
|
11797
11842
|
tam: { type: "number", description: "Total Addressable Market (currency units)" },
|
|
11798
11843
|
sam: { type: "number", description: "Serviceable Addressable Market (currency units)" }
|
|
11799
11844
|
},
|
|
@@ -11851,7 +11896,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
11851
11896
|
// MarketingChannelProperties: Marketing channel.
|
|
11852
11897
|
marketing_channel: {
|
|
11853
11898
|
channel_type: { type: "string", enum: ["social", "email", "seo", "sem", "content", "events", "other"], description: "Category of marketing channel" },
|
|
11854
|
-
monthly_budget: { type: "number", description: "Monthly spend allocated to this channel" },
|
|
11899
|
+
monthly_budget: { type: "number", description: "Monthly spend allocated to this channel", modifier: "snapshot" },
|
|
11855
11900
|
roi: { type: "number", description: "Return on investment ratio" },
|
|
11856
11901
|
channel_status: { type: "string", enum: ["active", "paused", "deprecated"], description: "Operational status of the channel" }
|
|
11857
11902
|
},
|
|
@@ -11886,7 +11931,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
11886
11931
|
impact_level: { type: "string", enum: ["impact", "outcome", "output"], description: "Where this metric sits in the impact hierarchy" },
|
|
11887
11932
|
indicator_direction: { type: "string", enum: ["leading", "lagging"], description: "Whether this metric leads or lags the behaviour it measures" },
|
|
11888
11933
|
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" },
|
|
11889
|
-
current_value: { type: "number", description: "Most recent observed value" },
|
|
11934
|
+
current_value: { type: "number", description: "Most recent observed value", modifier: "snapshot" },
|
|
11890
11935
|
target_value: { type: "number", description: "Value we are aiming to reach" },
|
|
11891
11936
|
unit: { type: "string", description: 'Display unit for the metric value (e.g. "%", "ms", "\xA3")' },
|
|
11892
11937
|
range_min: { type: "number", description: "Minimum expected or baseline value" },
|
|
@@ -11984,11 +12029,11 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
11984
12029
|
nps_campaign: {
|
|
11985
12030
|
campaign_type: { type: "string", enum: ["relationship", "transactional", "feature"], description: "What triggers the NPS survey" },
|
|
11986
12031
|
send_date: { type: "string", description: "Date the survey was sent (ISO format)" },
|
|
11987
|
-
response_count: { type: "number", description: "Number of responses received" },
|
|
11988
|
-
response_rate: { type: "number", description: "Percentage of recipients who responded" },
|
|
12032
|
+
response_count: { type: "number", description: "Number of responses received", modifier: "snapshot" },
|
|
12033
|
+
response_rate: { type: "number", description: "Percentage of recipients who responded", modifier: "snapshot" },
|
|
11989
12034
|
score: { type: "number", description: "Net Promoter Score (-100 to 100)" },
|
|
11990
|
-
promoters_pct: { type: "number", description: "Percentage of respondents who are promoters (9-10)" },
|
|
11991
|
-
detractors_pct: { type: "number", description: "Percentage of respondents who are detractors (0-6)" }
|
|
12035
|
+
promoters_pct: { type: "number", description: "Percentage of respondents who are promoters (9-10)", modifier: "snapshot" },
|
|
12036
|
+
detractors_pct: { type: "number", description: "Percentage of respondents who are detractors (0-6)", modifier: "snapshot" }
|
|
11992
12037
|
},
|
|
11993
12038
|
// ObjectionProperties: Objection entity.
|
|
11994
12039
|
objection: {
|
|
@@ -12030,46 +12075,11 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
12030
12075
|
rotation_cadence: { type: "string", enum: ["daily", "weekly", "biweekly", "custom"], description: "Cycle cadence. `weekly` for standard team rotations. `daily` for high-incident-volume teams." },
|
|
12031
12076
|
handoff_time: { type: "string", description: 'Shift handoff time. Affects team coordination and sleep. @example "09:00 UTC", "17:00 local"' }
|
|
12032
12077
|
},
|
|
12033
|
-
// OpportunityProperties: A problem worth solving, grounded in user need and business value
|
|
12034
|
-
|
|
12035
|
-
|
|
12036
|
-
|
|
12037
|
-
|
|
12038
|
-
description: "How many users experience this problem. @deprecated 0.9.0:a framework-scoped scoring input, not an intrinsic property. Apply the `opportunity-sizing` framework; the value lives on the framework_exercise includes-edge. Removed in 0.9.1.",
|
|
12039
|
-
properties: {
|
|
12040
|
-
value: { type: "number", description: "The numeric value, used for computation." },
|
|
12041
|
-
label: { type: "string", description: "The qualitative label (what the assessor meant)." },
|
|
12042
|
-
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)." },
|
|
12043
|
-
normalized: { type: "number", description: "Normalized 0-1 value for cross-tool comparison (optional)." }
|
|
12044
|
-
},
|
|
12045
|
-
required: ["value", "label"]
|
|
12046
|
-
},
|
|
12047
|
-
frequency: {
|
|
12048
|
-
type: "assessment",
|
|
12049
|
-
scale_id: "frequency_5",
|
|
12050
|
-
description: "How often users experience this problem. @deprecated 0.9.0:framework-scoped (opportunity-sizing). Removed in 0.9.1.",
|
|
12051
|
-
properties: {
|
|
12052
|
-
value: { type: "number", description: "The numeric value, used for computation." },
|
|
12053
|
-
label: { type: "string", description: "The qualitative label (what the assessor meant)." },
|
|
12054
|
-
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)." },
|
|
12055
|
-
normalized: { type: "number", description: "Normalized 0-1 value for cross-tool comparison (optional)." }
|
|
12056
|
-
},
|
|
12057
|
-
required: ["value", "label"]
|
|
12058
|
-
},
|
|
12059
|
-
pain: {
|
|
12060
|
-
type: "assessment",
|
|
12061
|
-
scale_id: "pain_5",
|
|
12062
|
-
description: "How painful it is when unaddressed. @deprecated 0.9.0:framework-scoped (opportunity-sizing). Removed in 0.9.1.",
|
|
12063
|
-
properties: {
|
|
12064
|
-
value: { type: "number", description: "The numeric value, used for computation." },
|
|
12065
|
-
label: { type: "string", description: "The qualitative label (what the assessor meant)." },
|
|
12066
|
-
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)." },
|
|
12067
|
-
normalized: { type: "number", description: "Normalized 0-1 value for cross-tool comparison (optional)." }
|
|
12068
|
-
},
|
|
12069
|
-
required: ["value", "label"]
|
|
12070
|
-
},
|
|
12071
|
-
opportunity_score: { type: "number", description: "Computed: normalized_reach x normalized_frequency x normalized_pain (0-1). @deprecated 0.9.0:computed by the `opportunity-sizing` framework on its application edge, not stored on the entity. Removed in 0.9.1." }
|
|
12072
|
-
},
|
|
12078
|
+
// OpportunityProperties: A problem worth solving, grounded in user need and business value.
|
|
12079
|
+
// No intrinsic scalar properties — defined by edges + framework-scoped scoring
|
|
12080
|
+
// (reach/frequency/pain/opportunity_score live on the `opportunity-sizing`
|
|
12081
|
+
// framework_exercise edge). Former props removed in 0.14.0 (UPG-574).
|
|
12082
|
+
opportunity: {},
|
|
12073
12083
|
// OrganizationProperties: Organization entity.
|
|
12074
12084
|
organization: {
|
|
12075
12085
|
logo_url: { type: "string", description: "URL of the organisation's logo" },
|
|
@@ -12145,14 +12155,14 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
12145
12155
|
paywall: {
|
|
12146
12156
|
paywall_type: { type: "string", enum: ["hard", "soft", "metered", "freemium_gate"], description: "How restrictive the paywall is" },
|
|
12147
12157
|
trigger: { type: "string", description: "User action or threshold that triggers the paywall" },
|
|
12148
|
-
conversion_rate: { type: "number", description: "Percentage of users who convert at this paywall" }
|
|
12158
|
+
conversion_rate: { type: "number", description: "Percentage of users who convert at this paywall", modifier: "snapshot" }
|
|
12149
12159
|
},
|
|
12150
12160
|
// PenetrationTestProperties: Penetration test.
|
|
12151
12161
|
penetration_test: {
|
|
12152
12162
|
category: { type: "string", enum: ["external", "internal", "web_app", "api", "mobile"], description: "Test type" },
|
|
12153
12163
|
scope: { type: "string", description: "Systems or features in scope" },
|
|
12154
|
-
findings_count: { type: "number", description: "Total findings" },
|
|
12155
|
-
critical_count: { type: "number", description: "Critical-severity findings" },
|
|
12164
|
+
findings_count: { type: "number", description: "Total findings", modifier: "derived" },
|
|
12165
|
+
critical_count: { type: "number", description: "Critical-severity findings", modifier: "derived" },
|
|
12156
12166
|
start_date: { type: "string", description: "ISO start date" },
|
|
12157
12167
|
end_date: { type: "string", description: "ISO end date" },
|
|
12158
12168
|
report_url: { type: "string", description: "Full report URL" },
|
|
@@ -12183,7 +12193,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
12183
12193
|
// PipelineStageProperties: Pipeline stage.
|
|
12184
12194
|
pipeline_stage: {
|
|
12185
12195
|
stage_order: { type: "number", description: "Position of this stage in the pipeline sequence" },
|
|
12186
|
-
conversion_rate: { type: "number", description: "Percentage of deals that advance from this stage" },
|
|
12196
|
+
conversion_rate: { type: "number", description: "Percentage of deals that advance from this stage", modifier: "snapshot" },
|
|
12187
12197
|
avg_days_in_stage: { type: "number", description: "Average number of days deals spend in this stage" }
|
|
12188
12198
|
},
|
|
12189
12199
|
// PlaybookProperties: Customer success playbook.
|
|
@@ -12408,7 +12418,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
12408
12418
|
// ResearchStudyProperties: Structured user research activity.
|
|
12409
12419
|
research_study: {
|
|
12410
12420
|
method: { type: "string", enum: ["interview", "usability", "survey", "diary", "analytics"], description: "Research method used to conduct the study" },
|
|
12411
|
-
participant_count: { type: "number", description: "Number of participants recruited or observed" },
|
|
12421
|
+
participant_count: { type: "number", description: "Number of participants recruited or observed", modifier: "snapshot" },
|
|
12412
12422
|
start_date: { type: "string", description: "ISO date when the study starts" },
|
|
12413
12423
|
end_date: { type: "string", description: "ISO date when the study ends" }
|
|
12414
12424
|
},
|
|
@@ -12432,7 +12442,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
12432
12442
|
recurring_revenue: { type: "number", description: "Monthly or annual recurring revenue from this stream" },
|
|
12433
12443
|
billing_model: { type: "string", enum: ["subscription", "usage", "one_time", "tiered", "freemium", "other"], description: "Billing mechanics. May differ from `stream_type`." },
|
|
12434
12444
|
recognition_basis: { type: "string", enum: ["accrual", "cash", "deferred"], description: "Accounting basis for revenue recognition" },
|
|
12435
|
-
arr_contribution_pct: { type: "number", description: "Share of total ARR contributed (0\u2013100)" },
|
|
12445
|
+
arr_contribution_pct: { type: "number", description: "Share of total ARR contributed (0\u2013100)", modifier: "snapshot" },
|
|
12436
12446
|
forecast: { type: "string", description: "Free-text forecast or projection" }
|
|
12437
12447
|
},
|
|
12438
12448
|
// ReviewGateProperties: Review gate.
|
|
@@ -12529,9 +12539,8 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
12529
12539
|
cause_category: { type: "string", enum: ["code", "config", "process", "dependency", "data", "infrastructure", "human_error", "other"], description: "Closed-enum cause category for RCA reporting and dashboards. Distinct from the legacy free-form `category`." },
|
|
12530
12540
|
cause_confidence: { type: "string", enum: ["hypothesised", "likely", "confirmed"], description: "Team certainty about this cause. `hypothesised` = educated guess. `likely` = evidence points here. `confirmed` = reproduced. Renamed from `confidence` in v0.4.0 to disambiguate from the entity-wide `UPGAssessment`-typed epistemic confidence used elsewhere. The 3-tier shape stays as a discrete RCA-lifecycle marker." },
|
|
12531
12541
|
evidence_summary: { type: "string", description: "One-paragraph evidence summary. Log lines, traces, repro steps. Detailed artefacts go on linked `evidence` nodes." },
|
|
12532
|
-
|
|
12533
|
-
|
|
12534
|
-
verified: { type: "boolean", description: "Verified through investigation" }
|
|
12542
|
+
affected_area: { type: "string", description: "Affected area of the system" }
|
|
12543
|
+
// `category` (legacy, -> `cause_category`) and `verified` (= `cause_confidence === 'confirmed'`) removed in 0.14.0 (UPG-574).
|
|
12535
12544
|
},
|
|
12536
12545
|
// RunbookProperties: Runbook.
|
|
12537
12546
|
runbook: {
|
|
@@ -12566,7 +12575,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
12566
12575
|
security_audit: {
|
|
12567
12576
|
audit_scope: { type: "string", description: "Systems or processes covered by the audit" },
|
|
12568
12577
|
audit_status: { type: "string", enum: ["scheduled", "in_progress", "completed"], description: "Current progress of the audit" },
|
|
12569
|
-
findings_count: { type: "number", description: "Total number of findings" },
|
|
12578
|
+
findings_count: { type: "number", description: "Total number of findings", modifier: "derived" },
|
|
12570
12579
|
critical_findings: { type: "number", description: "Number of critical-severity findings" }
|
|
12571
12580
|
},
|
|
12572
12581
|
// SecurityControlProperties: Security control.
|
|
@@ -12611,7 +12620,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
12611
12620
|
search_volume: { type: "number", description: "Estimated monthly search volume" },
|
|
12612
12621
|
difficulty: { type: "number", description: "Keyword difficulty score (0-100)" },
|
|
12613
12622
|
intent: { type: "string", enum: ["informational", "navigational", "commercial", "transactional"], description: "Search intent behind the keyword" },
|
|
12614
|
-
current_rank: { type: "number", description: "Current SERP ranking position" },
|
|
12623
|
+
current_rank: { type: "number", description: "Current SERP ranking position", modifier: "snapshot" },
|
|
12615
12624
|
target_rank: { type: "number", description: "Desired ranking position" }
|
|
12616
12625
|
},
|
|
12617
12626
|
// ServiceProperties: Service or microservice.
|
|
@@ -12655,7 +12664,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
12655
12664
|
service_level_objective: {
|
|
12656
12665
|
target_percentage: { type: "number", description: "Target percentage. The reliability commitment. @example 99.9 (three nines), 99.95, 99.99 (four nines)" },
|
|
12657
12666
|
window: { type: "string", description: 'Evaluation window. @example "30 days", "rolling 28 days", "calendar quarter"' },
|
|
12658
|
-
current_percentage: { type: "number", description: "Current achieved percentage. Compared against `target_percentage` for health. @example 99.92 (above a 99.9 target)" },
|
|
12667
|
+
current_percentage: { type: "number", description: "Current achieved percentage. Compared against `target_percentage` for health. @example 99.92 (above a 99.9 target)", modifier: "snapshot" },
|
|
12659
12668
|
slo_type: { type: "string", enum: ["metric", "monitor", "time_slice"], description: "Measurement mechanism. `metric` = ratio (good/total). `monitor` = monitor-based. `time_slice` = uptime windows." },
|
|
12660
12669
|
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%)" }
|
|
12661
12670
|
},
|
|
@@ -12684,58 +12693,12 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
12684
12693
|
post_type: { type: "string", enum: ["text", "image", "video", "carousel", "story"], description: "Format of the post" },
|
|
12685
12694
|
scheduled_date: { type: "string", description: "Date the post is scheduled to publish (ISO format)" }
|
|
12686
12695
|
},
|
|
12687
|
-
// SolutionProperties: A proposed response to an opportunity
|
|
12696
|
+
// SolutionProperties: A proposed response to an opportunity.
|
|
12697
|
+
// RICE scoring inputs (reach/impact/confidence/effort) + computed rice_score
|
|
12698
|
+
// were framework-scoped from 0.9.0 and removed in 0.14.0 (UPG-574): they live
|
|
12699
|
+
// on the `rice-scoring` framework_exercise edge, not the entity.
|
|
12688
12700
|
solution: {
|
|
12689
|
-
timeline: { type: "string", description: "Estimated delivery or target timeline" }
|
|
12690
|
-
reach: {
|
|
12691
|
-
type: "assessment",
|
|
12692
|
-
scale_id: "reach_5",
|
|
12693
|
-
description: "How many users this solution reaches (1 = few, 5 = most). @deprecated 0.9.0:a framework-scoped scoring input, not an intrinsic property. Apply the `rice-scoring` framework; the value lives on the framework_exercise includes-edge. Removed in 0.9.1.",
|
|
12694
|
-
properties: {
|
|
12695
|
-
value: { type: "number", description: "The numeric value, used for computation." },
|
|
12696
|
-
label: { type: "string", description: "The qualitative label (what the assessor meant)." },
|
|
12697
|
-
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)." },
|
|
12698
|
-
normalized: { type: "number", description: "Normalized 0-1 value for cross-tool comparison (optional)." }
|
|
12699
|
-
},
|
|
12700
|
-
required: ["value", "label"]
|
|
12701
|
-
},
|
|
12702
|
-
impact: {
|
|
12703
|
-
type: "assessment",
|
|
12704
|
-
scale_id: "impact_5",
|
|
12705
|
-
description: "Expected impact on the target outcome (1 = minimal, 5 = transformative). @deprecated 0.9.0:framework-scoped (rice-scoring). Removed in 0.9.1.",
|
|
12706
|
-
properties: {
|
|
12707
|
-
value: { type: "number", description: "The numeric value, used for computation." },
|
|
12708
|
-
label: { type: "string", description: "The qualitative label (what the assessor meant)." },
|
|
12709
|
-
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)." },
|
|
12710
|
-
normalized: { type: "number", description: "Normalized 0-1 value for cross-tool comparison (optional)." }
|
|
12711
|
-
},
|
|
12712
|
-
required: ["value", "label"]
|
|
12713
|
-
},
|
|
12714
|
-
confidence: {
|
|
12715
|
-
type: "assessment",
|
|
12716
|
-
scale_id: "confidence_5",
|
|
12717
|
-
description: "How confident the team is in this solution (1 = speculative, 5 = proven). @deprecated 0.9.0:framework-scoped (rice-scoring). Removed in 0.9.1.",
|
|
12718
|
-
properties: {
|
|
12719
|
-
value: { type: "number", description: "The numeric value, used for computation." },
|
|
12720
|
-
label: { type: "string", description: "The qualitative label (what the assessor meant)." },
|
|
12721
|
-
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)." },
|
|
12722
|
-
normalized: { type: "number", description: "Normalized 0-1 value for cross-tool comparison (optional)." }
|
|
12723
|
-
},
|
|
12724
|
-
required: ["value", "label"]
|
|
12725
|
-
},
|
|
12726
|
-
effort: {
|
|
12727
|
-
type: "assessment",
|
|
12728
|
-
scale_id: "effort_5",
|
|
12729
|
-
description: "Level of effort required to implement (1 = trivial, 5 = very large). @deprecated 0.9.0:effort is a framework-scoped scoring input (it varies by assessor and method), not an intrinsic property. Removed in 0.9.1.",
|
|
12730
|
-
properties: {
|
|
12731
|
-
value: { type: "number", description: "The numeric value, used for computation." },
|
|
12732
|
-
label: { type: "string", description: "The qualitative label (what the assessor meant)." },
|
|
12733
|
-
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)." },
|
|
12734
|
-
normalized: { type: "number", description: "Normalized 0-1 value for cross-tool comparison (optional)." }
|
|
12735
|
-
},
|
|
12736
|
-
required: ["value", "label"]
|
|
12737
|
-
},
|
|
12738
|
-
rice_score: { type: "number", description: "Computed: (reach \xD7 impact \xD7 confidence) / effort. @deprecated 0.9.0:computed by the `rice-scoring` framework on its application edge, not stored on the entity. Removed in 0.9.1." }
|
|
12701
|
+
timeline: { type: "string", description: "Estimated delivery or target timeline" }
|
|
12739
12702
|
},
|
|
12740
12703
|
// SpecificationProperties: A governed specification: a query language, protocol, data format, encoding,
|
|
12741
12704
|
specification: {
|
|
@@ -12803,7 +12766,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
12803
12766
|
},
|
|
12804
12767
|
// SubscriptionProperties: Subscription.
|
|
12805
12768
|
subscription: {
|
|
12806
|
-
monthly_recurring_revenue: { type: "number", description: "Monthly recurring revenue from this subscription" },
|
|
12769
|
+
monthly_recurring_revenue: { type: "number", description: "Monthly recurring revenue from this subscription", modifier: "snapshot" },
|
|
12807
12770
|
start_date: { type: "string", description: "Subscription start date (ISO format)" },
|
|
12808
12771
|
renewal_date: { type: "string", description: "Next renewal date (ISO format)" },
|
|
12809
12772
|
subscription_status: { type: "string", enum: ["active", "trialing", "past_due", "cancelled", "paused"], description: "Current status of the subscription" }
|
|
@@ -12837,8 +12800,8 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
12837
12800
|
},
|
|
12838
12801
|
// SurveyResponseProperties: Aggregated survey response data.
|
|
12839
12802
|
survey_response: {
|
|
12840
|
-
response_count: { type: "number", description: "Total responses" },
|
|
12841
|
-
completion_rate: { type: "number", description: "Completion (0\u20131)" },
|
|
12803
|
+
response_count: { type: "number", description: "Total responses", modifier: "snapshot" },
|
|
12804
|
+
completion_rate: { type: "number", description: "Completion (0\u20131)", modifier: "snapshot" },
|
|
12842
12805
|
method: { type: "string", enum: ["email", "in_app", "phone", "other"], description: "Distribution method" }
|
|
12843
12806
|
},
|
|
12844
12807
|
// SwitchingCostProperties: SwitchingCost entity.
|
|
@@ -12874,7 +12837,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
12874
12837
|
},
|
|
12875
12838
|
required: ["value", "label"]
|
|
12876
12839
|
},
|
|
12877
|
-
frequency_count: { type: "number", description: "Exact observation count in the period. Pairs with `frequency_period` for a precise rate." },
|
|
12840
|
+
frequency_count: { type: "number", description: "Exact observation count in the period. Pairs with `frequency_period` for a precise rate.", modifier: "snapshot" },
|
|
12878
12841
|
frequency_period: { type: "string", description: "Recurrence period (ISO-8601 `Duration`). @example 'P7D' (per week), 'P1D' (per day), 'PT1H' (per hour)" },
|
|
12879
12842
|
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`." },
|
|
12880
12843
|
affected_users_estimate: { type: "number", description: "Approximate count of users affected. Snapshot estimate." },
|
|
@@ -12893,8 +12856,8 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
12893
12856
|
effort: { type: "string", description: 'Effort estimate (e.g. "2h", "1d", "3 points"). Use a consistent unit within your team.' },
|
|
12894
12857
|
priority: { type: "string", enum: ["urgent", "high", "medium", "low", "none"], description: "Relative importance against other tasks" },
|
|
12895
12858
|
due_date: { type: "string", description: "ISO date due. Typically bounded by the containing story's due date." },
|
|
12896
|
-
labels: { type: "string[]", description: "Free-form classification tags. Applied uniformly across work item types." }
|
|
12897
|
-
|
|
12859
|
+
labels: { type: "string[]", description: "Free-form classification tags. Applied uniformly across work item types." }
|
|
12860
|
+
// `estimate` (story_task collapse relic, duplicated `effort`) removed in 0.14.0 (UPG-574).
|
|
12898
12861
|
},
|
|
12899
12862
|
// TeamProperties: Team entity.
|
|
12900
12863
|
team: {
|
|
@@ -12998,13 +12961,13 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
12998
12961
|
// TestSuiteProperties: Test suite.
|
|
12999
12962
|
test_suite: {
|
|
13000
12963
|
suite_type: { type: "string", enum: ["unit", "integration", "e2e", "performance", "security", "accessibility"], description: "Category of test suite" },
|
|
13001
|
-
test_count: { type: "number", description: "Number of tests in the suite" },
|
|
13002
|
-
pass_rate: { type: "number", description: "Percentage of tests passing (0-100)" },
|
|
12964
|
+
test_count: { type: "number", description: "Number of tests in the suite", modifier: "derived" },
|
|
12965
|
+
pass_rate: { type: "number", description: "Percentage of tests passing (0-100)", modifier: "snapshot" },
|
|
13003
12966
|
last_run: { type: "string", description: "ISO date of last execution" },
|
|
13004
12967
|
total_duration_ms: { type: "number", description: "Total execution time for the last run, in milliseconds" },
|
|
13005
|
-
failed_count: { type: "number", description: "Number of tests that failed in the last run" },
|
|
13006
|
-
skipped_count: { type: "number", description: "Number of tests that were skipped in the last run" },
|
|
13007
|
-
flaky_count: { type: "number", description: "Number of tests that passed only on retry (flaky) in the last run" }
|
|
12968
|
+
failed_count: { type: "number", description: "Number of tests that failed in the last run", modifier: "snapshot" },
|
|
12969
|
+
skipped_count: { type: "number", description: "Number of tests that were skipped in the last run", modifier: "snapshot" },
|
|
12970
|
+
flaky_count: { type: "number", description: "Number of tests that passed only on retry (flaky) in the last run", modifier: "snapshot" }
|
|
13008
12971
|
},
|
|
13009
12972
|
// ThreatProperties: Threat.
|
|
13010
12973
|
threat: {
|
|
@@ -13044,7 +13007,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
13044
13007
|
scope: { type: "string", description: 'What system, feature, or data flow is being analysed. @example "user authentication", "payment processing", "admin API"' },
|
|
13045
13008
|
last_reviewed: { type: "string", description: 'ISO date last reviewed. Models become stale as systems evolve. @example "2026-03-01"' },
|
|
13046
13009
|
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.' },
|
|
13047
|
-
threat_count: { type: "number", description: "Threats identified. Key metric for scope and completeness. @example 12" }
|
|
13010
|
+
threat_count: { type: "number", description: "Threats identified. Key metric for scope and completeness. @example 12", modifier: "derived" }
|
|
13048
13011
|
},
|
|
13049
13012
|
// TouchpointProperties: Customer touchpoint.
|
|
13050
13013
|
touchpoint: {
|
|
@@ -13068,14 +13031,14 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
13068
13031
|
trial_config: {
|
|
13069
13032
|
trial_type: { type: "string", enum: ["time_limited", "feature_limited", "usage_limited", "reverse"], description: "How the trial is limited" },
|
|
13070
13033
|
duration_days: { type: "number", description: "Length of the trial period in days" },
|
|
13071
|
-
conversion_rate: { type: "number", description: "Percentage of trial users who convert to paid" }
|
|
13034
|
+
conversion_rate: { type: "number", description: "Percentage of trial users who convert to paid", modifier: "snapshot" }
|
|
13072
13035
|
},
|
|
13073
13036
|
// TutorialProperties: Tutorial.
|
|
13074
13037
|
tutorial: {
|
|
13075
13038
|
tutorial_format: { type: "string", enum: ["written", "video", "interactive", "code_along"], description: "Delivery format of the tutorial" },
|
|
13076
13039
|
difficulty: { type: "string", enum: ["beginner", "intermediate", "advanced"], description: "Skill level required to follow the tutorial" },
|
|
13077
13040
|
duration_minutes: { type: "number", description: "Estimated time to complete in minutes" },
|
|
13078
|
-
completion_rate: { type: "number", description: "Percentage of users who complete the tutorial" }
|
|
13041
|
+
completion_rate: { type: "number", description: "Percentage of users who complete the tutorial", modifier: "snapshot" }
|
|
13079
13042
|
},
|
|
13080
13043
|
// UnitEconomicsProperties: UnitEconomics.
|
|
13081
13044
|
unit_economics: {
|
|
@@ -13086,7 +13049,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
13086
13049
|
},
|
|
13087
13050
|
// UserAdvisoryBoardProperties: User advisory board.
|
|
13088
13051
|
user_advisory_board: {
|
|
13089
|
-
member_count: { type: "number", description: "Number of members on the board" },
|
|
13052
|
+
member_count: { type: "number", description: "Number of members on the board", modifier: "snapshot" },
|
|
13090
13053
|
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." },
|
|
13091
13054
|
board_focus: { type: "string", description: "Primary topic or area the board advises on" }
|
|
13092
13055
|
},
|
|
@@ -13168,9 +13131,9 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
13168
13131
|
// WalkthroughProperties: Product walkthrough.
|
|
13169
13132
|
walkthrough: {
|
|
13170
13133
|
walkthrough_type: { type: "string", enum: ["product_tour", "feature_intro", "tooltip_sequence", "checklist"], description: "Format of the in-product walkthrough" },
|
|
13171
|
-
step_count: { type: "number", description: "Number of steps in the walkthrough" },
|
|
13134
|
+
step_count: { type: "number", description: "Number of steps in the walkthrough", modifier: "derived" },
|
|
13172
13135
|
trigger: { type: "string", description: "User action or event that starts the walkthrough" },
|
|
13173
|
-
completion_rate: { type: "number", description: "Percentage of users who complete the walkthrough" }
|
|
13136
|
+
completion_rate: { type: "number", description: "Percentage of users who complete the walkthrough", modifier: "snapshot" }
|
|
13174
13137
|
},
|
|
13175
13138
|
// WebinarProperties: Webinar.
|
|
13176
13139
|
webinar: {
|
|
@@ -13223,7 +13186,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
13223
13186
|
purpose: { type: "string", description: "Free-text description. Pairs with the closed-enum `workspace_purpose`." },
|
|
13224
13187
|
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." },
|
|
13225
13188
|
owner: { type: "string", description: "Workspace owner (handle or email). Display label; canonical owner is `team_owns_workspace` or `persona_owns_workspace`." },
|
|
13226
|
-
member_count: { type: "number", description: "Snapshot count. `team_works_in_workspace` edges are the source of truth." },
|
|
13189
|
+
member_count: { type: "number", description: "Snapshot count. `team_works_in_workspace` edges are the source of truth.", modifier: "derived" },
|
|
13227
13190
|
archived: { type: "boolean", description: "Archived. Archived workspaces remain queryable but hidden from default views." },
|
|
13228
13191
|
archived_at: { type: "string", description: "ISO timestamp archived. Pairs with `archived === true`." },
|
|
13229
13192
|
icon: { type: "string", description: "Display icon (emoji or icon name)" }
|
|
@@ -29544,7 +29507,7 @@ function isCanonical(text) {
|
|
|
29544
29507
|
}
|
|
29545
29508
|
|
|
29546
29509
|
// src/index.ts
|
|
29547
|
-
var UPG_VERSION = "0.
|
|
29510
|
+
var UPG_VERSION = "0.14.0";
|
|
29548
29511
|
var UPG_FORMAT_VERSION = "0.4.0";
|
|
29549
29512
|
var MARKDOWN_FORMAT_VERSION = "0.1";
|
|
29550
29513
|
var UPG_TYPES = getTypes();
|