@unified-product-graph/core 0.17.5 → 0.17.7
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/README.md +1 -1
- package/dist/index.cjs +34 -40
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +25 -26
- package/dist/index.d.ts +25 -26
- package/dist/index.js +34 -40
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.d.cts
CHANGED
|
@@ -127,23 +127,18 @@ interface UPGBaseNode {
|
|
|
127
127
|
/**
|
|
128
128
|
* UPG Property Registry: Runtime schema for entity types
|
|
129
129
|
*
|
|
130
|
-
*
|
|
131
|
-
*
|
|
132
|
-
*
|
|
133
|
-
*
|
|
134
|
-
*
|
|
135
|
-
*
|
|
136
|
-
*
|
|
137
|
-
*
|
|
138
|
-
*
|
|
139
|
-
*
|
|
140
|
-
*
|
|
141
|
-
*
|
|
142
|
-
* port the mechanical change back, and re-apply the overlay by hand. Teaching the
|
|
143
|
-
* generator to read and re-emit modifiers so this file can rejoin
|
|
144
|
-
* `check:generated` is a tracked follow-up (0.17.3 #4, Ro-Laren P2).
|
|
145
|
-
*
|
|
146
|
-
* Base generated: 2026-06-14T09:18:17.518Z
|
|
130
|
+
* AUTO-GENERATED by scripts/generate-property-registry.ts
|
|
131
|
+
* Do not edit manually. Run: npx tsx scripts/generate-property-registry.ts
|
|
132
|
+
*
|
|
133
|
+
* Sources: property types / enums / descriptions come from the domain
|
|
134
|
+
* interfaces in src/properties/domains/*.ts (their JSDoc); the `modifier`
|
|
135
|
+
* provenance annotations (derived / snapshot / volatile, property-fit audit)
|
|
136
|
+
* come from the curated src/properties/property-modifier-overlay.ts. Both are
|
|
137
|
+
* re-emitted here, so a regeneration reproduces this file exactly (no
|
|
138
|
+
* wall-clock timestamp: generation is deterministic). This file is a GATED
|
|
139
|
+
* artifact — check:generated re-runs the generator and fails on any drift, so
|
|
140
|
+
* edit the sources above, never this file.
|
|
141
|
+
* Entity types with properties: 322
|
|
147
142
|
*/
|
|
148
143
|
interface PropertyDefinition {
|
|
149
144
|
type: 'string' | 'number' | 'boolean' | 'string[]' | 'object' | 'object[]' | 'assessment';
|
|
@@ -166,6 +161,7 @@ interface PropertyDefinition {
|
|
|
166
161
|
* - `'volatile'` — an environment-specific pointer (URL / path / id) that may rot or be
|
|
167
162
|
* stripped on export; not portable modeling knowledge (open-standard
|
|
168
163
|
* data-boundary ADR). Enforcement lands in `validate_graph` (mcp-server).
|
|
164
|
+
* Sourced from property-modifier-overlay.ts.
|
|
169
165
|
*/
|
|
170
166
|
modifier?: 'derived' | 'snapshot' | 'volatile';
|
|
171
167
|
}
|
|
@@ -659,6 +655,7 @@ declare const UPG_EDGE_CATALOG: {
|
|
|
659
655
|
classification: "cross-domain";
|
|
660
656
|
source_type: string;
|
|
661
657
|
target_type: string;
|
|
658
|
+
deliberate_only: true;
|
|
662
659
|
};
|
|
663
660
|
product_contains_competitive_analysis: {
|
|
664
661
|
forward_verb: string;
|
|
@@ -10352,7 +10349,7 @@ interface VisionProperties {
|
|
|
10352
10349
|
*/
|
|
10353
10350
|
timeframe?: string;
|
|
10354
10351
|
/**
|
|
10355
|
-
* The north-star statement
|
|
10352
|
+
* The north-star statement: a prose slogan of the future the product steers
|
|
10356
10353
|
* toward. Legitimately free-text (graph-vs-prose). To link the *metric* a
|
|
10357
10354
|
* vision optimises for, use the `vision_anchored_by_metric` edge (P14 0.12.0).
|
|
10358
10355
|
*/
|
|
@@ -10390,11 +10387,11 @@ interface StrategicThemeProperties {
|
|
|
10390
10387
|
/** Owning person or team. Promote to a `node_owned_by_person` edge if ownership must be queryable. */
|
|
10391
10388
|
owner?: string;
|
|
10392
10389
|
/**
|
|
10393
|
-
*
|
|
10390
|
+
* Bounded period this theme is active (a theme is time-bound, within a pillar).
|
|
10394
10391
|
* @example "Q1 2026", "FY26"
|
|
10395
10392
|
*/
|
|
10396
10393
|
time_horizon?: string;
|
|
10397
|
-
/** Short narrative of
|
|
10394
|
+
/** Short narrative of this time-bound thrust within its pillar */
|
|
10398
10395
|
description?: string;
|
|
10399
10396
|
/** What the theme explicitly includes or excludes */
|
|
10400
10397
|
scope?: string;
|
|
@@ -10498,16 +10495,16 @@ interface ValueStreamProperties {
|
|
|
10498
10495
|
interface StrategicPillarProperties {
|
|
10499
10496
|
/** Owning person or team. Promote to a `node_owned_by_person` edge if ownership must be queryable. */
|
|
10500
10497
|
owner?: string;
|
|
10501
|
-
/** Narrative of the pillar's intent */
|
|
10498
|
+
/** Narrative of the pillar's intent as a durable strategic area */
|
|
10502
10499
|
description?: string;
|
|
10503
|
-
/**
|
|
10500
|
+
/** The standing organisational area this pillar owns */
|
|
10504
10501
|
scope?: string;
|
|
10505
10502
|
/**
|
|
10506
|
-
*
|
|
10507
|
-
* @example "3 years", "2026-2028"
|
|
10503
|
+
* Standing / multi-year horizon, often open-ended (a pillar is durable).
|
|
10504
|
+
* @example "3 years", "2026-2028", "ongoing"
|
|
10508
10505
|
*/
|
|
10509
10506
|
time_horizon?: string;
|
|
10510
|
-
/** How the business knows
|
|
10507
|
+
/** How the business knows this durable pillar is on track. Narrative, not a metric edge. A strategic_theme deliberately has no success_indicator: it is measured through its child objectives, not on its own. */
|
|
10511
10508
|
success_indicator?: string;
|
|
10512
10509
|
}
|
|
10513
10510
|
/** Assumption entity.
|
|
@@ -17308,6 +17305,8 @@ interface RebuttalProperties {
|
|
|
17308
17305
|
statement?: string;
|
|
17309
17306
|
/** How convincing this rebuttal is (1-5) */
|
|
17310
17307
|
strength?: UPGAssessment;
|
|
17308
|
+
/** References to supporting evidence (e.g. interview or observation ids). */
|
|
17309
|
+
evidence_refs?: string[];
|
|
17311
17310
|
}
|
|
17312
17311
|
/** ProofPoint entity.
|
|
17313
17312
|
*
|
|
@@ -22237,7 +22236,7 @@ declare function isCanonical(text: string): boolean;
|
|
|
22237
22236
|
* it stamps the `upg_version` field of every `.upg` file written by the SDK.
|
|
22238
22237
|
* The `check:version-lockstep` gate enforces this at release time.
|
|
22239
22238
|
*/
|
|
22240
|
-
declare const UPG_VERSION: "0.17.
|
|
22239
|
+
declare const UPG_VERSION: "0.17.7";
|
|
22241
22240
|
/**
|
|
22242
22241
|
* The `.upg` JSON document format version. Written to the `upg_version` field.
|
|
22243
22242
|
* Evolves independently from `UPG_VERSION` (the catalogue version).
|
package/dist/index.d.ts
CHANGED
|
@@ -127,23 +127,18 @@ interface UPGBaseNode {
|
|
|
127
127
|
/**
|
|
128
128
|
* UPG Property Registry: Runtime schema for entity types
|
|
129
129
|
*
|
|
130
|
-
*
|
|
131
|
-
*
|
|
132
|
-
*
|
|
133
|
-
*
|
|
134
|
-
*
|
|
135
|
-
*
|
|
136
|
-
*
|
|
137
|
-
*
|
|
138
|
-
*
|
|
139
|
-
*
|
|
140
|
-
*
|
|
141
|
-
*
|
|
142
|
-
* port the mechanical change back, and re-apply the overlay by hand. Teaching the
|
|
143
|
-
* generator to read and re-emit modifiers so this file can rejoin
|
|
144
|
-
* `check:generated` is a tracked follow-up (0.17.3 #4, Ro-Laren P2).
|
|
145
|
-
*
|
|
146
|
-
* Base generated: 2026-06-14T09:18:17.518Z
|
|
130
|
+
* AUTO-GENERATED by scripts/generate-property-registry.ts
|
|
131
|
+
* Do not edit manually. Run: npx tsx scripts/generate-property-registry.ts
|
|
132
|
+
*
|
|
133
|
+
* Sources: property types / enums / descriptions come from the domain
|
|
134
|
+
* interfaces in src/properties/domains/*.ts (their JSDoc); the `modifier`
|
|
135
|
+
* provenance annotations (derived / snapshot / volatile, property-fit audit)
|
|
136
|
+
* come from the curated src/properties/property-modifier-overlay.ts. Both are
|
|
137
|
+
* re-emitted here, so a regeneration reproduces this file exactly (no
|
|
138
|
+
* wall-clock timestamp: generation is deterministic). This file is a GATED
|
|
139
|
+
* artifact — check:generated re-runs the generator and fails on any drift, so
|
|
140
|
+
* edit the sources above, never this file.
|
|
141
|
+
* Entity types with properties: 322
|
|
147
142
|
*/
|
|
148
143
|
interface PropertyDefinition {
|
|
149
144
|
type: 'string' | 'number' | 'boolean' | 'string[]' | 'object' | 'object[]' | 'assessment';
|
|
@@ -166,6 +161,7 @@ interface PropertyDefinition {
|
|
|
166
161
|
* - `'volatile'` — an environment-specific pointer (URL / path / id) that may rot or be
|
|
167
162
|
* stripped on export; not portable modeling knowledge (open-standard
|
|
168
163
|
* data-boundary ADR). Enforcement lands in `validate_graph` (mcp-server).
|
|
164
|
+
* Sourced from property-modifier-overlay.ts.
|
|
169
165
|
*/
|
|
170
166
|
modifier?: 'derived' | 'snapshot' | 'volatile';
|
|
171
167
|
}
|
|
@@ -659,6 +655,7 @@ declare const UPG_EDGE_CATALOG: {
|
|
|
659
655
|
classification: "cross-domain";
|
|
660
656
|
source_type: string;
|
|
661
657
|
target_type: string;
|
|
658
|
+
deliberate_only: true;
|
|
662
659
|
};
|
|
663
660
|
product_contains_competitive_analysis: {
|
|
664
661
|
forward_verb: string;
|
|
@@ -10352,7 +10349,7 @@ interface VisionProperties {
|
|
|
10352
10349
|
*/
|
|
10353
10350
|
timeframe?: string;
|
|
10354
10351
|
/**
|
|
10355
|
-
* The north-star statement
|
|
10352
|
+
* The north-star statement: a prose slogan of the future the product steers
|
|
10356
10353
|
* toward. Legitimately free-text (graph-vs-prose). To link the *metric* a
|
|
10357
10354
|
* vision optimises for, use the `vision_anchored_by_metric` edge (P14 0.12.0).
|
|
10358
10355
|
*/
|
|
@@ -10390,11 +10387,11 @@ interface StrategicThemeProperties {
|
|
|
10390
10387
|
/** Owning person or team. Promote to a `node_owned_by_person` edge if ownership must be queryable. */
|
|
10391
10388
|
owner?: string;
|
|
10392
10389
|
/**
|
|
10393
|
-
*
|
|
10390
|
+
* Bounded period this theme is active (a theme is time-bound, within a pillar).
|
|
10394
10391
|
* @example "Q1 2026", "FY26"
|
|
10395
10392
|
*/
|
|
10396
10393
|
time_horizon?: string;
|
|
10397
|
-
/** Short narrative of
|
|
10394
|
+
/** Short narrative of this time-bound thrust within its pillar */
|
|
10398
10395
|
description?: string;
|
|
10399
10396
|
/** What the theme explicitly includes or excludes */
|
|
10400
10397
|
scope?: string;
|
|
@@ -10498,16 +10495,16 @@ interface ValueStreamProperties {
|
|
|
10498
10495
|
interface StrategicPillarProperties {
|
|
10499
10496
|
/** Owning person or team. Promote to a `node_owned_by_person` edge if ownership must be queryable. */
|
|
10500
10497
|
owner?: string;
|
|
10501
|
-
/** Narrative of the pillar's intent */
|
|
10498
|
+
/** Narrative of the pillar's intent as a durable strategic area */
|
|
10502
10499
|
description?: string;
|
|
10503
|
-
/**
|
|
10500
|
+
/** The standing organisational area this pillar owns */
|
|
10504
10501
|
scope?: string;
|
|
10505
10502
|
/**
|
|
10506
|
-
*
|
|
10507
|
-
* @example "3 years", "2026-2028"
|
|
10503
|
+
* Standing / multi-year horizon, often open-ended (a pillar is durable).
|
|
10504
|
+
* @example "3 years", "2026-2028", "ongoing"
|
|
10508
10505
|
*/
|
|
10509
10506
|
time_horizon?: string;
|
|
10510
|
-
/** How the business knows
|
|
10507
|
+
/** How the business knows this durable pillar is on track. Narrative, not a metric edge. A strategic_theme deliberately has no success_indicator: it is measured through its child objectives, not on its own. */
|
|
10511
10508
|
success_indicator?: string;
|
|
10512
10509
|
}
|
|
10513
10510
|
/** Assumption entity.
|
|
@@ -17308,6 +17305,8 @@ interface RebuttalProperties {
|
|
|
17308
17305
|
statement?: string;
|
|
17309
17306
|
/** How convincing this rebuttal is (1-5) */
|
|
17310
17307
|
strength?: UPGAssessment;
|
|
17308
|
+
/** References to supporting evidence (e.g. interview or observation ids). */
|
|
17309
|
+
evidence_refs?: string[];
|
|
17311
17310
|
}
|
|
17312
17311
|
/** ProofPoint entity.
|
|
17313
17312
|
*
|
|
@@ -22237,7 +22236,7 @@ declare function isCanonical(text: string): boolean;
|
|
|
22237
22236
|
* it stamps the `upg_version` field of every `.upg` file written by the SDK.
|
|
22238
22237
|
* The `check:version-lockstep` gate enforces this at release time.
|
|
22239
22238
|
*/
|
|
22240
|
-
declare const UPG_VERSION: "0.17.
|
|
22239
|
+
declare const UPG_VERSION: "0.17.7";
|
|
22241
22240
|
/**
|
|
22242
22241
|
* The `.upg` JSON document format version. Written to the `upg_version` field.
|
|
22243
22242
|
* Evolves independently from `UPG_VERSION` (the catalogue version).
|
package/dist/index.js
CHANGED
|
@@ -1136,7 +1136,13 @@ var UPG_EDGE_CATALOG = {
|
|
|
1136
1136
|
research_study_collects_survey_response: { forward_verb: "collects", reverse_verb: "collected_in", classification: "hierarchy", source_type: "research_study", target_type: "survey_response" },
|
|
1137
1137
|
observation_evidenced_by_quote: { forward_verb: "evidenced_by", reverse_verb: "evidences", classification: "hierarchy", source_type: "observation", target_type: "quote" },
|
|
1138
1138
|
affinity_cluster_synthesises_insight: { forward_verb: "synthesises", reverse_verb: "synthesised_from", classification: "hierarchy", source_type: "affinity_cluster", target_type: "insight" },
|
|
1139
|
-
|
|
1139
|
+
// deliberate_only (0.17.6): "this insight informs that opportunity" is a
|
|
1140
|
+
// PM-judgment link — which of many opportunities a finding actually feeds is
|
|
1141
|
+
// authored, never inferred from a source's hierarchy. Auto-nest / adapter
|
|
1142
|
+
// parentage resolvers decline to materialise it (fall through to a
|
|
1143
|
+
// node_informs_node link or a decline+warn); explicit create_edge /
|
|
1144
|
+
// resolve_edge_for_pair still return it. Fixes the latent auto-emission.
|
|
1145
|
+
insight_informs_opportunity: { forward_verb: "informs", reverse_verb: "informed_by", classification: "cross-domain", source_type: "insight", target_type: "opportunity", deliberate_only: true },
|
|
1140
1146
|
// 1.5 Market Intelligence Domain
|
|
1141
1147
|
// product → competitive_analysis closes the parallel gap to
|
|
1142
1148
|
// product → persona. competitive_analysis is the anchor of the
|
|
@@ -6814,6 +6820,8 @@ var PROPERTY_SCALE_MAP = {
|
|
|
6814
6820
|
// validation/experiment_run
|
|
6815
6821
|
bug_severity: "severity_5",
|
|
6816
6822
|
// product-spec/bug (UPG-579 Option C collapse)
|
|
6823
|
+
magnitude: "severity_5",
|
|
6824
|
+
// user/switching_cost barrier size (0.17.7; restores the documented UPG-579 intent that a missing entry had silently overridden to scale_5)
|
|
6817
6825
|
risk_level: "severity_5",
|
|
6818
6826
|
// compliance/risk (UPG-579 Option B)
|
|
6819
6827
|
scarcity_risk: "severity_5",
|
|
@@ -10501,8 +10509,6 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10501
10509
|
framework_id: { type: "string", description: "Framework ID (references `UPGFramework.id`)" },
|
|
10502
10510
|
stage: { type: "string", enum: ["draft", "validated", "active"], description: "Maturity" },
|
|
10503
10511
|
pattern: { type: "string", enum: ["freemium", "marketplace", "saas", "subscription", "transactional", "advertising", "licensing", "hybrid"], description: "Canonical pattern. Useful for benchmarking against peer businesses with the same shape." }
|
|
10504
|
-
// monetisation_basis removed in 0.12.0 (P14 Bucket C) — categorical rollup of revenue_stream.billing_model.
|
|
10505
|
-
// north_star_metric removed in 0.12.0 (P14) → `business_model_guided_by_metric` edge.
|
|
10506
10512
|
},
|
|
10507
10513
|
// CapabilityProperties: Capability entity.
|
|
10508
10514
|
capability: {
|
|
@@ -10719,7 +10725,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10719
10725
|
// ConstraintProperties: Constraint: a named limitation or boundary on product creation.
|
|
10720
10726
|
constraint: {
|
|
10721
10727
|
constraint_kind: { type: "string", enum: ["resource", "technical", "regulatory", "temporal", "compliance", "other"], description: "Limitation category" },
|
|
10722
|
-
constraint_origin: { type: "string", enum: ["internal", "external"], description: "Provenance:
|
|
10728
|
+
constraint_origin: { type: "string", enum: ["internal", "external"], description: "Provenance: a self-imposed tenet (`internal`) or an imposed-on-us limit/requirement (`external`)." },
|
|
10723
10729
|
constraint_status: { type: "string", enum: ["binding", "advisory", "lifted"], description: "Whether binding, advisory, or lifted" },
|
|
10724
10730
|
rule_strength: { type: "string", enum: ["must", "must_not", "exception", "warning", "guideline"], description: "Enforcement strictness. Reuses the governance/guideline rule vocabulary." },
|
|
10725
10731
|
source: { type: "string", description: "Free-text origin: policy document, regulation, stakeholder, technical doc." },
|
|
@@ -11336,7 +11342,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
11336
11342
|
// FeatureFlagProperties: Feature flag.
|
|
11337
11343
|
feature_flag: {
|
|
11338
11344
|
key: { type: "string", description: 'Required. Stable flag key used in code (e.g. "new-checkout-flow").' },
|
|
11339
|
-
rollout_pct: { type: "number", description: "Percentage enabled (0\u2013100). Meaningful when `
|
|
11345
|
+
rollout_pct: { type: "number", description: "Percentage enabled (0\u2013100). Meaningful when the flag's `status === 'rollout'`.", modifier: "snapshot" },
|
|
11340
11346
|
targeting_rules: { type: "string", description: "Human-readable targeting rules. Full rule evaluation happens in the flag service." },
|
|
11341
11347
|
owner: { type: "string", description: "Owning person or team responsible for the flag's lifecycle. Promote to a `node_owned_by_person` edge if ownership must be queryable." },
|
|
11342
11348
|
flag_type: { type: "string", enum: ["temporary", "permanent", "experiment"], description: "Lifecycle classification. `temporary` = should be removed after rollout (kill switch, gradual rollout). `permanent` = long-lived feature gate (entitlement flag). `experiment` = A/B test with a defined end condition." },
|
|
@@ -12106,7 +12112,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
12106
12112
|
is_highlighted: { type: "boolean", description: "Flagged as a highlight. Absorbed from the deprecated Highlight entity." },
|
|
12107
12113
|
highlight_tag: { type: "string", description: 'Free-form highlight type tag. @example "pain", "delight", "behaviour", "moment of clarity"' },
|
|
12108
12114
|
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." },
|
|
12109
|
-
source_url: { type: "string", description: "Stable deep-link to the exact moment this observation was captured in the originating recording or transcript. A per-moment locator, not a study-level link. Distinct from `session_ref`, which holds an opaque session ID.", modifier: "volatile" }
|
|
12115
|
+
source_url: { type: "string", description: "Stable deep-link to the exact moment this observation was captured in the originating recording or transcript. A per-moment locator, not a study-level link. Distinct from `session_ref`, which holds an opaque session ID for AI inference. Rot-prone external pointer; treat as `volatile`.", modifier: "volatile" }
|
|
12110
12116
|
},
|
|
12111
12117
|
// OnCallRotationProperties: On-call rotation.
|
|
12112
12118
|
on_call_rotation: {
|
|
@@ -12115,10 +12121,18 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
12115
12121
|
rotation_cadence: { type: "string", enum: ["daily", "weekly", "biweekly", "custom"], description: "Cycle cadence. `weekly` for standard team rotations. `daily` for high-incident-volume teams." },
|
|
12116
12122
|
handoff_time: { type: "string", description: 'Shift handoff time. Affects team coordination and sleep. @example "09:00 UTC", "17:00 local"' }
|
|
12117
12123
|
},
|
|
12124
|
+
// OperatingLifecycleProperties: An operating_lifecycle: a canonical, ordered (often cyclic) operating process
|
|
12125
|
+
operating_lifecycle: {
|
|
12126
|
+
cyclic: { type: "boolean", description: "True if the process loops (e.g. Analyze \u2192 Extend \u2192 Plan). The sequence is fully expressed by the stages' `stage_order`; `cyclic` adds the wrap from the last stage back to the first." },
|
|
12127
|
+
source: { type: "string", description: 'Origin of the canonical model (e.g. "Sanity official content-ops lifecycle"). Optional provenance; promote to an edge if it names a real `specification`/`document`.' }
|
|
12128
|
+
},
|
|
12129
|
+
// OperatingStageProperties: An operating_stage: one ordered stage of an `operating_lifecycle`. A product's
|
|
12130
|
+
operating_stage: {
|
|
12131
|
+
stage_order: { type: "number", description: "Ordered position within the lifecycle, 0-indexed. The source of truth for sequence (pairs with `phase_order`/`step_order`/`action_order`)." },
|
|
12132
|
+
goal: { type: "string", description: "What this stage accomplishes." },
|
|
12133
|
+
owner_role: { type: "string", description: "Role that owns the stage (free-text role label). Optional; promote to a `node_owned_by_role` edge if ownership must be queryable across stages." }
|
|
12134
|
+
},
|
|
12118
12135
|
// OpportunityProperties: A problem worth solving, grounded in user need and business value.
|
|
12119
|
-
// No intrinsic scalar properties — defined by edges + framework-scoped scoring
|
|
12120
|
-
// (reach/frequency/pain/opportunity_score live on the `opportunity-sizing`
|
|
12121
|
-
// framework_exercise edge). Former props removed in 0.14.0 (UPG-574).
|
|
12122
12136
|
opportunity: {},
|
|
12123
12137
|
// OrganizationProperties: Organization entity.
|
|
12124
12138
|
organization: {
|
|
@@ -12151,7 +12165,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
12151
12165
|
alias: { type: "string", description: 'Anonymous alias for privacy (e.g. "P01")' },
|
|
12152
12166
|
recruit_source: { type: "string", description: "How the participant was recruited" },
|
|
12153
12167
|
consent_status: { type: "string", enum: ["pending", "given", "withdrawn"], description: "Current consent status for data usage" },
|
|
12154
|
-
source_url: { type: "string", description: "Stable deep-link to the exact moment this participant appears in the originating recording or transcript. A per-moment locator, not a study-level link.", modifier: "volatile" }
|
|
12168
|
+
source_url: { type: "string", description: "Stable deep-link to the exact moment this participant appears in the originating recording or transcript. A per-moment locator, not a study-level link. Rot-prone external pointer; treat as `volatile`.", modifier: "volatile" }
|
|
12155
12169
|
},
|
|
12156
12170
|
// PartnerProgramProperties: Partner program.
|
|
12157
12171
|
partner_program: {
|
|
@@ -12221,7 +12235,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
12221
12235
|
tech_comfort: { type: "string", enum: ["low", "medium", "high", "expert", "other"], description: "Tech comfort. Closed set so personas across products compare on the same axis. Free-text colour belongs in `context` or `motivation`." },
|
|
12222
12236
|
domain_expertise: { type: "string", description: 'Industry or domain knowledge this persona brings @example "10+ years SaaS experience", "New to healthcare IT"' },
|
|
12223
12237
|
audience_role: { type: "string", enum: ["buyer", "user", "champion", "influencer", "partner"], description: 'Role in the buying / adoption decision (the decision-making-unit split): who signs (buyer) vs who uses (user) vs who advocates internally (champion) vs who shapes the choice (influencer) vs who delivers / implements (partner). A portfolio must separate the economic buyer from the practitioner user; they are distinct personas with distinct jobs. Closed set so roles compare across products. @example "buyer"' },
|
|
12224
|
-
actor_kind: { type: "string", enum: ["human", "agent", "system"], description:
|
|
12238
|
+
actor_kind: { type: "string", enum: ["human", "agent", "system"], description: 'Who performs the work: a human archetype (default), an autonomous AI agent (e.g. Content Agent), or a non-agentic platform service. Absent = `human`, so existing personas need no migration. An `agent` persona is a first-class actor that participates in journeys via the same persona machinery and that humans delegate to via `persona_delegates_to_persona`. Human-coverage / segmentation metrics count `human` only; agent/system are opt-in. @example "agent"' }
|
|
12225
12239
|
},
|
|
12226
12240
|
// PipelineSalesProperties: Sales pipeline.
|
|
12227
12241
|
pipeline_sales: {
|
|
@@ -12284,17 +12298,6 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
12284
12298
|
defined_by: { type: "string", description: "The `specification/<slug>` this primitive comes from; nullable for spec-less internal primitives. Mirrors the `primitive_defined_by_specification` edge for quick lookup." },
|
|
12285
12299
|
since: { type: "string", description: "Year or version the primitive was introduced." }
|
|
12286
12300
|
},
|
|
12287
|
-
// OperatingLifecycleProperties: a canonical ordered (often cyclic) operating process products' journey phases map onto.
|
|
12288
|
-
operating_lifecycle: {
|
|
12289
|
-
cyclic: { type: "boolean", description: "True if the process loops (e.g. Analyze \u2192 Extend \u2192 Plan). The sequence is expressed by the stages' stage_order; cyclic adds the wrap from last stage back to first." },
|
|
12290
|
-
source: { type: "string", description: 'Origin of the canonical model (e.g. "Sanity official content-ops lifecycle"). Optional provenance; promote to an edge if it names a real specification/document.' }
|
|
12291
|
-
},
|
|
12292
|
-
// OperatingStageProperties: one ordered stage of an operating_lifecycle.
|
|
12293
|
-
operating_stage: {
|
|
12294
|
-
stage_order: { type: "number", description: "Ordered position within the lifecycle, 0-indexed. Source of truth for sequence." },
|
|
12295
|
-
goal: { type: "string", description: "What this stage accomplishes." },
|
|
12296
|
-
owner_role: { type: "string", description: "Role that owns the stage (free-text role label). Optional; promote to a node_owned_by_role edge if ownership must be queryable." }
|
|
12297
|
-
},
|
|
12298
12301
|
// PrivacyPolicyProperties: Privacy policy.
|
|
12299
12302
|
privacy_policy: {
|
|
12300
12303
|
version: { type: "string", description: "Version identifier of the policy" },
|
|
@@ -12375,7 +12378,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
12375
12378
|
quote: {
|
|
12376
12379
|
text: { type: "string", description: "Quoted text" },
|
|
12377
12380
|
timestamp: { type: "string", description: "When said (ISO timestamp or session offset)" },
|
|
12378
|
-
source_url: { type: "string", description: "Stable deep-link to the exact moment this quote was spoken in the originating recording or transcript. A per-moment locator, not a study-level link.", modifier: "volatile" }
|
|
12381
|
+
source_url: { type: "string", description: "Stable deep-link to the exact moment this quote was spoken in the originating recording or transcript. A per-moment locator, not a study-level link. Rot-prone external pointer; treat as `volatile`.", modifier: "volatile" }
|
|
12379
12382
|
},
|
|
12380
12383
|
// QuoteDocumentProperties: Quote document.
|
|
12381
12384
|
quote_document: {
|
|
@@ -12404,7 +12407,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
12404
12407
|
},
|
|
12405
12408
|
required: ["value", "label"]
|
|
12406
12409
|
},
|
|
12407
|
-
evidence_refs: { type: "string[]", description: "References to supporting evidence" }
|
|
12410
|
+
evidence_refs: { type: "string[]", description: "References to supporting evidence (e.g. interview or observation ids)." }
|
|
12408
12411
|
},
|
|
12409
12412
|
// RegionalPricingProperties: Regional pricing.
|
|
12410
12413
|
regional_pricing: {
|
|
@@ -12576,7 +12579,6 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
12576
12579
|
cause_confidence: { type: "string", enum: ["hypothesised", "likely", "confirmed"], description: "Team certainty about this cause. `hypothesised` = educated guess. `likely` = evidence points here. `confirmed` = reproduced. Renamed from `confidence` in v0.4.0 to disambiguate from the entity-wide `UPGAssessment`-typed epistemic confidence used elsewhere. The 3-tier shape stays as a discrete RCA-lifecycle marker." },
|
|
12577
12580
|
evidence_summary: { type: "string", description: "One-paragraph evidence summary. Log lines, traces, repro steps. Detailed artefacts go on linked `evidence` nodes." },
|
|
12578
12581
|
affected_area: { type: "string", description: "Affected area of the system" }
|
|
12579
|
-
// `category` (legacy, -> `cause_category`) and `verified` (= `cause_confidence === 'confirmed'`) removed in 0.14.0 (UPG-574).
|
|
12580
12582
|
},
|
|
12581
12583
|
// RunbookProperties: Runbook.
|
|
12582
12584
|
runbook: {
|
|
@@ -12728,10 +12730,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
12728
12730
|
post_type: { type: "string", enum: ["text", "image", "video", "carousel", "story"], description: "Format of the post" },
|
|
12729
12731
|
scheduled_date: { type: "string", description: "Date the post is scheduled to publish (ISO format)" }
|
|
12730
12732
|
},
|
|
12731
|
-
// SolutionProperties: A proposed response to an opportunity
|
|
12732
|
-
// RICE scoring inputs (reach/impact/confidence/effort) + computed rice_score
|
|
12733
|
-
// were framework-scoped from 0.9.0 and removed in 0.14.0 (UPG-574): they live
|
|
12734
|
-
// on the `rice-scoring` framework_exercise edge, not the entity.
|
|
12733
|
+
// SolutionProperties: A proposed response to an opportunity
|
|
12735
12734
|
solution: {
|
|
12736
12735
|
timeline: { type: "string", description: "Estimated delivery or target timeline" }
|
|
12737
12736
|
},
|
|
@@ -12790,18 +12789,14 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
12790
12789
|
time_horizon: { type: "string", description: 'Standing / multi-year horizon, often open-ended (a pillar is durable). @example "3 years", "2026-2028", "ongoing"' },
|
|
12791
12790
|
success_indicator: { type: "string", description: "How the business knows this durable pillar is on track. Narrative, not a metric edge. A strategic_theme deliberately has no success_indicator: it is measured through its child objectives, not on its own." }
|
|
12792
12791
|
},
|
|
12793
|
-
// StrategicQuestionProperties: StrategicQuestion entity.
|
|
12794
|
-
// ownership question a plan is exposed to (strategy sibling of research_question /
|
|
12795
|
-
// design_question). `status` is the node lifecycle (open -> resolved).
|
|
12792
|
+
// StrategicQuestionProperties: StrategicQuestion entity.
|
|
12796
12793
|
strategic_question: {
|
|
12797
12794
|
question: { type: "string", description: "The question itself. Primary content." },
|
|
12798
12795
|
context: { type: "string", description: "Context that surfaced the question: the reorg, the boundary, the unowned area." },
|
|
12799
12796
|
resolution: { type: "string", description: "The answer, captured when the question moves to `resolved`." },
|
|
12800
12797
|
priority: { type: "string", enum: ["urgent", "high", "medium", "low", "none"], description: "Importance to resolve relative to other open questions." }
|
|
12801
12798
|
},
|
|
12802
|
-
// StrategicThemeProperties: StrategicTheme entity.
|
|
12803
|
-
// strategic_pillar (distinct cascade level, UPG-692 T3.3) — measured through its
|
|
12804
|
-
// child objectives, so it carries no success_indicator of its own.
|
|
12799
|
+
// StrategicThemeProperties: StrategicTheme entity.
|
|
12805
12800
|
strategic_theme: {
|
|
12806
12801
|
owner: { type: "string", description: "Owning person or team. Promote to a `node_owned_by_person` edge if ownership must be queryable." },
|
|
12807
12802
|
time_horizon: { type: "string", description: 'Bounded period this theme is active (a theme is time-bound, within a pillar). @example "Q1 2026", "FY26"' },
|
|
@@ -12854,7 +12849,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
12854
12849
|
magnitude: {
|
|
12855
12850
|
type: "assessment",
|
|
12856
12851
|
scale_id: "severity_5",
|
|
12857
|
-
description: "How large the
|
|
12852
|
+
description: "How large the barrier is (UPGAssessment on the `severity_5` scale).",
|
|
12858
12853
|
properties: {
|
|
12859
12854
|
value: { type: "number", description: "The numeric value, used for computation." },
|
|
12860
12855
|
label: { type: "string", description: "The qualitative label (what the assessor meant)." },
|
|
@@ -12901,7 +12896,6 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
12901
12896
|
priority: { type: "string", enum: ["urgent", "high", "medium", "low", "none"], description: "Relative importance against other tasks" },
|
|
12902
12897
|
due_date: { type: "string", description: "ISO date due. Typically bounded by the containing story's due date." },
|
|
12903
12898
|
labels: { type: "string[]", description: "Free-form classification tags. Applied uniformly across work item types." }
|
|
12904
|
-
// `estimate` (story_task collapse relic, duplicated `effort`) removed in 0.14.0 (UPG-574).
|
|
12905
12899
|
},
|
|
12906
12900
|
// TeamProperties: Team entity.
|
|
12907
12901
|
team: {
|
|
@@ -13050,7 +13044,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
13050
13044
|
methodology: { type: "string", enum: ["stride", "dread", "pasta", "attack_tree", "other"], description: 'Methodology. `stride` = Spoofing, Tampering, Repudiation, Information Disclosure, DoS, Elevation of Privilege (OWASP standard). `dread` = Damage, Reproducibility, Exploitability, Affected users, Discoverability (numeric scoring). `pasta` = Process for Attack Simulation and Threat Analysis (7-stage). `attack_tree` = hierarchical tree of attack paths. @example "stride" is the most widely used methodology for web applications' },
|
|
13051
13045
|
scope: { type: "string", description: 'What system, feature, or data flow is being analysed. @example "user authentication", "payment processing", "admin API"' },
|
|
13052
13046
|
last_reviewed: { type: "string", description: 'ISO date last reviewed. Models become stale as systems evolve. @example "2026-03-01"' },
|
|
13053
|
-
participants: { type: "string", description: 'Participants in the exercise. @example "Alice Chen (security lead), Bob Park (backend engineer), Carol Liu (architect)"
|
|
13047
|
+
participants: { type: "string", description: 'Participants in the exercise. Promote individuals to `node_owned_by_person` edges if participation must be queryable. @example "Alice Chen (security lead), Bob Park (backend engineer), Carol Liu (architect)"' },
|
|
13054
13048
|
threat_count: { type: "number", description: "Threats identified. Key metric for scope and completeness. @example 12", modifier: "derived" }
|
|
13055
13049
|
},
|
|
13056
13050
|
// TouchpointProperties: Customer touchpoint.
|
|
@@ -13145,7 +13139,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
13145
13139
|
// VisionProperties: Vision entity.
|
|
13146
13140
|
vision: {
|
|
13147
13141
|
timeframe: { type: "string", description: 'Target timeframe. @example "3 years"' },
|
|
13148
|
-
north_star: { type: "string", description: "
|
|
13142
|
+
north_star: { type: "string", description: "The north-star statement: a prose slogan of the future the product steers toward. Legitimately free-text (graph-vs-prose). To link the *metric* a vision optimises for, use the `vision_anchored_by_metric` edge (P14 0.12.0)." },
|
|
13149
13143
|
success_looks_like: { type: "string", description: "Narrative of what success looks like" }
|
|
13150
13144
|
},
|
|
13151
13145
|
// VulnerabilityProperties: Vulnerability.
|
|
@@ -29731,7 +29725,7 @@ function isCanonical(text) {
|
|
|
29731
29725
|
}
|
|
29732
29726
|
|
|
29733
29727
|
// src/index.ts
|
|
29734
|
-
var UPG_VERSION = "0.17.
|
|
29728
|
+
var UPG_VERSION = "0.17.7";
|
|
29735
29729
|
var UPG_FORMAT_VERSION = "0.4.0";
|
|
29736
29730
|
var MARKDOWN_FORMAT_VERSION = "0.1";
|
|
29737
29731
|
var UPG_TYPES = getTypes();
|