@unified-product-graph/core 0.17.6 → 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/dist/index.cjs +27 -39
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +24 -26
- package/dist/index.d.ts +24 -26
- package/dist/index.js +27 -39
- 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
|
}
|
|
@@ -10353,7 +10349,7 @@ interface VisionProperties {
|
|
|
10353
10349
|
*/
|
|
10354
10350
|
timeframe?: string;
|
|
10355
10351
|
/**
|
|
10356
|
-
* The north-star statement
|
|
10352
|
+
* The north-star statement: a prose slogan of the future the product steers
|
|
10357
10353
|
* toward. Legitimately free-text (graph-vs-prose). To link the *metric* a
|
|
10358
10354
|
* vision optimises for, use the `vision_anchored_by_metric` edge (P14 0.12.0).
|
|
10359
10355
|
*/
|
|
@@ -10391,11 +10387,11 @@ interface StrategicThemeProperties {
|
|
|
10391
10387
|
/** Owning person or team. Promote to a `node_owned_by_person` edge if ownership must be queryable. */
|
|
10392
10388
|
owner?: string;
|
|
10393
10389
|
/**
|
|
10394
|
-
*
|
|
10390
|
+
* Bounded period this theme is active (a theme is time-bound, within a pillar).
|
|
10395
10391
|
* @example "Q1 2026", "FY26"
|
|
10396
10392
|
*/
|
|
10397
10393
|
time_horizon?: string;
|
|
10398
|
-
/** Short narrative of
|
|
10394
|
+
/** Short narrative of this time-bound thrust within its pillar */
|
|
10399
10395
|
description?: string;
|
|
10400
10396
|
/** What the theme explicitly includes or excludes */
|
|
10401
10397
|
scope?: string;
|
|
@@ -10499,16 +10495,16 @@ interface ValueStreamProperties {
|
|
|
10499
10495
|
interface StrategicPillarProperties {
|
|
10500
10496
|
/** Owning person or team. Promote to a `node_owned_by_person` edge if ownership must be queryable. */
|
|
10501
10497
|
owner?: string;
|
|
10502
|
-
/** Narrative of the pillar's intent */
|
|
10498
|
+
/** Narrative of the pillar's intent as a durable strategic area */
|
|
10503
10499
|
description?: string;
|
|
10504
|
-
/**
|
|
10500
|
+
/** The standing organisational area this pillar owns */
|
|
10505
10501
|
scope?: string;
|
|
10506
10502
|
/**
|
|
10507
|
-
*
|
|
10508
|
-
* @example "3 years", "2026-2028"
|
|
10503
|
+
* Standing / multi-year horizon, often open-ended (a pillar is durable).
|
|
10504
|
+
* @example "3 years", "2026-2028", "ongoing"
|
|
10509
10505
|
*/
|
|
10510
10506
|
time_horizon?: string;
|
|
10511
|
-
/** 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. */
|
|
10512
10508
|
success_indicator?: string;
|
|
10513
10509
|
}
|
|
10514
10510
|
/** Assumption entity.
|
|
@@ -17309,6 +17305,8 @@ interface RebuttalProperties {
|
|
|
17309
17305
|
statement?: string;
|
|
17310
17306
|
/** How convincing this rebuttal is (1-5) */
|
|
17311
17307
|
strength?: UPGAssessment;
|
|
17308
|
+
/** References to supporting evidence (e.g. interview or observation ids). */
|
|
17309
|
+
evidence_refs?: string[];
|
|
17312
17310
|
}
|
|
17313
17311
|
/** ProofPoint entity.
|
|
17314
17312
|
*
|
|
@@ -22238,7 +22236,7 @@ declare function isCanonical(text: string): boolean;
|
|
|
22238
22236
|
* it stamps the `upg_version` field of every `.upg` file written by the SDK.
|
|
22239
22237
|
* The `check:version-lockstep` gate enforces this at release time.
|
|
22240
22238
|
*/
|
|
22241
|
-
declare const UPG_VERSION: "0.17.
|
|
22239
|
+
declare const UPG_VERSION: "0.17.7";
|
|
22242
22240
|
/**
|
|
22243
22241
|
* The `.upg` JSON document format version. Written to the `upg_version` field.
|
|
22244
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
|
}
|
|
@@ -10353,7 +10349,7 @@ interface VisionProperties {
|
|
|
10353
10349
|
*/
|
|
10354
10350
|
timeframe?: string;
|
|
10355
10351
|
/**
|
|
10356
|
-
* The north-star statement
|
|
10352
|
+
* The north-star statement: a prose slogan of the future the product steers
|
|
10357
10353
|
* toward. Legitimately free-text (graph-vs-prose). To link the *metric* a
|
|
10358
10354
|
* vision optimises for, use the `vision_anchored_by_metric` edge (P14 0.12.0).
|
|
10359
10355
|
*/
|
|
@@ -10391,11 +10387,11 @@ interface StrategicThemeProperties {
|
|
|
10391
10387
|
/** Owning person or team. Promote to a `node_owned_by_person` edge if ownership must be queryable. */
|
|
10392
10388
|
owner?: string;
|
|
10393
10389
|
/**
|
|
10394
|
-
*
|
|
10390
|
+
* Bounded period this theme is active (a theme is time-bound, within a pillar).
|
|
10395
10391
|
* @example "Q1 2026", "FY26"
|
|
10396
10392
|
*/
|
|
10397
10393
|
time_horizon?: string;
|
|
10398
|
-
/** Short narrative of
|
|
10394
|
+
/** Short narrative of this time-bound thrust within its pillar */
|
|
10399
10395
|
description?: string;
|
|
10400
10396
|
/** What the theme explicitly includes or excludes */
|
|
10401
10397
|
scope?: string;
|
|
@@ -10499,16 +10495,16 @@ interface ValueStreamProperties {
|
|
|
10499
10495
|
interface StrategicPillarProperties {
|
|
10500
10496
|
/** Owning person or team. Promote to a `node_owned_by_person` edge if ownership must be queryable. */
|
|
10501
10497
|
owner?: string;
|
|
10502
|
-
/** Narrative of the pillar's intent */
|
|
10498
|
+
/** Narrative of the pillar's intent as a durable strategic area */
|
|
10503
10499
|
description?: string;
|
|
10504
|
-
/**
|
|
10500
|
+
/** The standing organisational area this pillar owns */
|
|
10505
10501
|
scope?: string;
|
|
10506
10502
|
/**
|
|
10507
|
-
*
|
|
10508
|
-
* @example "3 years", "2026-2028"
|
|
10503
|
+
* Standing / multi-year horizon, often open-ended (a pillar is durable).
|
|
10504
|
+
* @example "3 years", "2026-2028", "ongoing"
|
|
10509
10505
|
*/
|
|
10510
10506
|
time_horizon?: string;
|
|
10511
|
-
/** 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. */
|
|
10512
10508
|
success_indicator?: string;
|
|
10513
10509
|
}
|
|
10514
10510
|
/** Assumption entity.
|
|
@@ -17309,6 +17305,8 @@ interface RebuttalProperties {
|
|
|
17309
17305
|
statement?: string;
|
|
17310
17306
|
/** How convincing this rebuttal is (1-5) */
|
|
17311
17307
|
strength?: UPGAssessment;
|
|
17308
|
+
/** References to supporting evidence (e.g. interview or observation ids). */
|
|
17309
|
+
evidence_refs?: string[];
|
|
17312
17310
|
}
|
|
17313
17311
|
/** ProofPoint entity.
|
|
17314
17312
|
*
|
|
@@ -22238,7 +22236,7 @@ declare function isCanonical(text: string): boolean;
|
|
|
22238
22236
|
* it stamps the `upg_version` field of every `.upg` file written by the SDK.
|
|
22239
22237
|
* The `check:version-lockstep` gate enforces this at release time.
|
|
22240
22238
|
*/
|
|
22241
|
-
declare const UPG_VERSION: "0.17.
|
|
22239
|
+
declare const UPG_VERSION: "0.17.7";
|
|
22242
22240
|
/**
|
|
22243
22241
|
* The `.upg` JSON document format version. Written to the `upg_version` field.
|
|
22244
22242
|
* Evolves independently from `UPG_VERSION` (the catalogue version).
|
package/dist/index.js
CHANGED
|
@@ -6820,6 +6820,8 @@ var PROPERTY_SCALE_MAP = {
|
|
|
6820
6820
|
// validation/experiment_run
|
|
6821
6821
|
bug_severity: "severity_5",
|
|
6822
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)
|
|
6823
6825
|
risk_level: "severity_5",
|
|
6824
6826
|
// compliance/risk (UPG-579 Option B)
|
|
6825
6827
|
scarcity_risk: "severity_5",
|
|
@@ -10507,8 +10509,6 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10507
10509
|
framework_id: { type: "string", description: "Framework ID (references `UPGFramework.id`)" },
|
|
10508
10510
|
stage: { type: "string", enum: ["draft", "validated", "active"], description: "Maturity" },
|
|
10509
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." }
|
|
10510
|
-
// monetisation_basis removed in 0.12.0 (P14 Bucket C) — categorical rollup of revenue_stream.billing_model.
|
|
10511
|
-
// north_star_metric removed in 0.12.0 (P14) → `business_model_guided_by_metric` edge.
|
|
10512
10512
|
},
|
|
10513
10513
|
// CapabilityProperties: Capability entity.
|
|
10514
10514
|
capability: {
|
|
@@ -10725,7 +10725,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10725
10725
|
// ConstraintProperties: Constraint: a named limitation or boundary on product creation.
|
|
10726
10726
|
constraint: {
|
|
10727
10727
|
constraint_kind: { type: "string", enum: ["resource", "technical", "regulatory", "temporal", "compliance", "other"], description: "Limitation category" },
|
|
10728
|
-
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`)." },
|
|
10729
10729
|
constraint_status: { type: "string", enum: ["binding", "advisory", "lifted"], description: "Whether binding, advisory, or lifted" },
|
|
10730
10730
|
rule_strength: { type: "string", enum: ["must", "must_not", "exception", "warning", "guideline"], description: "Enforcement strictness. Reuses the governance/guideline rule vocabulary." },
|
|
10731
10731
|
source: { type: "string", description: "Free-text origin: policy document, regulation, stakeholder, technical doc." },
|
|
@@ -11342,7 +11342,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
11342
11342
|
// FeatureFlagProperties: Feature flag.
|
|
11343
11343
|
feature_flag: {
|
|
11344
11344
|
key: { type: "string", description: 'Required. Stable flag key used in code (e.g. "new-checkout-flow").' },
|
|
11345
|
-
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" },
|
|
11346
11346
|
targeting_rules: { type: "string", description: "Human-readable targeting rules. Full rule evaluation happens in the flag service." },
|
|
11347
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." },
|
|
11348
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." },
|
|
@@ -12112,7 +12112,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
12112
12112
|
is_highlighted: { type: "boolean", description: "Flagged as a highlight. Absorbed from the deprecated Highlight entity." },
|
|
12113
12113
|
highlight_tag: { type: "string", description: 'Free-form highlight type tag. @example "pain", "delight", "behaviour", "moment of clarity"' },
|
|
12114
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." },
|
|
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.", 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" }
|
|
12116
12116
|
},
|
|
12117
12117
|
// OnCallRotationProperties: On-call rotation.
|
|
12118
12118
|
on_call_rotation: {
|
|
@@ -12121,10 +12121,18 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
12121
12121
|
rotation_cadence: { type: "string", enum: ["daily", "weekly", "biweekly", "custom"], description: "Cycle cadence. `weekly` for standard team rotations. `daily` for high-incident-volume teams." },
|
|
12122
12122
|
handoff_time: { type: "string", description: 'Shift handoff time. Affects team coordination and sleep. @example "09:00 UTC", "17:00 local"' }
|
|
12123
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
|
+
},
|
|
12124
12135
|
// OpportunityProperties: A problem worth solving, grounded in user need and business value.
|
|
12125
|
-
// No intrinsic scalar properties — defined by edges + framework-scoped scoring
|
|
12126
|
-
// (reach/frequency/pain/opportunity_score live on the `opportunity-sizing`
|
|
12127
|
-
// framework_exercise edge). Former props removed in 0.14.0 (UPG-574).
|
|
12128
12136
|
opportunity: {},
|
|
12129
12137
|
// OrganizationProperties: Organization entity.
|
|
12130
12138
|
organization: {
|
|
@@ -12157,7 +12165,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
12157
12165
|
alias: { type: "string", description: 'Anonymous alias for privacy (e.g. "P01")' },
|
|
12158
12166
|
recruit_source: { type: "string", description: "How the participant was recruited" },
|
|
12159
12167
|
consent_status: { type: "string", enum: ["pending", "given", "withdrawn"], description: "Current consent status for data usage" },
|
|
12160
|
-
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" }
|
|
12161
12169
|
},
|
|
12162
12170
|
// PartnerProgramProperties: Partner program.
|
|
12163
12171
|
partner_program: {
|
|
@@ -12227,7 +12235,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
12227
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`." },
|
|
12228
12236
|
domain_expertise: { type: "string", description: 'Industry or domain knowledge this persona brings @example "10+ years SaaS experience", "New to healthcare IT"' },
|
|
12229
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"' },
|
|
12230
|
-
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"' }
|
|
12231
12239
|
},
|
|
12232
12240
|
// PipelineSalesProperties: Sales pipeline.
|
|
12233
12241
|
pipeline_sales: {
|
|
@@ -12290,17 +12298,6 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
12290
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." },
|
|
12291
12299
|
since: { type: "string", description: "Year or version the primitive was introduced." }
|
|
12292
12300
|
},
|
|
12293
|
-
// OperatingLifecycleProperties: a canonical ordered (often cyclic) operating process products' journey phases map onto.
|
|
12294
|
-
operating_lifecycle: {
|
|
12295
|
-
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." },
|
|
12296
|
-
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.' }
|
|
12297
|
-
},
|
|
12298
|
-
// OperatingStageProperties: one ordered stage of an operating_lifecycle.
|
|
12299
|
-
operating_stage: {
|
|
12300
|
-
stage_order: { type: "number", description: "Ordered position within the lifecycle, 0-indexed. Source of truth for sequence." },
|
|
12301
|
-
goal: { type: "string", description: "What this stage accomplishes." },
|
|
12302
|
-
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." }
|
|
12303
|
-
},
|
|
12304
12301
|
// PrivacyPolicyProperties: Privacy policy.
|
|
12305
12302
|
privacy_policy: {
|
|
12306
12303
|
version: { type: "string", description: "Version identifier of the policy" },
|
|
@@ -12381,7 +12378,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
12381
12378
|
quote: {
|
|
12382
12379
|
text: { type: "string", description: "Quoted text" },
|
|
12383
12380
|
timestamp: { type: "string", description: "When said (ISO timestamp or session offset)" },
|
|
12384
|
-
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" }
|
|
12385
12382
|
},
|
|
12386
12383
|
// QuoteDocumentProperties: Quote document.
|
|
12387
12384
|
quote_document: {
|
|
@@ -12410,7 +12407,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
12410
12407
|
},
|
|
12411
12408
|
required: ["value", "label"]
|
|
12412
12409
|
},
|
|
12413
|
-
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)." }
|
|
12414
12411
|
},
|
|
12415
12412
|
// RegionalPricingProperties: Regional pricing.
|
|
12416
12413
|
regional_pricing: {
|
|
@@ -12582,7 +12579,6 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
12582
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." },
|
|
12583
12580
|
evidence_summary: { type: "string", description: "One-paragraph evidence summary. Log lines, traces, repro steps. Detailed artefacts go on linked `evidence` nodes." },
|
|
12584
12581
|
affected_area: { type: "string", description: "Affected area of the system" }
|
|
12585
|
-
// `category` (legacy, -> `cause_category`) and `verified` (= `cause_confidence === 'confirmed'`) removed in 0.14.0 (UPG-574).
|
|
12586
12582
|
},
|
|
12587
12583
|
// RunbookProperties: Runbook.
|
|
12588
12584
|
runbook: {
|
|
@@ -12734,10 +12730,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
12734
12730
|
post_type: { type: "string", enum: ["text", "image", "video", "carousel", "story"], description: "Format of the post" },
|
|
12735
12731
|
scheduled_date: { type: "string", description: "Date the post is scheduled to publish (ISO format)" }
|
|
12736
12732
|
},
|
|
12737
|
-
// SolutionProperties: A proposed response to an opportunity
|
|
12738
|
-
// RICE scoring inputs (reach/impact/confidence/effort) + computed rice_score
|
|
12739
|
-
// were framework-scoped from 0.9.0 and removed in 0.14.0 (UPG-574): they live
|
|
12740
|
-
// on the `rice-scoring` framework_exercise edge, not the entity.
|
|
12733
|
+
// SolutionProperties: A proposed response to an opportunity
|
|
12741
12734
|
solution: {
|
|
12742
12735
|
timeline: { type: "string", description: "Estimated delivery or target timeline" }
|
|
12743
12736
|
},
|
|
@@ -12796,18 +12789,14 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
12796
12789
|
time_horizon: { type: "string", description: 'Standing / multi-year horizon, often open-ended (a pillar is durable). @example "3 years", "2026-2028", "ongoing"' },
|
|
12797
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." }
|
|
12798
12791
|
},
|
|
12799
|
-
// StrategicQuestionProperties: StrategicQuestion entity.
|
|
12800
|
-
// ownership question a plan is exposed to (strategy sibling of research_question /
|
|
12801
|
-
// design_question). `status` is the node lifecycle (open -> resolved).
|
|
12792
|
+
// StrategicQuestionProperties: StrategicQuestion entity.
|
|
12802
12793
|
strategic_question: {
|
|
12803
12794
|
question: { type: "string", description: "The question itself. Primary content." },
|
|
12804
12795
|
context: { type: "string", description: "Context that surfaced the question: the reorg, the boundary, the unowned area." },
|
|
12805
12796
|
resolution: { type: "string", description: "The answer, captured when the question moves to `resolved`." },
|
|
12806
12797
|
priority: { type: "string", enum: ["urgent", "high", "medium", "low", "none"], description: "Importance to resolve relative to other open questions." }
|
|
12807
12798
|
},
|
|
12808
|
-
// StrategicThemeProperties: StrategicTheme entity.
|
|
12809
|
-
// strategic_pillar (distinct cascade level, UPG-692 T3.3) — measured through its
|
|
12810
|
-
// child objectives, so it carries no success_indicator of its own.
|
|
12799
|
+
// StrategicThemeProperties: StrategicTheme entity.
|
|
12811
12800
|
strategic_theme: {
|
|
12812
12801
|
owner: { type: "string", description: "Owning person or team. Promote to a `node_owned_by_person` edge if ownership must be queryable." },
|
|
12813
12802
|
time_horizon: { type: "string", description: 'Bounded period this theme is active (a theme is time-bound, within a pillar). @example "Q1 2026", "FY26"' },
|
|
@@ -12860,7 +12849,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
12860
12849
|
magnitude: {
|
|
12861
12850
|
type: "assessment",
|
|
12862
12851
|
scale_id: "severity_5",
|
|
12863
|
-
description: "How large the
|
|
12852
|
+
description: "How large the barrier is (UPGAssessment on the `severity_5` scale).",
|
|
12864
12853
|
properties: {
|
|
12865
12854
|
value: { type: "number", description: "The numeric value, used for computation." },
|
|
12866
12855
|
label: { type: "string", description: "The qualitative label (what the assessor meant)." },
|
|
@@ -12907,7 +12896,6 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
12907
12896
|
priority: { type: "string", enum: ["urgent", "high", "medium", "low", "none"], description: "Relative importance against other tasks" },
|
|
12908
12897
|
due_date: { type: "string", description: "ISO date due. Typically bounded by the containing story's due date." },
|
|
12909
12898
|
labels: { type: "string[]", description: "Free-form classification tags. Applied uniformly across work item types." }
|
|
12910
|
-
// `estimate` (story_task collapse relic, duplicated `effort`) removed in 0.14.0 (UPG-574).
|
|
12911
12899
|
},
|
|
12912
12900
|
// TeamProperties: Team entity.
|
|
12913
12901
|
team: {
|
|
@@ -13056,7 +13044,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
13056
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' },
|
|
13057
13045
|
scope: { type: "string", description: 'What system, feature, or data flow is being analysed. @example "user authentication", "payment processing", "admin API"' },
|
|
13058
13046
|
last_reviewed: { type: "string", description: 'ISO date last reviewed. Models become stale as systems evolve. @example "2026-03-01"' },
|
|
13059
|
-
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)"' },
|
|
13060
13048
|
threat_count: { type: "number", description: "Threats identified. Key metric for scope and completeness. @example 12", modifier: "derived" }
|
|
13061
13049
|
},
|
|
13062
13050
|
// TouchpointProperties: Customer touchpoint.
|
|
@@ -13151,7 +13139,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
13151
13139
|
// VisionProperties: Vision entity.
|
|
13152
13140
|
vision: {
|
|
13153
13141
|
timeframe: { type: "string", description: 'Target timeframe. @example "3 years"' },
|
|
13154
|
-
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)." },
|
|
13155
13143
|
success_looks_like: { type: "string", description: "Narrative of what success looks like" }
|
|
13156
13144
|
},
|
|
13157
13145
|
// VulnerabilityProperties: Vulnerability.
|
|
@@ -29737,7 +29725,7 @@ function isCanonical(text) {
|
|
|
29737
29725
|
}
|
|
29738
29726
|
|
|
29739
29727
|
// src/index.ts
|
|
29740
|
-
var UPG_VERSION = "0.17.
|
|
29728
|
+
var UPG_VERSION = "0.17.7";
|
|
29741
29729
|
var UPG_FORMAT_VERSION = "0.4.0";
|
|
29742
29730
|
var MARKDOWN_FORMAT_VERSION = "0.1";
|
|
29743
29731
|
var UPG_TYPES = getTypes();
|