@unified-product-graph/core 0.7.5 → 0.8.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 +609 -224
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +260 -139
- package/dist/index.d.ts +260 -139
- package/dist/index.js +607 -224
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -6159,20 +6159,42 @@ var PROPERTY_SCALE_MAP = {
|
|
|
6159
6159
|
// discovery, users, feedback
|
|
6160
6160
|
// ── Severity ─────────────────────────────────────────────────────────────
|
|
6161
6161
|
severity: "severity_5",
|
|
6162
|
-
// users, engineering, ai, gtm, customer-success
|
|
6162
|
+
// users, engineering, ai, gtm, customer-success, security, accessibility
|
|
6163
6163
|
severity_of_finding: "severity_5",
|
|
6164
6164
|
// validation/experiment_run
|
|
6165
|
+
bug_severity: "severity_5",
|
|
6166
|
+
// product-spec/bug (UPG-579 Option C collapse)
|
|
6167
|
+
risk_level: "severity_5",
|
|
6168
|
+
// compliance/risk (UPG-579 Option B)
|
|
6169
|
+
scarcity_risk: "severity_5",
|
|
6170
|
+
// market-intelligence (UPG-579 Option B)
|
|
6165
6171
|
// ── Pain ─────────────────────────────────────────────────────────────────
|
|
6166
6172
|
pain: "pain_5",
|
|
6167
6173
|
// discovery
|
|
6174
|
+
pain_score: "pain_5",
|
|
6175
|
+
// user (UPG-579 Option B)
|
|
6176
|
+
friction_score: "pain_5",
|
|
6177
|
+
// growth/ux (UPG-579 Option B)
|
|
6168
6178
|
// ── Impact ───────────────────────────────────────────────────────────────
|
|
6169
6179
|
impact: "impact_5",
|
|
6170
6180
|
// discovery, market, security, compliance
|
|
6171
6181
|
projected_impact: "impact_5",
|
|
6172
6182
|
// validation/experiment_plan
|
|
6183
|
+
revenue_impact: "impact_5",
|
|
6184
|
+
// sales/business-model (UPG-579 Option B)
|
|
6185
|
+
effectiveness: "impact_5",
|
|
6186
|
+
// security/marketing (UPG-579 Option B)
|
|
6187
|
+
opportunity_score: "impact_5",
|
|
6188
|
+
// discovery/opportunity (UPG-579 Option B)
|
|
6173
6189
|
// ── Confidence ───────────────────────────────────────────────────────────
|
|
6174
6190
|
confidence: "confidence_5",
|
|
6175
6191
|
// discovery, validation, sales, product-spec
|
|
6192
|
+
current_confidence: "confidence_5",
|
|
6193
|
+
// validation/hypothesis (UPG-579 Option B)
|
|
6194
|
+
likelihood: "confidence_5",
|
|
6195
|
+
// market/risk (UPG-579 Option B)
|
|
6196
|
+
probability: "confidence_5",
|
|
6197
|
+
// sales/forecast (UPG-579 Option B)
|
|
6176
6198
|
// ── Effort ───────────────────────────────────────────────────────────────
|
|
6177
6199
|
effort: "effort_5",
|
|
6178
6200
|
// discovery
|
|
@@ -6180,17 +6202,35 @@ var PROPERTY_SCALE_MAP = {
|
|
|
6180
6202
|
// feedback
|
|
6181
6203
|
effort_to_fix: "effort_5",
|
|
6182
6204
|
// engineering
|
|
6205
|
+
cost_estimate: "effort_5",
|
|
6206
|
+
// validation/experiment_plan (UPG-579 Option B)
|
|
6183
6207
|
// ── Importance ───────────────────────────────────────────────────────────
|
|
6184
6208
|
importance: "importance_5",
|
|
6185
6209
|
// users
|
|
6210
|
+
influence: "importance_5",
|
|
6211
|
+
// team-org/stakeholder (UPG-579 Option B)
|
|
6212
|
+
interest: "importance_5",
|
|
6213
|
+
// team-org/stakeholder (UPG-579 Option B)
|
|
6214
|
+
relevance: "importance_5",
|
|
6215
|
+
// market/content (UPG-579 Option B)
|
|
6216
|
+
weight: "importance_5",
|
|
6217
|
+
// validation/evidence (UPG-579 Option B)
|
|
6186
6218
|
// ── Satisfaction ─────────────────────────────────────────────────────────
|
|
6187
|
-
current_satisfaction: "satisfaction_5"
|
|
6219
|
+
current_satisfaction: "satisfaction_5",
|
|
6188
6220
|
// users
|
|
6221
|
+
emotion_score: "satisfaction_5"
|
|
6222
|
+
// ux-design/customer-success journey (UPG-579 Option B)
|
|
6223
|
+
// Intentionally NOT mapped (resolve to the generic scale_5):
|
|
6224
|
+
// rarity : VRIO distinctiveness; no canonical named scale fits.
|
|
6225
|
+
// strength : deprecated (validation/evidence; superseded by weight).
|
|
6189
6226
|
};
|
|
6190
6227
|
var DEFAULT_SCALE_ID = "scale_5";
|
|
6191
6228
|
function getPropertyDefaultScale(_entityType, propertyName) {
|
|
6192
6229
|
return PROPERTY_SCALE_MAP[propertyName] ?? DEFAULT_SCALE_ID;
|
|
6193
6230
|
}
|
|
6231
|
+
function getPropertiesForScale(scaleId) {
|
|
6232
|
+
return Object.entries(PROPERTY_SCALE_MAP).filter(([, id]) => id === scaleId).map(([property]) => property);
|
|
6233
|
+
}
|
|
6194
6234
|
|
|
6195
6235
|
// src/grammar/enum-scales.ts
|
|
6196
6236
|
var UPG_ENUM_SCALES = {
|
|
@@ -6276,6 +6316,159 @@ var UPG_ENUM_SCALES = {
|
|
|
6276
6316
|
{ value: "warning", label: "Warning", description: "Soft signal: should consider and address, but can override with justification." },
|
|
6277
6317
|
{ value: "guideline", label: "Guideline", description: "Recommendation: encouraged and expected in most cases, but not enforced." }
|
|
6278
6318
|
]
|
|
6319
|
+
},
|
|
6320
|
+
// ── ProxyConfidence ─────────────────────────────────────────────────
|
|
6321
|
+
ProxyConfidence: {
|
|
6322
|
+
id: "ProxyConfidence",
|
|
6323
|
+
label: "Proxy confidence",
|
|
6324
|
+
description: "How strongly a proxy metric predicts the direct measure it stands in for.",
|
|
6325
|
+
tone_direction: "high-is-good",
|
|
6326
|
+
values: [
|
|
6327
|
+
{ value: "strong", label: "Strong", description: "Tracks the direct measure closely; a reliable stand-in." },
|
|
6328
|
+
{ value: "moderate", label: "Moderate", description: "Correlates with the direct measure but with meaningful slippage." },
|
|
6329
|
+
{ value: "weak", label: "Weak", description: "Loosely related; use with caution and corroborate." }
|
|
6330
|
+
]
|
|
6331
|
+
},
|
|
6332
|
+
// ── CauseConfidence ─────────────────────────────────────────────────
|
|
6333
|
+
CauseConfidence: {
|
|
6334
|
+
id: "CauseConfidence",
|
|
6335
|
+
label: "Cause confidence",
|
|
6336
|
+
description: "Maturity of a root-cause determination during incident debugging: how far a proposed cause has been validated.",
|
|
6337
|
+
tone_direction: "high-is-good",
|
|
6338
|
+
values: [
|
|
6339
|
+
{ value: "hypothesised", label: "Hypothesised", description: "A proposed cause, not yet tested against evidence." },
|
|
6340
|
+
{ value: "likely", label: "Likely", description: "Supported by evidence but not conclusively proven." },
|
|
6341
|
+
{ value: "confirmed", label: "Confirmed", description: "Verified as the cause; reproduced or otherwise established." }
|
|
6342
|
+
]
|
|
6343
|
+
},
|
|
6344
|
+
// ── ComfortLevel ────────────────────────────────────────────────────
|
|
6345
|
+
ComfortLevel: {
|
|
6346
|
+
id: "ComfortLevel",
|
|
6347
|
+
label: "Comfort level",
|
|
6348
|
+
description: "A person's comfort with a tool, technology, or practice. Closed set so personas compare on the same axis across products.",
|
|
6349
|
+
tone_direction: "high-is-good",
|
|
6350
|
+
values: [
|
|
6351
|
+
{ value: "low", label: "Low", description: "Little or no familiarity; needs guidance to proceed." },
|
|
6352
|
+
{ value: "medium", label: "Medium", description: "Functional, everyday competence." },
|
|
6353
|
+
{ value: "high", label: "High", description: "Confident, fluent use without assistance." },
|
|
6354
|
+
{ value: "expert", label: "Expert", description: "Deep mastery; can teach others or extend the tool." },
|
|
6355
|
+
{ value: "other", label: "Other", description: "A comfort profile not captured by the above tiers." }
|
|
6356
|
+
]
|
|
6357
|
+
},
|
|
6358
|
+
// ── LogLevel ────────────────────────────────────────────────────────
|
|
6359
|
+
LogLevel: {
|
|
6360
|
+
id: "LogLevel",
|
|
6361
|
+
label: "Log level",
|
|
6362
|
+
description: "Operational verbosity of a monitor or alert signal. How loud the signal should be, not how bad an outcome is for the user (kept distinct from severity_5).",
|
|
6363
|
+
tone_direction: "low-is-good",
|
|
6364
|
+
values: [
|
|
6365
|
+
{ value: "critical", label: "Critical", description: "Page immediately; the signal is service-affecting." },
|
|
6366
|
+
{ value: "warning", label: "Warning", description: "Needs attention soon; not yet service-affecting." },
|
|
6367
|
+
{ value: "info", label: "Info", description: "Informational; no action required." }
|
|
6368
|
+
]
|
|
6369
|
+
},
|
|
6370
|
+
// ── IncidentSeverity ────────────────────────────────────────────────
|
|
6371
|
+
IncidentSeverity: {
|
|
6372
|
+
id: "IncidentSeverity",
|
|
6373
|
+
label: "Incident severity",
|
|
6374
|
+
description: "Paging-tier classification of an incident, driving escalation and response process. Distinct from user-impact severity_5 and from LogLevel.",
|
|
6375
|
+
tone_direction: "low-is-good",
|
|
6376
|
+
values: [
|
|
6377
|
+
{ value: "sev1", label: "SEV1", description: "Critical outage; full response, executive-visible." },
|
|
6378
|
+
{ value: "sev2", label: "SEV2", description: "Major degradation; urgent response." },
|
|
6379
|
+
{ value: "sev3", label: "SEV3", description: "Minor or partial impact; handled within hours." },
|
|
6380
|
+
{ value: "sev4", label: "SEV4", description: "Negligible impact; routine handling." }
|
|
6381
|
+
]
|
|
6382
|
+
},
|
|
6383
|
+
// ── SignalSentiment ─────────────────────────────────────────────────
|
|
6384
|
+
SignalSentiment: {
|
|
6385
|
+
id: "SignalSentiment",
|
|
6386
|
+
label: "Signal sentiment",
|
|
6387
|
+
description: "Sentiment polarity of an inbound signal (feedback, support, customer).",
|
|
6388
|
+
tone_direction: "high-is-good",
|
|
6389
|
+
values: [
|
|
6390
|
+
{ value: "positive", label: "Positive", description: "Favourable signal; satisfaction or advocacy." },
|
|
6391
|
+
{ value: "neutral", label: "Neutral", description: "No clear positive or negative lean." },
|
|
6392
|
+
{ value: "negative", label: "Negative", description: "Unfavourable signal; dissatisfaction or risk." },
|
|
6393
|
+
{ value: "mixed", label: "Mixed", description: "Contains both positive and negative elements." }
|
|
6394
|
+
]
|
|
6395
|
+
},
|
|
6396
|
+
// ── MaturityLevel ───────────────────────────────────────────────────
|
|
6397
|
+
MaturityLevel: {
|
|
6398
|
+
id: "MaturityLevel",
|
|
6399
|
+
label: "Maturity level",
|
|
6400
|
+
description: "Capability or process maturity on the CMMI ladder.",
|
|
6401
|
+
tone_direction: "high-is-good",
|
|
6402
|
+
values: [
|
|
6403
|
+
{ value: "initial", label: "Initial", description: "Ad hoc and unpredictable; little process." },
|
|
6404
|
+
{ value: "developing", label: "Developing", description: "Basic process emerging but inconsistent." },
|
|
6405
|
+
{ value: "defined", label: "Defined", description: "Documented, standardised process in place." },
|
|
6406
|
+
{ value: "managed", label: "Managed", description: "Measured and controlled against objectives." },
|
|
6407
|
+
{ value: "optimizing", label: "Optimizing", description: "Continuous, data-driven improvement." }
|
|
6408
|
+
]
|
|
6409
|
+
},
|
|
6410
|
+
// ── ConformanceLevel ────────────────────────────────────────────────
|
|
6411
|
+
ConformanceLevel: {
|
|
6412
|
+
id: "ConformanceLevel",
|
|
6413
|
+
label: "Conformance level",
|
|
6414
|
+
description: "WCAG accessibility conformance level.",
|
|
6415
|
+
tone_direction: "high-is-good",
|
|
6416
|
+
values: [
|
|
6417
|
+
{ value: "A", label: "A", description: "Minimum conformance; essential barriers removed." },
|
|
6418
|
+
{ value: "AA", label: "AA", description: "Addresses the most common barriers; the usual legal target." },
|
|
6419
|
+
{ value: "AAA", label: "AAA", description: "Highest level; not achievable for all content." }
|
|
6420
|
+
]
|
|
6421
|
+
},
|
|
6422
|
+
// ── DataSensitivity ─────────────────────────────────────────────────
|
|
6423
|
+
DataSensitivity: {
|
|
6424
|
+
id: "DataSensitivity",
|
|
6425
|
+
label: "Data sensitivity",
|
|
6426
|
+
description: "Data classification tier governing handling and access.",
|
|
6427
|
+
tone_direction: "neutral",
|
|
6428
|
+
values: [
|
|
6429
|
+
{ value: "public", label: "Public", description: "No restriction; safe to disclose openly." },
|
|
6430
|
+
{ value: "internal", label: "Internal", description: "For internal use; not for external release." },
|
|
6431
|
+
{ value: "confidential", label: "Confidential", description: "Sensitive; restricted to a need-to-know basis." },
|
|
6432
|
+
{ value: "restricted", label: "Restricted", description: "Highly sensitive; strict controls and auditing." }
|
|
6433
|
+
]
|
|
6434
|
+
},
|
|
6435
|
+
// ── DifficultyLevel ─────────────────────────────────────────────────
|
|
6436
|
+
DifficultyLevel: {
|
|
6437
|
+
id: "DifficultyLevel",
|
|
6438
|
+
label: "Difficulty level",
|
|
6439
|
+
description: "Learner difficulty tier for educational content.",
|
|
6440
|
+
tone_direction: "neutral",
|
|
6441
|
+
values: [
|
|
6442
|
+
{ value: "beginner", label: "Beginner", description: "No prior knowledge assumed." },
|
|
6443
|
+
{ value: "intermediate", label: "Intermediate", description: "Assumes working familiarity with the basics." },
|
|
6444
|
+
{ value: "advanced", label: "Advanced", description: "Assumes deep, expert-level background." }
|
|
6445
|
+
]
|
|
6446
|
+
},
|
|
6447
|
+
// ── FrequencyRating ─────────────────────────────────────────────────
|
|
6448
|
+
FrequencyRating: {
|
|
6449
|
+
id: "FrequencyRating",
|
|
6450
|
+
label: "Frequency rating",
|
|
6451
|
+
description: "Qualitative how-often rating. Distinct from the numeric frequency_5 scale and from Cadence calendar tiers.",
|
|
6452
|
+
tone_direction: "neutral",
|
|
6453
|
+
values: [
|
|
6454
|
+
{ value: "constant", label: "Constant", description: "Effectively always; continuous occurrence." },
|
|
6455
|
+
{ value: "regular", label: "Regular", description: "Happens on a predictable, recurring basis." },
|
|
6456
|
+
{ value: "occasional", label: "Occasional", description: "Happens sometimes, without a fixed pattern." },
|
|
6457
|
+
{ value: "rare", label: "Rare", description: "Happens infrequently." },
|
|
6458
|
+
{ value: "other", label: "Other", description: "A frequency not captured by the above tiers." }
|
|
6459
|
+
]
|
|
6460
|
+
},
|
|
6461
|
+
// ── EvidenceDirection ───────────────────────────────────────────────
|
|
6462
|
+
EvidenceDirection: {
|
|
6463
|
+
id: "EvidenceDirection",
|
|
6464
|
+
label: "Evidence direction",
|
|
6465
|
+
description: "Direction of evidence relative to a claim. Distinct from confidence_impact (strengthens/weakens) per the UPG-579 polysemy verdicts.",
|
|
6466
|
+
tone_direction: "neutral",
|
|
6467
|
+
values: [
|
|
6468
|
+
{ value: "supports", label: "Supports", description: "The evidence backs the claim." },
|
|
6469
|
+
{ value: "refutes", label: "Refutes", description: "The evidence contradicts the claim." },
|
|
6470
|
+
{ value: "neutral", label: "Neutral", description: "The evidence is inconclusive either way." }
|
|
6471
|
+
]
|
|
6279
6472
|
}
|
|
6280
6473
|
};
|
|
6281
6474
|
function getEnumScale(name) {
|
|
@@ -6622,6 +6815,41 @@ function getDeprecatedTypes() {
|
|
|
6622
6815
|
return deprecated;
|
|
6623
6816
|
}
|
|
6624
6817
|
var UPG_PROPERTY_MIGRATIONS = {
|
|
6818
|
+
// ── v0.8.0: UPG-574 deprecated-property removal pass ───────────────────
|
|
6819
|
+
//
|
|
6820
|
+
// The seven properties tagged `@deprecated since v0.4.0` that survived the
|
|
6821
|
+
// v0.5.0 hygiene pass are removed from the spec in v0.8.0 (a breaking
|
|
6822
|
+
// release). Five of the seven already carry a migration:
|
|
6823
|
+
// - `task.task_status` / `bug.bug_status` lift to `UPGBaseNode.status`
|
|
6824
|
+
// (see `UPG_PROPERTY_MIGRATIONS['0.4.0']`, values identical).
|
|
6825
|
+
// - `learning.metric` drops in favour of the `learning_observed_on_metric`
|
|
6826
|
+
// edge (see `UPG_PROPERTY_MIGRATIONS['0.5.0']`).
|
|
6827
|
+
// The two remaining property surfaces are migrated here:
|
|
6828
|
+
// - `evidence.strength` (simple `strong | moderate | weak` enum) is
|
|
6829
|
+
// dropped in favour of `weight: UPGAssessment` (scale `weight_5pt`).
|
|
6830
|
+
// Authors carrying the legacy key should copy the value to `weight`
|
|
6831
|
+
// before applying this migration: `strong → 5`, `moderate → 3`,
|
|
6832
|
+
// `weak → 1`, with the old word preserved in `weight.label`.
|
|
6833
|
+
// - `story_task.estimate` / `.effort` / `.priority` drop. `story_task`
|
|
6834
|
+
// itself is deprecated (`UPG_MIGRATIONS['0.4.0']` renames it to the
|
|
6835
|
+
// canonical `task`); the type rename copies every property verbatim,
|
|
6836
|
+
// so the values survive on `task` (`TaskProperties.estimate` /
|
|
6837
|
+
// `.effort` / `.priority`, all live). This rule removes the residue
|
|
6838
|
+
// from any node still typed `story_task` at migration time.
|
|
6839
|
+
"0.8.0": [
|
|
6840
|
+
{
|
|
6841
|
+
kind: "drop_props",
|
|
6842
|
+
type: "evidence",
|
|
6843
|
+
drop_props: ["strength"],
|
|
6844
|
+
reason: "UPG-574 (v0.8.0). evidence.strength was `@deprecated since v0.4.0`; the structured `weight: UPGAssessment` (scale `weight_5pt`) replaces the `strong | moderate | weak` enum to align with the spec-wide scoring pattern. Authors should copy the value to `weight` before applying this migration (strong -> 5, moderate -> 3, weak -> 1; carry the old word in `weight.label`). The migration drops the residue."
|
|
6845
|
+
},
|
|
6846
|
+
{
|
|
6847
|
+
kind: "drop_props",
|
|
6848
|
+
type: "story_task",
|
|
6849
|
+
drop_props: ["estimate", "effort", "priority"],
|
|
6850
|
+
reason: 'UPG-574 (v0.8.0). story_task.estimate / .effort / .priority were `@deprecated since v0.4.0`; story_task itself is deprecated (UPG_MIGRATIONS["0.4.0"] renames it to canonical `task`, copying all properties verbatim), so the values survive on TaskProperties.estimate / .effort / .priority (all live). This rule removes the residue from any node still typed `story_task` at migration time.'
|
|
6851
|
+
}
|
|
6852
|
+
],
|
|
6625
6853
|
// ── v0.5.0: UPG-509 deprecation hygiene pass ───────────────────────────
|
|
6626
6854
|
//
|
|
6627
6855
|
// Properties tagged `@deprecated since="0.4.0" removeIn="0.5.0"` (and the
|
|
@@ -8425,7 +8653,18 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
8425
8653
|
},
|
|
8426
8654
|
// A11yIssueProperties: Accessibility issue.
|
|
8427
8655
|
a11y_issue: {
|
|
8428
|
-
severity: {
|
|
8656
|
+
severity: {
|
|
8657
|
+
type: "assessment",
|
|
8658
|
+
scale_id: "severity_5",
|
|
8659
|
+
description: "Impact severity (UPGAssessment on the `severity_5` scale). Migrated from the inline axe-core 4-level enum (`minor|moderate|serious|critical`) (UPG-579 Option C): map `critical` -> 5, `serious` -> 4, `moderate` -> 3, `minor` -> 2; carry the old word in `label`.",
|
|
8660
|
+
properties: {
|
|
8661
|
+
value: { type: "number", description: "The numeric value, used for computation." },
|
|
8662
|
+
label: { type: "string", description: "The qualitative label (what the assessor meant)." },
|
|
8663
|
+
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)." },
|
|
8664
|
+
normalized: { type: "number", description: "Normalized 0-1 value for cross-tool comparison (optional)." }
|
|
8665
|
+
},
|
|
8666
|
+
required: ["value", "label"]
|
|
8667
|
+
},
|
|
8429
8668
|
wcag_criterion: { type: "string", description: 'WCAG success criterion violated (e.g. "1.1.1", "2.4.7")' },
|
|
8430
8669
|
rule_id: { type: "string", description: "Identifier of the rule that flagged the issue" },
|
|
8431
8670
|
help_url: { type: "string", description: "URL to documentation explaining the issue and how to fix it" },
|
|
@@ -8482,7 +8721,18 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
8482
8721
|
affinity_cluster: {
|
|
8483
8722
|
theme: { type: "string", description: "Emergent theme label" },
|
|
8484
8723
|
child_observation_count: { type: "number", description: "Observations in this cluster" },
|
|
8485
|
-
confidence: {
|
|
8724
|
+
confidence: {
|
|
8725
|
+
type: "assessment",
|
|
8726
|
+
scale_id: "confidence_5",
|
|
8727
|
+
description: "Confidence in the theme's validity (UPGAssessment on `confidence_5`).",
|
|
8728
|
+
properties: {
|
|
8729
|
+
value: { type: "number", description: "The numeric value, used for computation." },
|
|
8730
|
+
label: { type: "string", description: "The qualitative label (what the assessor meant)." },
|
|
8731
|
+
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)." },
|
|
8732
|
+
normalized: { type: "number", description: "Normalized 0-1 value for cross-tool comparison (optional)." }
|
|
8733
|
+
},
|
|
8734
|
+
required: ["value", "label"]
|
|
8735
|
+
}
|
|
8486
8736
|
},
|
|
8487
8737
|
// AgentDefinitionProperties: Agent definition.
|
|
8488
8738
|
agent_definition: {
|
|
@@ -8616,7 +8866,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
8616
8866
|
// AlertRuleProperties: Alert rule.
|
|
8617
8867
|
alert_rule: {
|
|
8618
8868
|
condition: { type: "string", description: 'Triggering query or expression. @example "avg(rate(http_errors_total[5m])) > 0.05"' },
|
|
8619
|
-
severity: { type: "string", enum: ["critical", "warning", "info"], description: "Routes notification and escalation. `critical` = page immediately. `warning` = notify, don't page. `info` = log only." },
|
|
8869
|
+
severity: { type: "string", enum: ["critical", "warning", "info"], description: "Routes notification and escalation. Uses the `LogLevel` scale (operational verbosity, distinct from user-impact `severity_5`). `critical` = page immediately. `warning` = notify, don't page. `info` = log only." },
|
|
8620
8870
|
notification_channel: { type: "string", description: 'Notification destination. @example "pagerduty:sev1-rotation", "slack:#alerts-low"' },
|
|
8621
8871
|
evaluation_window: { type: "string", description: 'Required duration the condition holds before firing. Prevents flapping on transient spikes. @example "5m", "15m", "1h"' },
|
|
8622
8872
|
escalation_policy: { type: "string", description: 'Escalation behaviour on unacknowledged alerts. @example "Escalate to engineering lead after 10 minutes"' }
|
|
@@ -8655,16 +8905,28 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
8655
8905
|
},
|
|
8656
8906
|
// AssumptionProperties: Assumption entity.
|
|
8657
8907
|
assumption: {
|
|
8658
|
-
confidence: {
|
|
8908
|
+
confidence: {
|
|
8909
|
+
type: "assessment",
|
|
8910
|
+
scale_id: "confidence_5",
|
|
8911
|
+
description: "Confidence before testing (UPGAssessment on `confidence_5`). Independent of whether the assumption is validated (tracked in lifecycle).",
|
|
8912
|
+
properties: {
|
|
8913
|
+
value: { type: "number", description: "The numeric value, used for computation." },
|
|
8914
|
+
label: { type: "string", description: "The qualitative label (what the assessor meant)." },
|
|
8915
|
+
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)." },
|
|
8916
|
+
normalized: { type: "number", description: "Normalized 0-1 value for cross-tool comparison (optional)." }
|
|
8917
|
+
},
|
|
8918
|
+
required: ["value", "label"]
|
|
8919
|
+
},
|
|
8659
8920
|
validation_method: { type: "string", description: "Validation method, planned or used" },
|
|
8660
8921
|
risk_level: {
|
|
8661
|
-
type: "
|
|
8922
|
+
type: "assessment",
|
|
8923
|
+
scale_id: "severity_5",
|
|
8662
8924
|
description: "Exposure if the assumption turns out wrong",
|
|
8663
8925
|
properties: {
|
|
8664
8926
|
value: { type: "number", description: "The numeric value, used for computation." },
|
|
8665
8927
|
label: { type: "string", description: "The qualitative label (what the assessor meant)." },
|
|
8666
|
-
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)" },
|
|
8667
|
-
normalized: { type: "number", description: "Normalized 0
|
|
8928
|
+
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)." },
|
|
8929
|
+
normalized: { type: "number", description: "Normalized 0-1 value for cross-tool comparison (optional)." }
|
|
8668
8930
|
},
|
|
8669
8931
|
required: ["value", "label"]
|
|
8670
8932
|
},
|
|
@@ -8775,8 +9037,18 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
8775
9037
|
},
|
|
8776
9038
|
// BugProperties: Bug report.
|
|
8777
9039
|
bug: {
|
|
8778
|
-
bug_severity: {
|
|
8779
|
-
|
|
9040
|
+
bug_severity: {
|
|
9041
|
+
type: "assessment",
|
|
9042
|
+
scale_id: "severity_5",
|
|
9043
|
+
description: "Impact severity (UPGAssessment on the `severity_5` scale). Independent of priority (which governs when it gets fixed). Migrated from the inline `critical|major|minor|trivial` enum (UPG-579 Option C): map `critical` -> 5, `major` -> 4, `minor` -> 2, `trivial` -> 1; carry the old word in `label`.",
|
|
9044
|
+
properties: {
|
|
9045
|
+
value: { type: "number", description: "The numeric value, used for computation." },
|
|
9046
|
+
label: { type: "string", description: "The qualitative label (what the assessor meant)." },
|
|
9047
|
+
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)." },
|
|
9048
|
+
normalized: { type: "number", description: "Normalized 0-1 value for cross-tool comparison (optional)." }
|
|
9049
|
+
},
|
|
9050
|
+
required: ["value", "label"]
|
|
9051
|
+
},
|
|
8780
9052
|
steps_to_reproduce: { type: "string", description: "Step-by-step reproduction" },
|
|
8781
9053
|
environment: { type: "string", description: 'Observed environment (e.g. "prod", "staging", "iOS 17.4")' },
|
|
8782
9054
|
priority: { type: "string", enum: ["urgent", "high", "medium", "low", "none"], description: "Urgency relative to other work. Independent of `bug_severity` (a critical bug can have low priority if rare)." },
|
|
@@ -8806,7 +9078,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
8806
9078
|
maturity_level: { type: "string", enum: ["initial", "developing", "defined", "managed", "optimizing"], description: "Current maturity" },
|
|
8807
9079
|
target_maturity: { type: "string", enum: ["initial", "developing", "defined", "managed", "optimizing"], description: "Target maturity" },
|
|
8808
9080
|
gap: { type: "string", description: "Gap between current and target" },
|
|
8809
|
-
evolution_stage: { type: "string", enum: ["genesis", "custom", "product", "commodity"], description:
|
|
9081
|
+
evolution_stage: { type: "string", enum: ["genesis", "custom", "product", "commodity"], description: "Wardley evolution axis: where this capability sits on the genesis \u2192 custom \u2192 product \u2192 commodity spectrum. Used by frameworks like `wardley-map`; generally useful as a maturity-of-the-domain signal independent of `maturity_level` (which measures the team's internal capability practice). @example 'product'" },
|
|
8810
9082
|
visibility: { type: "number", description: "Position on the visibility axis from `0.0` (deepest dependency, infra the user never sees) to `1.0` (user-visible anchor). Used by `wardley-map` for the y-axis position of each capability in the value chain. @example 0.8" }
|
|
8811
9083
|
},
|
|
8812
9084
|
// CapacityPlanProperties: CapacityPlan entity.
|
|
@@ -8819,7 +9091,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
8819
9091
|
// CeremonyProperties: Ceremony entity.
|
|
8820
9092
|
ceremony: {
|
|
8821
9093
|
ceremony_type: { type: "string", enum: ["standup", "planning", "review", "retro", "sync", "demo", "other"], description: "Kind of recurring meeting" },
|
|
8822
|
-
cadence: { type: "string", description:
|
|
9094
|
+
cadence: { type: "string", enum: ["continuous", "hourly", "daily", "weekly", "monthly", "quarterly", "yearly", "on_demand", "other"], description: "How often the ceremony occurs. Uses the shared `Cadence` scale." },
|
|
8823
9095
|
duration_minutes: { type: "number", description: "Typical duration of the meeting in minutes" },
|
|
8824
9096
|
participants: { type: "string", description: "People or roles who attend" }
|
|
8825
9097
|
},
|
|
@@ -8848,9 +9120,9 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
8848
9120
|
category: { type: "string", description: "High-level category of the churn reason" },
|
|
8849
9121
|
frequency_count: { type: "number", description: "Exact count of times this reason has been cited in `frequency_period`" },
|
|
8850
9122
|
frequency_period: { type: "string", description: "The recurrence period the count is measured over (ISO-8601 `Duration`, e.g. `'P30D'`)" },
|
|
8851
|
-
frequency_rating: { type: "string", enum: ["
|
|
9123
|
+
frequency_rating: { type: "string", enum: ["constant", "regular", "occasional", "rare", "other"], description: "Qualitative frequency tier when an exact count is not known" },
|
|
8852
9124
|
contributing_factors: { type: "string[]", description: "Other factors that contributed to the churn" },
|
|
8853
|
-
signal_sentiment: { type: "string", enum: ["positive", "
|
|
9125
|
+
signal_sentiment: { type: "string", enum: ["positive", "neutral", "negative", "mixed"], description: "Detected sentiment of the churn signal" },
|
|
8854
9126
|
signal_channel: { type: "string", description: "Channel through which the churn signal was received" },
|
|
8855
9127
|
signal_urgency: { type: "string", enum: ["low", "medium", "high", "critical"], description: "Urgency of the churn risk" }
|
|
8856
9128
|
},
|
|
@@ -8964,7 +9236,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
8964
9236
|
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'`." },
|
|
8965
9237
|
frequency_count: { type: "number", description: "Exact count in the period. Pairs with `frequency_period`." },
|
|
8966
9238
|
frequency_period: { type: "string", description: "Recurrence period (ISO-8601 `Duration`, e.g. `'P7D'`)" },
|
|
8967
|
-
frequency_rating: { type: "string", enum: ["
|
|
9239
|
+
frequency_rating: { type: "string", enum: ["constant", "regular", "occasional", "rare", "other"], description: "Qualitative rate tier when an exact rate is unknown" }
|
|
8968
9240
|
},
|
|
8969
9241
|
// ContentPieceProperties: Content piece.
|
|
8970
9242
|
content_piece: {
|
|
@@ -8979,7 +9251,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
8979
9251
|
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'`." },
|
|
8980
9252
|
frequency_count: { type: "number", description: "Exact count of publications in the period. Pairs with `frequency_period`." },
|
|
8981
9253
|
frequency_period: { type: "string", description: "Recurrence period (ISO-8601 `Duration`, e.g. `'P7D'`)" },
|
|
8982
|
-
frequency_rating: { type: "string", enum: ["
|
|
9254
|
+
frequency_rating: { type: "string", enum: ["constant", "regular", "occasional", "rare", "other"], description: "Qualitative rate tier when an exact rate is unknown" }
|
|
8983
9255
|
},
|
|
8984
9256
|
// ContentThemeProperties: Content theme.
|
|
8985
9257
|
content_theme: {
|
|
@@ -9004,13 +9276,14 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
9004
9276
|
clause_text: { type: "string", description: "Full text of the clause" },
|
|
9005
9277
|
is_negotiable: { type: "boolean", description: "Whether this clause is open to negotiation" },
|
|
9006
9278
|
risk_level: {
|
|
9007
|
-
type: "
|
|
9279
|
+
type: "assessment",
|
|
9280
|
+
scale_id: "severity_5",
|
|
9008
9281
|
description: "Risk level if the clause is accepted as-is (1 = negligible, 5 = severe exposure)",
|
|
9009
9282
|
properties: {
|
|
9010
9283
|
value: { type: "number", description: "The numeric value, used for computation." },
|
|
9011
9284
|
label: { type: "string", description: "The qualitative label (what the assessor meant)." },
|
|
9012
|
-
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)" },
|
|
9013
|
-
normalized: { type: "number", description: "Normalized 0
|
|
9285
|
+
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)." },
|
|
9286
|
+
normalized: { type: "number", description: "Normalized 0-1 value for cross-tool comparison (optional)." }
|
|
9014
9287
|
},
|
|
9015
9288
|
required: ["value", "label"]
|
|
9016
9289
|
}
|
|
@@ -9029,9 +9302,9 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
9029
9302
|
// CustomerFeedbackProperties: Customer feedback.
|
|
9030
9303
|
customer_feedback: {
|
|
9031
9304
|
feedback_type: { type: "string", enum: ["survey", "interview", "review", "nps"], description: "How the feedback was collected" },
|
|
9032
|
-
sentiment: { type: "string", enum: ["positive", "neutral", "negative"], description: "Overall sentiment of the feedback" },
|
|
9305
|
+
sentiment: { type: "string", enum: ["positive", "neutral", "negative", "mixed"], description: "Overall sentiment of the feedback" },
|
|
9033
9306
|
verbatim: { type: "string", description: "Exact words from the customer" },
|
|
9034
|
-
signal_sentiment: { type: "string", enum: ["positive", "
|
|
9307
|
+
signal_sentiment: { type: "string", enum: ["positive", "neutral", "negative", "mixed"], description: "Detected sentiment of the underlying signal" },
|
|
9035
9308
|
signal_channel: { type: "string", description: "Channel through which the signal was received" },
|
|
9036
9309
|
signal_urgency: { type: "string", enum: ["low", "medium", "high", "critical"], description: "Perceived urgency of the feedback" }
|
|
9037
9310
|
},
|
|
@@ -9060,7 +9333,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
9060
9333
|
url: { type: "string", description: "URL to the live dashboard" },
|
|
9061
9334
|
audience: { type: "string", description: "Intended audience for this dashboard" },
|
|
9062
9335
|
element_count: { type: "number", description: "Number of widgets or panels on the dashboard" },
|
|
9063
|
-
refresh_cadence: { type: "string", description: "How often the dashboard data refreshes" },
|
|
9336
|
+
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." },
|
|
9064
9337
|
filter_count: { type: "number", description: "Number of user-configurable filters" }
|
|
9065
9338
|
},
|
|
9066
9339
|
// DataClassificationProperties: Data classification.
|
|
@@ -9120,7 +9393,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
9120
9393
|
},
|
|
9121
9394
|
// DataProductProperties: DataProduct entity.
|
|
9122
9395
|
data_product: {
|
|
9123
|
-
data_product_type: { type: "string", description:
|
|
9396
|
+
data_product_type: { type: "string", enum: ["report", "dataset", "stream", "api", "ml_feature", "other"], description: "Classification of the data product (UPG-579 Option B)." },
|
|
9124
9397
|
sla_freshness: { type: "string", description: 'Freshness SLA commitment (e.g. "< 1 hour")' }
|
|
9125
9398
|
},
|
|
9126
9399
|
// DataQualityRuleProperties: DataQualityRule entity.
|
|
@@ -9137,7 +9410,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
9137
9410
|
data_source: {
|
|
9138
9411
|
source_type: { type: "string", enum: ["database", "api", "event_stream", "warehouse"], description: "Kind of data source" },
|
|
9139
9412
|
connection_status: { type: "string", enum: ["connected", "disconnected", "error"], description: "Current connection health" },
|
|
9140
|
-
refresh_cadence: { type: "string", description:
|
|
9413
|
+
refresh_cadence: { type: "string", enum: ["continuous", "hourly", "daily", "weekly", "monthly", "quarterly", "yearly", "on_demand", "other"], description: "How often the data is refreshed. Uses the shared `Cadence` scale." }
|
|
9141
9414
|
},
|
|
9142
9415
|
// DatabaseSchemaProperties: Database schema.
|
|
9143
9416
|
database_schema: {
|
|
@@ -9168,7 +9441,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
9168
9441
|
},
|
|
9169
9442
|
// DeliverableProperties: Deliverable.
|
|
9170
9443
|
deliverable: {
|
|
9171
|
-
deliverable_type: { type: "string",
|
|
9444
|
+
deliverable_type: { type: "string", enum: ["document", "prototype", "release", "design", "report", "other"], description: "Kind of deliverable (UPG-579 Option B)." },
|
|
9172
9445
|
due_date: { type: "string", description: "Due date for the deliverable (ISO format)" },
|
|
9173
9446
|
deliverable_status: { type: "string", enum: ["not_started", "in_progress", "in_review", "accepted", "rejected"], description: "Current progress status" },
|
|
9174
9447
|
acceptance_criteria: { type: "string", description: "Criteria that must be met for the deliverable to be accepted" }
|
|
@@ -9246,7 +9519,18 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
9246
9519
|
target_domain: { type: "string", enum: ["ux", "visual", "interaction", "content", "accessibility", "other"], description: "Target design discipline" },
|
|
9247
9520
|
framing: { type: "string", enum: ["how_might_we", "what_if", "why_do", "how_do", "what_prevents", "other"], description: "Question framing template" },
|
|
9248
9521
|
priority: { type: "string", enum: ["urgent", "high", "medium", "low", "none"], description: "Importance against other backlog questions" },
|
|
9249
|
-
confidence: {
|
|
9522
|
+
confidence: {
|
|
9523
|
+
type: "assessment",
|
|
9524
|
+
scale_id: "confidence_5",
|
|
9525
|
+
description: "Confidence the question is well-framed (UPGAssessment on `confidence_5`). Distinct from confidence in any answer.",
|
|
9526
|
+
properties: {
|
|
9527
|
+
value: { type: "number", description: "The numeric value, used for computation." },
|
|
9528
|
+
label: { type: "string", description: "The qualitative label (what the assessor meant)." },
|
|
9529
|
+
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)." },
|
|
9530
|
+
normalized: { type: "number", description: "Normalized 0-1 value for cross-tool comparison (optional)." }
|
|
9531
|
+
},
|
|
9532
|
+
required: ["value", "label"]
|
|
9533
|
+
},
|
|
9250
9534
|
assumptions: { type: "string[]", description: "Underlying assumptions. Surfaced explicitly so they can be challenged or validated." },
|
|
9251
9535
|
validation_method: { type: "string", enum: ["interview", "survey", "usability_test", "analytics", "a_b_test", "prototype_test", "literature_review", "other"], description: "Primary validation method" }
|
|
9252
9536
|
},
|
|
@@ -9273,24 +9557,26 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
9273
9557
|
desired_outcome: {
|
|
9274
9558
|
statement: { type: "string", description: "Outcome statement in the user's words" },
|
|
9275
9559
|
importance: {
|
|
9276
|
-
type: "
|
|
9560
|
+
type: "assessment",
|
|
9561
|
+
scale_id: "importance_5",
|
|
9277
9562
|
description: "How important this outcome is to the user (1 = low, 5 = critical)",
|
|
9278
9563
|
properties: {
|
|
9279
9564
|
value: { type: "number", description: "The numeric value, used for computation." },
|
|
9280
9565
|
label: { type: "string", description: "The qualitative label (what the assessor meant)." },
|
|
9281
|
-
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)" },
|
|
9282
|
-
normalized: { type: "number", description: "Normalized 0
|
|
9566
|
+
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)." },
|
|
9567
|
+
normalized: { type: "number", description: "Normalized 0-1 value for cross-tool comparison (optional)." }
|
|
9283
9568
|
},
|
|
9284
9569
|
required: ["value", "label"]
|
|
9285
9570
|
},
|
|
9286
9571
|
current_satisfaction: {
|
|
9287
|
-
type: "
|
|
9572
|
+
type: "assessment",
|
|
9573
|
+
scale_id: "satisfaction_5",
|
|
9288
9574
|
description: "How satisfied the user currently is with this outcome (1 = very unsatisfied, 5 = fully satisfied)",
|
|
9289
9575
|
properties: {
|
|
9290
9576
|
value: { type: "number", description: "The numeric value, used for computation." },
|
|
9291
9577
|
label: { type: "string", description: "The qualitative label (what the assessor meant)." },
|
|
9292
|
-
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)" },
|
|
9293
|
-
normalized: { type: "number", description: "Normalized 0
|
|
9578
|
+
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)." },
|
|
9579
|
+
normalized: { type: "number", description: "Normalized 0-1 value for cross-tool comparison (optional)." }
|
|
9294
9580
|
},
|
|
9295
9581
|
required: ["value", "label"]
|
|
9296
9582
|
}
|
|
@@ -9408,20 +9694,20 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
9408
9694
|
evidence_source: { type: "string", enum: ["experiment_run", "observation", "quote", "metric_change", "market_data", "interview"], description: "Origin type. Drives renderer + filter UI; the provenance edge (`derived_from_*`) carries the actual source node reference." },
|
|
9409
9695
|
direction: { type: "string", enum: ["supports", "refutes", "neutral"], description: "Direction relative to the parent hypothesis." },
|
|
9410
9696
|
weight: {
|
|
9411
|
-
type: "
|
|
9412
|
-
|
|
9697
|
+
type: "assessment",
|
|
9698
|
+
scale_id: "importance_5",
|
|
9699
|
+
description: "Strength (UPGAssessment, scale `scale_5`).",
|
|
9413
9700
|
properties: {
|
|
9414
9701
|
value: { type: "number", description: "The numeric value, used for computation." },
|
|
9415
9702
|
label: { type: "string", description: "The qualitative label (what the assessor meant)." },
|
|
9416
|
-
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)" },
|
|
9417
|
-
normalized: { type: "number", description: "Normalized 0
|
|
9703
|
+
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)." },
|
|
9704
|
+
normalized: { type: "number", description: "Normalized 0-1 value for cross-tool comparison (optional)." }
|
|
9418
9705
|
},
|
|
9419
9706
|
required: ["value", "label"]
|
|
9420
9707
|
},
|
|
9421
9708
|
summary: { type: "string", description: "Plain-English summary." },
|
|
9422
9709
|
observed_at: { type: "string", description: "ISO date observed." },
|
|
9423
|
-
source: { type: "string", description: "Free-text provenance note" }
|
|
9424
|
-
strength: { type: "string", enum: ["strong", "moderate", "weak"], description: "@deprecated since v0.4.0. Use `weight: UPGAssessment`. Simple enum replaced by structured assessment to align with UPG scoring patterns." }
|
|
9710
|
+
source: { type: "string", description: "Free-text provenance note" }
|
|
9425
9711
|
},
|
|
9426
9712
|
// ExperimentProperties: A structured activity designed to test a hypothesis.
|
|
9427
9713
|
experiment: {
|
|
@@ -9438,46 +9724,50 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
9438
9724
|
method: { type: "string", enum: ["a_b_test", "multivariate", "qual_interview", "prototype_test", "fake_door", "wizard_of_oz", "longitudinal"], description: "Experimental method. Drives renderer and analysis tooling." },
|
|
9439
9725
|
success_criteria: { type: "string", description: 'Plain-English description of "passing"' },
|
|
9440
9726
|
projected_reach: {
|
|
9441
|
-
type: "
|
|
9727
|
+
type: "assessment",
|
|
9728
|
+
scale_id: "reach_5",
|
|
9442
9729
|
description: "Projected reach: how many people the run is expected to touch (UPGAssessment)",
|
|
9443
9730
|
properties: {
|
|
9444
9731
|
value: { type: "number", description: "The numeric value, used for computation." },
|
|
9445
9732
|
label: { type: "string", description: "The qualitative label (what the assessor meant)." },
|
|
9446
|
-
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)" },
|
|
9447
|
-
normalized: { type: "number", description: "Normalized 0
|
|
9733
|
+
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)." },
|
|
9734
|
+
normalized: { type: "number", description: "Normalized 0-1 value for cross-tool comparison (optional)." }
|
|
9448
9735
|
},
|
|
9449
9736
|
required: ["value", "label"]
|
|
9450
9737
|
},
|
|
9451
9738
|
projected_impact: {
|
|
9452
|
-
type: "
|
|
9739
|
+
type: "assessment",
|
|
9740
|
+
scale_id: "impact_5",
|
|
9453
9741
|
description: "Projected impact on the target metric (UPGAssessment)",
|
|
9454
9742
|
properties: {
|
|
9455
9743
|
value: { type: "number", description: "The numeric value, used for computation." },
|
|
9456
9744
|
label: { type: "string", description: "The qualitative label (what the assessor meant)." },
|
|
9457
|
-
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)" },
|
|
9458
|
-
normalized: { type: "number", description: "Normalized 0
|
|
9745
|
+
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)." },
|
|
9746
|
+
normalized: { type: "number", description: "Normalized 0-1 value for cross-tool comparison (optional)." }
|
|
9459
9747
|
},
|
|
9460
9748
|
required: ["value", "label"]
|
|
9461
9749
|
},
|
|
9462
9750
|
confidence: {
|
|
9463
|
-
type: "
|
|
9464
|
-
|
|
9751
|
+
type: "assessment",
|
|
9752
|
+
scale_id: "confidence_5",
|
|
9753
|
+
description: "Team confidence at plan-time (UPGAssessment, scale `confidence_5`)",
|
|
9465
9754
|
properties: {
|
|
9466
9755
|
value: { type: "number", description: "The numeric value, used for computation." },
|
|
9467
9756
|
label: { type: "string", description: "The qualitative label (what the assessor meant)." },
|
|
9468
|
-
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)" },
|
|
9469
|
-
normalized: { type: "number", description: "Normalized 0
|
|
9757
|
+
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)." },
|
|
9758
|
+
normalized: { type: "number", description: "Normalized 0-1 value for cross-tool comparison (optional)." }
|
|
9470
9759
|
},
|
|
9471
9760
|
required: ["value", "label"]
|
|
9472
9761
|
},
|
|
9473
9762
|
cost_estimate: {
|
|
9474
|
-
type: "
|
|
9763
|
+
type: "assessment",
|
|
9764
|
+
scale_id: "effort_5",
|
|
9475
9765
|
description: "Cost estimate at plan-time (UPGAssessment)",
|
|
9476
9766
|
properties: {
|
|
9477
9767
|
value: { type: "number", description: "The numeric value, used for computation." },
|
|
9478
9768
|
label: { type: "string", description: "The qualitative label (what the assessor meant)." },
|
|
9479
|
-
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)" },
|
|
9480
|
-
normalized: { type: "number", description: "Normalized 0
|
|
9769
|
+
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)." },
|
|
9770
|
+
normalized: { type: "number", description: "Normalized 0-1 value for cross-tool comparison (optional)." }
|
|
9481
9771
|
},
|
|
9482
9772
|
required: ["value", "label"]
|
|
9483
9773
|
},
|
|
@@ -9491,13 +9781,14 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
9491
9781
|
actual_reach: { type: "number", description: "Observed reach: how many people the run actually touched" },
|
|
9492
9782
|
outcome_summary: { type: "string", description: "Plain-English outcome" },
|
|
9493
9783
|
severity_of_finding: {
|
|
9494
|
-
type: "
|
|
9784
|
+
type: "assessment",
|
|
9785
|
+
scale_id: "severity_5",
|
|
9495
9786
|
description: "Severity / strength of the finding (UPGAssessment)",
|
|
9496
9787
|
properties: {
|
|
9497
9788
|
value: { type: "number", description: "The numeric value, used for computation." },
|
|
9498
9789
|
label: { type: "string", description: "The qualitative label (what the assessor meant)." },
|
|
9499
|
-
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)" },
|
|
9500
|
-
normalized: { type: "number", description: "Normalized 0
|
|
9790
|
+
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)." },
|
|
9791
|
+
normalized: { type: "number", description: "Normalized 0-1 value for cross-tool comparison (optional)." }
|
|
9501
9792
|
},
|
|
9502
9793
|
required: ["value", "label"]
|
|
9503
9794
|
},
|
|
@@ -9516,7 +9807,18 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
9516
9807
|
feasibility_study: {
|
|
9517
9808
|
study_type: { type: "string", enum: ["technical", "business", "market", "resource"], description: 'Type of feasibility being assessed. @example "technical" for assessing engineering viability' },
|
|
9518
9809
|
conclusion: { type: "string", enum: ["feasible", "not_feasible", "conditional", "needs_more_data"], description: "Outcome conclusion of the study" },
|
|
9519
|
-
confidence: {
|
|
9810
|
+
confidence: {
|
|
9811
|
+
type: "assessment",
|
|
9812
|
+
scale_id: "confidence_5",
|
|
9813
|
+
description: "Confidence in the conclusion (UPGAssessment on `confidence_5`).",
|
|
9814
|
+
properties: {
|
|
9815
|
+
value: { type: "number", description: "The numeric value, used for computation." },
|
|
9816
|
+
label: { type: "string", description: "The qualitative label (what the assessor meant)." },
|
|
9817
|
+
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)." },
|
|
9818
|
+
normalized: { type: "number", description: "Normalized 0-1 value for cross-tool comparison (optional)." }
|
|
9819
|
+
},
|
|
9820
|
+
required: ["value", "label"]
|
|
9821
|
+
}
|
|
9520
9822
|
},
|
|
9521
9823
|
// FeatureProperties: A discrete, user-facing capability of the product.
|
|
9522
9824
|
feature: {
|
|
@@ -9551,28 +9853,30 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
9551
9853
|
feature_request: {
|
|
9552
9854
|
request_source: { type: "string", enum: ["customer", "internal", "prospect", "support", "community"], description: "Where the request originated" },
|
|
9553
9855
|
vote_count: { type: "number", description: "Number of votes or upvotes from users" },
|
|
9554
|
-
signal_sentiment: { type: "string", enum: ["positive", "
|
|
9856
|
+
signal_sentiment: { type: "string", enum: ["positive", "neutral", "negative", "mixed"], description: "Detected sentiment of the request" },
|
|
9555
9857
|
signal_channel: { type: "string", description: "Channel through which the request was received" },
|
|
9556
9858
|
signal_urgency: { type: "string", enum: ["low", "medium", "high", "critical"], description: "Perceived urgency of the request" },
|
|
9557
9859
|
revenue_impact: {
|
|
9558
|
-
type: "
|
|
9860
|
+
type: "assessment",
|
|
9861
|
+
scale_id: "impact_5",
|
|
9559
9862
|
description: "Estimated revenue impact if implemented (1-5)",
|
|
9560
9863
|
properties: {
|
|
9561
9864
|
value: { type: "number", description: "The numeric value, used for computation." },
|
|
9562
9865
|
label: { type: "string", description: "The qualitative label (what the assessor meant)." },
|
|
9563
|
-
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)" },
|
|
9564
|
-
normalized: { type: "number", description: "Normalized 0
|
|
9866
|
+
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)." },
|
|
9867
|
+
normalized: { type: "number", description: "Normalized 0-1 value for cross-tool comparison (optional)." }
|
|
9565
9868
|
},
|
|
9566
9869
|
required: ["value", "label"]
|
|
9567
9870
|
},
|
|
9568
9871
|
effort_estimate: {
|
|
9569
|
-
type: "
|
|
9872
|
+
type: "assessment",
|
|
9873
|
+
scale_id: "effort_5",
|
|
9570
9874
|
description: "Estimated implementation effort (1-5)",
|
|
9571
9875
|
properties: {
|
|
9572
9876
|
value: { type: "number", description: "The numeric value, used for computation." },
|
|
9573
9877
|
label: { type: "string", description: "The qualitative label (what the assessor meant)." },
|
|
9574
|
-
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)" },
|
|
9575
|
-
normalized: { type: "number", description: "Normalized 0
|
|
9878
|
+
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)." },
|
|
9879
|
+
normalized: { type: "number", description: "Normalized 0-1 value for cross-tool comparison (optional)." }
|
|
9576
9880
|
},
|
|
9577
9881
|
required: ["value", "label"]
|
|
9578
9882
|
},
|
|
@@ -9589,13 +9893,14 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
9589
9893
|
sentiment: { type: "string", enum: ["positive", "neutral", "negative", "mixed"], description: "Overall sentiment across mentions" },
|
|
9590
9894
|
actionable: { type: "boolean", description: "Whether this theme can be acted upon" },
|
|
9591
9895
|
frequency: {
|
|
9592
|
-
type: "
|
|
9896
|
+
type: "assessment",
|
|
9897
|
+
scale_id: "frequency_5",
|
|
9593
9898
|
description: "How often the theme is mentioned (1-5)",
|
|
9594
9899
|
properties: {
|
|
9595
9900
|
value: { type: "number", description: "The numeric value, used for computation." },
|
|
9596
9901
|
label: { type: "string", description: "The qualitative label (what the assessor meant)." },
|
|
9597
|
-
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)" },
|
|
9598
|
-
normalized: { type: "number", description: "Normalized 0
|
|
9902
|
+
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)." },
|
|
9903
|
+
normalized: { type: "number", description: "Normalized 0-1 value for cross-tool comparison (optional)." }
|
|
9599
9904
|
},
|
|
9600
9905
|
required: ["value", "label"]
|
|
9601
9906
|
},
|
|
@@ -9613,7 +9918,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
9613
9918
|
fix_type: { type: "string", enum: ["hotfix", "permanent", "workaround", "configuration", "process_change"], description: "Kind of fix. `hotfix` = urgent patch. `permanent` = proper structural fix. `workaround` = mitigates symptom without addressing root cause; should track a follow-up." },
|
|
9614
9919
|
commit: { type: "string", description: "Git commit SHA" },
|
|
9615
9920
|
files_changed: { type: "string[]", description: "Files changed" },
|
|
9616
|
-
deployed_at: { type: "string", description: "ISO timestamp landed in the target environment.
|
|
9921
|
+
deployed_at: { type: "string", description: "ISO timestamp landed in the target environment." },
|
|
9617
9922
|
fixed_date: { type: "string", description: "Application date (ISO date). Coarser-grained complement to `deployed_at`." },
|
|
9618
9923
|
verified: { type: "boolean", description: "Verified in production" },
|
|
9619
9924
|
verified_by_test: { type: "boolean", description: "Validated by an automated regression or integration test. Distinct from `verified` (human judgment)." }
|
|
@@ -9623,13 +9928,14 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
9623
9928
|
forecast_period: { type: "string", description: 'Time period the forecast covers (e.g. "Q2 2026")' },
|
|
9624
9929
|
predicted_revenue: { type: "number", description: "Predicted revenue amount" },
|
|
9625
9930
|
confidence: {
|
|
9626
|
-
type: "
|
|
9931
|
+
type: "assessment",
|
|
9932
|
+
scale_id: "confidence_5",
|
|
9627
9933
|
description: "Confidence in the prediction (1 = speculative, 5 = high conviction)",
|
|
9628
9934
|
properties: {
|
|
9629
9935
|
value: { type: "number", description: "The numeric value, used for computation." },
|
|
9630
9936
|
label: { type: "string", description: "The qualitative label (what the assessor meant)." },
|
|
9631
|
-
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)" },
|
|
9632
|
-
normalized: { type: "number", description: "Normalized 0
|
|
9937
|
+
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)." },
|
|
9938
|
+
normalized: { type: "number", description: "Normalized 0-1 value for cross-tool comparison (optional)." }
|
|
9633
9939
|
},
|
|
9634
9940
|
required: ["value", "label"]
|
|
9635
9941
|
},
|
|
@@ -9681,13 +9987,14 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
9681
9987
|
hallucination_report: {
|
|
9682
9988
|
report_type: { type: "string", enum: ["factual", "logical", "fabrication", "inconsistency"], description: "Classification" },
|
|
9683
9989
|
severity: {
|
|
9684
|
-
type: "
|
|
9990
|
+
type: "assessment",
|
|
9991
|
+
scale_id: "severity_5",
|
|
9685
9992
|
description: "Impact severity (1 = trivial, 5 = dangerous misinformation)",
|
|
9686
9993
|
properties: {
|
|
9687
9994
|
value: { type: "number", description: "The numeric value, used for computation." },
|
|
9688
9995
|
label: { type: "string", description: "The qualitative label (what the assessor meant)." },
|
|
9689
|
-
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)" },
|
|
9690
|
-
normalized: { type: "number", description: "Normalized 0
|
|
9996
|
+
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)." },
|
|
9997
|
+
normalized: { type: "number", description: "Normalized 0-1 value for cross-tool comparison (optional)." }
|
|
9691
9998
|
},
|
|
9692
9999
|
required: ["value", "label"]
|
|
9693
10000
|
},
|
|
@@ -9709,13 +10016,14 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
9709
10016
|
we_know_when: { type: "string", description: "The measurable signal that confirms or refutes the claim." },
|
|
9710
10017
|
risk_if_wrong: { type: "string", description: "Risk surface for prioritisation if the claim turns out wrong." },
|
|
9711
10018
|
current_confidence: {
|
|
9712
|
-
type: "
|
|
10019
|
+
type: "assessment",
|
|
10020
|
+
scale_id: "confidence_5",
|
|
9713
10021
|
description: "Team confidence at the current point in time. Derived from the weighted sum of attached `hypothesis_evidence` rows (formula spec'd separately). Authors may set explicitly; loaders may overwrite from derivation.",
|
|
9714
10022
|
properties: {
|
|
9715
10023
|
value: { type: "number", description: "The numeric value, used for computation." },
|
|
9716
10024
|
label: { type: "string", description: "The qualitative label (what the assessor meant)." },
|
|
9717
|
-
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)" },
|
|
9718
|
-
normalized: { type: "number", description: "Normalized 0
|
|
10025
|
+
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)." },
|
|
10026
|
+
normalized: { type: "number", description: "Normalized 0-1 value for cross-tool comparison (optional)." }
|
|
9719
10027
|
},
|
|
9720
10028
|
required: ["value", "label"]
|
|
9721
10029
|
}
|
|
@@ -9725,13 +10033,14 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
9725
10033
|
evidence_type: { type: "string", enum: ["experiment_run", "observation", "quote", "metric_change", "market_data", "interview"], description: "Kind of evidence. Drives renderer + filter UI. The provenance edge (`derived_from_*`) carries the actual source node reference per P14; this enum is typing/UI metadata." },
|
|
9726
10034
|
direction: { type: "string", enum: ["supports", "refutes", "neutral"], description: "Direction relative to the parent claim. Canonical direction axis aligned to `Evidence.direction` so every direction-of-evidence property uses the same vocab. `supports` = paired with the `supports` edge. `refutes` = paired with the `refutes` edge. `neutral` = data insufficient or noisy. BREAKING in v0.4.0: legacy `'confirms'`, `'disconfirms'`, `'inconclusive'` no longer type-check. Migration: `confirms \u2192 supports`, `disconfirms \u2192 refutes`, `inconclusive \u2192 neutral`." },
|
|
9727
10035
|
weight: {
|
|
9728
|
-
type: "
|
|
9729
|
-
|
|
10036
|
+
type: "assessment",
|
|
10037
|
+
scale_id: "importance_5",
|
|
10038
|
+
description: "Strength of the evidence (UPGAssessment, scale `scale_5`).",
|
|
9730
10039
|
properties: {
|
|
9731
10040
|
value: { type: "number", description: "The numeric value, used for computation." },
|
|
9732
10041
|
label: { type: "string", description: "The qualitative label (what the assessor meant)." },
|
|
9733
|
-
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)" },
|
|
9734
|
-
normalized: { type: "number", description: "Normalized 0
|
|
10042
|
+
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)." },
|
|
10043
|
+
normalized: { type: "number", description: "Normalized 0-1 value for cross-tool comparison (optional)." }
|
|
9735
10044
|
},
|
|
9736
10045
|
required: ["value", "label"]
|
|
9737
10046
|
},
|
|
@@ -9749,8 +10058,8 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
9749
10058
|
// IncidentProperties: Incident.
|
|
9750
10059
|
incident: {
|
|
9751
10060
|
incident_type: { type: "string", enum: ["operational", "security", "data_breach", "performance", "dependency", "other"], description: 'Discriminator. Absorbs the deprecated `security_incident` type. When `incident_type === \'security\'`, this node replaces the former `security_incident`. @example "security" for a data breach, "operational" for a service outage, "performance" for degradation' },
|
|
9752
|
-
severity_level: { type: "string", enum: ["sev1", "sev2", "sev3", "sev4"], description: '
|
|
9753
|
-
urgency: { type: "string", enum: ["high", "
|
|
10061
|
+
severity_level: { type: "string", enum: ["sev1", "sev2", "sev3", "sev4"], description: 'Incident severity tier (paging classification). `sev1` = critical/system down. `sev2` = major impact. `sev3` = minor impact. `sev4` = minimal. Uses the `IncidentSeverity` scale; distinct from user-impact `severity_5`. @example "sev1" for complete service unavailability' },
|
|
10062
|
+
urgency: { type: "string", enum: ["low", "medium", "high", "critical"], description: "Notification urgency. Independent of severity. Uses the shared `SignalUrgency` scale (`low` | `medium` | `high` | `critical`); higher tiers escalate the notification channel." },
|
|
9754
10063
|
started_at: { type: "string", description: "ISO timestamp the incident started or was first detected." },
|
|
9755
10064
|
acknowledged_at: { type: "string", description: "ISO timestamp first acknowledged by a responder. Used to compute time-to-acknowledge." },
|
|
9756
10065
|
contained_at: { type: "string", description: "ISO timestamp contained. Blast radius limited, bleeding stopped. Containment precedes full resolution, especially for security incidents." },
|
|
@@ -9776,7 +10085,18 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
9776
10085
|
// InsightProperties: Unified insight, synthesised from evidence and observations.
|
|
9777
10086
|
insight: {
|
|
9778
10087
|
insight_level: { type: "string", enum: ["pattern", "finding", "actionable", "strategic"], description: "Maturity level. `pattern` = recurring observation, not yet interpreted. `finding` = interpreted pattern with a clear meaning. `actionable` = finding with a clear next step. `strategic` = finding that affects product direction." },
|
|
9779
|
-
confidence: {
|
|
10088
|
+
confidence: {
|
|
10089
|
+
type: "assessment",
|
|
10090
|
+
scale_id: "confidence_5",
|
|
10091
|
+
description: "Confidence (UPGAssessment on `confidence_5`). Reflects the strength and diversity of supporting evidence.",
|
|
10092
|
+
properties: {
|
|
10093
|
+
value: { type: "number", description: "The numeric value, used for computation." },
|
|
10094
|
+
label: { type: "string", description: "The qualitative label (what the assessor meant)." },
|
|
10095
|
+
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)." },
|
|
10096
|
+
normalized: { type: "number", description: "Normalized 0-1 value for cross-tool comparison (optional)." }
|
|
10097
|
+
},
|
|
10098
|
+
required: ["value", "label"]
|
|
10099
|
+
},
|
|
9780
10100
|
evidence_count: { type: "number", description: "Supporting observations, quotes, or evidence items. Higher counts increase confidence." },
|
|
9781
10101
|
novelty: { type: "string", enum: ["known", "surprising", "contradictory"], description: "Novelty against existing knowledge. `known` = confirms what we already believed. `surprising` = challenges or extends our understanding. `contradictory` = directly conflicts with a prior assumption." },
|
|
9782
10102
|
actionability: { type: "string", enum: ["immediate", "needs_validation", "informational"], description: "Current actionability. `immediate` = clear action, no further research needed. `needs_validation` = promising but requires more evidence. `informational` = important context, no direct action." },
|
|
@@ -9814,20 +10134,21 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
9814
10134
|
// InvestigationProperties: Active thread of inquiry: debugging, architecture exploration, RCA.
|
|
9815
10135
|
investigation: {
|
|
9816
10136
|
severity: {
|
|
9817
|
-
type: "
|
|
10137
|
+
type: "assessment",
|
|
10138
|
+
scale_id: "severity_5",
|
|
9818
10139
|
description: "Believed severity of the underlying issue. Drives prioritisation across investigations. Canonicalised in v0.4.0: the ad-hoc `'low' | 'medium' | 'high' | 'critical'` shape was replaced by `UPGAssessment` so every \"severity\" property reports on the same axis. Migration: `low \u2192 2`, `medium \u2192 3`, `high \u2192 4`, `critical \u2192 5`.",
|
|
9819
10140
|
properties: {
|
|
9820
10141
|
value: { type: "number", description: "The numeric value, used for computation." },
|
|
9821
10142
|
label: { type: "string", description: "The qualitative label (what the assessor meant)." },
|
|
9822
|
-
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)" },
|
|
9823
|
-
normalized: { type: "number", description: "Normalized 0
|
|
10143
|
+
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)." },
|
|
10144
|
+
normalized: { type: "number", description: "Normalized 0-1 value for cross-tool comparison (optional)." }
|
|
9824
10145
|
},
|
|
9825
10146
|
required: ["value", "label"]
|
|
9826
10147
|
},
|
|
9827
10148
|
hypothesis: { type: "string", description: "Working hypothesis about the root cause" },
|
|
9828
10149
|
findings: { type: "string", description: "Findings discovered so far" },
|
|
9829
10150
|
started_at: { type: "string", description: "ISO timestamp the investigation began" },
|
|
9830
|
-
resolved_at: { type: "string", description: "ISO timestamp the investigation was concluded. Pairs with `
|
|
10151
|
+
resolved_at: { type: "string", description: "ISO timestamp the investigation was concluded. Pairs with `status === 'resolved' | 'abandoned'`." },
|
|
9831
10152
|
lead_investigator: { type: "string", description: "Lead investigator (email or handle). Distinct from the team owning the affected service." },
|
|
9832
10153
|
session_id: { type: "string", description: "Originating session" },
|
|
9833
10154
|
category: { type: "string", enum: ["performance", "security", "data_quality", "reliability", "cost", "compliance", "other"], description: "Kind of issue under investigation. Distinct from `RootCauseProperties.cause_category`, which captures *why something went wrong*." }
|
|
@@ -9853,24 +10174,26 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
9853
10174
|
statement: { type: "string", description: 'Job statement: "When I... I want to... So I can..."' },
|
|
9854
10175
|
job_type: { type: "string", enum: ["functional", "emotional", "social", "supporting"], description: "Classification by motivation dimension" },
|
|
9855
10176
|
importance: {
|
|
9856
|
-
type: "
|
|
10177
|
+
type: "assessment",
|
|
10178
|
+
scale_id: "importance_5",
|
|
9857
10179
|
description: "Importance to the user (1 = low, 5 = critical)",
|
|
9858
10180
|
properties: {
|
|
9859
10181
|
value: { type: "number", description: "The numeric value, used for computation." },
|
|
9860
10182
|
label: { type: "string", description: "The qualitative label (what the assessor meant)." },
|
|
9861
|
-
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)" },
|
|
9862
|
-
normalized: { type: "number", description: "Normalized 0
|
|
10183
|
+
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)." },
|
|
10184
|
+
normalized: { type: "number", description: "Normalized 0-1 value for cross-tool comparison (optional)." }
|
|
9863
10185
|
},
|
|
9864
10186
|
required: ["value", "label"]
|
|
9865
10187
|
},
|
|
9866
10188
|
current_satisfaction: {
|
|
9867
|
-
type: "
|
|
10189
|
+
type: "assessment",
|
|
10190
|
+
scale_id: "satisfaction_5",
|
|
9868
10191
|
description: "Current satisfaction with how this job gets done (1 = very unsatisfied, 5 = fully satisfied)",
|
|
9869
10192
|
properties: {
|
|
9870
10193
|
value: { type: "number", description: "The numeric value, used for computation." },
|
|
9871
10194
|
label: { type: "string", description: "The qualitative label (what the assessor meant)." },
|
|
9872
|
-
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)" },
|
|
9873
|
-
normalized: { type: "number", description: "Normalized 0
|
|
10195
|
+
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)." },
|
|
10196
|
+
normalized: { type: "number", description: "Normalized 0-1 value for cross-tool comparison (optional)." }
|
|
9874
10197
|
},
|
|
9875
10198
|
required: ["value", "label"]
|
|
9876
10199
|
},
|
|
@@ -9888,24 +10211,26 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
9888
10211
|
action_description: { type: "string", description: "Plain-language description. Primary content of the action." },
|
|
9889
10212
|
channel: { type: "string", enum: ["in-app", "email", "web", "mobile", "phone", "in-person", "sms", "social", "other"], description: "Channel or surface. Keeps service-blueprint columns consistent across the journey." },
|
|
9890
10213
|
pain_score: {
|
|
9891
|
-
type: "
|
|
10214
|
+
type: "assessment",
|
|
10215
|
+
scale_id: "pain_5",
|
|
9892
10216
|
description: "Pain (1 = effortless, 5 = very painful). Drives opportunity discovery.",
|
|
9893
10217
|
properties: {
|
|
9894
10218
|
value: { type: "number", description: "The numeric value, used for computation." },
|
|
9895
10219
|
label: { type: "string", description: "The qualitative label (what the assessor meant)." },
|
|
9896
|
-
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)" },
|
|
9897
|
-
normalized: { type: "number", description: "Normalized 0
|
|
10220
|
+
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)." },
|
|
10221
|
+
normalized: { type: "number", description: "Normalized 0-1 value for cross-tool comparison (optional)." }
|
|
9898
10222
|
},
|
|
9899
10223
|
required: ["value", "label"]
|
|
9900
10224
|
},
|
|
9901
10225
|
opportunity_score: {
|
|
9902
|
-
type: "
|
|
10226
|
+
type: "assessment",
|
|
10227
|
+
scale_id: "impact_5",
|
|
9903
10228
|
description: "Opportunity (1 = low leverage, 5 = high leverage). Pairs with `pain_score` to rank investment.",
|
|
9904
10229
|
properties: {
|
|
9905
10230
|
value: { type: "number", description: "The numeric value, used for computation." },
|
|
9906
10231
|
label: { type: "string", description: "The qualitative label (what the assessor meant)." },
|
|
9907
|
-
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)" },
|
|
9908
|
-
normalized: { type: "number", description: "Normalized 0
|
|
10232
|
+
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)." },
|
|
10233
|
+
normalized: { type: "number", description: "Normalized 0-1 value for cross-tool comparison (optional)." }
|
|
9909
10234
|
},
|
|
9910
10235
|
required: ["value", "label"]
|
|
9911
10236
|
},
|
|
@@ -9929,24 +10254,26 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
9929
10254
|
touchpoint: { type: "string", description: "Interaction touchpoint" },
|
|
9930
10255
|
channel: { type: "string", description: 'Channel (e.g. "web", "email", "in-store")' },
|
|
9931
10256
|
emotion_score: {
|
|
9932
|
-
type: "
|
|
10257
|
+
type: "assessment",
|
|
10258
|
+
scale_id: "satisfaction_5",
|
|
9933
10259
|
description: "User emotion (1 = very negative, 5 = very positive)",
|
|
9934
10260
|
properties: {
|
|
9935
10261
|
value: { type: "number", description: "The numeric value, used for computation." },
|
|
9936
10262
|
label: { type: "string", description: "The qualitative label (what the assessor meant)." },
|
|
9937
|
-
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)" },
|
|
9938
|
-
normalized: { type: "number", description: "Normalized 0
|
|
10263
|
+
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)." },
|
|
10264
|
+
normalized: { type: "number", description: "Normalized 0-1 value for cross-tool comparison (optional)." }
|
|
9939
10265
|
},
|
|
9940
10266
|
required: ["value", "label"]
|
|
9941
10267
|
},
|
|
9942
10268
|
friction_score: {
|
|
9943
|
-
type: "
|
|
10269
|
+
type: "assessment",
|
|
10270
|
+
scale_id: "pain_5",
|
|
9944
10271
|
description: "Friction (1 = effortless, 5 = very painful)",
|
|
9945
10272
|
properties: {
|
|
9946
10273
|
value: { type: "number", description: "The numeric value, used for computation." },
|
|
9947
10274
|
label: { type: "string", description: "The qualitative label (what the assessor meant)." },
|
|
9948
|
-
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)" },
|
|
9949
|
-
normalized: { type: "number", description: "Normalized 0
|
|
10275
|
+
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)." },
|
|
10276
|
+
normalized: { type: "number", description: "Normalized 0-1 value for cross-tool comparison (optional)." }
|
|
9950
10277
|
},
|
|
9951
10278
|
required: ["value", "label"]
|
|
9952
10279
|
},
|
|
@@ -9959,7 +10286,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
9959
10286
|
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`.' },
|
|
9960
10287
|
frequency_count: { type: "number", description: "Exact count of runs in the period. Pairs with `frequency_period`." },
|
|
9961
10288
|
frequency_period: { type: "string", description: "Recurrence period (ISO-8601 `Duration`, e.g. `'P7D'`)" },
|
|
9962
|
-
frequency_rating: { type: "string", enum: ["
|
|
10289
|
+
frequency_rating: { type: "string", enum: ["constant", "regular", "occasional", "rare", "other"], description: "Qualitative tier. Use when an exact rate is unknown." },
|
|
9963
10290
|
operational_owner: { type: "string", description: "Operationally accountable team or individual" },
|
|
9964
10291
|
capacity_constraint: { type: "string", description: "Bottleneck or scaling constraint" },
|
|
9965
10292
|
automation_level: { type: "string", enum: ["manual", "assisted", "automated"], description: "How much runs without human intervention" }
|
|
@@ -9970,13 +10297,14 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
9970
10297
|
criticality: { type: "string", enum: ["urgent", "high", "medium", "low", "none"], description: "Criticality to the business model" },
|
|
9971
10298
|
owner: { type: "string", description: "Accountable person or team" },
|
|
9972
10299
|
scarcity_risk: {
|
|
9973
|
-
type: "
|
|
10300
|
+
type: "assessment",
|
|
10301
|
+
scale_id: "severity_5",
|
|
9974
10302
|
description: "Replacement difficulty",
|
|
9975
10303
|
properties: {
|
|
9976
10304
|
value: { type: "number", description: "The numeric value, used for computation." },
|
|
9977
10305
|
label: { type: "string", description: "The qualitative label (what the assessor meant)." },
|
|
9978
|
-
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)" },
|
|
9979
|
-
normalized: { type: "number", description: "Normalized 0
|
|
10306
|
+
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)." },
|
|
10307
|
+
normalized: { type: "number", description: "Normalized 0-1 value for cross-tool comparison (optional)." }
|
|
9980
10308
|
},
|
|
9981
10309
|
required: ["value", "label"]
|
|
9982
10310
|
},
|
|
@@ -10010,7 +10338,6 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10010
10338
|
// LearningProperties: Result of an experiment. Evidence that updates a hypothesis.
|
|
10011
10339
|
learning: {
|
|
10012
10340
|
result: { type: "string", description: "Summary" },
|
|
10013
|
-
metric: { type: "string", description: 'Observed metric. @deprecated since="0.4.0" removeIn="0.5.0". Use the canonical edge `learning_observed_on_metric` to link to the metric structurally. Free-text was the wrong shape: a metric is a queryable graph entity.' },
|
|
10014
10341
|
result_value: { type: "number", description: "Measured value of the result" },
|
|
10015
10342
|
result_unit: { type: "string", description: 'Unit (e.g. "%" or "ms")' },
|
|
10016
10343
|
result_direction: { type: "string", enum: ["supports", "refutes", "neutral"], description: "Direction relative to the parent hypothesis. Canonical direction axis. BREAKING in v0.4.0: legacy `'positive'`, `'negative'`, `'neutral'` are replaced by `'supports'`, `'refutes'`, `'neutral'` to align with `Evidence.direction` and `HypothesisEvidence.direction`. Migration: `positive \u2192 supports`, `negative \u2192 refutes`, `neutral \u2192 neutral`." },
|
|
@@ -10066,25 +10393,27 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10066
10393
|
// MarketTrendProperties: Market trend.
|
|
10067
10394
|
market_trend: {
|
|
10068
10395
|
relevance: {
|
|
10069
|
-
type: "
|
|
10396
|
+
type: "assessment",
|
|
10397
|
+
scale_id: "importance_5",
|
|
10070
10398
|
description: "Relevance to our product (1 = low, 5 = critical).",
|
|
10071
10399
|
properties: {
|
|
10072
10400
|
value: { type: "number", description: "The numeric value, used for computation." },
|
|
10073
10401
|
label: { type: "string", description: "The qualitative label (what the assessor meant)." },
|
|
10074
|
-
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)" },
|
|
10075
|
-
normalized: { type: "number", description: "Normalized 0
|
|
10402
|
+
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)." },
|
|
10403
|
+
normalized: { type: "number", description: "Normalized 0-1 value for cross-tool comparison (optional)." }
|
|
10076
10404
|
},
|
|
10077
10405
|
required: ["value", "label"]
|
|
10078
10406
|
},
|
|
10079
10407
|
timeframe: { type: "string", description: 'Expected peak or mainstream window. @example "12-18 months", "2027"' },
|
|
10080
10408
|
impact: {
|
|
10081
|
-
type: "
|
|
10409
|
+
type: "assessment",
|
|
10410
|
+
scale_id: "impact_5",
|
|
10082
10411
|
description: "Expected impact on our market or category.",
|
|
10083
10412
|
properties: {
|
|
10084
10413
|
value: { type: "number", description: "The numeric value, used for computation." },
|
|
10085
10414
|
label: { type: "string", description: "The qualitative label (what the assessor meant)." },
|
|
10086
|
-
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)" },
|
|
10087
|
-
normalized: { type: "number", description: "Normalized 0
|
|
10415
|
+
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)." },
|
|
10416
|
+
normalized: { type: "number", description: "Normalized 0-1 value for cross-tool comparison (optional)." }
|
|
10088
10417
|
},
|
|
10089
10418
|
required: ["value", "label"]
|
|
10090
10419
|
},
|
|
@@ -10195,35 +10524,38 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10195
10524
|
valence: { type: "string", enum: ["pain", "gap", "constraint"], description: "What kind of experience: pain (friction), gap (unmet), constraint (limitation)" },
|
|
10196
10525
|
maturity: { type: "string", enum: ["raw", "validated", "prioritized"], description: "How mature is this need in our understanding" },
|
|
10197
10526
|
frequency: {
|
|
10198
|
-
type: "
|
|
10527
|
+
type: "assessment",
|
|
10528
|
+
scale_id: "frequency_5",
|
|
10199
10529
|
description: "How often the user encounters this need (1 = rarely, 5 = constantly)",
|
|
10200
10530
|
properties: {
|
|
10201
10531
|
value: { type: "number", description: "The numeric value, used for computation." },
|
|
10202
10532
|
label: { type: "string", description: "The qualitative label (what the assessor meant)." },
|
|
10203
|
-
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)" },
|
|
10204
|
-
normalized: { type: "number", description: "Normalized 0
|
|
10533
|
+
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)." },
|
|
10534
|
+
normalized: { type: "number", description: "Normalized 0-1 value for cross-tool comparison (optional)." }
|
|
10205
10535
|
},
|
|
10206
10536
|
required: ["value", "label"]
|
|
10207
10537
|
},
|
|
10208
10538
|
severity: {
|
|
10209
|
-
type: "
|
|
10539
|
+
type: "assessment",
|
|
10540
|
+
scale_id: "severity_5",
|
|
10210
10541
|
description: "How painful or disruptive the need is when unaddressed (1 = minor, 5 = critical)",
|
|
10211
10542
|
properties: {
|
|
10212
10543
|
value: { type: "number", description: "The numeric value, used for computation." },
|
|
10213
10544
|
label: { type: "string", description: "The qualitative label (what the assessor meant)." },
|
|
10214
|
-
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)" },
|
|
10215
|
-
normalized: { type: "number", description: "Normalized 0
|
|
10545
|
+
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)." },
|
|
10546
|
+
normalized: { type: "number", description: "Normalized 0-1 value for cross-tool comparison (optional)." }
|
|
10216
10547
|
},
|
|
10217
10548
|
required: ["value", "label"]
|
|
10218
10549
|
},
|
|
10219
10550
|
importance: {
|
|
10220
|
-
type: "
|
|
10551
|
+
type: "assessment",
|
|
10552
|
+
scale_id: "importance_5",
|
|
10221
10553
|
description: "How important resolving this need is to the user (1 = low, 5 = critical)",
|
|
10222
10554
|
properties: {
|
|
10223
10555
|
value: { type: "number", description: "The numeric value, used for computation." },
|
|
10224
10556
|
label: { type: "string", description: "The qualitative label (what the assessor meant)." },
|
|
10225
|
-
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)" },
|
|
10226
|
-
normalized: { type: "number", description: "Normalized 0
|
|
10557
|
+
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)." },
|
|
10558
|
+
normalized: { type: "number", description: "Normalized 0-1 value for cross-tool comparison (optional)." }
|
|
10227
10559
|
},
|
|
10228
10560
|
required: ["value", "label"]
|
|
10229
10561
|
},
|
|
@@ -10244,13 +10576,14 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10244
10576
|
statement: { type: "string", description: "The objection as stated by the source" },
|
|
10245
10577
|
source_type: { type: "string", enum: ["prospect", "competitor", "internal", "market"], description: "Where this objection originated" },
|
|
10246
10578
|
severity: {
|
|
10247
|
-
type: "
|
|
10579
|
+
type: "assessment",
|
|
10580
|
+
scale_id: "severity_5",
|
|
10248
10581
|
description: "How frequently or strongly this objection comes up (1-5)",
|
|
10249
10582
|
properties: {
|
|
10250
10583
|
value: { type: "number", description: "The numeric value, used for computation." },
|
|
10251
10584
|
label: { type: "string", description: "The qualitative label (what the assessor meant)." },
|
|
10252
|
-
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)" },
|
|
10253
|
-
normalized: { type: "number", description: "Normalized 0
|
|
10585
|
+
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)." },
|
|
10586
|
+
normalized: { type: "number", description: "Normalized 0-1 value for cross-tool comparison (optional)." }
|
|
10254
10587
|
},
|
|
10255
10588
|
required: ["value", "label"]
|
|
10256
10589
|
},
|
|
@@ -10269,7 +10602,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10269
10602
|
session_ref: { type: "string", description: "Capturing session reference. Convenience field; the canonical relationship to study/session is an edge per P14. Retained as a lightweight context anchor for AI inference." },
|
|
10270
10603
|
is_highlighted: { type: "boolean", description: "Flagged as a highlight. Absorbed from the deprecated Highlight entity." },
|
|
10271
10604
|
highlight_tag: { type: "string", description: 'Free-form highlight type tag. @example "pain", "delight", "behaviour", "moment of clarity"' },
|
|
10272
|
-
sentiment: { type: "string", enum: ["positive", "
|
|
10605
|
+
sentiment: { type: "string", enum: ["positive", "neutral", "negative", "mixed"], description: "Structured sentiment. Tools like Dovetail and EnjoyHQ converge on these four values. More precise than `highlight_tag` for aggregation." }
|
|
10273
10606
|
},
|
|
10274
10607
|
// OnCallRotationProperties: On-call rotation.
|
|
10275
10608
|
on_call_rotation: {
|
|
@@ -10281,35 +10614,38 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10281
10614
|
// OpportunityProperties: A problem worth solving, grounded in user need and business value
|
|
10282
10615
|
opportunity: {
|
|
10283
10616
|
reach: {
|
|
10284
|
-
type: "
|
|
10617
|
+
type: "assessment",
|
|
10618
|
+
scale_id: "reach_5",
|
|
10285
10619
|
description: "How many users experience this problem",
|
|
10286
10620
|
properties: {
|
|
10287
10621
|
value: { type: "number", description: "The numeric value, used for computation." },
|
|
10288
10622
|
label: { type: "string", description: "The qualitative label (what the assessor meant)." },
|
|
10289
|
-
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)" },
|
|
10290
|
-
normalized: { type: "number", description: "Normalized 0
|
|
10623
|
+
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)." },
|
|
10624
|
+
normalized: { type: "number", description: "Normalized 0-1 value for cross-tool comparison (optional)." }
|
|
10291
10625
|
},
|
|
10292
10626
|
required: ["value", "label"]
|
|
10293
10627
|
},
|
|
10294
10628
|
frequency: {
|
|
10295
|
-
type: "
|
|
10629
|
+
type: "assessment",
|
|
10630
|
+
scale_id: "frequency_5",
|
|
10296
10631
|
description: "How often users experience this problem",
|
|
10297
10632
|
properties: {
|
|
10298
10633
|
value: { type: "number", description: "The numeric value, used for computation." },
|
|
10299
10634
|
label: { type: "string", description: "The qualitative label (what the assessor meant)." },
|
|
10300
|
-
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)" },
|
|
10301
|
-
normalized: { type: "number", description: "Normalized 0
|
|
10635
|
+
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)." },
|
|
10636
|
+
normalized: { type: "number", description: "Normalized 0-1 value for cross-tool comparison (optional)." }
|
|
10302
10637
|
},
|
|
10303
10638
|
required: ["value", "label"]
|
|
10304
10639
|
},
|
|
10305
10640
|
pain: {
|
|
10306
|
-
type: "
|
|
10641
|
+
type: "assessment",
|
|
10642
|
+
scale_id: "pain_5",
|
|
10307
10643
|
description: "How painful it is when unaddressed",
|
|
10308
10644
|
properties: {
|
|
10309
10645
|
value: { type: "number", description: "The numeric value, used for computation." },
|
|
10310
10646
|
label: { type: "string", description: "The qualitative label (what the assessor meant)." },
|
|
10311
|
-
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)" },
|
|
10312
|
-
normalized: { type: "number", description: "Normalized 0
|
|
10647
|
+
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)." },
|
|
10648
|
+
normalized: { type: "number", description: "Normalized 0-1 value for cross-tool comparison (optional)." }
|
|
10313
10649
|
},
|
|
10314
10650
|
required: ["value", "label"]
|
|
10315
10651
|
},
|
|
@@ -10330,17 +10666,18 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10330
10666
|
current_state: { type: "string", description: "Baseline or latest read" },
|
|
10331
10667
|
evidence_summary: { type: "string", description: "Evidence gathered so far (quotes, metrics, studies)" },
|
|
10332
10668
|
confidence: {
|
|
10333
|
-
type: "
|
|
10669
|
+
type: "assessment",
|
|
10670
|
+
scale_id: "confidence_5",
|
|
10334
10671
|
description: "Confidence this is the right outcome to pursue",
|
|
10335
10672
|
properties: {
|
|
10336
10673
|
value: { type: "number", description: "The numeric value, used for computation." },
|
|
10337
10674
|
label: { type: "string", description: "The qualitative label (what the assessor meant)." },
|
|
10338
|
-
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)" },
|
|
10339
|
-
normalized: { type: "number", description: "Normalized 0
|
|
10675
|
+
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)." },
|
|
10676
|
+
normalized: { type: "number", description: "Normalized 0-1 value for cross-tool comparison (optional)." }
|
|
10340
10677
|
},
|
|
10341
10678
|
required: ["value", "label"]
|
|
10342
10679
|
},
|
|
10343
|
-
outcome_status: { type: "string", description: "Current lifecycle phase
|
|
10680
|
+
outcome_status: { type: "string", enum: ["identified", "measuring", "achieved", "abandoned"], description: "Current lifecycle phase, mirroring the `outcome` lifecycle in `grammar/lifecycles.ts` (UPG-579 Option B): `identified` -> `measuring` -> `achieved` | `abandoned`." }
|
|
10344
10681
|
},
|
|
10345
10682
|
// ParticipantProperties: Research participant.
|
|
10346
10683
|
participant: {
|
|
@@ -10371,13 +10708,14 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10371
10708
|
value_exchange: { type: "string", description: "What each party gives and receives" },
|
|
10372
10709
|
partnership_tier: { type: "string", enum: ["strategic", "preferred", "standard", "trial"], description: "Commercial significance. Drives attention and exec sponsorship." },
|
|
10373
10710
|
risk_level: {
|
|
10374
|
-
type: "
|
|
10711
|
+
type: "assessment",
|
|
10712
|
+
scale_id: "severity_5",
|
|
10375
10713
|
description: "Exposure if the partnership fails (concentration risk, IP risk, etc.)",
|
|
10376
10714
|
properties: {
|
|
10377
10715
|
value: { type: "number", description: "The numeric value, used for computation." },
|
|
10378
10716
|
label: { type: "string", description: "The qualitative label (what the assessor meant)." },
|
|
10379
|
-
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)" },
|
|
10380
|
-
normalized: { type: "number", description: "Normalized 0
|
|
10717
|
+
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)." },
|
|
10718
|
+
normalized: { type: "number", description: "Normalized 0-1 value for cross-tool comparison (optional)." }
|
|
10381
10719
|
},
|
|
10382
10720
|
required: ["value", "label"]
|
|
10383
10721
|
},
|
|
@@ -10418,7 +10756,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10418
10756
|
},
|
|
10419
10757
|
// PipelineSalesProperties: Sales pipeline.
|
|
10420
10758
|
pipeline_sales: {
|
|
10421
|
-
pipeline_type: { type: "string", description:
|
|
10759
|
+
pipeline_type: { type: "string", enum: ["new_business", "expansion", "renewal", "partner", "other"], description: "Classification of the pipeline (UPG-579 Option B)." },
|
|
10422
10760
|
avg_cycle_days: { type: "number", description: "Average days from opportunity creation to close" }
|
|
10423
10761
|
},
|
|
10424
10762
|
// PipelineStageProperties: Pipeline stage.
|
|
@@ -10460,7 +10798,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10460
10798
|
// PricingStrategyProperties: Pricing strategy.
|
|
10461
10799
|
pricing_strategy: {
|
|
10462
10800
|
strategy_type: { type: "string", enum: ["value_based", "cost_plus", "competitor_based", "penetration", "freemium"], description: "Pricing methodology used" },
|
|
10463
|
-
review_cadence: { type: "string", description: "How often pricing is reviewed" },
|
|
10801
|
+
review_cadence: { type: "string", enum: ["continuous", "hourly", "daily", "weekly", "monthly", "quarterly", "yearly", "on_demand", "other"], description: "How often pricing is reviewed. Uses the shared `Cadence` scale." },
|
|
10464
10802
|
last_change: { type: "string", description: "Date of the last pricing change (ISO format)" }
|
|
10465
10803
|
},
|
|
10466
10804
|
// PricingTierProperties: PricingTier: the central pricing concept (the plan a customer buys).
|
|
@@ -10569,13 +10907,14 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10569
10907
|
rebuttal: {
|
|
10570
10908
|
statement: { type: "string", description: "The counter-argument or response to an objection" },
|
|
10571
10909
|
strength: {
|
|
10572
|
-
type: "
|
|
10910
|
+
type: "assessment",
|
|
10911
|
+
scale_id: "scale_5",
|
|
10573
10912
|
description: "How convincing this rebuttal is (1-5)",
|
|
10574
10913
|
properties: {
|
|
10575
10914
|
value: { type: "number", description: "The numeric value, used for computation." },
|
|
10576
10915
|
label: { type: "string", description: "The qualitative label (what the assessor meant)." },
|
|
10577
|
-
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)" },
|
|
10578
|
-
normalized: { type: "number", description: "Normalized 0
|
|
10916
|
+
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)." },
|
|
10917
|
+
normalized: { type: "number", description: "Normalized 0-1 value for cross-tool comparison (optional)." }
|
|
10579
10918
|
},
|
|
10580
10919
|
required: ["value", "label"]
|
|
10581
10920
|
},
|
|
@@ -10668,24 +11007,26 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10668
11007
|
risk: {
|
|
10669
11008
|
risk_type: { type: "string", enum: ["technical", "business", "legal", "security", "operational"], description: "Domain the risk belongs to" },
|
|
10670
11009
|
probability: {
|
|
10671
|
-
type: "
|
|
11010
|
+
type: "assessment",
|
|
11011
|
+
scale_id: "confidence_5",
|
|
10672
11012
|
description: "How likely this risk is to materialise (1 = unlikely, 5 = near certain)",
|
|
10673
11013
|
properties: {
|
|
10674
11014
|
value: { type: "number", description: "The numeric value, used for computation." },
|
|
10675
11015
|
label: { type: "string", description: "The qualitative label (what the assessor meant)." },
|
|
10676
|
-
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)" },
|
|
10677
|
-
normalized: { type: "number", description: "Normalized 0
|
|
11016
|
+
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)." },
|
|
11017
|
+
normalized: { type: "number", description: "Normalized 0-1 value for cross-tool comparison (optional)." }
|
|
10678
11018
|
},
|
|
10679
11019
|
required: ["value", "label"]
|
|
10680
11020
|
},
|
|
10681
11021
|
impact: {
|
|
10682
|
-
type: "
|
|
11022
|
+
type: "assessment",
|
|
11023
|
+
scale_id: "impact_5",
|
|
10683
11024
|
description: "Severity of consequences if the risk materialises (1 = negligible, 5 = catastrophic)",
|
|
10684
11025
|
properties: {
|
|
10685
11026
|
value: { type: "number", description: "The numeric value, used for computation." },
|
|
10686
11027
|
label: { type: "string", description: "The qualitative label (what the assessor meant)." },
|
|
10687
|
-
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)" },
|
|
10688
|
-
normalized: { type: "number", description: "Normalized 0
|
|
11028
|
+
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)." },
|
|
11029
|
+
normalized: { type: "number", description: "Normalized 0-1 value for cross-tool comparison (optional)." }
|
|
10689
11030
|
},
|
|
10690
11031
|
required: ["value", "label"]
|
|
10691
11032
|
},
|
|
@@ -10706,7 +11047,18 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10706
11047
|
quarter: { type: "string", description: 'Planning quarter (e.g. "Q2 2026"). Pair with `start_date`/`target_date` for precise scheduling.' },
|
|
10707
11048
|
priority: { type: "string", enum: ["urgent", "high", "medium", "low", "none"], description: "Importance against other items" },
|
|
10708
11049
|
item_status: { type: "string", enum: ["planned", "in_progress", "shipped", "deferred"], description: "Status. `deferred` = explicitly pushed to a later period." },
|
|
10709
|
-
confidence: {
|
|
11050
|
+
confidence: {
|
|
11051
|
+
type: "assessment",
|
|
11052
|
+
scale_id: "confidence_5",
|
|
11053
|
+
description: "Delivery confidence within the planned period (UPGAssessment on `confidence_5`).",
|
|
11054
|
+
properties: {
|
|
11055
|
+
value: { type: "number", description: "The numeric value, used for computation." },
|
|
11056
|
+
label: { type: "string", description: "The qualitative label (what the assessor meant)." },
|
|
11057
|
+
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)." },
|
|
11058
|
+
normalized: { type: "number", description: "Normalized 0-1 value for cross-tool comparison (optional)." }
|
|
11059
|
+
},
|
|
11060
|
+
required: ["value", "label"]
|
|
11061
|
+
},
|
|
10710
11062
|
start_date: { type: "string", description: "ISO date work begins. More precise than `quarter` for continuous planning." },
|
|
10711
11063
|
target_date: { type: "string", description: "ISO date completion is expected. For shipped items, the actual completion date." }
|
|
10712
11064
|
},
|
|
@@ -10720,13 +11072,14 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10720
11072
|
// RootCauseProperties: Underlying architectural or systemic issue.
|
|
10721
11073
|
root_cause: {
|
|
10722
11074
|
severity: {
|
|
10723
|
-
type: "
|
|
11075
|
+
type: "assessment",
|
|
11076
|
+
scale_id: "severity_5",
|
|
10724
11077
|
description: "Severity (1 = minor, 5 = critical)",
|
|
10725
11078
|
properties: {
|
|
10726
11079
|
value: { type: "number", description: "The numeric value, used for computation." },
|
|
10727
11080
|
label: { type: "string", description: "The qualitative label (what the assessor meant)." },
|
|
10728
|
-
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)" },
|
|
10729
|
-
normalized: { type: "number", description: "Normalized 0
|
|
11081
|
+
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)." },
|
|
11082
|
+
normalized: { type: "number", description: "Normalized 0-1 value for cross-tool comparison (optional)." }
|
|
10730
11083
|
},
|
|
10731
11084
|
required: ["value", "label"]
|
|
10732
11085
|
},
|
|
@@ -10776,13 +11129,14 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10776
11129
|
security_control: {
|
|
10777
11130
|
control_type: { type: "string", enum: ["preventive", "detective", "corrective", "compensating"], description: "Functional role. `preventive` = stops attacks (MFA, input validation). `detective` = identifies attacks in progress (intrusion detection, audit logs). `corrective` = reduces impact after an attack (incident response, backup restore). `compensating` = alternative when primary isn't feasible." },
|
|
10778
11131
|
effectiveness: {
|
|
10779
|
-
type: "
|
|
11132
|
+
type: "assessment",
|
|
11133
|
+
scale_id: "impact_5",
|
|
10780
11134
|
description: "Mitigation effectiveness (1 = minimal, 5 = fully effective)",
|
|
10781
11135
|
properties: {
|
|
10782
11136
|
value: { type: "number", description: "The numeric value, used for computation." },
|
|
10783
11137
|
label: { type: "string", description: "The qualitative label (what the assessor meant)." },
|
|
10784
|
-
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)" },
|
|
10785
|
-
normalized: { type: "number", description: "Normalized 0
|
|
11138
|
+
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)." },
|
|
11139
|
+
normalized: { type: "number", description: "Normalized 0-1 value for cross-tool comparison (optional)." }
|
|
10786
11140
|
},
|
|
10787
11141
|
required: ["value", "label"]
|
|
10788
11142
|
},
|
|
@@ -10793,7 +11147,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10793
11147
|
// SecurityPolicyProperties: Security policy.
|
|
10794
11148
|
security_policy: {
|
|
10795
11149
|
scope: { type: "string", description: "Systems or processes covered" },
|
|
10796
|
-
review_cadence: { type: "string", description:
|
|
11150
|
+
review_cadence: { type: "string", enum: ["continuous", "hourly", "daily", "weekly", "monthly", "quarterly", "yearly", "on_demand", "other"], description: "Review cadence (e.g. `yearly`, `quarterly`). Uses the shared `Cadence` scale." },
|
|
10797
11151
|
version: { type: "string", description: "Version" },
|
|
10798
11152
|
effective_date: { type: "string", description: "ISO effective date" },
|
|
10799
11153
|
url: { type: "string", description: "Policy document URL" },
|
|
@@ -10864,17 +11218,18 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10864
11218
|
},
|
|
10865
11219
|
// SkillProperties: Skill entity.
|
|
10866
11220
|
skill: {
|
|
10867
|
-
skill_category: { type: "string",
|
|
11221
|
+
skill_category: { type: "string", enum: ["technical", "leadership", "design", "product", "business", "operations", "other"], description: "Category of the skill (UPG-579 Option B)." },
|
|
10868
11222
|
proficiency_levels: { type: "string[]", description: "Description of proficiency levels for this skill" },
|
|
10869
11223
|
domain: { type: "string", description: 'Problem domain the skill applies to (e.g. "payments", "accessibility")' },
|
|
10870
11224
|
rarity: {
|
|
10871
|
-
type: "
|
|
11225
|
+
type: "assessment",
|
|
11226
|
+
scale_id: "scale_5",
|
|
10872
11227
|
description: "How scarce this skill is in the labour market this team hires from",
|
|
10873
11228
|
properties: {
|
|
10874
11229
|
value: { type: "number", description: "The numeric value, used for computation." },
|
|
10875
11230
|
label: { type: "string", description: "The qualitative label (what the assessor meant)." },
|
|
10876
|
-
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)" },
|
|
10877
|
-
normalized: { type: "number", description: "Normalized 0
|
|
11231
|
+
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)." },
|
|
11232
|
+
normalized: { type: "number", description: "Normalized 0-1 value for cross-tool comparison (optional)." }
|
|
10878
11233
|
},
|
|
10879
11234
|
required: ["value", "label"]
|
|
10880
11235
|
},
|
|
@@ -10890,46 +11245,50 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10890
11245
|
solution: {
|
|
10891
11246
|
timeline: { type: "string", description: "Estimated delivery or target timeline" },
|
|
10892
11247
|
reach: {
|
|
10893
|
-
type: "
|
|
11248
|
+
type: "assessment",
|
|
11249
|
+
scale_id: "reach_5",
|
|
10894
11250
|
description: "How many users this solution reaches (1 = few, 5 = most)",
|
|
10895
11251
|
properties: {
|
|
10896
11252
|
value: { type: "number", description: "The numeric value, used for computation." },
|
|
10897
11253
|
label: { type: "string", description: "The qualitative label (what the assessor meant)." },
|
|
10898
|
-
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)" },
|
|
10899
|
-
normalized: { type: "number", description: "Normalized 0
|
|
11254
|
+
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)." },
|
|
11255
|
+
normalized: { type: "number", description: "Normalized 0-1 value for cross-tool comparison (optional)." }
|
|
10900
11256
|
},
|
|
10901
11257
|
required: ["value", "label"]
|
|
10902
11258
|
},
|
|
10903
11259
|
impact: {
|
|
10904
|
-
type: "
|
|
11260
|
+
type: "assessment",
|
|
11261
|
+
scale_id: "impact_5",
|
|
10905
11262
|
description: "Expected impact on the target outcome (1 = minimal, 5 = transformative)",
|
|
10906
11263
|
properties: {
|
|
10907
11264
|
value: { type: "number", description: "The numeric value, used for computation." },
|
|
10908
11265
|
label: { type: "string", description: "The qualitative label (what the assessor meant)." },
|
|
10909
|
-
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)" },
|
|
10910
|
-
normalized: { type: "number", description: "Normalized 0
|
|
11266
|
+
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)." },
|
|
11267
|
+
normalized: { type: "number", description: "Normalized 0-1 value for cross-tool comparison (optional)." }
|
|
10911
11268
|
},
|
|
10912
11269
|
required: ["value", "label"]
|
|
10913
11270
|
},
|
|
10914
11271
|
confidence: {
|
|
10915
|
-
type: "
|
|
11272
|
+
type: "assessment",
|
|
11273
|
+
scale_id: "confidence_5",
|
|
10916
11274
|
description: "How confident the team is in this solution (1 = speculative, 5 = proven)",
|
|
10917
11275
|
properties: {
|
|
10918
11276
|
value: { type: "number", description: "The numeric value, used for computation." },
|
|
10919
11277
|
label: { type: "string", description: "The qualitative label (what the assessor meant)." },
|
|
10920
|
-
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)" },
|
|
10921
|
-
normalized: { type: "number", description: "Normalized 0
|
|
11278
|
+
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)." },
|
|
11279
|
+
normalized: { type: "number", description: "Normalized 0-1 value for cross-tool comparison (optional)." }
|
|
10922
11280
|
},
|
|
10923
11281
|
required: ["value", "label"]
|
|
10924
11282
|
},
|
|
10925
11283
|
effort: {
|
|
10926
|
-
type: "
|
|
11284
|
+
type: "assessment",
|
|
11285
|
+
scale_id: "effort_5",
|
|
10927
11286
|
description: "Level of effort required to implement (1 = trivial, 5 = very large)",
|
|
10928
11287
|
properties: {
|
|
10929
11288
|
value: { type: "number", description: "The numeric value, used for computation." },
|
|
10930
11289
|
label: { type: "string", description: "The qualitative label (what the assessor meant)." },
|
|
10931
|
-
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)" },
|
|
10932
|
-
normalized: { type: "number", description: "Normalized 0
|
|
11290
|
+
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)." },
|
|
11291
|
+
normalized: { type: "number", description: "Normalized 0-1 value for cross-tool comparison (optional)." }
|
|
10933
11292
|
},
|
|
10934
11293
|
required: ["value", "label"]
|
|
10935
11294
|
},
|
|
@@ -10939,24 +11298,26 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10939
11298
|
stakeholder: {
|
|
10940
11299
|
stakeholder_type: { type: "string", enum: ["internal", "external", "investor", "regulator"], description: "Relationship of the stakeholder to the organisation" },
|
|
10941
11300
|
influence: {
|
|
10942
|
-
type: "
|
|
11301
|
+
type: "assessment",
|
|
11302
|
+
scale_id: "importance_5",
|
|
10943
11303
|
description: "How much influence this stakeholder has over decisions (1 = minimal, 5 = decisive)",
|
|
10944
11304
|
properties: {
|
|
10945
11305
|
value: { type: "number", description: "The numeric value, used for computation." },
|
|
10946
11306
|
label: { type: "string", description: "The qualitative label (what the assessor meant)." },
|
|
10947
|
-
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)" },
|
|
10948
|
-
normalized: { type: "number", description: "Normalized 0
|
|
11307
|
+
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)." },
|
|
11308
|
+
normalized: { type: "number", description: "Normalized 0-1 value for cross-tool comparison (optional)." }
|
|
10949
11309
|
},
|
|
10950
11310
|
required: ["value", "label"]
|
|
10951
11311
|
},
|
|
10952
11312
|
interest: {
|
|
10953
|
-
type: "
|
|
11313
|
+
type: "assessment",
|
|
11314
|
+
scale_id: "importance_5",
|
|
10954
11315
|
description: "How much interest this stakeholder has in the outcome (1 = passive, 5 = deeply invested)",
|
|
10955
11316
|
properties: {
|
|
10956
11317
|
value: { type: "number", description: "The numeric value, used for computation." },
|
|
10957
11318
|
label: { type: "string", description: "The qualitative label (what the assessor meant)." },
|
|
10958
|
-
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)" },
|
|
10959
|
-
normalized: { type: "number", description: "Normalized 0
|
|
11319
|
+
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)." },
|
|
11320
|
+
normalized: { type: "number", description: "Normalized 0-1 value for cross-tool comparison (optional)." }
|
|
10960
11321
|
},
|
|
10961
11322
|
required: ["value", "label"]
|
|
10962
11323
|
}
|
|
@@ -10968,19 +11329,6 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10968
11329
|
risks_flagged: { type: "number", description: "Number of risks flagged in this report" },
|
|
10969
11330
|
blockers: { type: "string", description: "Description of current blockers" }
|
|
10970
11331
|
},
|
|
10971
|
-
// UserStoryProperties: "As X, I want Y so Z" templated promise, a user story (UCS pattern P5).
|
|
10972
|
-
user_story: {
|
|
10973
|
-
as_a: { type: "string", description: '"As a [persona], \u2026". Free-text persona name or slug ref.' },
|
|
10974
|
-
i_want_to: { type: "string", description: "Capability or action the persona wants." },
|
|
10975
|
-
so_that: { type: "string", description: "Benefit or outcome the persona expects." },
|
|
10976
|
-
text: { type: "string", description: "Free-form story text. Used as a single-line rendered view." }
|
|
10977
|
-
},
|
|
10978
|
-
// StoryTaskProperties
|
|
10979
|
-
story_task: {
|
|
10980
|
-
estimate: { type: "string", description: "@deprecated Use TaskProperties.estimate" },
|
|
10981
|
-
effort: { type: "number", description: "@deprecated Use TaskProperties.effort (string form)" },
|
|
10982
|
-
priority: { type: "string", enum: ["urgent", "high", "medium", "low", "none"], description: "@deprecated Use TaskProperties.priority" }
|
|
10983
|
-
},
|
|
10984
11332
|
// StrategicPillarProperties: StrategicPillar entity. Durable multi-year direction the product commits to.
|
|
10985
11333
|
strategic_pillar: {
|
|
10986
11334
|
owner: { type: "string", description: "Owning person or team" },
|
|
@@ -11014,19 +11362,20 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
11014
11362
|
support_ticket: {
|
|
11015
11363
|
ticket_type: { type: "string", enum: ["bug", "question", "feature_request"], description: "Classification of the ticket" },
|
|
11016
11364
|
severity: {
|
|
11017
|
-
type: "
|
|
11365
|
+
type: "assessment",
|
|
11366
|
+
scale_id: "severity_5",
|
|
11018
11367
|
description: "Impact severity of the issue (1 = cosmetic, 5 = service down)",
|
|
11019
11368
|
properties: {
|
|
11020
11369
|
value: { type: "number", description: "The numeric value, used for computation." },
|
|
11021
11370
|
label: { type: "string", description: "The qualitative label (what the assessor meant)." },
|
|
11022
|
-
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)" },
|
|
11023
|
-
normalized: { type: "number", description: "Normalized 0
|
|
11371
|
+
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)." },
|
|
11372
|
+
normalized: { type: "number", description: "Normalized 0-1 value for cross-tool comparison (optional)." }
|
|
11024
11373
|
},
|
|
11025
11374
|
required: ["value", "label"]
|
|
11026
11375
|
},
|
|
11027
11376
|
resolution: { type: "string", description: "Description of how the ticket was resolved" },
|
|
11028
11377
|
source: { type: "string", description: 'Where the ticket originated (e.g. "email", "in-app", "chat")' },
|
|
11029
|
-
signal_sentiment: { type: "string", enum: ["positive", "
|
|
11378
|
+
signal_sentiment: { type: "string", enum: ["positive", "neutral", "negative", "mixed"], description: "Detected sentiment of the customer's message" },
|
|
11030
11379
|
signal_channel: { type: "string", description: "Channel through which the signal was received" },
|
|
11031
11380
|
signal_urgency: { type: "string", enum: ["low", "medium", "high", "critical"], description: "Perceived urgency of the customer's request" }
|
|
11032
11381
|
},
|
|
@@ -11047,19 +11396,20 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
11047
11396
|
symptom_description: { type: "string", description: "Plain-language description of observed behaviour. Primary content of the entity." },
|
|
11048
11397
|
first_observed_at: { type: "string", description: "ISO timestamp first observed in the wild. Pairs with `frequency_rating` and `reproducibility` for triage." },
|
|
11049
11398
|
severity: {
|
|
11050
|
-
type: "
|
|
11399
|
+
type: "assessment",
|
|
11400
|
+
scale_id: "severity_5",
|
|
11051
11401
|
description: "Severity for affected users. Independent of how widespread the symptom is. Canonicalised in v0.4.0: the ad-hoc `'low' | 'medium' | 'high' | 'critical'` shape was replaced by `UPGAssessment`.",
|
|
11052
11402
|
properties: {
|
|
11053
11403
|
value: { type: "number", description: "The numeric value, used for computation." },
|
|
11054
11404
|
label: { type: "string", description: "The qualitative label (what the assessor meant)." },
|
|
11055
|
-
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)" },
|
|
11056
|
-
normalized: { type: "number", description: "Normalized 0
|
|
11405
|
+
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)." },
|
|
11406
|
+
normalized: { type: "number", description: "Normalized 0-1 value for cross-tool comparison (optional)." }
|
|
11057
11407
|
},
|
|
11058
11408
|
required: ["value", "label"]
|
|
11059
11409
|
},
|
|
11060
11410
|
frequency_count: { type: "number", description: "Exact observation count in the period. Pairs with `frequency_period` for a precise rate." },
|
|
11061
11411
|
frequency_period: { type: "string", description: "Recurrence period (ISO-8601 `Duration`). @example 'P7D' (per week), 'P1D' (per day), 'PT1H' (per hour)" },
|
|
11062
|
-
frequency_rating: { type: "string", enum: ["
|
|
11412
|
+
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`." },
|
|
11063
11413
|
affected_users_estimate: { type: "number", description: "Approximate count of users affected. Snapshot estimate." },
|
|
11064
11414
|
reproducibility: { type: "string", enum: ["always", "frequent", "intermittent", "rare", "once"], description: "Reproduction reliability" },
|
|
11065
11415
|
steps_to_reproduce: { type: "string", description: "Steps to reproduce" }
|
|
@@ -11072,7 +11422,6 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
11072
11422
|
},
|
|
11073
11423
|
// TaskProperties: Task: a discrete unit of work, smaller than a story.
|
|
11074
11424
|
task: {
|
|
11075
|
-
task_status: { type: "string", enum: ["todo", "in_progress", "in_review", "done"], description: "@deprecated since v0.4.0. Use top-level `UPGBaseNode.status`. Values map identically: todo | in_progress | in_review | done. Migration: `UPG_PROPERTY_MIGRATIONS['0.4.0']` lifts this to `status`." },
|
|
11076
11425
|
assignee: { type: "string", description: "Assigned person" },
|
|
11077
11426
|
effort: { type: "string", description: 'Effort estimate (e.g. "2h", "1d", "3 points"). Use a consistent unit within your team.' },
|
|
11078
11427
|
priority: { type: "string", enum: ["urgent", "high", "medium", "low", "none"], description: "Relative importance against other tasks" },
|
|
@@ -11097,24 +11446,26 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
11097
11446
|
technical_debt_item: {
|
|
11098
11447
|
debt_type: { type: "string", enum: ["code", "architecture", "security", "test", "docs", "dependency"], description: "Type of debt. `code` = quality issues. `architecture` = structural problems. `security` = unpatched vulnerabilities. `test` = missing/flaky tests. `docs` = missing or stale documentation. `dependency` = outdated packages." },
|
|
11099
11448
|
severity: {
|
|
11100
|
-
type: "
|
|
11449
|
+
type: "assessment",
|
|
11450
|
+
scale_id: "severity_5",
|
|
11101
11451
|
description: "Severity on system or team. Requires human evaluation.",
|
|
11102
11452
|
properties: {
|
|
11103
11453
|
value: { type: "number", description: "The numeric value, used for computation." },
|
|
11104
11454
|
label: { type: "string", description: "The qualitative label (what the assessor meant)." },
|
|
11105
|
-
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)" },
|
|
11106
|
-
normalized: { type: "number", description: "Normalized 0
|
|
11455
|
+
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)." },
|
|
11456
|
+
normalized: { type: "number", description: "Normalized 0-1 value for cross-tool comparison (optional)." }
|
|
11107
11457
|
},
|
|
11108
11458
|
required: ["value", "label"]
|
|
11109
11459
|
},
|
|
11110
11460
|
effort_to_fix: {
|
|
11111
|
-
type: "
|
|
11461
|
+
type: "assessment",
|
|
11462
|
+
scale_id: "effort_5",
|
|
11112
11463
|
description: "Estimated effort to resolve. Requires team knowledge of the codebase.",
|
|
11113
11464
|
properties: {
|
|
11114
11465
|
value: { type: "number", description: "The numeric value, used for computation." },
|
|
11115
11466
|
label: { type: "string", description: "The qualitative label (what the assessor meant)." },
|
|
11116
|
-
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)" },
|
|
11117
|
-
normalized: { type: "number", description: "Normalized 0
|
|
11467
|
+
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)." },
|
|
11468
|
+
normalized: { type: "number", description: "Normalized 0-1 value for cross-tool comparison (optional)." }
|
|
11118
11469
|
},
|
|
11119
11470
|
required: ["value", "label"]
|
|
11120
11471
|
},
|
|
@@ -11197,24 +11548,26 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
11197
11548
|
threat: {
|
|
11198
11549
|
category: { type: "string", description: 'Attack or threat scenario. @example "injection", "misconfiguration", "social engineering", "supply chain"' },
|
|
11199
11550
|
likelihood: {
|
|
11200
|
-
type: "
|
|
11551
|
+
type: "assessment",
|
|
11552
|
+
scale_id: "confidence_5",
|
|
11201
11553
|
description: "Likelihood (1 = theoretical, 5 = actively exploited). @example value 5 for a known, exploitable, commonly targeted pattern",
|
|
11202
11554
|
properties: {
|
|
11203
11555
|
value: { type: "number", description: "The numeric value, used for computation." },
|
|
11204
11556
|
label: { type: "string", description: "The qualitative label (what the assessor meant)." },
|
|
11205
|
-
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)" },
|
|
11206
|
-
normalized: { type: "number", description: "Normalized 0
|
|
11557
|
+
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)." },
|
|
11558
|
+
normalized: { type: "number", description: "Normalized 0-1 value for cross-tool comparison (optional)." }
|
|
11207
11559
|
},
|
|
11208
11560
|
required: ["value", "label"]
|
|
11209
11561
|
},
|
|
11210
11562
|
impact: {
|
|
11211
|
-
type: "
|
|
11563
|
+
type: "assessment",
|
|
11564
|
+
scale_id: "impact_5",
|
|
11212
11565
|
description: "Impact (1 = minimal, 5 = catastrophic). @example value 5 for threats that expose PII or cause complete service compromise",
|
|
11213
11566
|
properties: {
|
|
11214
11567
|
value: { type: "number", description: "The numeric value, used for computation." },
|
|
11215
11568
|
label: { type: "string", description: "The qualitative label (what the assessor meant)." },
|
|
11216
|
-
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)" },
|
|
11217
|
-
normalized: { type: "number", description: "Normalized 0
|
|
11569
|
+
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)." },
|
|
11570
|
+
normalized: { type: "number", description: "Normalized 0-1 value for cross-tool comparison (optional)." }
|
|
11218
11571
|
},
|
|
11219
11572
|
required: ["value", "label"]
|
|
11220
11573
|
},
|
|
@@ -11272,7 +11625,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
11272
11625
|
// UserAdvisoryBoardProperties: User advisory board.
|
|
11273
11626
|
user_advisory_board: {
|
|
11274
11627
|
member_count: { type: "number", description: "Number of members on the board" },
|
|
11275
|
-
meeting_cadence: { type: "string", description:
|
|
11628
|
+
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." },
|
|
11276
11629
|
board_focus: { type: "string", description: "Primary topic or area the board advises on" }
|
|
11277
11630
|
},
|
|
11278
11631
|
// UserFlowProperties: User flow.
|
|
@@ -11288,6 +11641,13 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
11288
11641
|
journey_type: { type: "string", enum: ["current_state", "future_state", "day_in_the_life", "service_blueprint"], description: "Maps current or future state" },
|
|
11289
11642
|
scenario: { type: "string", description: "Scenario context" }
|
|
11290
11643
|
},
|
|
11644
|
+
// UserStoryProperties: "As X, I want Y so Z" templated promise on a user story (UCS pattern P5).
|
|
11645
|
+
user_story: {
|
|
11646
|
+
as_a: { type: "string", description: '"As a [persona], \u2026". Free-text persona name or slug ref.' },
|
|
11647
|
+
i_want_to: { type: "string", description: "Capability or action the persona wants." },
|
|
11648
|
+
so_that: { type: "string", description: "Benefit or outcome the persona expects." },
|
|
11649
|
+
text: { type: "string", description: "Free-form story text. Used as a single-line rendered view." }
|
|
11650
|
+
},
|
|
11291
11651
|
// ValueObjectProperties: DDD value object.
|
|
11292
11652
|
value_object: {
|
|
11293
11653
|
immutable: { type: "boolean", description: "Whether immutable" },
|
|
@@ -11302,7 +11662,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
11302
11662
|
},
|
|
11303
11663
|
// ValueStreamProperties: ValueStream entity.
|
|
11304
11664
|
value_stream: {
|
|
11305
|
-
stream_stage: { type: "string", description: "Current stage in the value delivery pipeline" },
|
|
11665
|
+
stream_stage: { type: "string", enum: ["discovery", "definition", "build", "delivery", "operation", "other"], description: "Current stage in the value delivery pipeline (UPG-579 Option B)." },
|
|
11306
11666
|
lead_time: { type: "string", description: 'End-to-end lead time. @example "2 weeks"' },
|
|
11307
11667
|
throughput: { type: "string", description: 'Throughput measure. @example "5 features/sprint"' }
|
|
11308
11668
|
},
|
|
@@ -11322,7 +11682,18 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
11322
11682
|
vulnerability: {
|
|
11323
11683
|
cve_id: { type: "string", description: 'CVE identifier from the National Vulnerability Database. @example "CVE-2024-1234"' },
|
|
11324
11684
|
cvss_score: { type: "number", description: "CVSS numeric score (0.0\u201310.0). Computed from the CVSS vector. Distinct from the categorical `severity`. @example 9.8 (critical), 6.5 (medium), 3.7 (low)" },
|
|
11325
|
-
severity: {
|
|
11685
|
+
severity: {
|
|
11686
|
+
type: "assessment",
|
|
11687
|
+
scale_id: "severity_5",
|
|
11688
|
+
description: "Categorical severity derived from CVSS. Impact severity (UPGAssessment on the `severity_5` scale). Score alone is insufficient for triage; severity drives filtering and prioritisation. Migrated from the inline `critical|high|medium|low|informational` enum (UPG-579 Option C): map `critical` -> 5, `high` -> 4, `medium` -> 3, `low` -> 2, `informational` -> 1; carry the old word in `label`. @example value 5, label 'Critical', scale_id 'severity_5' (a remotely exploitable, no-auth vuln)",
|
|
11689
|
+
properties: {
|
|
11690
|
+
value: { type: "number", description: "The numeric value, used for computation." },
|
|
11691
|
+
label: { type: "string", description: "The qualitative label (what the assessor meant)." },
|
|
11692
|
+
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)." },
|
|
11693
|
+
normalized: { type: "number", description: "Normalized 0-1 value for cross-tool comparison (optional)." }
|
|
11694
|
+
},
|
|
11695
|
+
required: ["value", "label"]
|
|
11696
|
+
},
|
|
11326
11697
|
cvss_version: { type: "string", enum: ["v3.1", "v4.0"], description: 'CVSS scoring version. v3.1 and v4.0 differ significantly for the same vulnerability. @example "v4.0" for vulnerabilities scored after the v4.0 release in 2023' },
|
|
11327
11698
|
affected_component: { type: "string", description: 'Affected component, library, or system. @example "lodash", "openssl", "login service"' },
|
|
11328
11699
|
affected_package: { type: "string", description: 'Affected package with version. More precise than `affected_component`. @example "lodash@4.17.20", "openssl@1.1.1q"' },
|
|
@@ -15964,6 +16335,7 @@ var STRATEGY_OUTCOMES_PLAYBOOK = {
|
|
|
15964
16335
|
description: "Cascade vision through themes, outcomes, objectives, key results, and the bets you are making to get there.",
|
|
15965
16336
|
region: "strategy_outcomes",
|
|
15966
16337
|
is_canonical: true,
|
|
16338
|
+
related_framework_ids: ["okr-framework", "three-horizons", "north-star-metric", "metrics-tree", "wardley-map"],
|
|
15967
16339
|
target_anchor_entity: "objective",
|
|
15968
16340
|
creation_sequence: [
|
|
15969
16341
|
seqStep(
|
|
@@ -16018,6 +16390,7 @@ var USERS_NEEDS_PLAYBOOK = {
|
|
|
16018
16390
|
description: "Bootstrap personas, jobs, needs, and desired outcomes: the user side of every product graph.",
|
|
16019
16391
|
region: "users_needs",
|
|
16020
16392
|
is_canonical: true,
|
|
16393
|
+
related_framework_ids: ["persona-canvas", "empathy-map", "value-proposition-canvas", "kano-model"],
|
|
16021
16394
|
target_anchor_entity: "persona",
|
|
16022
16395
|
creation_sequence: [
|
|
16023
16396
|
seqStep(
|
|
@@ -16071,6 +16444,7 @@ var DISCOVERY_RESEARCH_VALIDATION_PLAYBOOK = {
|
|
|
16071
16444
|
description: "Evidence-first discovery sequence: plan \u2192 recruit \u2192 observe \u2192 synthesize \u2192 insight \u2192 opportunity \u2192 hypothesis \u2192 test.",
|
|
16072
16445
|
region: "discovery_research_validation",
|
|
16073
16446
|
is_canonical: true,
|
|
16447
|
+
related_framework_ids: ["double-diamond", "opportunity-solution-tree", "build-measure-learn", "hypothesis-board"],
|
|
16074
16448
|
target_anchor_entity: "opportunity",
|
|
16075
16449
|
creation_sequence: [
|
|
16076
16450
|
seqStep(
|
|
@@ -16147,6 +16521,7 @@ var MARKET_COMPETITIVE_PLAYBOOK = {
|
|
|
16147
16521
|
description: "Map the competitive landscape: define the market, name the alternatives, read trends, find moves.",
|
|
16148
16522
|
region: "market_competitive",
|
|
16149
16523
|
is_canonical: true,
|
|
16524
|
+
related_framework_ids: ["porter-five-forces", "swot-analysis", "value-chain-analysis", "wardley-map", "bullseye-framework"],
|
|
16150
16525
|
target_anchor_entity: "competitor",
|
|
16151
16526
|
creation_sequence: [
|
|
16152
16527
|
seqStep(
|
|
@@ -16194,6 +16569,7 @@ var EXPERIENCE_DESIGN_BRAND_PLAYBOOK = {
|
|
|
16194
16569
|
description: "Journey-first design sequence: research \u2192 personas \u2192 journeys \u2192 define \u2192 ideate \u2192 prototype \u2192 test \u2192 design system.",
|
|
16195
16570
|
region: "experience_design_brand",
|
|
16196
16571
|
is_canonical: true,
|
|
16572
|
+
related_framework_ids: ["double-diamond", "atomic-design", "story-map"],
|
|
16197
16573
|
target_anchor_entity: "user_journey",
|
|
16198
16574
|
creation_sequence: [
|
|
16199
16575
|
seqStep(
|
|
@@ -16301,6 +16677,7 @@ var PRODUCT_DELIVERY_PLAYBOOK = {
|
|
|
16301
16677
|
description: "Shape what gets built: features, epics, user stories, releases, milestones, and the dependencies between them.",
|
|
16302
16678
|
region: "product_delivery",
|
|
16303
16679
|
is_canonical: true,
|
|
16680
|
+
related_framework_ids: ["story-map", "rice-scoring", "moscow", "now-next-later", "shape-up", "kano-model"],
|
|
16304
16681
|
target_anchor_entity: "feature",
|
|
16305
16682
|
creation_sequence: [
|
|
16306
16683
|
seqStep(
|
|
@@ -16364,6 +16741,7 @@ var ENGINEERING_PLATFORM_PLAYBOOK = {
|
|
|
16364
16741
|
description: "Architecture-first engineering sequence: architecture \u2192 services \u2192 data \u2192 build \u2192 test \u2192 deploy \u2192 monitor \u2192 security.",
|
|
16365
16742
|
region: "engineering_platform",
|
|
16366
16743
|
is_canonical: true,
|
|
16744
|
+
related_framework_ids: ["c4-model", "adr-log", "dora-metrics"],
|
|
16367
16745
|
target_anchor_entity: "service",
|
|
16368
16746
|
creation_sequence: [
|
|
16369
16747
|
seqStep(
|
|
@@ -16438,6 +16816,7 @@ var BUSINESS_GTM_GROWTH_PLAYBOOK = {
|
|
|
16438
16816
|
description: "Viability-first business sequence: value prop \u2192 customer \u2192 revenue \u2192 costs \u2192 unit economics \u2192 GTM \u2192 competitive advantage.",
|
|
16439
16817
|
region: "business_gtm_growth",
|
|
16440
16818
|
is_canonical: true,
|
|
16819
|
+
related_framework_ids: ["business-model-canvas", "pirate-metrics-aarrr", "north-star-metric", "product-led-growth-framework", "marketing-mix-4ps"],
|
|
16441
16820
|
target_anchor_entity: "value_proposition",
|
|
16442
16821
|
creation_sequence: [
|
|
16443
16822
|
seqStep(
|
|
@@ -16657,6 +17036,7 @@ var ANALYTICS_DATA_PLAYBOOK = {
|
|
|
16657
17036
|
description: "Bootstrap the measurement plane: sources, schemas, pipelines, metrics, dashboards, and the rules that keep them honest.",
|
|
16658
17037
|
region: "analytics_data",
|
|
16659
17038
|
is_canonical: true,
|
|
17039
|
+
related_framework_ids: ["metrics-tree", "north-star-metric", "pirate-metrics-aarrr", "dora-metrics"],
|
|
16660
17040
|
target_anchor_entity: "metric",
|
|
16661
17041
|
creation_sequence: [
|
|
16662
17042
|
seqStep(
|
|
@@ -16704,6 +17084,7 @@ var OPERATIONS_QUALITY_PLAYBOOK = {
|
|
|
16704
17084
|
description: "The operational backbone: pipelines, monitoring, incident response, security, quality gates, compliance, support. Specialised playbooks cover team rituals.",
|
|
16705
17085
|
region: "operations_quality",
|
|
16706
17086
|
is_canonical: true,
|
|
17087
|
+
related_framework_ids: ["raci-matrix", "retrospective", "team-health-check", "raid-log"],
|
|
16707
17088
|
target_anchor_entity: "incident",
|
|
16708
17089
|
creation_sequence: [
|
|
16709
17090
|
seqStep(
|
|
@@ -23609,7 +23990,7 @@ function isCanonical(text) {
|
|
|
23609
23990
|
}
|
|
23610
23991
|
|
|
23611
23992
|
// src/index.ts
|
|
23612
|
-
var UPG_VERSION = "0.
|
|
23993
|
+
var UPG_VERSION = "0.8.0";
|
|
23613
23994
|
var UPG_FORMAT_VERSION = "0.4.0";
|
|
23614
23995
|
var MARKDOWN_FORMAT_VERSION = "0.1";
|
|
23615
23996
|
var UPG_TYPES = getTypes();
|
|
@@ -23696,6 +24077,7 @@ export {
|
|
|
23696
24077
|
OPERATIONS_TEAM_RITUALS_PLAYBOOK,
|
|
23697
24078
|
PRODUCT_DELIVERY_PLAYBOOK,
|
|
23698
24079
|
PRODUCT_FEEDBACK_SYNTHESIS_PLAYBOOK,
|
|
24080
|
+
PROPERTY_SCALE_MAP,
|
|
23699
24081
|
REFLECT_MODES,
|
|
23700
24082
|
STRATEGY_OUTCOMES_PLAYBOOK,
|
|
23701
24083
|
UPG_ACTIVE_TYPES,
|
|
@@ -23796,6 +24178,7 @@ export {
|
|
|
23796
24178
|
getMigrationMap,
|
|
23797
24179
|
getPlaybookById,
|
|
23798
24180
|
getPlaybooksForRegion,
|
|
24181
|
+
getPropertiesForScale,
|
|
23799
24182
|
getPropertyDefaultScale,
|
|
23800
24183
|
getPropertyMigrations,
|
|
23801
24184
|
getPropertySchema,
|