@unified-product-graph/core 0.7.5 → 0.8.1
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 +611 -445
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +264 -156
- package/dist/index.d.ts +264 -156
- package/dist/index.js +609 -434
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -21,28 +21,18 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
|
21
21
|
var index_exports = {};
|
|
22
22
|
__export(index_exports, {
|
|
23
23
|
ANALYTICS_DATA_PLAYBOOK: () => ANALYTICS_DATA_PLAYBOOK,
|
|
24
|
-
BUSINESS_GROWTH_FUNNEL_PLAYBOOK: () => BUSINESS_GROWTH_FUNNEL_PLAYBOOK,
|
|
25
24
|
BUSINESS_GROWTH_METRIC_DRIVEN_PLAYBOOK: () => BUSINESS_GROWTH_METRIC_DRIVEN_PLAYBOOK,
|
|
26
25
|
BUSINESS_GTM_GROWTH_PLAYBOOK: () => BUSINESS_GTM_GROWTH_PLAYBOOK,
|
|
27
26
|
BUSINESS_MARKETING_AUDIENCE_FIRST_PLAYBOOK: () => BUSINESS_MARKETING_AUDIENCE_FIRST_PLAYBOOK,
|
|
28
|
-
BUSINESS_MARKETING_PLAYBOOK: () => BUSINESS_MARKETING_PLAYBOOK,
|
|
29
|
-
BUSINESS_MODEL_BMC_PLAYBOOK: () => BUSINESS_MODEL_BMC_PLAYBOOK,
|
|
30
|
-
BUSINESS_PRICING_PLAYBOOK: () => BUSINESS_PRICING_PLAYBOOK,
|
|
31
27
|
DISCOVERY_RESEARCH_VALIDATION_PLAYBOOK: () => DISCOVERY_RESEARCH_VALIDATION_PLAYBOOK,
|
|
32
|
-
DISCOVERY_VALIDATION_HYPOTHESIS_PLAYBOOK: () => DISCOVERY_VALIDATION_HYPOTHESIS_PLAYBOOK,
|
|
33
|
-
ENGINEERING_ARCHITECTURE_ONLY_PLAYBOOK: () => ENGINEERING_ARCHITECTURE_ONLY_PLAYBOOK,
|
|
34
28
|
ENGINEERING_PLATFORM_PLAYBOOK: () => ENGINEERING_PLATFORM_PLAYBOOK,
|
|
35
|
-
EXPERIENCE_CONTENT_PLAYBOOK: () => EXPERIENCE_CONTENT_PLAYBOOK,
|
|
36
29
|
EXPERIENCE_DESIGN_BRAND_PLAYBOOK: () => EXPERIENCE_DESIGN_BRAND_PLAYBOOK,
|
|
37
|
-
EXPERIENCE_DESIGN_SYSTEM_PLAYBOOK: () => EXPERIENCE_DESIGN_SYSTEM_PLAYBOOK,
|
|
38
|
-
EXPERIENCE_UX_DOMAIN_ONLY_PLAYBOOK: () => EXPERIENCE_UX_DOMAIN_ONLY_PLAYBOOK,
|
|
39
30
|
LEGACY_PRODUCT_STAGES: () => LEGACY_PRODUCT_STAGES,
|
|
40
31
|
MARKDOWN_FORMAT_VERSION: () => MARKDOWN_FORMAT_VERSION,
|
|
41
32
|
MARKET_COMPETITIVE_PLAYBOOK: () => MARKET_COMPETITIVE_PLAYBOOK,
|
|
42
33
|
OPERATIONS_QUALITY_PLAYBOOK: () => OPERATIONS_QUALITY_PLAYBOOK,
|
|
43
|
-
OPERATIONS_TEAM_RITUALS_PLAYBOOK: () => OPERATIONS_TEAM_RITUALS_PLAYBOOK,
|
|
44
34
|
PRODUCT_DELIVERY_PLAYBOOK: () => PRODUCT_DELIVERY_PLAYBOOK,
|
|
45
|
-
|
|
35
|
+
PROPERTY_SCALE_MAP: () => PROPERTY_SCALE_MAP,
|
|
46
36
|
REFLECT_MODES: () => REFLECT_MODES,
|
|
47
37
|
STRATEGY_OUTCOMES_PLAYBOOK: () => STRATEGY_OUTCOMES_PLAYBOOK,
|
|
48
38
|
UPG_ACTIVE_TYPES: () => UPG_ACTIVE_TYPES,
|
|
@@ -143,6 +133,7 @@ __export(index_exports, {
|
|
|
143
133
|
getMigrationMap: () => getMigrationMap,
|
|
144
134
|
getPlaybookById: () => getPlaybookById,
|
|
145
135
|
getPlaybooksForRegion: () => getPlaybooksForRegion,
|
|
136
|
+
getPropertiesForScale: () => getPropertiesForScale,
|
|
146
137
|
getPropertyDefaultScale: () => getPropertyDefaultScale,
|
|
147
138
|
getPropertyMigrations: () => getPropertyMigrations,
|
|
148
139
|
getPropertySchema: () => getPropertySchema,
|
|
@@ -6358,20 +6349,42 @@ var PROPERTY_SCALE_MAP = {
|
|
|
6358
6349
|
// discovery, users, feedback
|
|
6359
6350
|
// ── Severity ─────────────────────────────────────────────────────────────
|
|
6360
6351
|
severity: "severity_5",
|
|
6361
|
-
// users, engineering, ai, gtm, customer-success
|
|
6352
|
+
// users, engineering, ai, gtm, customer-success, security, accessibility
|
|
6362
6353
|
severity_of_finding: "severity_5",
|
|
6363
6354
|
// validation/experiment_run
|
|
6355
|
+
bug_severity: "severity_5",
|
|
6356
|
+
// product-spec/bug (UPG-579 Option C collapse)
|
|
6357
|
+
risk_level: "severity_5",
|
|
6358
|
+
// compliance/risk (UPG-579 Option B)
|
|
6359
|
+
scarcity_risk: "severity_5",
|
|
6360
|
+
// market-intelligence (UPG-579 Option B)
|
|
6364
6361
|
// ── Pain ─────────────────────────────────────────────────────────────────
|
|
6365
6362
|
pain: "pain_5",
|
|
6366
6363
|
// discovery
|
|
6364
|
+
pain_score: "pain_5",
|
|
6365
|
+
// user (UPG-579 Option B)
|
|
6366
|
+
friction_score: "pain_5",
|
|
6367
|
+
// growth/ux (UPG-579 Option B)
|
|
6367
6368
|
// ── Impact ───────────────────────────────────────────────────────────────
|
|
6368
6369
|
impact: "impact_5",
|
|
6369
6370
|
// discovery, market, security, compliance
|
|
6370
6371
|
projected_impact: "impact_5",
|
|
6371
6372
|
// validation/experiment_plan
|
|
6373
|
+
revenue_impact: "impact_5",
|
|
6374
|
+
// sales/business-model (UPG-579 Option B)
|
|
6375
|
+
effectiveness: "impact_5",
|
|
6376
|
+
// security/marketing (UPG-579 Option B)
|
|
6377
|
+
opportunity_score: "impact_5",
|
|
6378
|
+
// discovery/opportunity (UPG-579 Option B)
|
|
6372
6379
|
// ── Confidence ───────────────────────────────────────────────────────────
|
|
6373
6380
|
confidence: "confidence_5",
|
|
6374
6381
|
// discovery, validation, sales, product-spec
|
|
6382
|
+
current_confidence: "confidence_5",
|
|
6383
|
+
// validation/hypothesis (UPG-579 Option B)
|
|
6384
|
+
likelihood: "confidence_5",
|
|
6385
|
+
// market/risk (UPG-579 Option B)
|
|
6386
|
+
probability: "confidence_5",
|
|
6387
|
+
// sales/forecast (UPG-579 Option B)
|
|
6375
6388
|
// ── Effort ───────────────────────────────────────────────────────────────
|
|
6376
6389
|
effort: "effort_5",
|
|
6377
6390
|
// discovery
|
|
@@ -6379,17 +6392,35 @@ var PROPERTY_SCALE_MAP = {
|
|
|
6379
6392
|
// feedback
|
|
6380
6393
|
effort_to_fix: "effort_5",
|
|
6381
6394
|
// engineering
|
|
6395
|
+
cost_estimate: "effort_5",
|
|
6396
|
+
// validation/experiment_plan (UPG-579 Option B)
|
|
6382
6397
|
// ── Importance ───────────────────────────────────────────────────────────
|
|
6383
6398
|
importance: "importance_5",
|
|
6384
6399
|
// users
|
|
6400
|
+
influence: "importance_5",
|
|
6401
|
+
// team-org/stakeholder (UPG-579 Option B)
|
|
6402
|
+
interest: "importance_5",
|
|
6403
|
+
// team-org/stakeholder (UPG-579 Option B)
|
|
6404
|
+
relevance: "importance_5",
|
|
6405
|
+
// market/content (UPG-579 Option B)
|
|
6406
|
+
weight: "importance_5",
|
|
6407
|
+
// validation/evidence (UPG-579 Option B)
|
|
6385
6408
|
// ── Satisfaction ─────────────────────────────────────────────────────────
|
|
6386
|
-
current_satisfaction: "satisfaction_5"
|
|
6409
|
+
current_satisfaction: "satisfaction_5",
|
|
6387
6410
|
// users
|
|
6411
|
+
emotion_score: "satisfaction_5"
|
|
6412
|
+
// ux-design/customer-success journey (UPG-579 Option B)
|
|
6413
|
+
// Intentionally NOT mapped (resolve to the generic scale_5):
|
|
6414
|
+
// rarity : VRIO distinctiveness; no canonical named scale fits.
|
|
6415
|
+
// strength : deprecated (validation/evidence; superseded by weight).
|
|
6388
6416
|
};
|
|
6389
6417
|
var DEFAULT_SCALE_ID = "scale_5";
|
|
6390
6418
|
function getPropertyDefaultScale(_entityType, propertyName) {
|
|
6391
6419
|
return PROPERTY_SCALE_MAP[propertyName] ?? DEFAULT_SCALE_ID;
|
|
6392
6420
|
}
|
|
6421
|
+
function getPropertiesForScale(scaleId) {
|
|
6422
|
+
return Object.entries(PROPERTY_SCALE_MAP).filter(([, id]) => id === scaleId).map(([property]) => property);
|
|
6423
|
+
}
|
|
6393
6424
|
|
|
6394
6425
|
// src/grammar/enum-scales.ts
|
|
6395
6426
|
var UPG_ENUM_SCALES = {
|
|
@@ -6475,6 +6506,159 @@ var UPG_ENUM_SCALES = {
|
|
|
6475
6506
|
{ value: "warning", label: "Warning", description: "Soft signal: should consider and address, but can override with justification." },
|
|
6476
6507
|
{ value: "guideline", label: "Guideline", description: "Recommendation: encouraged and expected in most cases, but not enforced." }
|
|
6477
6508
|
]
|
|
6509
|
+
},
|
|
6510
|
+
// ── ProxyConfidence ─────────────────────────────────────────────────
|
|
6511
|
+
ProxyConfidence: {
|
|
6512
|
+
id: "ProxyConfidence",
|
|
6513
|
+
label: "Proxy confidence",
|
|
6514
|
+
description: "How strongly a proxy metric predicts the direct measure it stands in for.",
|
|
6515
|
+
tone_direction: "high-is-good",
|
|
6516
|
+
values: [
|
|
6517
|
+
{ value: "strong", label: "Strong", description: "Tracks the direct measure closely; a reliable stand-in." },
|
|
6518
|
+
{ value: "moderate", label: "Moderate", description: "Correlates with the direct measure but with meaningful slippage." },
|
|
6519
|
+
{ value: "weak", label: "Weak", description: "Loosely related; use with caution and corroborate." }
|
|
6520
|
+
]
|
|
6521
|
+
},
|
|
6522
|
+
// ── CauseConfidence ─────────────────────────────────────────────────
|
|
6523
|
+
CauseConfidence: {
|
|
6524
|
+
id: "CauseConfidence",
|
|
6525
|
+
label: "Cause confidence",
|
|
6526
|
+
description: "Maturity of a root-cause determination during incident debugging: how far a proposed cause has been validated.",
|
|
6527
|
+
tone_direction: "high-is-good",
|
|
6528
|
+
values: [
|
|
6529
|
+
{ value: "hypothesised", label: "Hypothesised", description: "A proposed cause, not yet tested against evidence." },
|
|
6530
|
+
{ value: "likely", label: "Likely", description: "Supported by evidence but not conclusively proven." },
|
|
6531
|
+
{ value: "confirmed", label: "Confirmed", description: "Verified as the cause; reproduced or otherwise established." }
|
|
6532
|
+
]
|
|
6533
|
+
},
|
|
6534
|
+
// ── ComfortLevel ────────────────────────────────────────────────────
|
|
6535
|
+
ComfortLevel: {
|
|
6536
|
+
id: "ComfortLevel",
|
|
6537
|
+
label: "Comfort level",
|
|
6538
|
+
description: "A person's comfort with a tool, technology, or practice. Closed set so personas compare on the same axis across products.",
|
|
6539
|
+
tone_direction: "high-is-good",
|
|
6540
|
+
values: [
|
|
6541
|
+
{ value: "low", label: "Low", description: "Little or no familiarity; needs guidance to proceed." },
|
|
6542
|
+
{ value: "medium", label: "Medium", description: "Functional, everyday competence." },
|
|
6543
|
+
{ value: "high", label: "High", description: "Confident, fluent use without assistance." },
|
|
6544
|
+
{ value: "expert", label: "Expert", description: "Deep mastery; can teach others or extend the tool." },
|
|
6545
|
+
{ value: "other", label: "Other", description: "A comfort profile not captured by the above tiers." }
|
|
6546
|
+
]
|
|
6547
|
+
},
|
|
6548
|
+
// ── LogLevel ────────────────────────────────────────────────────────
|
|
6549
|
+
LogLevel: {
|
|
6550
|
+
id: "LogLevel",
|
|
6551
|
+
label: "Log level",
|
|
6552
|
+
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).",
|
|
6553
|
+
tone_direction: "low-is-good",
|
|
6554
|
+
values: [
|
|
6555
|
+
{ value: "critical", label: "Critical", description: "Page immediately; the signal is service-affecting." },
|
|
6556
|
+
{ value: "warning", label: "Warning", description: "Needs attention soon; not yet service-affecting." },
|
|
6557
|
+
{ value: "info", label: "Info", description: "Informational; no action required." }
|
|
6558
|
+
]
|
|
6559
|
+
},
|
|
6560
|
+
// ── IncidentSeverity ────────────────────────────────────────────────
|
|
6561
|
+
IncidentSeverity: {
|
|
6562
|
+
id: "IncidentSeverity",
|
|
6563
|
+
label: "Incident severity",
|
|
6564
|
+
description: "Paging-tier classification of an incident, driving escalation and response process. Distinct from user-impact severity_5 and from LogLevel.",
|
|
6565
|
+
tone_direction: "low-is-good",
|
|
6566
|
+
values: [
|
|
6567
|
+
{ value: "sev1", label: "SEV1", description: "Critical outage; full response, executive-visible." },
|
|
6568
|
+
{ value: "sev2", label: "SEV2", description: "Major degradation; urgent response." },
|
|
6569
|
+
{ value: "sev3", label: "SEV3", description: "Minor or partial impact; handled within hours." },
|
|
6570
|
+
{ value: "sev4", label: "SEV4", description: "Negligible impact; routine handling." }
|
|
6571
|
+
]
|
|
6572
|
+
},
|
|
6573
|
+
// ── SignalSentiment ─────────────────────────────────────────────────
|
|
6574
|
+
SignalSentiment: {
|
|
6575
|
+
id: "SignalSentiment",
|
|
6576
|
+
label: "Signal sentiment",
|
|
6577
|
+
description: "Sentiment polarity of an inbound signal (feedback, support, customer).",
|
|
6578
|
+
tone_direction: "high-is-good",
|
|
6579
|
+
values: [
|
|
6580
|
+
{ value: "positive", label: "Positive", description: "Favourable signal; satisfaction or advocacy." },
|
|
6581
|
+
{ value: "neutral", label: "Neutral", description: "No clear positive or negative lean." },
|
|
6582
|
+
{ value: "negative", label: "Negative", description: "Unfavourable signal; dissatisfaction or risk." },
|
|
6583
|
+
{ value: "mixed", label: "Mixed", description: "Contains both positive and negative elements." }
|
|
6584
|
+
]
|
|
6585
|
+
},
|
|
6586
|
+
// ── MaturityLevel ───────────────────────────────────────────────────
|
|
6587
|
+
MaturityLevel: {
|
|
6588
|
+
id: "MaturityLevel",
|
|
6589
|
+
label: "Maturity level",
|
|
6590
|
+
description: "Capability or process maturity on the CMMI ladder.",
|
|
6591
|
+
tone_direction: "high-is-good",
|
|
6592
|
+
values: [
|
|
6593
|
+
{ value: "initial", label: "Initial", description: "Ad hoc and unpredictable; little process." },
|
|
6594
|
+
{ value: "developing", label: "Developing", description: "Basic process emerging but inconsistent." },
|
|
6595
|
+
{ value: "defined", label: "Defined", description: "Documented, standardised process in place." },
|
|
6596
|
+
{ value: "managed", label: "Managed", description: "Measured and controlled against objectives." },
|
|
6597
|
+
{ value: "optimizing", label: "Optimizing", description: "Continuous, data-driven improvement." }
|
|
6598
|
+
]
|
|
6599
|
+
},
|
|
6600
|
+
// ── ConformanceLevel ────────────────────────────────────────────────
|
|
6601
|
+
ConformanceLevel: {
|
|
6602
|
+
id: "ConformanceLevel",
|
|
6603
|
+
label: "Conformance level",
|
|
6604
|
+
description: "WCAG accessibility conformance level.",
|
|
6605
|
+
tone_direction: "high-is-good",
|
|
6606
|
+
values: [
|
|
6607
|
+
{ value: "A", label: "A", description: "Minimum conformance; essential barriers removed." },
|
|
6608
|
+
{ value: "AA", label: "AA", description: "Addresses the most common barriers; the usual legal target." },
|
|
6609
|
+
{ value: "AAA", label: "AAA", description: "Highest level; not achievable for all content." }
|
|
6610
|
+
]
|
|
6611
|
+
},
|
|
6612
|
+
// ── DataSensitivity ─────────────────────────────────────────────────
|
|
6613
|
+
DataSensitivity: {
|
|
6614
|
+
id: "DataSensitivity",
|
|
6615
|
+
label: "Data sensitivity",
|
|
6616
|
+
description: "Data classification tier governing handling and access.",
|
|
6617
|
+
tone_direction: "neutral",
|
|
6618
|
+
values: [
|
|
6619
|
+
{ value: "public", label: "Public", description: "No restriction; safe to disclose openly." },
|
|
6620
|
+
{ value: "internal", label: "Internal", description: "For internal use; not for external release." },
|
|
6621
|
+
{ value: "confidential", label: "Confidential", description: "Sensitive; restricted to a need-to-know basis." },
|
|
6622
|
+
{ value: "restricted", label: "Restricted", description: "Highly sensitive; strict controls and auditing." }
|
|
6623
|
+
]
|
|
6624
|
+
},
|
|
6625
|
+
// ── DifficultyLevel ─────────────────────────────────────────────────
|
|
6626
|
+
DifficultyLevel: {
|
|
6627
|
+
id: "DifficultyLevel",
|
|
6628
|
+
label: "Difficulty level",
|
|
6629
|
+
description: "Learner difficulty tier for educational content.",
|
|
6630
|
+
tone_direction: "neutral",
|
|
6631
|
+
values: [
|
|
6632
|
+
{ value: "beginner", label: "Beginner", description: "No prior knowledge assumed." },
|
|
6633
|
+
{ value: "intermediate", label: "Intermediate", description: "Assumes working familiarity with the basics." },
|
|
6634
|
+
{ value: "advanced", label: "Advanced", description: "Assumes deep, expert-level background." }
|
|
6635
|
+
]
|
|
6636
|
+
},
|
|
6637
|
+
// ── FrequencyRating ─────────────────────────────────────────────────
|
|
6638
|
+
FrequencyRating: {
|
|
6639
|
+
id: "FrequencyRating",
|
|
6640
|
+
label: "Frequency rating",
|
|
6641
|
+
description: "Qualitative how-often rating. Distinct from the numeric frequency_5 scale and from Cadence calendar tiers.",
|
|
6642
|
+
tone_direction: "neutral",
|
|
6643
|
+
values: [
|
|
6644
|
+
{ value: "constant", label: "Constant", description: "Effectively always; continuous occurrence." },
|
|
6645
|
+
{ value: "regular", label: "Regular", description: "Happens on a predictable, recurring basis." },
|
|
6646
|
+
{ value: "occasional", label: "Occasional", description: "Happens sometimes, without a fixed pattern." },
|
|
6647
|
+
{ value: "rare", label: "Rare", description: "Happens infrequently." },
|
|
6648
|
+
{ value: "other", label: "Other", description: "A frequency not captured by the above tiers." }
|
|
6649
|
+
]
|
|
6650
|
+
},
|
|
6651
|
+
// ── EvidenceDirection ───────────────────────────────────────────────
|
|
6652
|
+
EvidenceDirection: {
|
|
6653
|
+
id: "EvidenceDirection",
|
|
6654
|
+
label: "Evidence direction",
|
|
6655
|
+
description: "Direction of evidence relative to a claim. Distinct from confidence_impact (strengthens/weakens) per the UPG-579 polysemy verdicts.",
|
|
6656
|
+
tone_direction: "neutral",
|
|
6657
|
+
values: [
|
|
6658
|
+
{ value: "supports", label: "Supports", description: "The evidence backs the claim." },
|
|
6659
|
+
{ value: "refutes", label: "Refutes", description: "The evidence contradicts the claim." },
|
|
6660
|
+
{ value: "neutral", label: "Neutral", description: "The evidence is inconclusive either way." }
|
|
6661
|
+
]
|
|
6478
6662
|
}
|
|
6479
6663
|
};
|
|
6480
6664
|
function getEnumScale(name) {
|
|
@@ -6821,6 +7005,41 @@ function getDeprecatedTypes() {
|
|
|
6821
7005
|
return deprecated;
|
|
6822
7006
|
}
|
|
6823
7007
|
var UPG_PROPERTY_MIGRATIONS = {
|
|
7008
|
+
// ── v0.8.0: UPG-574 deprecated-property removal pass ───────────────────
|
|
7009
|
+
//
|
|
7010
|
+
// The seven properties tagged `@deprecated since v0.4.0` that survived the
|
|
7011
|
+
// v0.5.0 hygiene pass are removed from the spec in v0.8.0 (a breaking
|
|
7012
|
+
// release). Five of the seven already carry a migration:
|
|
7013
|
+
// - `task.task_status` / `bug.bug_status` lift to `UPGBaseNode.status`
|
|
7014
|
+
// (see `UPG_PROPERTY_MIGRATIONS['0.4.0']`, values identical).
|
|
7015
|
+
// - `learning.metric` drops in favour of the `learning_observed_on_metric`
|
|
7016
|
+
// edge (see `UPG_PROPERTY_MIGRATIONS['0.5.0']`).
|
|
7017
|
+
// The two remaining property surfaces are migrated here:
|
|
7018
|
+
// - `evidence.strength` (simple `strong | moderate | weak` enum) is
|
|
7019
|
+
// dropped in favour of `weight: UPGAssessment` (scale `weight_5pt`).
|
|
7020
|
+
// Authors carrying the legacy key should copy the value to `weight`
|
|
7021
|
+
// before applying this migration: `strong → 5`, `moderate → 3`,
|
|
7022
|
+
// `weak → 1`, with the old word preserved in `weight.label`.
|
|
7023
|
+
// - `story_task.estimate` / `.effort` / `.priority` drop. `story_task`
|
|
7024
|
+
// itself is deprecated (`UPG_MIGRATIONS['0.4.0']` renames it to the
|
|
7025
|
+
// canonical `task`); the type rename copies every property verbatim,
|
|
7026
|
+
// so the values survive on `task` (`TaskProperties.estimate` /
|
|
7027
|
+
// `.effort` / `.priority`, all live). This rule removes the residue
|
|
7028
|
+
// from any node still typed `story_task` at migration time.
|
|
7029
|
+
"0.8.0": [
|
|
7030
|
+
{
|
|
7031
|
+
kind: "drop_props",
|
|
7032
|
+
type: "evidence",
|
|
7033
|
+
drop_props: ["strength"],
|
|
7034
|
+
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."
|
|
7035
|
+
},
|
|
7036
|
+
{
|
|
7037
|
+
kind: "drop_props",
|
|
7038
|
+
type: "story_task",
|
|
7039
|
+
drop_props: ["estimate", "effort", "priority"],
|
|
7040
|
+
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.'
|
|
7041
|
+
}
|
|
7042
|
+
],
|
|
6824
7043
|
// ── v0.5.0: UPG-509 deprecation hygiene pass ───────────────────────────
|
|
6825
7044
|
//
|
|
6826
7045
|
// Properties tagged `@deprecated since="0.4.0" removeIn="0.5.0"` (and the
|
|
@@ -8624,7 +8843,18 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
8624
8843
|
},
|
|
8625
8844
|
// A11yIssueProperties: Accessibility issue.
|
|
8626
8845
|
a11y_issue: {
|
|
8627
|
-
severity: {
|
|
8846
|
+
severity: {
|
|
8847
|
+
type: "assessment",
|
|
8848
|
+
scale_id: "severity_5",
|
|
8849
|
+
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`.",
|
|
8850
|
+
properties: {
|
|
8851
|
+
value: { type: "number", description: "The numeric value, used for computation." },
|
|
8852
|
+
label: { type: "string", description: "The qualitative label (what the assessor meant)." },
|
|
8853
|
+
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)." },
|
|
8854
|
+
normalized: { type: "number", description: "Normalized 0-1 value for cross-tool comparison (optional)." }
|
|
8855
|
+
},
|
|
8856
|
+
required: ["value", "label"]
|
|
8857
|
+
},
|
|
8628
8858
|
wcag_criterion: { type: "string", description: 'WCAG success criterion violated (e.g. "1.1.1", "2.4.7")' },
|
|
8629
8859
|
rule_id: { type: "string", description: "Identifier of the rule that flagged the issue" },
|
|
8630
8860
|
help_url: { type: "string", description: "URL to documentation explaining the issue and how to fix it" },
|
|
@@ -8681,7 +8911,18 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
8681
8911
|
affinity_cluster: {
|
|
8682
8912
|
theme: { type: "string", description: "Emergent theme label" },
|
|
8683
8913
|
child_observation_count: { type: "number", description: "Observations in this cluster" },
|
|
8684
|
-
confidence: {
|
|
8914
|
+
confidence: {
|
|
8915
|
+
type: "assessment",
|
|
8916
|
+
scale_id: "confidence_5",
|
|
8917
|
+
description: "Confidence in the theme's validity (UPGAssessment on `confidence_5`).",
|
|
8918
|
+
properties: {
|
|
8919
|
+
value: { type: "number", description: "The numeric value, used for computation." },
|
|
8920
|
+
label: { type: "string", description: "The qualitative label (what the assessor meant)." },
|
|
8921
|
+
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)." },
|
|
8922
|
+
normalized: { type: "number", description: "Normalized 0-1 value for cross-tool comparison (optional)." }
|
|
8923
|
+
},
|
|
8924
|
+
required: ["value", "label"]
|
|
8925
|
+
}
|
|
8685
8926
|
},
|
|
8686
8927
|
// AgentDefinitionProperties: Agent definition.
|
|
8687
8928
|
agent_definition: {
|
|
@@ -8815,7 +9056,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
8815
9056
|
// AlertRuleProperties: Alert rule.
|
|
8816
9057
|
alert_rule: {
|
|
8817
9058
|
condition: { type: "string", description: 'Triggering query or expression. @example "avg(rate(http_errors_total[5m])) > 0.05"' },
|
|
8818
|
-
severity: { type: "string", enum: ["critical", "warning", "info"], description: "Routes notification and escalation. `critical` = page immediately. `warning` = notify, don't page. `info` = log only." },
|
|
9059
|
+
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." },
|
|
8819
9060
|
notification_channel: { type: "string", description: 'Notification destination. @example "pagerduty:sev1-rotation", "slack:#alerts-low"' },
|
|
8820
9061
|
evaluation_window: { type: "string", description: 'Required duration the condition holds before firing. Prevents flapping on transient spikes. @example "5m", "15m", "1h"' },
|
|
8821
9062
|
escalation_policy: { type: "string", description: 'Escalation behaviour on unacknowledged alerts. @example "Escalate to engineering lead after 10 minutes"' }
|
|
@@ -8854,16 +9095,28 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
8854
9095
|
},
|
|
8855
9096
|
// AssumptionProperties: Assumption entity.
|
|
8856
9097
|
assumption: {
|
|
8857
|
-
confidence: {
|
|
9098
|
+
confidence: {
|
|
9099
|
+
type: "assessment",
|
|
9100
|
+
scale_id: "confidence_5",
|
|
9101
|
+
description: "Confidence before testing (UPGAssessment on `confidence_5`). Independent of whether the assumption is validated (tracked in lifecycle).",
|
|
9102
|
+
properties: {
|
|
9103
|
+
value: { type: "number", description: "The numeric value, used for computation." },
|
|
9104
|
+
label: { type: "string", description: "The qualitative label (what the assessor meant)." },
|
|
9105
|
+
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)." },
|
|
9106
|
+
normalized: { type: "number", description: "Normalized 0-1 value for cross-tool comparison (optional)." }
|
|
9107
|
+
},
|
|
9108
|
+
required: ["value", "label"]
|
|
9109
|
+
},
|
|
8858
9110
|
validation_method: { type: "string", description: "Validation method, planned or used" },
|
|
8859
9111
|
risk_level: {
|
|
8860
|
-
type: "
|
|
9112
|
+
type: "assessment",
|
|
9113
|
+
scale_id: "severity_5",
|
|
8861
9114
|
description: "Exposure if the assumption turns out wrong",
|
|
8862
9115
|
properties: {
|
|
8863
9116
|
value: { type: "number", description: "The numeric value, used for computation." },
|
|
8864
9117
|
label: { type: "string", description: "The qualitative label (what the assessor meant)." },
|
|
8865
|
-
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)" },
|
|
8866
|
-
normalized: { type: "number", description: "Normalized 0
|
|
9118
|
+
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)." },
|
|
9119
|
+
normalized: { type: "number", description: "Normalized 0-1 value for cross-tool comparison (optional)." }
|
|
8867
9120
|
},
|
|
8868
9121
|
required: ["value", "label"]
|
|
8869
9122
|
},
|
|
@@ -8974,8 +9227,18 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
8974
9227
|
},
|
|
8975
9228
|
// BugProperties: Bug report.
|
|
8976
9229
|
bug: {
|
|
8977
|
-
bug_severity: {
|
|
8978
|
-
|
|
9230
|
+
bug_severity: {
|
|
9231
|
+
type: "assessment",
|
|
9232
|
+
scale_id: "severity_5",
|
|
9233
|
+
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`.",
|
|
9234
|
+
properties: {
|
|
9235
|
+
value: { type: "number", description: "The numeric value, used for computation." },
|
|
9236
|
+
label: { type: "string", description: "The qualitative label (what the assessor meant)." },
|
|
9237
|
+
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)." },
|
|
9238
|
+
normalized: { type: "number", description: "Normalized 0-1 value for cross-tool comparison (optional)." }
|
|
9239
|
+
},
|
|
9240
|
+
required: ["value", "label"]
|
|
9241
|
+
},
|
|
8979
9242
|
steps_to_reproduce: { type: "string", description: "Step-by-step reproduction" },
|
|
8980
9243
|
environment: { type: "string", description: 'Observed environment (e.g. "prod", "staging", "iOS 17.4")' },
|
|
8981
9244
|
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)." },
|
|
@@ -9005,7 +9268,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
9005
9268
|
maturity_level: { type: "string", enum: ["initial", "developing", "defined", "managed", "optimizing"], description: "Current maturity" },
|
|
9006
9269
|
target_maturity: { type: "string", enum: ["initial", "developing", "defined", "managed", "optimizing"], description: "Target maturity" },
|
|
9007
9270
|
gap: { type: "string", description: "Gap between current and target" },
|
|
9008
|
-
evolution_stage: { type: "string", enum: ["genesis", "custom", "product", "commodity"], description:
|
|
9271
|
+
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'" },
|
|
9009
9272
|
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" }
|
|
9010
9273
|
},
|
|
9011
9274
|
// CapacityPlanProperties: CapacityPlan entity.
|
|
@@ -9018,7 +9281,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
9018
9281
|
// CeremonyProperties: Ceremony entity.
|
|
9019
9282
|
ceremony: {
|
|
9020
9283
|
ceremony_type: { type: "string", enum: ["standup", "planning", "review", "retro", "sync", "demo", "other"], description: "Kind of recurring meeting" },
|
|
9021
|
-
cadence: { type: "string", description:
|
|
9284
|
+
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." },
|
|
9022
9285
|
duration_minutes: { type: "number", description: "Typical duration of the meeting in minutes" },
|
|
9023
9286
|
participants: { type: "string", description: "People or roles who attend" }
|
|
9024
9287
|
},
|
|
@@ -9047,9 +9310,9 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
9047
9310
|
category: { type: "string", description: "High-level category of the churn reason" },
|
|
9048
9311
|
frequency_count: { type: "number", description: "Exact count of times this reason has been cited in `frequency_period`" },
|
|
9049
9312
|
frequency_period: { type: "string", description: "The recurrence period the count is measured over (ISO-8601 `Duration`, e.g. `'P30D'`)" },
|
|
9050
|
-
frequency_rating: { type: "string", enum: ["
|
|
9313
|
+
frequency_rating: { type: "string", enum: ["constant", "regular", "occasional", "rare", "other"], description: "Qualitative frequency tier when an exact count is not known" },
|
|
9051
9314
|
contributing_factors: { type: "string[]", description: "Other factors that contributed to the churn" },
|
|
9052
|
-
signal_sentiment: { type: "string", enum: ["positive", "
|
|
9315
|
+
signal_sentiment: { type: "string", enum: ["positive", "neutral", "negative", "mixed"], description: "Detected sentiment of the churn signal" },
|
|
9053
9316
|
signal_channel: { type: "string", description: "Channel through which the churn signal was received" },
|
|
9054
9317
|
signal_urgency: { type: "string", enum: ["low", "medium", "high", "critical"], description: "Urgency of the churn risk" }
|
|
9055
9318
|
},
|
|
@@ -9163,7 +9426,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
9163
9426
|
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'`." },
|
|
9164
9427
|
frequency_count: { type: "number", description: "Exact count in the period. Pairs with `frequency_period`." },
|
|
9165
9428
|
frequency_period: { type: "string", description: "Recurrence period (ISO-8601 `Duration`, e.g. `'P7D'`)" },
|
|
9166
|
-
frequency_rating: { type: "string", enum: ["
|
|
9429
|
+
frequency_rating: { type: "string", enum: ["constant", "regular", "occasional", "rare", "other"], description: "Qualitative rate tier when an exact rate is unknown" }
|
|
9167
9430
|
},
|
|
9168
9431
|
// ContentPieceProperties: Content piece.
|
|
9169
9432
|
content_piece: {
|
|
@@ -9178,7 +9441,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
9178
9441
|
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'`." },
|
|
9179
9442
|
frequency_count: { type: "number", description: "Exact count of publications in the period. Pairs with `frequency_period`." },
|
|
9180
9443
|
frequency_period: { type: "string", description: "Recurrence period (ISO-8601 `Duration`, e.g. `'P7D'`)" },
|
|
9181
|
-
frequency_rating: { type: "string", enum: ["
|
|
9444
|
+
frequency_rating: { type: "string", enum: ["constant", "regular", "occasional", "rare", "other"], description: "Qualitative rate tier when an exact rate is unknown" }
|
|
9182
9445
|
},
|
|
9183
9446
|
// ContentThemeProperties: Content theme.
|
|
9184
9447
|
content_theme: {
|
|
@@ -9203,13 +9466,14 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
9203
9466
|
clause_text: { type: "string", description: "Full text of the clause" },
|
|
9204
9467
|
is_negotiable: { type: "boolean", description: "Whether this clause is open to negotiation" },
|
|
9205
9468
|
risk_level: {
|
|
9206
|
-
type: "
|
|
9469
|
+
type: "assessment",
|
|
9470
|
+
scale_id: "severity_5",
|
|
9207
9471
|
description: "Risk level if the clause is accepted as-is (1 = negligible, 5 = severe exposure)",
|
|
9208
9472
|
properties: {
|
|
9209
9473
|
value: { type: "number", description: "The numeric value, used for computation." },
|
|
9210
9474
|
label: { type: "string", description: "The qualitative label (what the assessor meant)." },
|
|
9211
|
-
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)" },
|
|
9212
|
-
normalized: { type: "number", description: "Normalized 0
|
|
9475
|
+
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)." },
|
|
9476
|
+
normalized: { type: "number", description: "Normalized 0-1 value for cross-tool comparison (optional)." }
|
|
9213
9477
|
},
|
|
9214
9478
|
required: ["value", "label"]
|
|
9215
9479
|
}
|
|
@@ -9228,9 +9492,9 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
9228
9492
|
// CustomerFeedbackProperties: Customer feedback.
|
|
9229
9493
|
customer_feedback: {
|
|
9230
9494
|
feedback_type: { type: "string", enum: ["survey", "interview", "review", "nps"], description: "How the feedback was collected" },
|
|
9231
|
-
sentiment: { type: "string", enum: ["positive", "neutral", "negative"], description: "Overall sentiment of the feedback" },
|
|
9495
|
+
sentiment: { type: "string", enum: ["positive", "neutral", "negative", "mixed"], description: "Overall sentiment of the feedback" },
|
|
9232
9496
|
verbatim: { type: "string", description: "Exact words from the customer" },
|
|
9233
|
-
signal_sentiment: { type: "string", enum: ["positive", "
|
|
9497
|
+
signal_sentiment: { type: "string", enum: ["positive", "neutral", "negative", "mixed"], description: "Detected sentiment of the underlying signal" },
|
|
9234
9498
|
signal_channel: { type: "string", description: "Channel through which the signal was received" },
|
|
9235
9499
|
signal_urgency: { type: "string", enum: ["low", "medium", "high", "critical"], description: "Perceived urgency of the feedback" }
|
|
9236
9500
|
},
|
|
@@ -9259,7 +9523,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
9259
9523
|
url: { type: "string", description: "URL to the live dashboard" },
|
|
9260
9524
|
audience: { type: "string", description: "Intended audience for this dashboard" },
|
|
9261
9525
|
element_count: { type: "number", description: "Number of widgets or panels on the dashboard" },
|
|
9262
|
-
refresh_cadence: { type: "string", description: "How often the dashboard data refreshes" },
|
|
9526
|
+
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." },
|
|
9263
9527
|
filter_count: { type: "number", description: "Number of user-configurable filters" }
|
|
9264
9528
|
},
|
|
9265
9529
|
// DataClassificationProperties: Data classification.
|
|
@@ -9319,7 +9583,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
9319
9583
|
},
|
|
9320
9584
|
// DataProductProperties: DataProduct entity.
|
|
9321
9585
|
data_product: {
|
|
9322
|
-
data_product_type: { type: "string", description:
|
|
9586
|
+
data_product_type: { type: "string", enum: ["report", "dataset", "stream", "api", "ml_feature", "other"], description: "Classification of the data product (UPG-579 Option B)." },
|
|
9323
9587
|
sla_freshness: { type: "string", description: 'Freshness SLA commitment (e.g. "< 1 hour")' }
|
|
9324
9588
|
},
|
|
9325
9589
|
// DataQualityRuleProperties: DataQualityRule entity.
|
|
@@ -9336,7 +9600,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
9336
9600
|
data_source: {
|
|
9337
9601
|
source_type: { type: "string", enum: ["database", "api", "event_stream", "warehouse"], description: "Kind of data source" },
|
|
9338
9602
|
connection_status: { type: "string", enum: ["connected", "disconnected", "error"], description: "Current connection health" },
|
|
9339
|
-
refresh_cadence: { type: "string", description:
|
|
9603
|
+
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." }
|
|
9340
9604
|
},
|
|
9341
9605
|
// DatabaseSchemaProperties: Database schema.
|
|
9342
9606
|
database_schema: {
|
|
@@ -9367,7 +9631,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
9367
9631
|
},
|
|
9368
9632
|
// DeliverableProperties: Deliverable.
|
|
9369
9633
|
deliverable: {
|
|
9370
|
-
deliverable_type: { type: "string",
|
|
9634
|
+
deliverable_type: { type: "string", enum: ["document", "prototype", "release", "design", "report", "other"], description: "Kind of deliverable (UPG-579 Option B)." },
|
|
9371
9635
|
due_date: { type: "string", description: "Due date for the deliverable (ISO format)" },
|
|
9372
9636
|
deliverable_status: { type: "string", enum: ["not_started", "in_progress", "in_review", "accepted", "rejected"], description: "Current progress status" },
|
|
9373
9637
|
acceptance_criteria: { type: "string", description: "Criteria that must be met for the deliverable to be accepted" }
|
|
@@ -9445,7 +9709,18 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
9445
9709
|
target_domain: { type: "string", enum: ["ux", "visual", "interaction", "content", "accessibility", "other"], description: "Target design discipline" },
|
|
9446
9710
|
framing: { type: "string", enum: ["how_might_we", "what_if", "why_do", "how_do", "what_prevents", "other"], description: "Question framing template" },
|
|
9447
9711
|
priority: { type: "string", enum: ["urgent", "high", "medium", "low", "none"], description: "Importance against other backlog questions" },
|
|
9448
|
-
confidence: {
|
|
9712
|
+
confidence: {
|
|
9713
|
+
type: "assessment",
|
|
9714
|
+
scale_id: "confidence_5",
|
|
9715
|
+
description: "Confidence the question is well-framed (UPGAssessment on `confidence_5`). Distinct from confidence in any answer.",
|
|
9716
|
+
properties: {
|
|
9717
|
+
value: { type: "number", description: "The numeric value, used for computation." },
|
|
9718
|
+
label: { type: "string", description: "The qualitative label (what the assessor meant)." },
|
|
9719
|
+
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)." },
|
|
9720
|
+
normalized: { type: "number", description: "Normalized 0-1 value for cross-tool comparison (optional)." }
|
|
9721
|
+
},
|
|
9722
|
+
required: ["value", "label"]
|
|
9723
|
+
},
|
|
9449
9724
|
assumptions: { type: "string[]", description: "Underlying assumptions. Surfaced explicitly so they can be challenged or validated." },
|
|
9450
9725
|
validation_method: { type: "string", enum: ["interview", "survey", "usability_test", "analytics", "a_b_test", "prototype_test", "literature_review", "other"], description: "Primary validation method" }
|
|
9451
9726
|
},
|
|
@@ -9472,24 +9747,26 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
9472
9747
|
desired_outcome: {
|
|
9473
9748
|
statement: { type: "string", description: "Outcome statement in the user's words" },
|
|
9474
9749
|
importance: {
|
|
9475
|
-
type: "
|
|
9750
|
+
type: "assessment",
|
|
9751
|
+
scale_id: "importance_5",
|
|
9476
9752
|
description: "How important this outcome is to the user (1 = low, 5 = critical)",
|
|
9477
9753
|
properties: {
|
|
9478
9754
|
value: { type: "number", description: "The numeric value, used for computation." },
|
|
9479
9755
|
label: { type: "string", description: "The qualitative label (what the assessor meant)." },
|
|
9480
|
-
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)" },
|
|
9481
|
-
normalized: { type: "number", description: "Normalized 0
|
|
9756
|
+
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)." },
|
|
9757
|
+
normalized: { type: "number", description: "Normalized 0-1 value for cross-tool comparison (optional)." }
|
|
9482
9758
|
},
|
|
9483
9759
|
required: ["value", "label"]
|
|
9484
9760
|
},
|
|
9485
9761
|
current_satisfaction: {
|
|
9486
|
-
type: "
|
|
9762
|
+
type: "assessment",
|
|
9763
|
+
scale_id: "satisfaction_5",
|
|
9487
9764
|
description: "How satisfied the user currently is with this outcome (1 = very unsatisfied, 5 = fully satisfied)",
|
|
9488
9765
|
properties: {
|
|
9489
9766
|
value: { type: "number", description: "The numeric value, used for computation." },
|
|
9490
9767
|
label: { type: "string", description: "The qualitative label (what the assessor meant)." },
|
|
9491
|
-
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)" },
|
|
9492
|
-
normalized: { type: "number", description: "Normalized 0
|
|
9768
|
+
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)." },
|
|
9769
|
+
normalized: { type: "number", description: "Normalized 0-1 value for cross-tool comparison (optional)." }
|
|
9493
9770
|
},
|
|
9494
9771
|
required: ["value", "label"]
|
|
9495
9772
|
}
|
|
@@ -9607,20 +9884,20 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
9607
9884
|
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." },
|
|
9608
9885
|
direction: { type: "string", enum: ["supports", "refutes", "neutral"], description: "Direction relative to the parent hypothesis." },
|
|
9609
9886
|
weight: {
|
|
9610
|
-
type: "
|
|
9611
|
-
|
|
9887
|
+
type: "assessment",
|
|
9888
|
+
scale_id: "importance_5",
|
|
9889
|
+
description: "Strength (UPGAssessment, scale `scale_5`).",
|
|
9612
9890
|
properties: {
|
|
9613
9891
|
value: { type: "number", description: "The numeric value, used for computation." },
|
|
9614
9892
|
label: { type: "string", description: "The qualitative label (what the assessor meant)." },
|
|
9615
|
-
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)" },
|
|
9616
|
-
normalized: { type: "number", description: "Normalized 0
|
|
9893
|
+
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)." },
|
|
9894
|
+
normalized: { type: "number", description: "Normalized 0-1 value for cross-tool comparison (optional)." }
|
|
9617
9895
|
},
|
|
9618
9896
|
required: ["value", "label"]
|
|
9619
9897
|
},
|
|
9620
9898
|
summary: { type: "string", description: "Plain-English summary." },
|
|
9621
9899
|
observed_at: { type: "string", description: "ISO date observed." },
|
|
9622
|
-
source: { type: "string", description: "Free-text provenance note" }
|
|
9623
|
-
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." }
|
|
9900
|
+
source: { type: "string", description: "Free-text provenance note" }
|
|
9624
9901
|
},
|
|
9625
9902
|
// ExperimentProperties: A structured activity designed to test a hypothesis.
|
|
9626
9903
|
experiment: {
|
|
@@ -9637,46 +9914,50 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
9637
9914
|
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." },
|
|
9638
9915
|
success_criteria: { type: "string", description: 'Plain-English description of "passing"' },
|
|
9639
9916
|
projected_reach: {
|
|
9640
|
-
type: "
|
|
9917
|
+
type: "assessment",
|
|
9918
|
+
scale_id: "reach_5",
|
|
9641
9919
|
description: "Projected reach: how many people the run is expected to touch (UPGAssessment)",
|
|
9642
9920
|
properties: {
|
|
9643
9921
|
value: { type: "number", description: "The numeric value, used for computation." },
|
|
9644
9922
|
label: { type: "string", description: "The qualitative label (what the assessor meant)." },
|
|
9645
|
-
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)" },
|
|
9646
|
-
normalized: { type: "number", description: "Normalized 0
|
|
9923
|
+
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)." },
|
|
9924
|
+
normalized: { type: "number", description: "Normalized 0-1 value for cross-tool comparison (optional)." }
|
|
9647
9925
|
},
|
|
9648
9926
|
required: ["value", "label"]
|
|
9649
9927
|
},
|
|
9650
9928
|
projected_impact: {
|
|
9651
|
-
type: "
|
|
9929
|
+
type: "assessment",
|
|
9930
|
+
scale_id: "impact_5",
|
|
9652
9931
|
description: "Projected impact on the target metric (UPGAssessment)",
|
|
9653
9932
|
properties: {
|
|
9654
9933
|
value: { type: "number", description: "The numeric value, used for computation." },
|
|
9655
9934
|
label: { type: "string", description: "The qualitative label (what the assessor meant)." },
|
|
9656
|
-
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)" },
|
|
9657
|
-
normalized: { type: "number", description: "Normalized 0
|
|
9935
|
+
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)." },
|
|
9936
|
+
normalized: { type: "number", description: "Normalized 0-1 value for cross-tool comparison (optional)." }
|
|
9658
9937
|
},
|
|
9659
9938
|
required: ["value", "label"]
|
|
9660
9939
|
},
|
|
9661
9940
|
confidence: {
|
|
9662
|
-
type: "
|
|
9663
|
-
|
|
9941
|
+
type: "assessment",
|
|
9942
|
+
scale_id: "confidence_5",
|
|
9943
|
+
description: "Team confidence at plan-time (UPGAssessment, scale `confidence_5`)",
|
|
9664
9944
|
properties: {
|
|
9665
9945
|
value: { type: "number", description: "The numeric value, used for computation." },
|
|
9666
9946
|
label: { type: "string", description: "The qualitative label (what the assessor meant)." },
|
|
9667
|
-
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)" },
|
|
9668
|
-
normalized: { type: "number", description: "Normalized 0
|
|
9947
|
+
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)." },
|
|
9948
|
+
normalized: { type: "number", description: "Normalized 0-1 value for cross-tool comparison (optional)." }
|
|
9669
9949
|
},
|
|
9670
9950
|
required: ["value", "label"]
|
|
9671
9951
|
},
|
|
9672
9952
|
cost_estimate: {
|
|
9673
|
-
type: "
|
|
9953
|
+
type: "assessment",
|
|
9954
|
+
scale_id: "effort_5",
|
|
9674
9955
|
description: "Cost estimate at plan-time (UPGAssessment)",
|
|
9675
9956
|
properties: {
|
|
9676
9957
|
value: { type: "number", description: "The numeric value, used for computation." },
|
|
9677
9958
|
label: { type: "string", description: "The qualitative label (what the assessor meant)." },
|
|
9678
|
-
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)" },
|
|
9679
|
-
normalized: { type: "number", description: "Normalized 0
|
|
9959
|
+
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)." },
|
|
9960
|
+
normalized: { type: "number", description: "Normalized 0-1 value for cross-tool comparison (optional)." }
|
|
9680
9961
|
},
|
|
9681
9962
|
required: ["value", "label"]
|
|
9682
9963
|
},
|
|
@@ -9690,13 +9971,14 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
9690
9971
|
actual_reach: { type: "number", description: "Observed reach: how many people the run actually touched" },
|
|
9691
9972
|
outcome_summary: { type: "string", description: "Plain-English outcome" },
|
|
9692
9973
|
severity_of_finding: {
|
|
9693
|
-
type: "
|
|
9974
|
+
type: "assessment",
|
|
9975
|
+
scale_id: "severity_5",
|
|
9694
9976
|
description: "Severity / strength of the finding (UPGAssessment)",
|
|
9695
9977
|
properties: {
|
|
9696
9978
|
value: { type: "number", description: "The numeric value, used for computation." },
|
|
9697
9979
|
label: { type: "string", description: "The qualitative label (what the assessor meant)." },
|
|
9698
|
-
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)" },
|
|
9699
|
-
normalized: { type: "number", description: "Normalized 0
|
|
9980
|
+
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)." },
|
|
9981
|
+
normalized: { type: "number", description: "Normalized 0-1 value for cross-tool comparison (optional)." }
|
|
9700
9982
|
},
|
|
9701
9983
|
required: ["value", "label"]
|
|
9702
9984
|
},
|
|
@@ -9715,7 +9997,18 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
9715
9997
|
feasibility_study: {
|
|
9716
9998
|
study_type: { type: "string", enum: ["technical", "business", "market", "resource"], description: 'Type of feasibility being assessed. @example "technical" for assessing engineering viability' },
|
|
9717
9999
|
conclusion: { type: "string", enum: ["feasible", "not_feasible", "conditional", "needs_more_data"], description: "Outcome conclusion of the study" },
|
|
9718
|
-
confidence: {
|
|
10000
|
+
confidence: {
|
|
10001
|
+
type: "assessment",
|
|
10002
|
+
scale_id: "confidence_5",
|
|
10003
|
+
description: "Confidence in the conclusion (UPGAssessment on `confidence_5`).",
|
|
10004
|
+
properties: {
|
|
10005
|
+
value: { type: "number", description: "The numeric value, used for computation." },
|
|
10006
|
+
label: { type: "string", description: "The qualitative label (what the assessor meant)." },
|
|
10007
|
+
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)." },
|
|
10008
|
+
normalized: { type: "number", description: "Normalized 0-1 value for cross-tool comparison (optional)." }
|
|
10009
|
+
},
|
|
10010
|
+
required: ["value", "label"]
|
|
10011
|
+
}
|
|
9719
10012
|
},
|
|
9720
10013
|
// FeatureProperties: A discrete, user-facing capability of the product.
|
|
9721
10014
|
feature: {
|
|
@@ -9750,28 +10043,30 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
9750
10043
|
feature_request: {
|
|
9751
10044
|
request_source: { type: "string", enum: ["customer", "internal", "prospect", "support", "community"], description: "Where the request originated" },
|
|
9752
10045
|
vote_count: { type: "number", description: "Number of votes or upvotes from users" },
|
|
9753
|
-
signal_sentiment: { type: "string", enum: ["positive", "
|
|
10046
|
+
signal_sentiment: { type: "string", enum: ["positive", "neutral", "negative", "mixed"], description: "Detected sentiment of the request" },
|
|
9754
10047
|
signal_channel: { type: "string", description: "Channel through which the request was received" },
|
|
9755
10048
|
signal_urgency: { type: "string", enum: ["low", "medium", "high", "critical"], description: "Perceived urgency of the request" },
|
|
9756
10049
|
revenue_impact: {
|
|
9757
|
-
type: "
|
|
10050
|
+
type: "assessment",
|
|
10051
|
+
scale_id: "impact_5",
|
|
9758
10052
|
description: "Estimated revenue impact if implemented (1-5)",
|
|
9759
10053
|
properties: {
|
|
9760
10054
|
value: { type: "number", description: "The numeric value, used for computation." },
|
|
9761
10055
|
label: { type: "string", description: "The qualitative label (what the assessor meant)." },
|
|
9762
|
-
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)" },
|
|
9763
|
-
normalized: { type: "number", description: "Normalized 0
|
|
10056
|
+
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)." },
|
|
10057
|
+
normalized: { type: "number", description: "Normalized 0-1 value for cross-tool comparison (optional)." }
|
|
9764
10058
|
},
|
|
9765
10059
|
required: ["value", "label"]
|
|
9766
10060
|
},
|
|
9767
10061
|
effort_estimate: {
|
|
9768
|
-
type: "
|
|
10062
|
+
type: "assessment",
|
|
10063
|
+
scale_id: "effort_5",
|
|
9769
10064
|
description: "Estimated implementation effort (1-5)",
|
|
9770
10065
|
properties: {
|
|
9771
10066
|
value: { type: "number", description: "The numeric value, used for computation." },
|
|
9772
10067
|
label: { type: "string", description: "The qualitative label (what the assessor meant)." },
|
|
9773
|
-
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)" },
|
|
9774
|
-
normalized: { type: "number", description: "Normalized 0
|
|
10068
|
+
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)." },
|
|
10069
|
+
normalized: { type: "number", description: "Normalized 0-1 value for cross-tool comparison (optional)." }
|
|
9775
10070
|
},
|
|
9776
10071
|
required: ["value", "label"]
|
|
9777
10072
|
},
|
|
@@ -9788,13 +10083,14 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
9788
10083
|
sentiment: { type: "string", enum: ["positive", "neutral", "negative", "mixed"], description: "Overall sentiment across mentions" },
|
|
9789
10084
|
actionable: { type: "boolean", description: "Whether this theme can be acted upon" },
|
|
9790
10085
|
frequency: {
|
|
9791
|
-
type: "
|
|
10086
|
+
type: "assessment",
|
|
10087
|
+
scale_id: "frequency_5",
|
|
9792
10088
|
description: "How often the theme is mentioned (1-5)",
|
|
9793
10089
|
properties: {
|
|
9794
10090
|
value: { type: "number", description: "The numeric value, used for computation." },
|
|
9795
10091
|
label: { type: "string", description: "The qualitative label (what the assessor meant)." },
|
|
9796
|
-
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)" },
|
|
9797
|
-
normalized: { type: "number", description: "Normalized 0
|
|
10092
|
+
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)." },
|
|
10093
|
+
normalized: { type: "number", description: "Normalized 0-1 value for cross-tool comparison (optional)." }
|
|
9798
10094
|
},
|
|
9799
10095
|
required: ["value", "label"]
|
|
9800
10096
|
},
|
|
@@ -9812,7 +10108,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
9812
10108
|
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." },
|
|
9813
10109
|
commit: { type: "string", description: "Git commit SHA" },
|
|
9814
10110
|
files_changed: { type: "string[]", description: "Files changed" },
|
|
9815
|
-
deployed_at: { type: "string", description: "ISO timestamp landed in the target environment.
|
|
10111
|
+
deployed_at: { type: "string", description: "ISO timestamp landed in the target environment." },
|
|
9816
10112
|
fixed_date: { type: "string", description: "Application date (ISO date). Coarser-grained complement to `deployed_at`." },
|
|
9817
10113
|
verified: { type: "boolean", description: "Verified in production" },
|
|
9818
10114
|
verified_by_test: { type: "boolean", description: "Validated by an automated regression or integration test. Distinct from `verified` (human judgment)." }
|
|
@@ -9822,13 +10118,14 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
9822
10118
|
forecast_period: { type: "string", description: 'Time period the forecast covers (e.g. "Q2 2026")' },
|
|
9823
10119
|
predicted_revenue: { type: "number", description: "Predicted revenue amount" },
|
|
9824
10120
|
confidence: {
|
|
9825
|
-
type: "
|
|
10121
|
+
type: "assessment",
|
|
10122
|
+
scale_id: "confidence_5",
|
|
9826
10123
|
description: "Confidence in the prediction (1 = speculative, 5 = high conviction)",
|
|
9827
10124
|
properties: {
|
|
9828
10125
|
value: { type: "number", description: "The numeric value, used for computation." },
|
|
9829
10126
|
label: { type: "string", description: "The qualitative label (what the assessor meant)." },
|
|
9830
|
-
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)" },
|
|
9831
|
-
normalized: { type: "number", description: "Normalized 0
|
|
10127
|
+
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)." },
|
|
10128
|
+
normalized: { type: "number", description: "Normalized 0-1 value for cross-tool comparison (optional)." }
|
|
9832
10129
|
},
|
|
9833
10130
|
required: ["value", "label"]
|
|
9834
10131
|
},
|
|
@@ -9880,13 +10177,14 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
9880
10177
|
hallucination_report: {
|
|
9881
10178
|
report_type: { type: "string", enum: ["factual", "logical", "fabrication", "inconsistency"], description: "Classification" },
|
|
9882
10179
|
severity: {
|
|
9883
|
-
type: "
|
|
10180
|
+
type: "assessment",
|
|
10181
|
+
scale_id: "severity_5",
|
|
9884
10182
|
description: "Impact severity (1 = trivial, 5 = dangerous misinformation)",
|
|
9885
10183
|
properties: {
|
|
9886
10184
|
value: { type: "number", description: "The numeric value, used for computation." },
|
|
9887
10185
|
label: { type: "string", description: "The qualitative label (what the assessor meant)." },
|
|
9888
|
-
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)" },
|
|
9889
|
-
normalized: { type: "number", description: "Normalized 0
|
|
10186
|
+
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)." },
|
|
10187
|
+
normalized: { type: "number", description: "Normalized 0-1 value for cross-tool comparison (optional)." }
|
|
9890
10188
|
},
|
|
9891
10189
|
required: ["value", "label"]
|
|
9892
10190
|
},
|
|
@@ -9908,13 +10206,14 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
9908
10206
|
we_know_when: { type: "string", description: "The measurable signal that confirms or refutes the claim." },
|
|
9909
10207
|
risk_if_wrong: { type: "string", description: "Risk surface for prioritisation if the claim turns out wrong." },
|
|
9910
10208
|
current_confidence: {
|
|
9911
|
-
type: "
|
|
10209
|
+
type: "assessment",
|
|
10210
|
+
scale_id: "confidence_5",
|
|
9912
10211
|
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.",
|
|
9913
10212
|
properties: {
|
|
9914
10213
|
value: { type: "number", description: "The numeric value, used for computation." },
|
|
9915
10214
|
label: { type: "string", description: "The qualitative label (what the assessor meant)." },
|
|
9916
|
-
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)" },
|
|
9917
|
-
normalized: { type: "number", description: "Normalized 0
|
|
10215
|
+
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)." },
|
|
10216
|
+
normalized: { type: "number", description: "Normalized 0-1 value for cross-tool comparison (optional)." }
|
|
9918
10217
|
},
|
|
9919
10218
|
required: ["value", "label"]
|
|
9920
10219
|
}
|
|
@@ -9924,13 +10223,14 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
9924
10223
|
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." },
|
|
9925
10224
|
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`." },
|
|
9926
10225
|
weight: {
|
|
9927
|
-
type: "
|
|
9928
|
-
|
|
10226
|
+
type: "assessment",
|
|
10227
|
+
scale_id: "importance_5",
|
|
10228
|
+
description: "Strength of the evidence (UPGAssessment, scale `scale_5`).",
|
|
9929
10229
|
properties: {
|
|
9930
10230
|
value: { type: "number", description: "The numeric value, used for computation." },
|
|
9931
10231
|
label: { type: "string", description: "The qualitative label (what the assessor meant)." },
|
|
9932
|
-
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)" },
|
|
9933
|
-
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)." }
|
|
9934
10234
|
},
|
|
9935
10235
|
required: ["value", "label"]
|
|
9936
10236
|
},
|
|
@@ -9948,8 +10248,8 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
9948
10248
|
// IncidentProperties: Incident.
|
|
9949
10249
|
incident: {
|
|
9950
10250
|
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' },
|
|
9951
|
-
severity_level: { type: "string", enum: ["sev1", "sev2", "sev3", "sev4"], description: '
|
|
9952
|
-
urgency: { type: "string", enum: ["high", "
|
|
10251
|
+
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' },
|
|
10252
|
+
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." },
|
|
9953
10253
|
started_at: { type: "string", description: "ISO timestamp the incident started or was first detected." },
|
|
9954
10254
|
acknowledged_at: { type: "string", description: "ISO timestamp first acknowledged by a responder. Used to compute time-to-acknowledge." },
|
|
9955
10255
|
contained_at: { type: "string", description: "ISO timestamp contained. Blast radius limited, bleeding stopped. Containment precedes full resolution, especially for security incidents." },
|
|
@@ -9975,7 +10275,18 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
9975
10275
|
// InsightProperties: Unified insight, synthesised from evidence and observations.
|
|
9976
10276
|
insight: {
|
|
9977
10277
|
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." },
|
|
9978
|
-
confidence: {
|
|
10278
|
+
confidence: {
|
|
10279
|
+
type: "assessment",
|
|
10280
|
+
scale_id: "confidence_5",
|
|
10281
|
+
description: "Confidence (UPGAssessment on `confidence_5`). Reflects the strength and diversity of supporting evidence.",
|
|
10282
|
+
properties: {
|
|
10283
|
+
value: { type: "number", description: "The numeric value, used for computation." },
|
|
10284
|
+
label: { type: "string", description: "The qualitative label (what the assessor meant)." },
|
|
10285
|
+
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)." },
|
|
10286
|
+
normalized: { type: "number", description: "Normalized 0-1 value for cross-tool comparison (optional)." }
|
|
10287
|
+
},
|
|
10288
|
+
required: ["value", "label"]
|
|
10289
|
+
},
|
|
9979
10290
|
evidence_count: { type: "number", description: "Supporting observations, quotes, or evidence items. Higher counts increase confidence." },
|
|
9980
10291
|
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." },
|
|
9981
10292
|
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." },
|
|
@@ -10013,20 +10324,21 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10013
10324
|
// InvestigationProperties: Active thread of inquiry: debugging, architecture exploration, RCA.
|
|
10014
10325
|
investigation: {
|
|
10015
10326
|
severity: {
|
|
10016
|
-
type: "
|
|
10327
|
+
type: "assessment",
|
|
10328
|
+
scale_id: "severity_5",
|
|
10017
10329
|
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`.",
|
|
10018
10330
|
properties: {
|
|
10019
10331
|
value: { type: "number", description: "The numeric value, used for computation." },
|
|
10020
10332
|
label: { type: "string", description: "The qualitative label (what the assessor meant)." },
|
|
10021
|
-
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)" },
|
|
10022
|
-
normalized: { type: "number", description: "Normalized 0
|
|
10333
|
+
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)." },
|
|
10334
|
+
normalized: { type: "number", description: "Normalized 0-1 value for cross-tool comparison (optional)." }
|
|
10023
10335
|
},
|
|
10024
10336
|
required: ["value", "label"]
|
|
10025
10337
|
},
|
|
10026
10338
|
hypothesis: { type: "string", description: "Working hypothesis about the root cause" },
|
|
10027
10339
|
findings: { type: "string", description: "Findings discovered so far" },
|
|
10028
10340
|
started_at: { type: "string", description: "ISO timestamp the investigation began" },
|
|
10029
|
-
resolved_at: { type: "string", description: "ISO timestamp the investigation was concluded. Pairs with `
|
|
10341
|
+
resolved_at: { type: "string", description: "ISO timestamp the investigation was concluded. Pairs with `status === 'resolved' | 'abandoned'`." },
|
|
10030
10342
|
lead_investigator: { type: "string", description: "Lead investigator (email or handle). Distinct from the team owning the affected service." },
|
|
10031
10343
|
session_id: { type: "string", description: "Originating session" },
|
|
10032
10344
|
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*." }
|
|
@@ -10052,24 +10364,26 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10052
10364
|
statement: { type: "string", description: 'Job statement: "When I... I want to... So I can..."' },
|
|
10053
10365
|
job_type: { type: "string", enum: ["functional", "emotional", "social", "supporting"], description: "Classification by motivation dimension" },
|
|
10054
10366
|
importance: {
|
|
10055
|
-
type: "
|
|
10367
|
+
type: "assessment",
|
|
10368
|
+
scale_id: "importance_5",
|
|
10056
10369
|
description: "Importance to the user (1 = low, 5 = critical)",
|
|
10057
10370
|
properties: {
|
|
10058
10371
|
value: { type: "number", description: "The numeric value, used for computation." },
|
|
10059
10372
|
label: { type: "string", description: "The qualitative label (what the assessor meant)." },
|
|
10060
|
-
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)" },
|
|
10061
|
-
normalized: { type: "number", description: "Normalized 0
|
|
10373
|
+
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)." },
|
|
10374
|
+
normalized: { type: "number", description: "Normalized 0-1 value for cross-tool comparison (optional)." }
|
|
10062
10375
|
},
|
|
10063
10376
|
required: ["value", "label"]
|
|
10064
10377
|
},
|
|
10065
10378
|
current_satisfaction: {
|
|
10066
|
-
type: "
|
|
10379
|
+
type: "assessment",
|
|
10380
|
+
scale_id: "satisfaction_5",
|
|
10067
10381
|
description: "Current satisfaction with how this job gets done (1 = very unsatisfied, 5 = fully satisfied)",
|
|
10068
10382
|
properties: {
|
|
10069
10383
|
value: { type: "number", description: "The numeric value, used for computation." },
|
|
10070
10384
|
label: { type: "string", description: "The qualitative label (what the assessor meant)." },
|
|
10071
|
-
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)" },
|
|
10072
|
-
normalized: { type: "number", description: "Normalized 0
|
|
10385
|
+
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)." },
|
|
10386
|
+
normalized: { type: "number", description: "Normalized 0-1 value for cross-tool comparison (optional)." }
|
|
10073
10387
|
},
|
|
10074
10388
|
required: ["value", "label"]
|
|
10075
10389
|
},
|
|
@@ -10087,24 +10401,26 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10087
10401
|
action_description: { type: "string", description: "Plain-language description. Primary content of the action." },
|
|
10088
10402
|
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." },
|
|
10089
10403
|
pain_score: {
|
|
10090
|
-
type: "
|
|
10404
|
+
type: "assessment",
|
|
10405
|
+
scale_id: "pain_5",
|
|
10091
10406
|
description: "Pain (1 = effortless, 5 = very painful). Drives opportunity discovery.",
|
|
10092
10407
|
properties: {
|
|
10093
10408
|
value: { type: "number", description: "The numeric value, used for computation." },
|
|
10094
10409
|
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
|
|
10410
|
+
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)." },
|
|
10411
|
+
normalized: { type: "number", description: "Normalized 0-1 value for cross-tool comparison (optional)." }
|
|
10097
10412
|
},
|
|
10098
10413
|
required: ["value", "label"]
|
|
10099
10414
|
},
|
|
10100
10415
|
opportunity_score: {
|
|
10101
|
-
type: "
|
|
10416
|
+
type: "assessment",
|
|
10417
|
+
scale_id: "impact_5",
|
|
10102
10418
|
description: "Opportunity (1 = low leverage, 5 = high leverage). Pairs with `pain_score` to rank investment.",
|
|
10103
10419
|
properties: {
|
|
10104
10420
|
value: { type: "number", description: "The numeric value, used for computation." },
|
|
10105
10421
|
label: { type: "string", description: "The qualitative label (what the assessor meant)." },
|
|
10106
|
-
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)" },
|
|
10107
|
-
normalized: { type: "number", description: "Normalized 0
|
|
10422
|
+
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)." },
|
|
10423
|
+
normalized: { type: "number", description: "Normalized 0-1 value for cross-tool comparison (optional)." }
|
|
10108
10424
|
},
|
|
10109
10425
|
required: ["value", "label"]
|
|
10110
10426
|
},
|
|
@@ -10128,24 +10444,26 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10128
10444
|
touchpoint: { type: "string", description: "Interaction touchpoint" },
|
|
10129
10445
|
channel: { type: "string", description: 'Channel (e.g. "web", "email", "in-store")' },
|
|
10130
10446
|
emotion_score: {
|
|
10131
|
-
type: "
|
|
10447
|
+
type: "assessment",
|
|
10448
|
+
scale_id: "satisfaction_5",
|
|
10132
10449
|
description: "User emotion (1 = very negative, 5 = very positive)",
|
|
10133
10450
|
properties: {
|
|
10134
10451
|
value: { type: "number", description: "The numeric value, used for computation." },
|
|
10135
10452
|
label: { type: "string", description: "The qualitative label (what the assessor meant)." },
|
|
10136
|
-
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)" },
|
|
10137
|
-
normalized: { type: "number", description: "Normalized 0
|
|
10453
|
+
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)." },
|
|
10454
|
+
normalized: { type: "number", description: "Normalized 0-1 value for cross-tool comparison (optional)." }
|
|
10138
10455
|
},
|
|
10139
10456
|
required: ["value", "label"]
|
|
10140
10457
|
},
|
|
10141
10458
|
friction_score: {
|
|
10142
|
-
type: "
|
|
10459
|
+
type: "assessment",
|
|
10460
|
+
scale_id: "pain_5",
|
|
10143
10461
|
description: "Friction (1 = effortless, 5 = very painful)",
|
|
10144
10462
|
properties: {
|
|
10145
10463
|
value: { type: "number", description: "The numeric value, used for computation." },
|
|
10146
10464
|
label: { type: "string", description: "The qualitative label (what the assessor meant)." },
|
|
10147
|
-
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)" },
|
|
10148
|
-
normalized: { type: "number", description: "Normalized 0
|
|
10465
|
+
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)." },
|
|
10466
|
+
normalized: { type: "number", description: "Normalized 0-1 value for cross-tool comparison (optional)." }
|
|
10149
10467
|
},
|
|
10150
10468
|
required: ["value", "label"]
|
|
10151
10469
|
},
|
|
@@ -10158,7 +10476,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10158
10476
|
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`.' },
|
|
10159
10477
|
frequency_count: { type: "number", description: "Exact count of runs in the period. Pairs with `frequency_period`." },
|
|
10160
10478
|
frequency_period: { type: "string", description: "Recurrence period (ISO-8601 `Duration`, e.g. `'P7D'`)" },
|
|
10161
|
-
frequency_rating: { type: "string", enum: ["
|
|
10479
|
+
frequency_rating: { type: "string", enum: ["constant", "regular", "occasional", "rare", "other"], description: "Qualitative tier. Use when an exact rate is unknown." },
|
|
10162
10480
|
operational_owner: { type: "string", description: "Operationally accountable team or individual" },
|
|
10163
10481
|
capacity_constraint: { type: "string", description: "Bottleneck or scaling constraint" },
|
|
10164
10482
|
automation_level: { type: "string", enum: ["manual", "assisted", "automated"], description: "How much runs without human intervention" }
|
|
@@ -10169,13 +10487,14 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10169
10487
|
criticality: { type: "string", enum: ["urgent", "high", "medium", "low", "none"], description: "Criticality to the business model" },
|
|
10170
10488
|
owner: { type: "string", description: "Accountable person or team" },
|
|
10171
10489
|
scarcity_risk: {
|
|
10172
|
-
type: "
|
|
10490
|
+
type: "assessment",
|
|
10491
|
+
scale_id: "severity_5",
|
|
10173
10492
|
description: "Replacement difficulty",
|
|
10174
10493
|
properties: {
|
|
10175
10494
|
value: { type: "number", description: "The numeric value, used for computation." },
|
|
10176
10495
|
label: { type: "string", description: "The qualitative label (what the assessor meant)." },
|
|
10177
|
-
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)" },
|
|
10178
|
-
normalized: { type: "number", description: "Normalized 0
|
|
10496
|
+
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)." },
|
|
10497
|
+
normalized: { type: "number", description: "Normalized 0-1 value for cross-tool comparison (optional)." }
|
|
10179
10498
|
},
|
|
10180
10499
|
required: ["value", "label"]
|
|
10181
10500
|
},
|
|
@@ -10209,7 +10528,6 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10209
10528
|
// LearningProperties: Result of an experiment. Evidence that updates a hypothesis.
|
|
10210
10529
|
learning: {
|
|
10211
10530
|
result: { type: "string", description: "Summary" },
|
|
10212
|
-
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.' },
|
|
10213
10531
|
result_value: { type: "number", description: "Measured value of the result" },
|
|
10214
10532
|
result_unit: { type: "string", description: 'Unit (e.g. "%" or "ms")' },
|
|
10215
10533
|
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`." },
|
|
@@ -10265,25 +10583,27 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10265
10583
|
// MarketTrendProperties: Market trend.
|
|
10266
10584
|
market_trend: {
|
|
10267
10585
|
relevance: {
|
|
10268
|
-
type: "
|
|
10586
|
+
type: "assessment",
|
|
10587
|
+
scale_id: "importance_5",
|
|
10269
10588
|
description: "Relevance to our product (1 = low, 5 = critical).",
|
|
10270
10589
|
properties: {
|
|
10271
10590
|
value: { type: "number", description: "The numeric value, used for computation." },
|
|
10272
10591
|
label: { type: "string", description: "The qualitative label (what the assessor meant)." },
|
|
10273
|
-
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)" },
|
|
10274
|
-
normalized: { type: "number", description: "Normalized 0
|
|
10592
|
+
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)." },
|
|
10593
|
+
normalized: { type: "number", description: "Normalized 0-1 value for cross-tool comparison (optional)." }
|
|
10275
10594
|
},
|
|
10276
10595
|
required: ["value", "label"]
|
|
10277
10596
|
},
|
|
10278
10597
|
timeframe: { type: "string", description: 'Expected peak or mainstream window. @example "12-18 months", "2027"' },
|
|
10279
10598
|
impact: {
|
|
10280
|
-
type: "
|
|
10599
|
+
type: "assessment",
|
|
10600
|
+
scale_id: "impact_5",
|
|
10281
10601
|
description: "Expected impact on our market or category.",
|
|
10282
10602
|
properties: {
|
|
10283
10603
|
value: { type: "number", description: "The numeric value, used for computation." },
|
|
10284
10604
|
label: { type: "string", description: "The qualitative label (what the assessor meant)." },
|
|
10285
|
-
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)" },
|
|
10286
|
-
normalized: { type: "number", description: "Normalized 0
|
|
10605
|
+
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)." },
|
|
10606
|
+
normalized: { type: "number", description: "Normalized 0-1 value for cross-tool comparison (optional)." }
|
|
10287
10607
|
},
|
|
10288
10608
|
required: ["value", "label"]
|
|
10289
10609
|
},
|
|
@@ -10394,35 +10714,38 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10394
10714
|
valence: { type: "string", enum: ["pain", "gap", "constraint"], description: "What kind of experience: pain (friction), gap (unmet), constraint (limitation)" },
|
|
10395
10715
|
maturity: { type: "string", enum: ["raw", "validated", "prioritized"], description: "How mature is this need in our understanding" },
|
|
10396
10716
|
frequency: {
|
|
10397
|
-
type: "
|
|
10717
|
+
type: "assessment",
|
|
10718
|
+
scale_id: "frequency_5",
|
|
10398
10719
|
description: "How often the user encounters this need (1 = rarely, 5 = constantly)",
|
|
10399
10720
|
properties: {
|
|
10400
10721
|
value: { type: "number", description: "The numeric value, used for computation." },
|
|
10401
10722
|
label: { type: "string", description: "The qualitative label (what the assessor meant)." },
|
|
10402
|
-
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)" },
|
|
10403
|
-
normalized: { type: "number", description: "Normalized 0
|
|
10723
|
+
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)." },
|
|
10724
|
+
normalized: { type: "number", description: "Normalized 0-1 value for cross-tool comparison (optional)." }
|
|
10404
10725
|
},
|
|
10405
10726
|
required: ["value", "label"]
|
|
10406
10727
|
},
|
|
10407
10728
|
severity: {
|
|
10408
|
-
type: "
|
|
10729
|
+
type: "assessment",
|
|
10730
|
+
scale_id: "severity_5",
|
|
10409
10731
|
description: "How painful or disruptive the need is when unaddressed (1 = minor, 5 = critical)",
|
|
10410
10732
|
properties: {
|
|
10411
10733
|
value: { type: "number", description: "The numeric value, used for computation." },
|
|
10412
10734
|
label: { type: "string", description: "The qualitative label (what the assessor meant)." },
|
|
10413
|
-
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)" },
|
|
10414
|
-
normalized: { type: "number", description: "Normalized 0
|
|
10735
|
+
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)." },
|
|
10736
|
+
normalized: { type: "number", description: "Normalized 0-1 value for cross-tool comparison (optional)." }
|
|
10415
10737
|
},
|
|
10416
10738
|
required: ["value", "label"]
|
|
10417
10739
|
},
|
|
10418
10740
|
importance: {
|
|
10419
|
-
type: "
|
|
10741
|
+
type: "assessment",
|
|
10742
|
+
scale_id: "importance_5",
|
|
10420
10743
|
description: "How important resolving this need is to the user (1 = low, 5 = critical)",
|
|
10421
10744
|
properties: {
|
|
10422
10745
|
value: { type: "number", description: "The numeric value, used for computation." },
|
|
10423
10746
|
label: { type: "string", description: "The qualitative label (what the assessor meant)." },
|
|
10424
|
-
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)" },
|
|
10425
|
-
normalized: { type: "number", description: "Normalized 0
|
|
10747
|
+
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)." },
|
|
10748
|
+
normalized: { type: "number", description: "Normalized 0-1 value for cross-tool comparison (optional)." }
|
|
10426
10749
|
},
|
|
10427
10750
|
required: ["value", "label"]
|
|
10428
10751
|
},
|
|
@@ -10443,13 +10766,14 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10443
10766
|
statement: { type: "string", description: "The objection as stated by the source" },
|
|
10444
10767
|
source_type: { type: "string", enum: ["prospect", "competitor", "internal", "market"], description: "Where this objection originated" },
|
|
10445
10768
|
severity: {
|
|
10446
|
-
type: "
|
|
10769
|
+
type: "assessment",
|
|
10770
|
+
scale_id: "severity_5",
|
|
10447
10771
|
description: "How frequently or strongly this objection comes up (1-5)",
|
|
10448
10772
|
properties: {
|
|
10449
10773
|
value: { type: "number", description: "The numeric value, used for computation." },
|
|
10450
10774
|
label: { type: "string", description: "The qualitative label (what the assessor meant)." },
|
|
10451
|
-
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)" },
|
|
10452
|
-
normalized: { type: "number", description: "Normalized 0
|
|
10775
|
+
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)." },
|
|
10776
|
+
normalized: { type: "number", description: "Normalized 0-1 value for cross-tool comparison (optional)." }
|
|
10453
10777
|
},
|
|
10454
10778
|
required: ["value", "label"]
|
|
10455
10779
|
},
|
|
@@ -10468,7 +10792,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10468
10792
|
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." },
|
|
10469
10793
|
is_highlighted: { type: "boolean", description: "Flagged as a highlight. Absorbed from the deprecated Highlight entity." },
|
|
10470
10794
|
highlight_tag: { type: "string", description: 'Free-form highlight type tag. @example "pain", "delight", "behaviour", "moment of clarity"' },
|
|
10471
|
-
sentiment: { type: "string", enum: ["positive", "
|
|
10795
|
+
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." }
|
|
10472
10796
|
},
|
|
10473
10797
|
// OnCallRotationProperties: On-call rotation.
|
|
10474
10798
|
on_call_rotation: {
|
|
@@ -10480,35 +10804,38 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10480
10804
|
// OpportunityProperties: A problem worth solving, grounded in user need and business value
|
|
10481
10805
|
opportunity: {
|
|
10482
10806
|
reach: {
|
|
10483
|
-
type: "
|
|
10807
|
+
type: "assessment",
|
|
10808
|
+
scale_id: "reach_5",
|
|
10484
10809
|
description: "How many users experience this problem",
|
|
10485
10810
|
properties: {
|
|
10486
10811
|
value: { type: "number", description: "The numeric value, used for computation." },
|
|
10487
10812
|
label: { type: "string", description: "The qualitative label (what the assessor meant)." },
|
|
10488
|
-
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)" },
|
|
10489
|
-
normalized: { type: "number", description: "Normalized 0
|
|
10813
|
+
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)." },
|
|
10814
|
+
normalized: { type: "number", description: "Normalized 0-1 value for cross-tool comparison (optional)." }
|
|
10490
10815
|
},
|
|
10491
10816
|
required: ["value", "label"]
|
|
10492
10817
|
},
|
|
10493
10818
|
frequency: {
|
|
10494
|
-
type: "
|
|
10819
|
+
type: "assessment",
|
|
10820
|
+
scale_id: "frequency_5",
|
|
10495
10821
|
description: "How often users experience this problem",
|
|
10496
10822
|
properties: {
|
|
10497
10823
|
value: { type: "number", description: "The numeric value, used for computation." },
|
|
10498
10824
|
label: { type: "string", description: "The qualitative label (what the assessor meant)." },
|
|
10499
|
-
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)" },
|
|
10500
|
-
normalized: { type: "number", description: "Normalized 0
|
|
10825
|
+
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)." },
|
|
10826
|
+
normalized: { type: "number", description: "Normalized 0-1 value for cross-tool comparison (optional)." }
|
|
10501
10827
|
},
|
|
10502
10828
|
required: ["value", "label"]
|
|
10503
10829
|
},
|
|
10504
10830
|
pain: {
|
|
10505
|
-
type: "
|
|
10831
|
+
type: "assessment",
|
|
10832
|
+
scale_id: "pain_5",
|
|
10506
10833
|
description: "How painful it is when unaddressed",
|
|
10507
10834
|
properties: {
|
|
10508
10835
|
value: { type: "number", description: "The numeric value, used for computation." },
|
|
10509
10836
|
label: { type: "string", description: "The qualitative label (what the assessor meant)." },
|
|
10510
|
-
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)" },
|
|
10511
|
-
normalized: { type: "number", description: "Normalized 0
|
|
10837
|
+
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)." },
|
|
10838
|
+
normalized: { type: "number", description: "Normalized 0-1 value for cross-tool comparison (optional)." }
|
|
10512
10839
|
},
|
|
10513
10840
|
required: ["value", "label"]
|
|
10514
10841
|
},
|
|
@@ -10529,17 +10856,18 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10529
10856
|
current_state: { type: "string", description: "Baseline or latest read" },
|
|
10530
10857
|
evidence_summary: { type: "string", description: "Evidence gathered so far (quotes, metrics, studies)" },
|
|
10531
10858
|
confidence: {
|
|
10532
|
-
type: "
|
|
10859
|
+
type: "assessment",
|
|
10860
|
+
scale_id: "confidence_5",
|
|
10533
10861
|
description: "Confidence this is the right outcome to pursue",
|
|
10534
10862
|
properties: {
|
|
10535
10863
|
value: { type: "number", description: "The numeric value, used for computation." },
|
|
10536
10864
|
label: { type: "string", description: "The qualitative label (what the assessor meant)." },
|
|
10537
|
-
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)" },
|
|
10538
|
-
normalized: { type: "number", description: "Normalized 0
|
|
10865
|
+
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)." },
|
|
10866
|
+
normalized: { type: "number", description: "Normalized 0-1 value for cross-tool comparison (optional)." }
|
|
10539
10867
|
},
|
|
10540
10868
|
required: ["value", "label"]
|
|
10541
10869
|
},
|
|
10542
|
-
outcome_status: { type: "string", description: "Current lifecycle phase
|
|
10870
|
+
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`." }
|
|
10543
10871
|
},
|
|
10544
10872
|
// ParticipantProperties: Research participant.
|
|
10545
10873
|
participant: {
|
|
@@ -10570,13 +10898,14 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10570
10898
|
value_exchange: { type: "string", description: "What each party gives and receives" },
|
|
10571
10899
|
partnership_tier: { type: "string", enum: ["strategic", "preferred", "standard", "trial"], description: "Commercial significance. Drives attention and exec sponsorship." },
|
|
10572
10900
|
risk_level: {
|
|
10573
|
-
type: "
|
|
10901
|
+
type: "assessment",
|
|
10902
|
+
scale_id: "severity_5",
|
|
10574
10903
|
description: "Exposure if the partnership fails (concentration risk, IP risk, etc.)",
|
|
10575
10904
|
properties: {
|
|
10576
10905
|
value: { type: "number", description: "The numeric value, used for computation." },
|
|
10577
10906
|
label: { type: "string", description: "The qualitative label (what the assessor meant)." },
|
|
10578
|
-
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)" },
|
|
10579
|
-
normalized: { type: "number", description: "Normalized 0
|
|
10907
|
+
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)." },
|
|
10908
|
+
normalized: { type: "number", description: "Normalized 0-1 value for cross-tool comparison (optional)." }
|
|
10580
10909
|
},
|
|
10581
10910
|
required: ["value", "label"]
|
|
10582
10911
|
},
|
|
@@ -10617,7 +10946,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10617
10946
|
},
|
|
10618
10947
|
// PipelineSalesProperties: Sales pipeline.
|
|
10619
10948
|
pipeline_sales: {
|
|
10620
|
-
pipeline_type: { type: "string", description:
|
|
10949
|
+
pipeline_type: { type: "string", enum: ["new_business", "expansion", "renewal", "partner", "other"], description: "Classification of the pipeline (UPG-579 Option B)." },
|
|
10621
10950
|
avg_cycle_days: { type: "number", description: "Average days from opportunity creation to close" }
|
|
10622
10951
|
},
|
|
10623
10952
|
// PipelineStageProperties: Pipeline stage.
|
|
@@ -10659,7 +10988,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10659
10988
|
// PricingStrategyProperties: Pricing strategy.
|
|
10660
10989
|
pricing_strategy: {
|
|
10661
10990
|
strategy_type: { type: "string", enum: ["value_based", "cost_plus", "competitor_based", "penetration", "freemium"], description: "Pricing methodology used" },
|
|
10662
|
-
review_cadence: { type: "string", description: "How often pricing is reviewed" },
|
|
10991
|
+
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." },
|
|
10663
10992
|
last_change: { type: "string", description: "Date of the last pricing change (ISO format)" }
|
|
10664
10993
|
},
|
|
10665
10994
|
// PricingTierProperties: PricingTier: the central pricing concept (the plan a customer buys).
|
|
@@ -10768,13 +11097,14 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10768
11097
|
rebuttal: {
|
|
10769
11098
|
statement: { type: "string", description: "The counter-argument or response to an objection" },
|
|
10770
11099
|
strength: {
|
|
10771
|
-
type: "
|
|
11100
|
+
type: "assessment",
|
|
11101
|
+
scale_id: "scale_5",
|
|
10772
11102
|
description: "How convincing this rebuttal is (1-5)",
|
|
10773
11103
|
properties: {
|
|
10774
11104
|
value: { type: "number", description: "The numeric value, used for computation." },
|
|
10775
11105
|
label: { type: "string", description: "The qualitative label (what the assessor meant)." },
|
|
10776
|
-
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)" },
|
|
10777
|
-
normalized: { type: "number", description: "Normalized 0
|
|
11106
|
+
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)." },
|
|
11107
|
+
normalized: { type: "number", description: "Normalized 0-1 value for cross-tool comparison (optional)." }
|
|
10778
11108
|
},
|
|
10779
11109
|
required: ["value", "label"]
|
|
10780
11110
|
},
|
|
@@ -10867,24 +11197,26 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10867
11197
|
risk: {
|
|
10868
11198
|
risk_type: { type: "string", enum: ["technical", "business", "legal", "security", "operational"], description: "Domain the risk belongs to" },
|
|
10869
11199
|
probability: {
|
|
10870
|
-
type: "
|
|
11200
|
+
type: "assessment",
|
|
11201
|
+
scale_id: "confidence_5",
|
|
10871
11202
|
description: "How likely this risk is to materialise (1 = unlikely, 5 = near certain)",
|
|
10872
11203
|
properties: {
|
|
10873
11204
|
value: { type: "number", description: "The numeric value, used for computation." },
|
|
10874
11205
|
label: { type: "string", description: "The qualitative label (what the assessor meant)." },
|
|
10875
|
-
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)" },
|
|
10876
|
-
normalized: { type: "number", description: "Normalized 0
|
|
11206
|
+
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)." },
|
|
11207
|
+
normalized: { type: "number", description: "Normalized 0-1 value for cross-tool comparison (optional)." }
|
|
10877
11208
|
},
|
|
10878
11209
|
required: ["value", "label"]
|
|
10879
11210
|
},
|
|
10880
11211
|
impact: {
|
|
10881
|
-
type: "
|
|
11212
|
+
type: "assessment",
|
|
11213
|
+
scale_id: "impact_5",
|
|
10882
11214
|
description: "Severity of consequences if the risk materialises (1 = negligible, 5 = catastrophic)",
|
|
10883
11215
|
properties: {
|
|
10884
11216
|
value: { type: "number", description: "The numeric value, used for computation." },
|
|
10885
11217
|
label: { type: "string", description: "The qualitative label (what the assessor meant)." },
|
|
10886
|
-
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)" },
|
|
10887
|
-
normalized: { type: "number", description: "Normalized 0
|
|
11218
|
+
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)." },
|
|
11219
|
+
normalized: { type: "number", description: "Normalized 0-1 value for cross-tool comparison (optional)." }
|
|
10888
11220
|
},
|
|
10889
11221
|
required: ["value", "label"]
|
|
10890
11222
|
},
|
|
@@ -10905,7 +11237,18 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10905
11237
|
quarter: { type: "string", description: 'Planning quarter (e.g. "Q2 2026"). Pair with `start_date`/`target_date` for precise scheduling.' },
|
|
10906
11238
|
priority: { type: "string", enum: ["urgent", "high", "medium", "low", "none"], description: "Importance against other items" },
|
|
10907
11239
|
item_status: { type: "string", enum: ["planned", "in_progress", "shipped", "deferred"], description: "Status. `deferred` = explicitly pushed to a later period." },
|
|
10908
|
-
confidence: {
|
|
11240
|
+
confidence: {
|
|
11241
|
+
type: "assessment",
|
|
11242
|
+
scale_id: "confidence_5",
|
|
11243
|
+
description: "Delivery confidence within the planned period (UPGAssessment on `confidence_5`).",
|
|
11244
|
+
properties: {
|
|
11245
|
+
value: { type: "number", description: "The numeric value, used for computation." },
|
|
11246
|
+
label: { type: "string", description: "The qualitative label (what the assessor meant)." },
|
|
11247
|
+
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)." },
|
|
11248
|
+
normalized: { type: "number", description: "Normalized 0-1 value for cross-tool comparison (optional)." }
|
|
11249
|
+
},
|
|
11250
|
+
required: ["value", "label"]
|
|
11251
|
+
},
|
|
10909
11252
|
start_date: { type: "string", description: "ISO date work begins. More precise than `quarter` for continuous planning." },
|
|
10910
11253
|
target_date: { type: "string", description: "ISO date completion is expected. For shipped items, the actual completion date." }
|
|
10911
11254
|
},
|
|
@@ -10919,13 +11262,14 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10919
11262
|
// RootCauseProperties: Underlying architectural or systemic issue.
|
|
10920
11263
|
root_cause: {
|
|
10921
11264
|
severity: {
|
|
10922
|
-
type: "
|
|
11265
|
+
type: "assessment",
|
|
11266
|
+
scale_id: "severity_5",
|
|
10923
11267
|
description: "Severity (1 = minor, 5 = critical)",
|
|
10924
11268
|
properties: {
|
|
10925
11269
|
value: { type: "number", description: "The numeric value, used for computation." },
|
|
10926
11270
|
label: { type: "string", description: "The qualitative label (what the assessor meant)." },
|
|
10927
|
-
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)" },
|
|
10928
|
-
normalized: { type: "number", description: "Normalized 0
|
|
11271
|
+
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)." },
|
|
11272
|
+
normalized: { type: "number", description: "Normalized 0-1 value for cross-tool comparison (optional)." }
|
|
10929
11273
|
},
|
|
10930
11274
|
required: ["value", "label"]
|
|
10931
11275
|
},
|
|
@@ -10975,13 +11319,14 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10975
11319
|
security_control: {
|
|
10976
11320
|
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." },
|
|
10977
11321
|
effectiveness: {
|
|
10978
|
-
type: "
|
|
11322
|
+
type: "assessment",
|
|
11323
|
+
scale_id: "impact_5",
|
|
10979
11324
|
description: "Mitigation effectiveness (1 = minimal, 5 = fully effective)",
|
|
10980
11325
|
properties: {
|
|
10981
11326
|
value: { type: "number", description: "The numeric value, used for computation." },
|
|
10982
11327
|
label: { type: "string", description: "The qualitative label (what the assessor meant)." },
|
|
10983
|
-
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)" },
|
|
10984
|
-
normalized: { type: "number", description: "Normalized 0
|
|
11328
|
+
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)." },
|
|
11329
|
+
normalized: { type: "number", description: "Normalized 0-1 value for cross-tool comparison (optional)." }
|
|
10985
11330
|
},
|
|
10986
11331
|
required: ["value", "label"]
|
|
10987
11332
|
},
|
|
@@ -10992,7 +11337,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10992
11337
|
// SecurityPolicyProperties: Security policy.
|
|
10993
11338
|
security_policy: {
|
|
10994
11339
|
scope: { type: "string", description: "Systems or processes covered" },
|
|
10995
|
-
review_cadence: { type: "string", description:
|
|
11340
|
+
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." },
|
|
10996
11341
|
version: { type: "string", description: "Version" },
|
|
10997
11342
|
effective_date: { type: "string", description: "ISO effective date" },
|
|
10998
11343
|
url: { type: "string", description: "Policy document URL" },
|
|
@@ -11063,17 +11408,18 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
11063
11408
|
},
|
|
11064
11409
|
// SkillProperties: Skill entity.
|
|
11065
11410
|
skill: {
|
|
11066
|
-
skill_category: { type: "string",
|
|
11411
|
+
skill_category: { type: "string", enum: ["technical", "leadership", "design", "product", "business", "operations", "other"], description: "Category of the skill (UPG-579 Option B)." },
|
|
11067
11412
|
proficiency_levels: { type: "string[]", description: "Description of proficiency levels for this skill" },
|
|
11068
11413
|
domain: { type: "string", description: 'Problem domain the skill applies to (e.g. "payments", "accessibility")' },
|
|
11069
11414
|
rarity: {
|
|
11070
|
-
type: "
|
|
11415
|
+
type: "assessment",
|
|
11416
|
+
scale_id: "scale_5",
|
|
11071
11417
|
description: "How scarce this skill is in the labour market this team hires from",
|
|
11072
11418
|
properties: {
|
|
11073
11419
|
value: { type: "number", description: "The numeric value, used for computation." },
|
|
11074
11420
|
label: { type: "string", description: "The qualitative label (what the assessor meant)." },
|
|
11075
|
-
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)" },
|
|
11076
|
-
normalized: { type: "number", description: "Normalized 0
|
|
11421
|
+
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)." },
|
|
11422
|
+
normalized: { type: "number", description: "Normalized 0-1 value for cross-tool comparison (optional)." }
|
|
11077
11423
|
},
|
|
11078
11424
|
required: ["value", "label"]
|
|
11079
11425
|
},
|
|
@@ -11089,46 +11435,50 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
11089
11435
|
solution: {
|
|
11090
11436
|
timeline: { type: "string", description: "Estimated delivery or target timeline" },
|
|
11091
11437
|
reach: {
|
|
11092
|
-
type: "
|
|
11438
|
+
type: "assessment",
|
|
11439
|
+
scale_id: "reach_5",
|
|
11093
11440
|
description: "How many users this solution reaches (1 = few, 5 = most)",
|
|
11094
11441
|
properties: {
|
|
11095
11442
|
value: { type: "number", description: "The numeric value, used for computation." },
|
|
11096
11443
|
label: { type: "string", description: "The qualitative label (what the assessor meant)." },
|
|
11097
|
-
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)" },
|
|
11098
|
-
normalized: { type: "number", description: "Normalized 0
|
|
11444
|
+
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)." },
|
|
11445
|
+
normalized: { type: "number", description: "Normalized 0-1 value for cross-tool comparison (optional)." }
|
|
11099
11446
|
},
|
|
11100
11447
|
required: ["value", "label"]
|
|
11101
11448
|
},
|
|
11102
11449
|
impact: {
|
|
11103
|
-
type: "
|
|
11450
|
+
type: "assessment",
|
|
11451
|
+
scale_id: "impact_5",
|
|
11104
11452
|
description: "Expected impact on the target outcome (1 = minimal, 5 = transformative)",
|
|
11105
11453
|
properties: {
|
|
11106
11454
|
value: { type: "number", description: "The numeric value, used for computation." },
|
|
11107
11455
|
label: { type: "string", description: "The qualitative label (what the assessor meant)." },
|
|
11108
|
-
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)" },
|
|
11109
|
-
normalized: { type: "number", description: "Normalized 0
|
|
11456
|
+
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)." },
|
|
11457
|
+
normalized: { type: "number", description: "Normalized 0-1 value for cross-tool comparison (optional)." }
|
|
11110
11458
|
},
|
|
11111
11459
|
required: ["value", "label"]
|
|
11112
11460
|
},
|
|
11113
11461
|
confidence: {
|
|
11114
|
-
type: "
|
|
11462
|
+
type: "assessment",
|
|
11463
|
+
scale_id: "confidence_5",
|
|
11115
11464
|
description: "How confident the team is in this solution (1 = speculative, 5 = proven)",
|
|
11116
11465
|
properties: {
|
|
11117
11466
|
value: { type: "number", description: "The numeric value, used for computation." },
|
|
11118
11467
|
label: { type: "string", description: "The qualitative label (what the assessor meant)." },
|
|
11119
|
-
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)" },
|
|
11120
|
-
normalized: { type: "number", description: "Normalized 0
|
|
11468
|
+
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)." },
|
|
11469
|
+
normalized: { type: "number", description: "Normalized 0-1 value for cross-tool comparison (optional)." }
|
|
11121
11470
|
},
|
|
11122
11471
|
required: ["value", "label"]
|
|
11123
11472
|
},
|
|
11124
11473
|
effort: {
|
|
11125
|
-
type: "
|
|
11474
|
+
type: "assessment",
|
|
11475
|
+
scale_id: "effort_5",
|
|
11126
11476
|
description: "Level of effort required to implement (1 = trivial, 5 = very large)",
|
|
11127
11477
|
properties: {
|
|
11128
11478
|
value: { type: "number", description: "The numeric value, used for computation." },
|
|
11129
11479
|
label: { type: "string", description: "The qualitative label (what the assessor meant)." },
|
|
11130
|
-
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)" },
|
|
11131
|
-
normalized: { type: "number", description: "Normalized 0
|
|
11480
|
+
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)." },
|
|
11481
|
+
normalized: { type: "number", description: "Normalized 0-1 value for cross-tool comparison (optional)." }
|
|
11132
11482
|
},
|
|
11133
11483
|
required: ["value", "label"]
|
|
11134
11484
|
},
|
|
@@ -11138,24 +11488,26 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
11138
11488
|
stakeholder: {
|
|
11139
11489
|
stakeholder_type: { type: "string", enum: ["internal", "external", "investor", "regulator"], description: "Relationship of the stakeholder to the organisation" },
|
|
11140
11490
|
influence: {
|
|
11141
|
-
type: "
|
|
11491
|
+
type: "assessment",
|
|
11492
|
+
scale_id: "importance_5",
|
|
11142
11493
|
description: "How much influence this stakeholder has over decisions (1 = minimal, 5 = decisive)",
|
|
11143
11494
|
properties: {
|
|
11144
11495
|
value: { type: "number", description: "The numeric value, used for computation." },
|
|
11145
11496
|
label: { type: "string", description: "The qualitative label (what the assessor meant)." },
|
|
11146
|
-
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)" },
|
|
11147
|
-
normalized: { type: "number", description: "Normalized 0
|
|
11497
|
+
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)." },
|
|
11498
|
+
normalized: { type: "number", description: "Normalized 0-1 value for cross-tool comparison (optional)." }
|
|
11148
11499
|
},
|
|
11149
11500
|
required: ["value", "label"]
|
|
11150
11501
|
},
|
|
11151
11502
|
interest: {
|
|
11152
|
-
type: "
|
|
11503
|
+
type: "assessment",
|
|
11504
|
+
scale_id: "importance_5",
|
|
11153
11505
|
description: "How much interest this stakeholder has in the outcome (1 = passive, 5 = deeply invested)",
|
|
11154
11506
|
properties: {
|
|
11155
11507
|
value: { type: "number", description: "The numeric value, used for computation." },
|
|
11156
11508
|
label: { type: "string", description: "The qualitative label (what the assessor meant)." },
|
|
11157
|
-
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)" },
|
|
11158
|
-
normalized: { type: "number", description: "Normalized 0
|
|
11509
|
+
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)." },
|
|
11510
|
+
normalized: { type: "number", description: "Normalized 0-1 value for cross-tool comparison (optional)." }
|
|
11159
11511
|
},
|
|
11160
11512
|
required: ["value", "label"]
|
|
11161
11513
|
}
|
|
@@ -11167,19 +11519,6 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
11167
11519
|
risks_flagged: { type: "number", description: "Number of risks flagged in this report" },
|
|
11168
11520
|
blockers: { type: "string", description: "Description of current blockers" }
|
|
11169
11521
|
},
|
|
11170
|
-
// UserStoryProperties: "As X, I want Y so Z" templated promise, a user story (UCS pattern P5).
|
|
11171
|
-
user_story: {
|
|
11172
|
-
as_a: { type: "string", description: '"As a [persona], \u2026". Free-text persona name or slug ref.' },
|
|
11173
|
-
i_want_to: { type: "string", description: "Capability or action the persona wants." },
|
|
11174
|
-
so_that: { type: "string", description: "Benefit or outcome the persona expects." },
|
|
11175
|
-
text: { type: "string", description: "Free-form story text. Used as a single-line rendered view." }
|
|
11176
|
-
},
|
|
11177
|
-
// StoryTaskProperties
|
|
11178
|
-
story_task: {
|
|
11179
|
-
estimate: { type: "string", description: "@deprecated Use TaskProperties.estimate" },
|
|
11180
|
-
effort: { type: "number", description: "@deprecated Use TaskProperties.effort (string form)" },
|
|
11181
|
-
priority: { type: "string", enum: ["urgent", "high", "medium", "low", "none"], description: "@deprecated Use TaskProperties.priority" }
|
|
11182
|
-
},
|
|
11183
11522
|
// StrategicPillarProperties: StrategicPillar entity. Durable multi-year direction the product commits to.
|
|
11184
11523
|
strategic_pillar: {
|
|
11185
11524
|
owner: { type: "string", description: "Owning person or team" },
|
|
@@ -11213,19 +11552,20 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
11213
11552
|
support_ticket: {
|
|
11214
11553
|
ticket_type: { type: "string", enum: ["bug", "question", "feature_request"], description: "Classification of the ticket" },
|
|
11215
11554
|
severity: {
|
|
11216
|
-
type: "
|
|
11555
|
+
type: "assessment",
|
|
11556
|
+
scale_id: "severity_5",
|
|
11217
11557
|
description: "Impact severity of the issue (1 = cosmetic, 5 = service down)",
|
|
11218
11558
|
properties: {
|
|
11219
11559
|
value: { type: "number", description: "The numeric value, used for computation." },
|
|
11220
11560
|
label: { type: "string", description: "The qualitative label (what the assessor meant)." },
|
|
11221
|
-
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)" },
|
|
11222
|
-
normalized: { type: "number", description: "Normalized 0
|
|
11561
|
+
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)." },
|
|
11562
|
+
normalized: { type: "number", description: "Normalized 0-1 value for cross-tool comparison (optional)." }
|
|
11223
11563
|
},
|
|
11224
11564
|
required: ["value", "label"]
|
|
11225
11565
|
},
|
|
11226
11566
|
resolution: { type: "string", description: "Description of how the ticket was resolved" },
|
|
11227
11567
|
source: { type: "string", description: 'Where the ticket originated (e.g. "email", "in-app", "chat")' },
|
|
11228
|
-
signal_sentiment: { type: "string", enum: ["positive", "
|
|
11568
|
+
signal_sentiment: { type: "string", enum: ["positive", "neutral", "negative", "mixed"], description: "Detected sentiment of the customer's message" },
|
|
11229
11569
|
signal_channel: { type: "string", description: "Channel through which the signal was received" },
|
|
11230
11570
|
signal_urgency: { type: "string", enum: ["low", "medium", "high", "critical"], description: "Perceived urgency of the customer's request" }
|
|
11231
11571
|
},
|
|
@@ -11246,19 +11586,20 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
11246
11586
|
symptom_description: { type: "string", description: "Plain-language description of observed behaviour. Primary content of the entity." },
|
|
11247
11587
|
first_observed_at: { type: "string", description: "ISO timestamp first observed in the wild. Pairs with `frequency_rating` and `reproducibility` for triage." },
|
|
11248
11588
|
severity: {
|
|
11249
|
-
type: "
|
|
11589
|
+
type: "assessment",
|
|
11590
|
+
scale_id: "severity_5",
|
|
11250
11591
|
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`.",
|
|
11251
11592
|
properties: {
|
|
11252
11593
|
value: { type: "number", description: "The numeric value, used for computation." },
|
|
11253
11594
|
label: { type: "string", description: "The qualitative label (what the assessor meant)." },
|
|
11254
|
-
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)" },
|
|
11255
|
-
normalized: { type: "number", description: "Normalized 0
|
|
11595
|
+
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)." },
|
|
11596
|
+
normalized: { type: "number", description: "Normalized 0-1 value for cross-tool comparison (optional)." }
|
|
11256
11597
|
},
|
|
11257
11598
|
required: ["value", "label"]
|
|
11258
11599
|
},
|
|
11259
11600
|
frequency_count: { type: "number", description: "Exact observation count in the period. Pairs with `frequency_period` for a precise rate." },
|
|
11260
11601
|
frequency_period: { type: "string", description: "Recurrence period (ISO-8601 `Duration`). @example 'P7D' (per week), 'P1D' (per day), 'PT1H' (per hour)" },
|
|
11261
|
-
frequency_rating: { type: "string", enum: ["
|
|
11602
|
+
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`." },
|
|
11262
11603
|
affected_users_estimate: { type: "number", description: "Approximate count of users affected. Snapshot estimate." },
|
|
11263
11604
|
reproducibility: { type: "string", enum: ["always", "frequent", "intermittent", "rare", "once"], description: "Reproduction reliability" },
|
|
11264
11605
|
steps_to_reproduce: { type: "string", description: "Steps to reproduce" }
|
|
@@ -11271,7 +11612,6 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
11271
11612
|
},
|
|
11272
11613
|
// TaskProperties: Task: a discrete unit of work, smaller than a story.
|
|
11273
11614
|
task: {
|
|
11274
|
-
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`." },
|
|
11275
11615
|
assignee: { type: "string", description: "Assigned person" },
|
|
11276
11616
|
effort: { type: "string", description: 'Effort estimate (e.g. "2h", "1d", "3 points"). Use a consistent unit within your team.' },
|
|
11277
11617
|
priority: { type: "string", enum: ["urgent", "high", "medium", "low", "none"], description: "Relative importance against other tasks" },
|
|
@@ -11296,24 +11636,26 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
11296
11636
|
technical_debt_item: {
|
|
11297
11637
|
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." },
|
|
11298
11638
|
severity: {
|
|
11299
|
-
type: "
|
|
11639
|
+
type: "assessment",
|
|
11640
|
+
scale_id: "severity_5",
|
|
11300
11641
|
description: "Severity on system or team. Requires human evaluation.",
|
|
11301
11642
|
properties: {
|
|
11302
11643
|
value: { type: "number", description: "The numeric value, used for computation." },
|
|
11303
11644
|
label: { type: "string", description: "The qualitative label (what the assessor meant)." },
|
|
11304
|
-
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)" },
|
|
11305
|
-
normalized: { type: "number", description: "Normalized 0
|
|
11645
|
+
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)." },
|
|
11646
|
+
normalized: { type: "number", description: "Normalized 0-1 value for cross-tool comparison (optional)." }
|
|
11306
11647
|
},
|
|
11307
11648
|
required: ["value", "label"]
|
|
11308
11649
|
},
|
|
11309
11650
|
effort_to_fix: {
|
|
11310
|
-
type: "
|
|
11651
|
+
type: "assessment",
|
|
11652
|
+
scale_id: "effort_5",
|
|
11311
11653
|
description: "Estimated effort to resolve. Requires team knowledge of the codebase.",
|
|
11312
11654
|
properties: {
|
|
11313
11655
|
value: { type: "number", description: "The numeric value, used for computation." },
|
|
11314
11656
|
label: { type: "string", description: "The qualitative label (what the assessor meant)." },
|
|
11315
|
-
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)" },
|
|
11316
|
-
normalized: { type: "number", description: "Normalized 0
|
|
11657
|
+
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)." },
|
|
11658
|
+
normalized: { type: "number", description: "Normalized 0-1 value for cross-tool comparison (optional)." }
|
|
11317
11659
|
},
|
|
11318
11660
|
required: ["value", "label"]
|
|
11319
11661
|
},
|
|
@@ -11396,24 +11738,26 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
11396
11738
|
threat: {
|
|
11397
11739
|
category: { type: "string", description: 'Attack or threat scenario. @example "injection", "misconfiguration", "social engineering", "supply chain"' },
|
|
11398
11740
|
likelihood: {
|
|
11399
|
-
type: "
|
|
11741
|
+
type: "assessment",
|
|
11742
|
+
scale_id: "confidence_5",
|
|
11400
11743
|
description: "Likelihood (1 = theoretical, 5 = actively exploited). @example value 5 for a known, exploitable, commonly targeted pattern",
|
|
11401
11744
|
properties: {
|
|
11402
11745
|
value: { type: "number", description: "The numeric value, used for computation." },
|
|
11403
11746
|
label: { type: "string", description: "The qualitative label (what the assessor meant)." },
|
|
11404
|
-
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)" },
|
|
11405
|
-
normalized: { type: "number", description: "Normalized 0
|
|
11747
|
+
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)." },
|
|
11748
|
+
normalized: { type: "number", description: "Normalized 0-1 value for cross-tool comparison (optional)." }
|
|
11406
11749
|
},
|
|
11407
11750
|
required: ["value", "label"]
|
|
11408
11751
|
},
|
|
11409
11752
|
impact: {
|
|
11410
|
-
type: "
|
|
11753
|
+
type: "assessment",
|
|
11754
|
+
scale_id: "impact_5",
|
|
11411
11755
|
description: "Impact (1 = minimal, 5 = catastrophic). @example value 5 for threats that expose PII or cause complete service compromise",
|
|
11412
11756
|
properties: {
|
|
11413
11757
|
value: { type: "number", description: "The numeric value, used for computation." },
|
|
11414
11758
|
label: { type: "string", description: "The qualitative label (what the assessor meant)." },
|
|
11415
|
-
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)" },
|
|
11416
|
-
normalized: { type: "number", description: "Normalized 0
|
|
11759
|
+
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)." },
|
|
11760
|
+
normalized: { type: "number", description: "Normalized 0-1 value for cross-tool comparison (optional)." }
|
|
11417
11761
|
},
|
|
11418
11762
|
required: ["value", "label"]
|
|
11419
11763
|
},
|
|
@@ -11471,7 +11815,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
11471
11815
|
// UserAdvisoryBoardProperties: User advisory board.
|
|
11472
11816
|
user_advisory_board: {
|
|
11473
11817
|
member_count: { type: "number", description: "Number of members on the board" },
|
|
11474
|
-
meeting_cadence: { type: "string", description:
|
|
11818
|
+
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." },
|
|
11475
11819
|
board_focus: { type: "string", description: "Primary topic or area the board advises on" }
|
|
11476
11820
|
},
|
|
11477
11821
|
// UserFlowProperties: User flow.
|
|
@@ -11487,6 +11831,13 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
11487
11831
|
journey_type: { type: "string", enum: ["current_state", "future_state", "day_in_the_life", "service_blueprint"], description: "Maps current or future state" },
|
|
11488
11832
|
scenario: { type: "string", description: "Scenario context" }
|
|
11489
11833
|
},
|
|
11834
|
+
// UserStoryProperties: "As X, I want Y so Z" templated promise on a user story (UCS pattern P5).
|
|
11835
|
+
user_story: {
|
|
11836
|
+
as_a: { type: "string", description: '"As a [persona], \u2026". Free-text persona name or slug ref.' },
|
|
11837
|
+
i_want_to: { type: "string", description: "Capability or action the persona wants." },
|
|
11838
|
+
so_that: { type: "string", description: "Benefit or outcome the persona expects." },
|
|
11839
|
+
text: { type: "string", description: "Free-form story text. Used as a single-line rendered view." }
|
|
11840
|
+
},
|
|
11490
11841
|
// ValueObjectProperties: DDD value object.
|
|
11491
11842
|
value_object: {
|
|
11492
11843
|
immutable: { type: "boolean", description: "Whether immutable" },
|
|
@@ -11501,7 +11852,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
11501
11852
|
},
|
|
11502
11853
|
// ValueStreamProperties: ValueStream entity.
|
|
11503
11854
|
value_stream: {
|
|
11504
|
-
stream_stage: { type: "string", description: "Current stage in the value delivery pipeline" },
|
|
11855
|
+
stream_stage: { type: "string", enum: ["discovery", "definition", "build", "delivery", "operation", "other"], description: "Current stage in the value delivery pipeline (UPG-579 Option B)." },
|
|
11505
11856
|
lead_time: { type: "string", description: 'End-to-end lead time. @example "2 weeks"' },
|
|
11506
11857
|
throughput: { type: "string", description: 'Throughput measure. @example "5 features/sprint"' }
|
|
11507
11858
|
},
|
|
@@ -11521,7 +11872,18 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
11521
11872
|
vulnerability: {
|
|
11522
11873
|
cve_id: { type: "string", description: 'CVE identifier from the National Vulnerability Database. @example "CVE-2024-1234"' },
|
|
11523
11874
|
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)" },
|
|
11524
|
-
severity: {
|
|
11875
|
+
severity: {
|
|
11876
|
+
type: "assessment",
|
|
11877
|
+
scale_id: "severity_5",
|
|
11878
|
+
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)",
|
|
11879
|
+
properties: {
|
|
11880
|
+
value: { type: "number", description: "The numeric value, used for computation." },
|
|
11881
|
+
label: { type: "string", description: "The qualitative label (what the assessor meant)." },
|
|
11882
|
+
scale_id: { type: "string", description: "Which assessment scale this was rated on (optional)." },
|
|
11883
|
+
normalized: { type: "number", description: "Normalized 0-1 value for cross-tool comparison (optional)." }
|
|
11884
|
+
},
|
|
11885
|
+
required: ["value", "label"]
|
|
11886
|
+
},
|
|
11525
11887
|
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' },
|
|
11526
11888
|
affected_component: { type: "string", description: 'Affected component, library, or system. @example "lodash", "openssl", "login service"' },
|
|
11527
11889
|
affected_package: { type: "string", description: 'Affected package with version. More precise than `affected_component`. @example "lodash@4.17.20", "openssl@1.1.1q"' },
|
|
@@ -16145,17 +16507,6 @@ function seqStep(order, phase, entity_types, prompt_hint, options) {
|
|
|
16145
16507
|
...options?.next_sequence_on_gap ? { next_sequence_on_gap: options.next_sequence_on_gap } : {}
|
|
16146
16508
|
};
|
|
16147
16509
|
}
|
|
16148
|
-
function domainGuideStep(domain_id, phase, name, prompt_hint, options) {
|
|
16149
|
-
return {
|
|
16150
|
-
kind: "domain_guide",
|
|
16151
|
-
order: 1,
|
|
16152
|
-
phase,
|
|
16153
|
-
name,
|
|
16154
|
-
prompt_hint,
|
|
16155
|
-
domain_id,
|
|
16156
|
-
...options?.next_sequence_on_gap ? { next_sequence_on_gap: options.next_sequence_on_gap } : {}
|
|
16157
|
-
};
|
|
16158
|
-
}
|
|
16159
16510
|
var STRATEGY_OUTCOMES_PLAYBOOK = {
|
|
16160
16511
|
id: "playbook:strategy-outcomes",
|
|
16161
16512
|
name: "Strategy & Outcomes",
|
|
@@ -16163,6 +16514,7 @@ var STRATEGY_OUTCOMES_PLAYBOOK = {
|
|
|
16163
16514
|
description: "Cascade vision through themes, outcomes, objectives, key results, and the bets you are making to get there.",
|
|
16164
16515
|
region: "strategy_outcomes",
|
|
16165
16516
|
is_canonical: true,
|
|
16517
|
+
related_framework_ids: ["okr-framework", "three-horizons", "north-star-metric", "metrics-tree", "wardley-map"],
|
|
16166
16518
|
target_anchor_entity: "objective",
|
|
16167
16519
|
creation_sequence: [
|
|
16168
16520
|
seqStep(
|
|
@@ -16206,7 +16558,7 @@ var STRATEGY_OUTCOMES_PLAYBOOK = {
|
|
|
16206
16558
|
"Assumptions & Decisions",
|
|
16207
16559
|
["assumption", "decision"],
|
|
16208
16560
|
"Capture the bets you are making (assumptions) and the choices you have ratified (decisions). These guard the work against silent drift.",
|
|
16209
|
-
{ next_sequence_on_gap: "playbook:discovery-validation
|
|
16561
|
+
{ next_sequence_on_gap: "playbook:discovery-research-validation" }
|
|
16210
16562
|
)
|
|
16211
16563
|
]
|
|
16212
16564
|
};
|
|
@@ -16217,6 +16569,7 @@ var USERS_NEEDS_PLAYBOOK = {
|
|
|
16217
16569
|
description: "Bootstrap personas, jobs, needs, and desired outcomes: the user side of every product graph.",
|
|
16218
16570
|
region: "users_needs",
|
|
16219
16571
|
is_canonical: true,
|
|
16572
|
+
related_framework_ids: ["persona-canvas", "empathy-map", "value-proposition-canvas", "kano-model"],
|
|
16220
16573
|
target_anchor_entity: "persona",
|
|
16221
16574
|
creation_sequence: [
|
|
16222
16575
|
seqStep(
|
|
@@ -16270,6 +16623,7 @@ var DISCOVERY_RESEARCH_VALIDATION_PLAYBOOK = {
|
|
|
16270
16623
|
description: "Evidence-first discovery sequence: plan \u2192 recruit \u2192 observe \u2192 synthesize \u2192 insight \u2192 opportunity \u2192 hypothesis \u2192 test.",
|
|
16271
16624
|
region: "discovery_research_validation",
|
|
16272
16625
|
is_canonical: true,
|
|
16626
|
+
related_framework_ids: ["double-diamond", "opportunity-solution-tree", "build-measure-learn", "hypothesis-board"],
|
|
16273
16627
|
target_anchor_entity: "opportunity",
|
|
16274
16628
|
creation_sequence: [
|
|
16275
16629
|
seqStep(
|
|
@@ -16322,23 +16676,6 @@ var DISCOVERY_RESEARCH_VALIDATION_PLAYBOOK = {
|
|
|
16322
16676
|
)
|
|
16323
16677
|
]
|
|
16324
16678
|
};
|
|
16325
|
-
var DISCOVERY_VALIDATION_HYPOTHESIS_PLAYBOOK = {
|
|
16326
|
-
id: "playbook:discovery-validation-hypothesis-cycle",
|
|
16327
|
-
name: "Hypothesis Validation",
|
|
16328
|
-
version: "0.1.0",
|
|
16329
|
-
description: "Tight hypothesis \u2192 experiment \u2192 evidence \u2192 learning loop. Run after research has surfaced an opportunity.",
|
|
16330
|
-
region: "discovery_research_validation",
|
|
16331
|
-
framework_id: "build-measure-learn",
|
|
16332
|
-
target_anchor_entity: "hypothesis",
|
|
16333
|
-
creation_sequence: [
|
|
16334
|
-
domainGuideStep(
|
|
16335
|
-
"validation",
|
|
16336
|
-
"Validation",
|
|
16337
|
-
"Frame & test",
|
|
16338
|
-
"Run the validation creation sequence: hypothesis, experiment, evidence, learning."
|
|
16339
|
-
)
|
|
16340
|
-
]
|
|
16341
|
-
};
|
|
16342
16679
|
var MARKET_COMPETITIVE_PLAYBOOK = {
|
|
16343
16680
|
id: "playbook:market-competitive",
|
|
16344
16681
|
name: "Market & Competitive",
|
|
@@ -16346,6 +16683,7 @@ var MARKET_COMPETITIVE_PLAYBOOK = {
|
|
|
16346
16683
|
description: "Map the competitive landscape: define the market, name the alternatives, read trends, find moves.",
|
|
16347
16684
|
region: "market_competitive",
|
|
16348
16685
|
is_canonical: true,
|
|
16686
|
+
related_framework_ids: ["porter-five-forces", "swot-analysis", "value-chain-analysis", "wardley-map", "bullseye-framework"],
|
|
16349
16687
|
target_anchor_entity: "competitor",
|
|
16350
16688
|
creation_sequence: [
|
|
16351
16689
|
seqStep(
|
|
@@ -16393,6 +16731,7 @@ var EXPERIENCE_DESIGN_BRAND_PLAYBOOK = {
|
|
|
16393
16731
|
description: "Journey-first design sequence: research \u2192 personas \u2192 journeys \u2192 define \u2192 ideate \u2192 prototype \u2192 test \u2192 design system.",
|
|
16394
16732
|
region: "experience_design_brand",
|
|
16395
16733
|
is_canonical: true,
|
|
16734
|
+
related_framework_ids: ["double-diamond", "atomic-design", "story-map"],
|
|
16396
16735
|
target_anchor_entity: "user_journey",
|
|
16397
16736
|
creation_sequence: [
|
|
16398
16737
|
seqStep(
|
|
@@ -16445,54 +16784,6 @@ var EXPERIENCE_DESIGN_BRAND_PLAYBOOK = {
|
|
|
16445
16784
|
)
|
|
16446
16785
|
]
|
|
16447
16786
|
};
|
|
16448
|
-
var EXPERIENCE_UX_DOMAIN_ONLY_PLAYBOOK = {
|
|
16449
|
-
id: "playbook:experience-ux-domain-only",
|
|
16450
|
-
name: "UX Design (compact)",
|
|
16451
|
-
version: "0.1.0",
|
|
16452
|
-
description: "Compact UX-only path. Quick when research and design system are managed separately.",
|
|
16453
|
-
region: "experience_design_brand",
|
|
16454
|
-
target_anchor_entity: "user_journey",
|
|
16455
|
-
creation_sequence: [
|
|
16456
|
-
domainGuideStep(
|
|
16457
|
-
"ux_design",
|
|
16458
|
-
"UX",
|
|
16459
|
-
"Journey to screen",
|
|
16460
|
-
"Run the ux_design creation sequence: journey, steps, screens, flows, wireframes, prototypes."
|
|
16461
|
-
)
|
|
16462
|
-
]
|
|
16463
|
-
};
|
|
16464
|
-
var EXPERIENCE_DESIGN_SYSTEM_PLAYBOOK = {
|
|
16465
|
-
id: "playbook:experience-design-system",
|
|
16466
|
-
name: "Design System",
|
|
16467
|
-
version: "0.1.0",
|
|
16468
|
-
description: "Codify the shared design language: tokens, components, patterns, guidelines.",
|
|
16469
|
-
region: "experience_design_brand",
|
|
16470
|
-
creation_sequence: [
|
|
16471
|
-
domainGuideStep(
|
|
16472
|
-
"design_system",
|
|
16473
|
-
"Design System",
|
|
16474
|
-
"System foundations",
|
|
16475
|
-
"Run the design_system creation sequence: tokens, components, patterns, guidelines.",
|
|
16476
|
-
{ next_sequence_on_gap: "playbook:experience-ux-domain-only" }
|
|
16477
|
-
)
|
|
16478
|
-
]
|
|
16479
|
-
};
|
|
16480
|
-
var EXPERIENCE_CONTENT_PLAYBOOK = {
|
|
16481
|
-
id: "playbook:experience-content",
|
|
16482
|
-
name: "Content Strategy",
|
|
16483
|
-
version: "0.1.0",
|
|
16484
|
-
description: "Plan what to publish: strategy, themes, calendar, individual pieces tied to audience and channels.",
|
|
16485
|
-
region: "experience_design_brand",
|
|
16486
|
-
creation_sequence: [
|
|
16487
|
-
domainGuideStep(
|
|
16488
|
-
"content",
|
|
16489
|
-
"Content",
|
|
16490
|
-
"Content plan",
|
|
16491
|
-
"Run the content creation sequence: strategy, themes, calendar, pieces.",
|
|
16492
|
-
{ next_sequence_on_gap: "playbook:business-growth-funnel" }
|
|
16493
|
-
)
|
|
16494
|
-
]
|
|
16495
|
-
};
|
|
16496
16787
|
var PRODUCT_DELIVERY_PLAYBOOK = {
|
|
16497
16788
|
id: "playbook:product-delivery",
|
|
16498
16789
|
name: "Product Delivery",
|
|
@@ -16500,6 +16791,7 @@ var PRODUCT_DELIVERY_PLAYBOOK = {
|
|
|
16500
16791
|
description: "Shape what gets built: features, epics, user stories, releases, milestones, and the dependencies between them.",
|
|
16501
16792
|
region: "product_delivery",
|
|
16502
16793
|
is_canonical: true,
|
|
16794
|
+
related_framework_ids: ["story-map", "rice-scoring", "moscow", "now-next-later", "shape-up", "kano-model"],
|
|
16503
16795
|
target_anchor_entity: "feature",
|
|
16504
16796
|
creation_sequence: [
|
|
16505
16797
|
seqStep(
|
|
@@ -16540,22 +16832,6 @@ var PRODUCT_DELIVERY_PLAYBOOK = {
|
|
|
16540
16832
|
)
|
|
16541
16833
|
]
|
|
16542
16834
|
};
|
|
16543
|
-
var PRODUCT_FEEDBACK_SYNTHESIS_PLAYBOOK = {
|
|
16544
|
-
id: "playbook:product-feedback-synthesis",
|
|
16545
|
-
name: "Feedback Synthesis",
|
|
16546
|
-
version: "0.1.0",
|
|
16547
|
-
description: "Capture and cluster qualitative signal: feedback items, themes, NPS, support tickets.",
|
|
16548
|
-
region: "product_delivery",
|
|
16549
|
-
creation_sequence: [
|
|
16550
|
-
domainGuideStep(
|
|
16551
|
-
"feedback",
|
|
16552
|
-
"Feedback",
|
|
16553
|
-
"Signal capture",
|
|
16554
|
-
"Run the feedback creation sequence: items, themes, NPS, support data.",
|
|
16555
|
-
{ next_sequence_on_gap: "playbook:discovery-validation-hypothesis-cycle" }
|
|
16556
|
-
)
|
|
16557
|
-
]
|
|
16558
|
-
};
|
|
16559
16835
|
var ENGINEERING_PLATFORM_PLAYBOOK = {
|
|
16560
16836
|
id: "playbook:engineering-platform",
|
|
16561
16837
|
name: "Engineering & Platform",
|
|
@@ -16563,6 +16839,7 @@ var ENGINEERING_PLATFORM_PLAYBOOK = {
|
|
|
16563
16839
|
description: "Architecture-first engineering sequence: architecture \u2192 services \u2192 data \u2192 build \u2192 test \u2192 deploy \u2192 monitor \u2192 security.",
|
|
16564
16840
|
region: "engineering_platform",
|
|
16565
16841
|
is_canonical: true,
|
|
16842
|
+
related_framework_ids: ["c4-model", "adr-log", "dora-metrics"],
|
|
16566
16843
|
target_anchor_entity: "service",
|
|
16567
16844
|
creation_sequence: [
|
|
16568
16845
|
seqStep(
|
|
@@ -16615,21 +16892,6 @@ var ENGINEERING_PLATFORM_PLAYBOOK = {
|
|
|
16615
16892
|
)
|
|
16616
16893
|
]
|
|
16617
16894
|
};
|
|
16618
|
-
var ENGINEERING_ARCHITECTURE_ONLY_PLAYBOOK = {
|
|
16619
|
-
id: "playbook:engineering-architecture-only",
|
|
16620
|
-
name: "Architecture (compact)",
|
|
16621
|
-
version: "0.1.0",
|
|
16622
|
-
description: "Compact architecture-only path. Quick when build/deploy/security are managed separately.",
|
|
16623
|
-
region: "engineering_platform",
|
|
16624
|
-
creation_sequence: [
|
|
16625
|
-
domainGuideStep(
|
|
16626
|
-
"engineering",
|
|
16627
|
-
"Engineering",
|
|
16628
|
-
"System shape",
|
|
16629
|
-
"Run the engineering creation sequence: bounded contexts, services, data, decisions."
|
|
16630
|
-
)
|
|
16631
|
-
]
|
|
16632
|
-
};
|
|
16633
16895
|
var BUSINESS_GTM_GROWTH_PLAYBOOK = {
|
|
16634
16896
|
id: "playbook:business-gtm-growth",
|
|
16635
16897
|
name: "Business, GTM & Growth",
|
|
@@ -16637,6 +16899,7 @@ var BUSINESS_GTM_GROWTH_PLAYBOOK = {
|
|
|
16637
16899
|
description: "Viability-first business sequence: value prop \u2192 customer \u2192 revenue \u2192 costs \u2192 unit economics \u2192 GTM \u2192 competitive advantage.",
|
|
16638
16900
|
region: "business_gtm_growth",
|
|
16639
16901
|
is_canonical: true,
|
|
16902
|
+
related_framework_ids: ["business-model-canvas", "pirate-metrics-aarrr", "north-star-metric", "product-led-growth-framework", "marketing-mix-4ps"],
|
|
16640
16903
|
target_anchor_entity: "value_proposition",
|
|
16641
16904
|
creation_sequence: [
|
|
16642
16905
|
seqStep(
|
|
@@ -16683,70 +16946,6 @@ var BUSINESS_GTM_GROWTH_PLAYBOOK = {
|
|
|
16683
16946
|
)
|
|
16684
16947
|
]
|
|
16685
16948
|
};
|
|
16686
|
-
var BUSINESS_MODEL_BMC_PLAYBOOK = {
|
|
16687
|
-
id: "playbook:business-model-bmc",
|
|
16688
|
-
name: "Business Model (BMC)",
|
|
16689
|
-
version: "0.1.0",
|
|
16690
|
-
description: "Design the business model with Business Model Canvas: value props, customer segments, revenue streams, cost structure.",
|
|
16691
|
-
region: "business_gtm_growth",
|
|
16692
|
-
framework_id: "business-model-canvas",
|
|
16693
|
-
creation_sequence: [
|
|
16694
|
-
domainGuideStep(
|
|
16695
|
-
"business_model",
|
|
16696
|
-
"Business",
|
|
16697
|
-
"Model canvas",
|
|
16698
|
-
"Run the business_model creation sequence: value props, segments, revenue, costs.",
|
|
16699
|
-
{ next_sequence_on_gap: "playbook:business-pricing" }
|
|
16700
|
-
)
|
|
16701
|
-
]
|
|
16702
|
-
};
|
|
16703
|
-
var BUSINESS_PRICING_PLAYBOOK = {
|
|
16704
|
-
id: "playbook:business-pricing",
|
|
16705
|
-
name: "Pricing",
|
|
16706
|
-
version: "0.1.0",
|
|
16707
|
-
description: "Design the revenue engine: pricing strategy, tiers, trials, paywalls, discounts.",
|
|
16708
|
-
region: "business_gtm_growth",
|
|
16709
|
-
creation_sequence: [
|
|
16710
|
-
domainGuideStep(
|
|
16711
|
-
"pricing",
|
|
16712
|
-
"Revenue",
|
|
16713
|
-
"Pricing model",
|
|
16714
|
-
"Run the pricing creation sequence: strategy, tiers, discounts, trial, paywall."
|
|
16715
|
-
)
|
|
16716
|
-
]
|
|
16717
|
-
};
|
|
16718
|
-
var BUSINESS_GROWTH_FUNNEL_PLAYBOOK = {
|
|
16719
|
-
id: "playbook:business-growth-funnel",
|
|
16720
|
-
name: "Growth Funnel (AARRR)",
|
|
16721
|
-
version: "0.1.0",
|
|
16722
|
-
description: "Map the growth engine using Pirate Metrics: funnels, channels, campaigns, loops, cohorts.",
|
|
16723
|
-
region: "business_gtm_growth",
|
|
16724
|
-
framework_id: "pirate-metrics-aarrr",
|
|
16725
|
-
creation_sequence: [
|
|
16726
|
-
domainGuideStep(
|
|
16727
|
-
"growth",
|
|
16728
|
-
"Growth",
|
|
16729
|
-
"Funnel model",
|
|
16730
|
-
"Run the growth creation sequence: funnel, channels, campaigns, cohorts."
|
|
16731
|
-
)
|
|
16732
|
-
]
|
|
16733
|
-
};
|
|
16734
|
-
var BUSINESS_MARKETING_PLAYBOOK = {
|
|
16735
|
-
id: "playbook:business-marketing",
|
|
16736
|
-
name: "Marketing",
|
|
16737
|
-
version: "0.1.0",
|
|
16738
|
-
description: "Shape the demand engine: positioning, messaging, SEO keywords, campaigns, channels.",
|
|
16739
|
-
region: "business_gtm_growth",
|
|
16740
|
-
creation_sequence: [
|
|
16741
|
-
domainGuideStep(
|
|
16742
|
-
"marketing",
|
|
16743
|
-
"Marketing",
|
|
16744
|
-
"Demand engine",
|
|
16745
|
-
"Run the marketing creation sequence: positioning, messaging, SEO keywords, campaigns, channels.",
|
|
16746
|
-
{ next_sequence_on_gap: "playbook:experience-content" }
|
|
16747
|
-
)
|
|
16748
|
-
]
|
|
16749
|
-
};
|
|
16750
16949
|
var BUSINESS_GROWTH_METRIC_DRIVEN_PLAYBOOK = {
|
|
16751
16950
|
id: "playbook:business-growth-metric-driven",
|
|
16752
16951
|
name: "Metric-Driven Growth",
|
|
@@ -16856,6 +17055,7 @@ var ANALYTICS_DATA_PLAYBOOK = {
|
|
|
16856
17055
|
description: "Bootstrap the measurement plane: sources, schemas, pipelines, metrics, dashboards, and the rules that keep them honest.",
|
|
16857
17056
|
region: "analytics_data",
|
|
16858
17057
|
is_canonical: true,
|
|
17058
|
+
related_framework_ids: ["metrics-tree", "north-star-metric", "pirate-metrics-aarrr", "dora-metrics"],
|
|
16859
17059
|
target_anchor_entity: "metric",
|
|
16860
17060
|
creation_sequence: [
|
|
16861
17061
|
seqStep(
|
|
@@ -16903,6 +17103,7 @@ var OPERATIONS_QUALITY_PLAYBOOK = {
|
|
|
16903
17103
|
description: "The operational backbone: pipelines, monitoring, incident response, security, quality gates, compliance, support. Specialised playbooks cover team rituals.",
|
|
16904
17104
|
region: "operations_quality",
|
|
16905
17105
|
is_canonical: true,
|
|
17106
|
+
related_framework_ids: ["raci-matrix", "retrospective", "team-health-check", "raid-log"],
|
|
16906
17107
|
target_anchor_entity: "incident",
|
|
16907
17108
|
creation_sequence: [
|
|
16908
17109
|
seqStep(
|
|
@@ -16949,21 +17150,6 @@ var OPERATIONS_QUALITY_PLAYBOOK = {
|
|
|
16949
17150
|
)
|
|
16950
17151
|
]
|
|
16951
17152
|
};
|
|
16952
|
-
var OPERATIONS_TEAM_RITUALS_PLAYBOOK = {
|
|
16953
|
-
id: "playbook:operations-team-rituals",
|
|
16954
|
-
name: "Team & Rituals",
|
|
16955
|
-
version: "0.1.0",
|
|
16956
|
-
description: "Capture how the team works: retrospectives, roles, rituals, working agreements, decisions.",
|
|
16957
|
-
region: "operations_quality",
|
|
16958
|
-
creation_sequence: [
|
|
16959
|
-
domainGuideStep(
|
|
16960
|
-
"team_org",
|
|
16961
|
-
"Team",
|
|
16962
|
-
"Team rhythm",
|
|
16963
|
-
"Run the team_org creation sequence: retrospectives, roles, rituals, working agreements."
|
|
16964
|
-
)
|
|
16965
|
-
]
|
|
16966
|
-
};
|
|
16967
17153
|
var UPG_PLAYBOOKS = [
|
|
16968
17154
|
// Region 1 - strategy_outcomes
|
|
16969
17155
|
STRATEGY_OUTCOMES_PLAYBOOK,
|
|
@@ -16971,33 +17157,22 @@ var UPG_PLAYBOOKS = [
|
|
|
16971
17157
|
USERS_NEEDS_PLAYBOOK,
|
|
16972
17158
|
// Region 3 - discovery_research_validation
|
|
16973
17159
|
DISCOVERY_RESEARCH_VALIDATION_PLAYBOOK,
|
|
16974
|
-
DISCOVERY_VALIDATION_HYPOTHESIS_PLAYBOOK,
|
|
16975
17160
|
// Region 4 - market_competitive
|
|
16976
17161
|
MARKET_COMPETITIVE_PLAYBOOK,
|
|
16977
17162
|
// Region 5 - experience_design_brand
|
|
16978
17163
|
EXPERIENCE_DESIGN_BRAND_PLAYBOOK,
|
|
16979
|
-
EXPERIENCE_UX_DOMAIN_ONLY_PLAYBOOK,
|
|
16980
|
-
EXPERIENCE_DESIGN_SYSTEM_PLAYBOOK,
|
|
16981
|
-
EXPERIENCE_CONTENT_PLAYBOOK,
|
|
16982
17164
|
// Region 6 - product_delivery
|
|
16983
17165
|
PRODUCT_DELIVERY_PLAYBOOK,
|
|
16984
|
-
PRODUCT_FEEDBACK_SYNTHESIS_PLAYBOOK,
|
|
16985
17166
|
// Region 7 - engineering_platform
|
|
16986
17167
|
ENGINEERING_PLATFORM_PLAYBOOK,
|
|
16987
|
-
ENGINEERING_ARCHITECTURE_ONLY_PLAYBOOK,
|
|
16988
17168
|
// Region 8 - business_gtm_growth
|
|
16989
17169
|
BUSINESS_GTM_GROWTH_PLAYBOOK,
|
|
16990
|
-
BUSINESS_MODEL_BMC_PLAYBOOK,
|
|
16991
|
-
BUSINESS_PRICING_PLAYBOOK,
|
|
16992
|
-
BUSINESS_GROWTH_FUNNEL_PLAYBOOK,
|
|
16993
|
-
BUSINESS_MARKETING_PLAYBOOK,
|
|
16994
17170
|
BUSINESS_GROWTH_METRIC_DRIVEN_PLAYBOOK,
|
|
16995
17171
|
BUSINESS_MARKETING_AUDIENCE_FIRST_PLAYBOOK,
|
|
16996
17172
|
// Region 9 - analytics_data
|
|
16997
17173
|
ANALYTICS_DATA_PLAYBOOK,
|
|
16998
17174
|
// Region 10 - operations_quality
|
|
16999
|
-
OPERATIONS_QUALITY_PLAYBOOK
|
|
17000
|
-
OPERATIONS_TEAM_RITUALS_PLAYBOOK
|
|
17175
|
+
OPERATIONS_QUALITY_PLAYBOOK
|
|
17001
17176
|
];
|
|
17002
17177
|
|
|
17003
17178
|
// src/step-sequence.ts
|
|
@@ -23808,7 +23983,7 @@ function isCanonical(text) {
|
|
|
23808
23983
|
}
|
|
23809
23984
|
|
|
23810
23985
|
// src/index.ts
|
|
23811
|
-
var UPG_VERSION = "0.
|
|
23986
|
+
var UPG_VERSION = "0.8.0";
|
|
23812
23987
|
var UPG_FORMAT_VERSION = "0.4.0";
|
|
23813
23988
|
var MARKDOWN_FORMAT_VERSION = "0.1";
|
|
23814
23989
|
var UPG_TYPES = getTypes();
|
|
@@ -23874,28 +24049,18 @@ var UPG_META_COUNT = UPG_ENTITY_META.length;
|
|
|
23874
24049
|
// Annotate the CommonJS export names for ESM import in node:
|
|
23875
24050
|
0 && (module.exports = {
|
|
23876
24051
|
ANALYTICS_DATA_PLAYBOOK,
|
|
23877
|
-
BUSINESS_GROWTH_FUNNEL_PLAYBOOK,
|
|
23878
24052
|
BUSINESS_GROWTH_METRIC_DRIVEN_PLAYBOOK,
|
|
23879
24053
|
BUSINESS_GTM_GROWTH_PLAYBOOK,
|
|
23880
24054
|
BUSINESS_MARKETING_AUDIENCE_FIRST_PLAYBOOK,
|
|
23881
|
-
BUSINESS_MARKETING_PLAYBOOK,
|
|
23882
|
-
BUSINESS_MODEL_BMC_PLAYBOOK,
|
|
23883
|
-
BUSINESS_PRICING_PLAYBOOK,
|
|
23884
24055
|
DISCOVERY_RESEARCH_VALIDATION_PLAYBOOK,
|
|
23885
|
-
DISCOVERY_VALIDATION_HYPOTHESIS_PLAYBOOK,
|
|
23886
|
-
ENGINEERING_ARCHITECTURE_ONLY_PLAYBOOK,
|
|
23887
24056
|
ENGINEERING_PLATFORM_PLAYBOOK,
|
|
23888
|
-
EXPERIENCE_CONTENT_PLAYBOOK,
|
|
23889
24057
|
EXPERIENCE_DESIGN_BRAND_PLAYBOOK,
|
|
23890
|
-
EXPERIENCE_DESIGN_SYSTEM_PLAYBOOK,
|
|
23891
|
-
EXPERIENCE_UX_DOMAIN_ONLY_PLAYBOOK,
|
|
23892
24058
|
LEGACY_PRODUCT_STAGES,
|
|
23893
24059
|
MARKDOWN_FORMAT_VERSION,
|
|
23894
24060
|
MARKET_COMPETITIVE_PLAYBOOK,
|
|
23895
24061
|
OPERATIONS_QUALITY_PLAYBOOK,
|
|
23896
|
-
OPERATIONS_TEAM_RITUALS_PLAYBOOK,
|
|
23897
24062
|
PRODUCT_DELIVERY_PLAYBOOK,
|
|
23898
|
-
|
|
24063
|
+
PROPERTY_SCALE_MAP,
|
|
23899
24064
|
REFLECT_MODES,
|
|
23900
24065
|
STRATEGY_OUTCOMES_PLAYBOOK,
|
|
23901
24066
|
UPG_ACTIVE_TYPES,
|
|
@@ -23996,6 +24161,7 @@ var UPG_META_COUNT = UPG_ENTITY_META.length;
|
|
|
23996
24161
|
getMigrationMap,
|
|
23997
24162
|
getPlaybookById,
|
|
23998
24163
|
getPlaybooksForRegion,
|
|
24164
|
+
getPropertiesForScale,
|
|
23999
24165
|
getPropertyDefaultScale,
|
|
24000
24166
|
getPropertyMigrations,
|
|
24001
24167
|
getPropertySchema,
|