@unified-product-graph/core 0.15.0 → 0.16.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +90 -33
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +1 -31
- package/dist/index.d.ts +1 -31
- package/dist/index.js +90 -33
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.d.cts
CHANGED
|
@@ -10001,15 +10001,12 @@ type MarketingPlatform = 'discord' | 'email' | 'google' | 'instagram' | 'linkedi
|
|
|
10001
10001
|
* @example
|
|
10002
10002
|
* const properties: OrganizationProperties = {
|
|
10003
10003
|
* logo_url: 'https://arkheiev.com/logo.svg',
|
|
10004
|
-
* billing_plan: 'business-annual',
|
|
10005
10004
|
* industry: 'Developer Tools',
|
|
10006
10005
|
* }
|
|
10007
10006
|
*/
|
|
10008
10007
|
interface OrganizationProperties {
|
|
10009
10008
|
/** URL of the organisation's logo */
|
|
10010
10009
|
logo_url?: string;
|
|
10011
|
-
/** Current billing / subscription plan */
|
|
10012
|
-
billing_plan?: string;
|
|
10013
10010
|
/** Industry vertical the organisation operates in */
|
|
10014
10011
|
industry?: string;
|
|
10015
10012
|
}
|
|
@@ -13350,8 +13347,6 @@ interface InvestigationProperties {
|
|
|
13350
13347
|
resolved_at?: ISODateTime;
|
|
13351
13348
|
/** Lead investigator (email or handle). Distinct from the team owning the affected service. Promote to a `node_owned_by_person` edge if ownership must be queryable. */
|
|
13352
13349
|
lead_investigator?: string;
|
|
13353
|
-
/** Originating session */
|
|
13354
|
-
session_id?: string;
|
|
13355
13350
|
/**
|
|
13356
13351
|
* Kind of issue under investigation. Distinct from `RootCauseProperties.cause_category`,
|
|
13357
13352
|
* which captures *why something went wrong*.
|
|
@@ -15072,7 +15067,6 @@ interface InternalDocProperties {
|
|
|
15072
15067
|
* source_url: 'https://github.com/unified-product-graph/core/blob/main/spec/v0.2/upg-core.md',
|
|
15073
15068
|
* platform: 'markdown',
|
|
15074
15069
|
* document_type: 'spec',
|
|
15075
|
-
* author: 'fraan@theproductcreator.com',
|
|
15076
15070
|
* last_updated: '2026-04-28T13:27:08Z',
|
|
15077
15071
|
* word_count: 2480,
|
|
15078
15072
|
* content_summary: 'Defines the v0.2 entity catalogue, edge catalogue, and migration adapters.',
|
|
@@ -15087,8 +15081,6 @@ interface DocumentProperties {
|
|
|
15087
15081
|
platform?: 'markdown' | 'notion' | 'figma' | 'google_docs' | 'confluence' | 'github' | 'linear' | 'other';
|
|
15088
15082
|
/** Purpose classification */
|
|
15089
15083
|
document_type?: 'vision' | 'plan' | 'decision' | 'research' | 'spec' | 'audit' | 'session' | 'feedback' | 'case-study' | 'narrative' | 'bug-report' | 'archive-collection' | 'rfc' | 'runbook' | 'guide' | 'onboarding' | 'brief' | 'report' | 'reference';
|
|
15090
|
-
/** Author (free-form: name, email, or handle). Promote to a `node_owned_by_person` edge if ownership must be queryable. */
|
|
15091
|
-
author?: string;
|
|
15092
15084
|
/** ISO 8601 last-meaningful-update */
|
|
15093
15085
|
last_updated?: ISODateTime;
|
|
15094
15086
|
/** Approximate word count. Useful for planning, indexing, summarisation. */
|
|
@@ -15176,12 +15168,6 @@ interface LegalEntityProperties {
|
|
|
15176
15168
|
jurisdiction?: string;
|
|
15177
15169
|
/** Description of intellectual property ownership */
|
|
15178
15170
|
ip_ownership?: string;
|
|
15179
|
-
/** Principal business address */
|
|
15180
|
-
principal_address?: string;
|
|
15181
|
-
/** Tax identification number */
|
|
15182
|
-
tax_id?: string;
|
|
15183
|
-
/** Official registration or incorporation number */
|
|
15184
|
-
registration_number?: string;
|
|
15185
15171
|
/** Date the entity was incorporated (ISO format) */
|
|
15186
15172
|
date_incorporated?: string;
|
|
15187
15173
|
}
|
|
@@ -15449,14 +15435,11 @@ interface RoleProperties {
|
|
|
15449
15435
|
*
|
|
15450
15436
|
* @example
|
|
15451
15437
|
* const properties: PersonProperties = {
|
|
15452
|
-
* email: 'ada@example.com',
|
|
15453
15438
|
* role_title: 'Product Engineer',
|
|
15454
15439
|
* time_zone: 'Europe/Berlin',
|
|
15455
15440
|
* }
|
|
15456
15441
|
*/
|
|
15457
15442
|
interface PersonProperties {
|
|
15458
|
-
/** Primary contact email. Stable identifier for de-duplication. */
|
|
15459
|
-
email?: string;
|
|
15460
15443
|
/** Free-text job title. Distinct from the structured `role` entity. */
|
|
15461
15444
|
role_title?: string;
|
|
15462
15445
|
/** IANA time zone (e.g. "Europe/Berlin"). Useful for capacity / on-call planning. */
|
|
@@ -15800,8 +15783,6 @@ interface AiModelProperties {
|
|
|
15800
15783
|
model_version?: string;
|
|
15801
15784
|
/** Intended use case */
|
|
15802
15785
|
model_purpose?: string;
|
|
15803
|
-
/** Cost per 1,000 tokens */
|
|
15804
|
-
cost_per_1k_tokens?: number;
|
|
15805
15786
|
/** Maximum context window (tokens) */
|
|
15806
15787
|
context_window?: number;
|
|
15807
15788
|
/** Median latency (p50, ms) */
|
|
@@ -17186,25 +17167,17 @@ interface AccountProperties {
|
|
|
17186
17167
|
industry?: string;
|
|
17187
17168
|
/** Number of employees at the account */
|
|
17188
17169
|
employee_count?: number;
|
|
17189
|
-
/** Annual revenue of the account */
|
|
17190
|
-
annual_revenue?: number;
|
|
17191
17170
|
}
|
|
17192
17171
|
/** Contact.
|
|
17193
17172
|
*
|
|
17194
17173
|
* @example
|
|
17195
17174
|
* const properties: ContactProperties = {
|
|
17196
17175
|
* contact_role: 'champion',
|
|
17197
|
-
* email: 'sam.patel@arkheiev.com',
|
|
17198
|
-
* phone: '+49 30 123456',
|
|
17199
17176
|
* }
|
|
17200
17177
|
*/
|
|
17201
17178
|
interface ContactProperties {
|
|
17202
17179
|
/** Job title or role within the account */
|
|
17203
17180
|
contact_role?: string;
|
|
17204
|
-
/** Email address */
|
|
17205
|
-
email?: string;
|
|
17206
|
-
/** Phone number */
|
|
17207
|
-
phone?: string;
|
|
17208
17181
|
/** Whether this person has purchasing authority */
|
|
17209
17182
|
is_decision_maker?: boolean;
|
|
17210
17183
|
}
|
|
@@ -18190,7 +18163,6 @@ interface PartnerRevenueShareProperties {
|
|
|
18190
18163
|
*
|
|
18191
18164
|
* @example
|
|
18192
18165
|
* const properties: WorkspaceProperties = {
|
|
18193
|
-
* slug: 'q2-discovery',
|
|
18194
18166
|
* visibility: 'shared',
|
|
18195
18167
|
* purpose: 'Arrange personas, jobs, and opportunities for the Q2 discovery sprint.',
|
|
18196
18168
|
* workspace_purpose: 'discovery',
|
|
@@ -18202,8 +18174,6 @@ interface PartnerRevenueShareProperties {
|
|
|
18202
18174
|
* }
|
|
18203
18175
|
*/
|
|
18204
18176
|
interface WorkspaceProperties {
|
|
18205
|
-
/** URL-friendly identifier */
|
|
18206
|
-
slug?: string;
|
|
18207
18177
|
/** Who can see this workspace */
|
|
18208
18178
|
visibility?: 'private' | 'shared' | 'public';
|
|
18209
18179
|
/** Free-text description. Pairs with the closed-enum `workspace_purpose`. */
|
|
@@ -21839,7 +21809,7 @@ declare function isCanonical(text: string): boolean;
|
|
|
21839
21809
|
* it stamps the `upg_version` field of every `.upg` file written by the SDK.
|
|
21840
21810
|
* The `check:version-lockstep` gate enforces this at release time.
|
|
21841
21811
|
*/
|
|
21842
|
-
declare const UPG_VERSION: "0.
|
|
21812
|
+
declare const UPG_VERSION: "0.16.0";
|
|
21843
21813
|
/**
|
|
21844
21814
|
* The `.upg` JSON document format version. Written to the `upg_version` field.
|
|
21845
21815
|
* Evolves independently from `UPG_VERSION` (the catalogue version).
|
package/dist/index.d.ts
CHANGED
|
@@ -10001,15 +10001,12 @@ type MarketingPlatform = 'discord' | 'email' | 'google' | 'instagram' | 'linkedi
|
|
|
10001
10001
|
* @example
|
|
10002
10002
|
* const properties: OrganizationProperties = {
|
|
10003
10003
|
* logo_url: 'https://arkheiev.com/logo.svg',
|
|
10004
|
-
* billing_plan: 'business-annual',
|
|
10005
10004
|
* industry: 'Developer Tools',
|
|
10006
10005
|
* }
|
|
10007
10006
|
*/
|
|
10008
10007
|
interface OrganizationProperties {
|
|
10009
10008
|
/** URL of the organisation's logo */
|
|
10010
10009
|
logo_url?: string;
|
|
10011
|
-
/** Current billing / subscription plan */
|
|
10012
|
-
billing_plan?: string;
|
|
10013
10010
|
/** Industry vertical the organisation operates in */
|
|
10014
10011
|
industry?: string;
|
|
10015
10012
|
}
|
|
@@ -13350,8 +13347,6 @@ interface InvestigationProperties {
|
|
|
13350
13347
|
resolved_at?: ISODateTime;
|
|
13351
13348
|
/** Lead investigator (email or handle). Distinct from the team owning the affected service. Promote to a `node_owned_by_person` edge if ownership must be queryable. */
|
|
13352
13349
|
lead_investigator?: string;
|
|
13353
|
-
/** Originating session */
|
|
13354
|
-
session_id?: string;
|
|
13355
13350
|
/**
|
|
13356
13351
|
* Kind of issue under investigation. Distinct from `RootCauseProperties.cause_category`,
|
|
13357
13352
|
* which captures *why something went wrong*.
|
|
@@ -15072,7 +15067,6 @@ interface InternalDocProperties {
|
|
|
15072
15067
|
* source_url: 'https://github.com/unified-product-graph/core/blob/main/spec/v0.2/upg-core.md',
|
|
15073
15068
|
* platform: 'markdown',
|
|
15074
15069
|
* document_type: 'spec',
|
|
15075
|
-
* author: 'fraan@theproductcreator.com',
|
|
15076
15070
|
* last_updated: '2026-04-28T13:27:08Z',
|
|
15077
15071
|
* word_count: 2480,
|
|
15078
15072
|
* content_summary: 'Defines the v0.2 entity catalogue, edge catalogue, and migration adapters.',
|
|
@@ -15087,8 +15081,6 @@ interface DocumentProperties {
|
|
|
15087
15081
|
platform?: 'markdown' | 'notion' | 'figma' | 'google_docs' | 'confluence' | 'github' | 'linear' | 'other';
|
|
15088
15082
|
/** Purpose classification */
|
|
15089
15083
|
document_type?: 'vision' | 'plan' | 'decision' | 'research' | 'spec' | 'audit' | 'session' | 'feedback' | 'case-study' | 'narrative' | 'bug-report' | 'archive-collection' | 'rfc' | 'runbook' | 'guide' | 'onboarding' | 'brief' | 'report' | 'reference';
|
|
15090
|
-
/** Author (free-form: name, email, or handle). Promote to a `node_owned_by_person` edge if ownership must be queryable. */
|
|
15091
|
-
author?: string;
|
|
15092
15084
|
/** ISO 8601 last-meaningful-update */
|
|
15093
15085
|
last_updated?: ISODateTime;
|
|
15094
15086
|
/** Approximate word count. Useful for planning, indexing, summarisation. */
|
|
@@ -15176,12 +15168,6 @@ interface LegalEntityProperties {
|
|
|
15176
15168
|
jurisdiction?: string;
|
|
15177
15169
|
/** Description of intellectual property ownership */
|
|
15178
15170
|
ip_ownership?: string;
|
|
15179
|
-
/** Principal business address */
|
|
15180
|
-
principal_address?: string;
|
|
15181
|
-
/** Tax identification number */
|
|
15182
|
-
tax_id?: string;
|
|
15183
|
-
/** Official registration or incorporation number */
|
|
15184
|
-
registration_number?: string;
|
|
15185
15171
|
/** Date the entity was incorporated (ISO format) */
|
|
15186
15172
|
date_incorporated?: string;
|
|
15187
15173
|
}
|
|
@@ -15449,14 +15435,11 @@ interface RoleProperties {
|
|
|
15449
15435
|
*
|
|
15450
15436
|
* @example
|
|
15451
15437
|
* const properties: PersonProperties = {
|
|
15452
|
-
* email: 'ada@example.com',
|
|
15453
15438
|
* role_title: 'Product Engineer',
|
|
15454
15439
|
* time_zone: 'Europe/Berlin',
|
|
15455
15440
|
* }
|
|
15456
15441
|
*/
|
|
15457
15442
|
interface PersonProperties {
|
|
15458
|
-
/** Primary contact email. Stable identifier for de-duplication. */
|
|
15459
|
-
email?: string;
|
|
15460
15443
|
/** Free-text job title. Distinct from the structured `role` entity. */
|
|
15461
15444
|
role_title?: string;
|
|
15462
15445
|
/** IANA time zone (e.g. "Europe/Berlin"). Useful for capacity / on-call planning. */
|
|
@@ -15800,8 +15783,6 @@ interface AiModelProperties {
|
|
|
15800
15783
|
model_version?: string;
|
|
15801
15784
|
/** Intended use case */
|
|
15802
15785
|
model_purpose?: string;
|
|
15803
|
-
/** Cost per 1,000 tokens */
|
|
15804
|
-
cost_per_1k_tokens?: number;
|
|
15805
15786
|
/** Maximum context window (tokens) */
|
|
15806
15787
|
context_window?: number;
|
|
15807
15788
|
/** Median latency (p50, ms) */
|
|
@@ -17186,25 +17167,17 @@ interface AccountProperties {
|
|
|
17186
17167
|
industry?: string;
|
|
17187
17168
|
/** Number of employees at the account */
|
|
17188
17169
|
employee_count?: number;
|
|
17189
|
-
/** Annual revenue of the account */
|
|
17190
|
-
annual_revenue?: number;
|
|
17191
17170
|
}
|
|
17192
17171
|
/** Contact.
|
|
17193
17172
|
*
|
|
17194
17173
|
* @example
|
|
17195
17174
|
* const properties: ContactProperties = {
|
|
17196
17175
|
* contact_role: 'champion',
|
|
17197
|
-
* email: 'sam.patel@arkheiev.com',
|
|
17198
|
-
* phone: '+49 30 123456',
|
|
17199
17176
|
* }
|
|
17200
17177
|
*/
|
|
17201
17178
|
interface ContactProperties {
|
|
17202
17179
|
/** Job title or role within the account */
|
|
17203
17180
|
contact_role?: string;
|
|
17204
|
-
/** Email address */
|
|
17205
|
-
email?: string;
|
|
17206
|
-
/** Phone number */
|
|
17207
|
-
phone?: string;
|
|
17208
17181
|
/** Whether this person has purchasing authority */
|
|
17209
17182
|
is_decision_maker?: boolean;
|
|
17210
17183
|
}
|
|
@@ -18190,7 +18163,6 @@ interface PartnerRevenueShareProperties {
|
|
|
18190
18163
|
*
|
|
18191
18164
|
* @example
|
|
18192
18165
|
* const properties: WorkspaceProperties = {
|
|
18193
|
-
* slug: 'q2-discovery',
|
|
18194
18166
|
* visibility: 'shared',
|
|
18195
18167
|
* purpose: 'Arrange personas, jobs, and opportunities for the Q2 discovery sprint.',
|
|
18196
18168
|
* workspace_purpose: 'discovery',
|
|
@@ -18202,8 +18174,6 @@ interface PartnerRevenueShareProperties {
|
|
|
18202
18174
|
* }
|
|
18203
18175
|
*/
|
|
18204
18176
|
interface WorkspaceProperties {
|
|
18205
|
-
/** URL-friendly identifier */
|
|
18206
|
-
slug?: string;
|
|
18207
18177
|
/** Who can see this workspace */
|
|
18208
18178
|
visibility?: 'private' | 'shared' | 'public';
|
|
18209
18179
|
/** Free-text description. Pairs with the closed-enum `workspace_purpose`. */
|
|
@@ -21839,7 +21809,7 @@ declare function isCanonical(text: string): boolean;
|
|
|
21839
21809
|
* it stamps the `upg_version` field of every `.upg` file written by the SDK.
|
|
21840
21810
|
* The `check:version-lockstep` gate enforces this at release time.
|
|
21841
21811
|
*/
|
|
21842
|
-
declare const UPG_VERSION: "0.
|
|
21812
|
+
declare const UPG_VERSION: "0.16.0";
|
|
21843
21813
|
/**
|
|
21844
21814
|
* The `.upg` JSON document format version. Written to the `upg_version` field.
|
|
21845
21815
|
* Evolves independently from `UPG_VERSION` (the catalogue version).
|
package/dist/index.js
CHANGED
|
@@ -7381,6 +7381,75 @@ function getDeprecatedTypes() {
|
|
|
7381
7381
|
return deprecated;
|
|
7382
7382
|
}
|
|
7383
7383
|
var UPG_PROPERTY_MIGRATIONS = {
|
|
7384
|
+
// ── v0.16.0: Pattern G — open-standard data boundary (UPG-691) ───────────────
|
|
7385
|
+
//
|
|
7386
|
+
// The portable graph holds modeling knowledge, not PII, registry filings,
|
|
7387
|
+
// app-session ids, or live vendor figures. These flowed through every export /
|
|
7388
|
+
// snapshot / sync. They are dropped from the body and belong to the hosting
|
|
7389
|
+
// app's identity / tenancy / measurement layer instead (boundary ADR
|
|
7390
|
+
// 2026-06-16-open-standard-data-boundary). The infra-pointer URLs that stay
|
|
7391
|
+
// (repo_url, storage_uri, *.logo_url, help_video.url, ...) were marked
|
|
7392
|
+
// `modifier:'volatile'` in this release rather than dropped, so a consumer
|
|
7393
|
+
// knows they are environment-specific and may be stripped on export. The
|
|
7394
|
+
// `owner: string` -> ownership-edge migration (C1) is a separate, larger wave
|
|
7395
|
+
// (0.17.0). (FALSE-POSITIVE guard kept: specification.spec_url, design_token.value,
|
|
7396
|
+
// vulnerability.cve_id, screen.route, bug.environment -- content / standard refs.)
|
|
7397
|
+
"0.16.0": [
|
|
7398
|
+
{
|
|
7399
|
+
kind: "drop_props",
|
|
7400
|
+
type: "person",
|
|
7401
|
+
drop_props: ["email"],
|
|
7402
|
+
reason: "UPG-691 boundary: person.email is PII for the hosting app identity layer, not the portable graph. Reference the modeled actor by edge; do not inline contact details."
|
|
7403
|
+
},
|
|
7404
|
+
{
|
|
7405
|
+
kind: "drop_props",
|
|
7406
|
+
type: "contact",
|
|
7407
|
+
drop_props: ["email", "phone"],
|
|
7408
|
+
reason: "UPG-691 boundary: contact.email / contact.phone are PII for the app identity layer, not the portable graph."
|
|
7409
|
+
},
|
|
7410
|
+
{
|
|
7411
|
+
kind: "drop_props",
|
|
7412
|
+
type: "document",
|
|
7413
|
+
drop_props: ["author"],
|
|
7414
|
+
reason: "UPG-691 boundary: document.author was free-text name/email (PII). The authoring actor is referenced by edge, not inlined."
|
|
7415
|
+
},
|
|
7416
|
+
{
|
|
7417
|
+
kind: "drop_props",
|
|
7418
|
+
type: "legal_entity",
|
|
7419
|
+
drop_props: ["tax_id", "registration_number", "principal_address"],
|
|
7420
|
+
reason: "UPG-691 boundary: government / registry identifiers belong to the tenancy / records system, not the open interchange body."
|
|
7421
|
+
},
|
|
7422
|
+
{
|
|
7423
|
+
kind: "drop_props",
|
|
7424
|
+
type: "investigation",
|
|
7425
|
+
drop_props: ["session_id"],
|
|
7426
|
+
reason: "UPG-691 boundary: investigation.session_id is an app-runtime / routing artifact, not modeling knowledge."
|
|
7427
|
+
},
|
|
7428
|
+
{
|
|
7429
|
+
kind: "drop_props",
|
|
7430
|
+
type: "workspace",
|
|
7431
|
+
drop_props: ["slug"],
|
|
7432
|
+
reason: "UPG-691 boundary: workspace.slug is an app-routing artifact, not modeling knowledge."
|
|
7433
|
+
},
|
|
7434
|
+
{
|
|
7435
|
+
kind: "drop_props",
|
|
7436
|
+
type: "organization",
|
|
7437
|
+
drop_props: ["billing_plan"],
|
|
7438
|
+
reason: "UPG-691 boundary: organization.billing_plan is a SaaS-account/tenancy concept. Model it via subscription / pricing_tier, not on the structural entity."
|
|
7439
|
+
},
|
|
7440
|
+
{
|
|
7441
|
+
kind: "drop_props",
|
|
7442
|
+
type: "account",
|
|
7443
|
+
drop_props: ["annual_revenue"],
|
|
7444
|
+
reason: "UPG-691 boundary: account.annual_revenue is live firmographic vendor data. Route live figures to a metric node, not the definition entity."
|
|
7445
|
+
},
|
|
7446
|
+
{
|
|
7447
|
+
kind: "drop_props",
|
|
7448
|
+
type: "ai_model",
|
|
7449
|
+
drop_props: ["cost_per_1k_tokens"],
|
|
7450
|
+
reason: "UPG-691 boundary: ai_model.cost_per_1k_tokens is a live vendor price. Route it to a metric / record entity, not the model definition."
|
|
7451
|
+
}
|
|
7452
|
+
],
|
|
7384
7453
|
// ── v0.15.0: Pattern D — collapse *_status shadows into the lifecycle ─────────
|
|
7385
7454
|
//
|
|
7386
7455
|
// 14 `*_status` enum properties whose values ARE the entity's own lifecycle
|
|
@@ -9942,8 +10011,8 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
9942
10011
|
rule_id: { type: "string", description: "Identifier of the rule that flagged the issue" },
|
|
9943
10012
|
help_url: { type: "string", description: "URL to documentation explaining the issue and how to fix it" },
|
|
9944
10013
|
affected_element: { type: "string", description: "Description of the affected UI element" },
|
|
9945
|
-
css_selector: { type: "string", description: "CSS selector targeting the affected element" },
|
|
9946
|
-
html_snippet: { type: "string", description: "HTML snippet containing the violation" },
|
|
10014
|
+
css_selector: { type: "string", description: "CSS selector targeting the affected element", modifier: "volatile" },
|
|
10015
|
+
html_snippet: { type: "string", description: "HTML snippet containing the violation", modifier: "volatile" },
|
|
9947
10016
|
tags: { type: "string[]", description: 'Tags from the audit tool (e.g. "wcag2aa", "cat.color")' },
|
|
9948
10017
|
remediation: { type: "string", description: "Recommended fix for the issue" },
|
|
9949
10018
|
impact_description: { type: "string", description: "Description of the user impact" }
|
|
@@ -9970,8 +10039,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
9970
10039
|
account: {
|
|
9971
10040
|
account_type: { type: "string", enum: ["prospect", "customer", "partner", "churned"], description: "Relationship status of this account" },
|
|
9972
10041
|
industry: { type: "string", description: "Industry vertical the account operates in" },
|
|
9973
|
-
employee_count: { type: "number", description: "Number of employees at the account", modifier: "snapshot" }
|
|
9974
|
-
annual_revenue: { type: "number", description: "Annual revenue of the account" }
|
|
10042
|
+
employee_count: { type: "number", description: "Number of employees at the account", modifier: "snapshot" }
|
|
9975
10043
|
},
|
|
9976
10044
|
// AcquisitionChannelProperties: AcquisitionChannel entity.
|
|
9977
10045
|
acquisition_channel: {
|
|
@@ -10076,7 +10144,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10076
10144
|
version: { type: "string", description: "Version" },
|
|
10077
10145
|
record_count: { type: "number", description: "Records", modifier: "snapshot" },
|
|
10078
10146
|
format: { type: "string", description: 'Format (e.g. "jsonl", "csv", "parquet")' },
|
|
10079
|
-
storage_uri: { type: "string", description: "Storage URI" },
|
|
10147
|
+
storage_uri: { type: "string", description: "Storage URI", modifier: "volatile" },
|
|
10080
10148
|
checksum: { type: "string", description: "Integrity hash" },
|
|
10081
10149
|
provenance: { type: "string", enum: ["human_labelled", "synthetic", "scraped", "converted", "mixed"], description: "Origin" },
|
|
10082
10150
|
license: { type: "string", description: "SPDX license identifier" },
|
|
@@ -10091,7 +10159,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10091
10159
|
started_at: { type: "string", description: "ISO timestamp started" },
|
|
10092
10160
|
completed_at: { type: "string", description: "ISO timestamp completed" },
|
|
10093
10161
|
training_steps: { type: "number", description: "Training steps or epochs completed" },
|
|
10094
|
-
artifact_uri: { type: "string", description: "Produced artifact URI" },
|
|
10162
|
+
artifact_uri: { type: "string", description: "Produced artifact URI", modifier: "volatile" },
|
|
10095
10163
|
notes: { type: "string", description: "Free-text notes" },
|
|
10096
10164
|
tags: { type: "string[]", description: "Free-form classification tags" }
|
|
10097
10165
|
},
|
|
@@ -10104,10 +10172,9 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10104
10172
|
// AiModelProperties: AI model.
|
|
10105
10173
|
ai_model: {
|
|
10106
10174
|
model_provider: { type: "string", enum: ["anthropic", "openai", "google", "meta", "mistral", "custom"], description: "Provider or vendor" },
|
|
10107
|
-
model_id: { type: "string", description: 'Unique model identifier (e.g. "claude-sonnet-4-20250514")' },
|
|
10175
|
+
model_id: { type: "string", description: 'Unique model identifier (e.g. "claude-sonnet-4-20250514")', modifier: "volatile" },
|
|
10108
10176
|
model_version: { type: "string", description: "Specific version" },
|
|
10109
10177
|
model_purpose: { type: "string", description: "Intended use case" },
|
|
10110
|
-
cost_per_1k_tokens: { type: "number", description: "Cost per 1,000 tokens", modifier: "snapshot" },
|
|
10111
10178
|
context_window: { type: "number", description: "Maximum context window (tokens)" },
|
|
10112
10179
|
latency_p50_ms: { type: "number", description: "Median latency (p50, ms)", modifier: "snapshot" },
|
|
10113
10180
|
latency_p99_ms: { type: "number", description: "Tail latency (p99, ms)", modifier: "snapshot" },
|
|
@@ -10146,7 +10213,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10146
10213
|
},
|
|
10147
10214
|
// ApiContractProperties: API contract.
|
|
10148
10215
|
api_contract: {
|
|
10149
|
-
spec_url: { type: "string", description: "URL of the specification document" },
|
|
10216
|
+
spec_url: { type: "string", description: "URL of the specification document", modifier: "volatile" },
|
|
10150
10217
|
protocol: { type: "string", enum: ["REST", "GraphQL", "gRPC", "AsyncAPI", "SOAP", "WebSocket", "MQTT", "SSE", "other"], description: "Communication protocol. `SSE` (server-sent events) added in 0.9.12." },
|
|
10151
10218
|
version: { type: "string", description: "API version" },
|
|
10152
10219
|
owner: { type: "string", description: "Maintaining person or team. Promote to a `node_owned_by_team` edge if ownership must be queryable." }
|
|
@@ -10236,7 +10303,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10236
10303
|
// BrandAssetProperties: Brand asset.
|
|
10237
10304
|
brand_asset: {
|
|
10238
10305
|
asset_type: { type: "string", enum: ["logo", "icon", "illustration", "photo", "video", "template"], description: "Category of the brand asset" },
|
|
10239
|
-
url: { type: "string", description: "URL or path to the asset file" },
|
|
10306
|
+
url: { type: "string", description: "URL or path to the asset file", modifier: "volatile" },
|
|
10240
10307
|
usage_rights: { type: "string", description: "Usage rights or licensing restrictions" }
|
|
10241
10308
|
},
|
|
10242
10309
|
// BrandColourProperties: Brand colour. A single colour in the brand palette.
|
|
@@ -10278,7 +10345,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10278
10345
|
approved_backgrounds: { type: "string[]", description: 'Background colours the logo is approved for use on. @example ["#FFFFFF", "#1A1A1A", "#F5F5F5"]' },
|
|
10279
10346
|
forbidden_backgrounds: { type: "string[]", description: 'Background colours or contexts where the logo must NOT be placed. @example ["busy photography", "low-contrast surfaces"]' },
|
|
10280
10347
|
file_formats: { type: "string[]", description: 'File formats this logo variant is available in. @example ["svg", "png", "eps", "pdf"]' },
|
|
10281
|
-
asset_url: { type: "string", description: "URL to the logo asset file or asset library entry." }
|
|
10348
|
+
asset_url: { type: "string", description: "URL to the logo asset file or asset library entry.", modifier: "volatile" }
|
|
10282
10349
|
},
|
|
10283
10350
|
// BrandTypographyProperties: Brand typography. A font family and its usage rules.
|
|
10284
10351
|
brand_typography: {
|
|
@@ -10327,8 +10394,8 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10327
10394
|
artifact_type: { type: "string", enum: ["docker_image", "npm_package", "binary", "static_assets", "other"], description: "Type" },
|
|
10328
10395
|
version: { type: "string", description: "Version" },
|
|
10329
10396
|
size: { type: "string", description: 'Human-readable size (e.g. "12.4 MB")' },
|
|
10330
|
-
registry: { type: "string", description: "Registry or storage location" },
|
|
10331
|
-
build_url: { type: "string", description: "URL of the producing CI/CD build run (GitHub Actions, CircleCI, etc.)." }
|
|
10397
|
+
registry: { type: "string", description: "Registry or storage location", modifier: "volatile" },
|
|
10398
|
+
build_url: { type: "string", description: "URL of the producing CI/CD build run (GitHub Actions, CircleCI, etc.).", modifier: "volatile" }
|
|
10332
10399
|
},
|
|
10333
10400
|
// BusinessModelProperties: BusinessModel: root of a BMC-style model.
|
|
10334
10401
|
business_model: {
|
|
@@ -10561,8 +10628,6 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10561
10628
|
// ContactProperties: Contact.
|
|
10562
10629
|
contact: {
|
|
10563
10630
|
contact_role: { type: "string", description: "Job title or role within the account" },
|
|
10564
|
-
email: { type: "string", description: "Email address" },
|
|
10565
|
-
phone: { type: "string", description: "Phone number" },
|
|
10566
10631
|
is_decision_maker: { type: "boolean", description: "Whether this person has purchasing authority" }
|
|
10567
10632
|
},
|
|
10568
10633
|
// ContentCalendarProperties: Content calendar.
|
|
@@ -10666,7 +10731,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10666
10731
|
// DashboardProperties: Dashboard entity.
|
|
10667
10732
|
dashboard: {
|
|
10668
10733
|
tool: { type: "string", enum: ["looker", "amplitude", "mixpanel", "posthog", "custom"], description: "Analytics tool hosting this dashboard" },
|
|
10669
|
-
url: { type: "string", description: "URL to the live dashboard" },
|
|
10734
|
+
url: { type: "string", description: "URL to the live dashboard", modifier: "volatile" },
|
|
10670
10735
|
audience: { type: "string", description: "Intended audience for this dashboard" },
|
|
10671
10736
|
element_count: { type: "number", description: "Number of widgets or panels on the dashboard", modifier: "derived" },
|
|
10672
10737
|
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." },
|
|
@@ -10821,7 +10886,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10821
10886
|
},
|
|
10822
10887
|
// DesignConceptProperties: Design concept being explored.
|
|
10823
10888
|
design_concept: {
|
|
10824
|
-
sketch_url: { type: "string", description: "URL of the sketch or visual" },
|
|
10889
|
+
sketch_url: { type: "string", description: "URL of the sketch or visual", modifier: "volatile" },
|
|
10825
10890
|
rationale: { type: "string", description: "Selection or rejection rationale" },
|
|
10826
10891
|
concept_status: { type: "string", enum: ["exploring", "validated", "selected", "rejected"], description: "Current selection status" },
|
|
10827
10892
|
maturity: { type: "string", enum: ["sketch", "refined", "final"], description: "Development stage, from rough idea to presentation-ready" },
|
|
@@ -10915,7 +10980,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10915
10980
|
},
|
|
10916
10981
|
// DeveloperPortalProperties: Developer portal.
|
|
10917
10982
|
developer_portal: {
|
|
10918
|
-
portal_url: { type: "string", description: "URL of the developer portal" },
|
|
10983
|
+
portal_url: { type: "string", description: "URL of the developer portal", modifier: "volatile" },
|
|
10919
10984
|
doc_count: { type: "number", description: "Number of documentation pages", modifier: "derived" },
|
|
10920
10985
|
sandbox_available: { type: "boolean", description: "Whether a sandbox environment is available" }
|
|
10921
10986
|
},
|
|
@@ -10938,7 +11003,6 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10938
11003
|
source_url: { type: "string", description: "Canonical retrievable URL" },
|
|
10939
11004
|
platform: { type: "string", enum: ["markdown", "notion", "figma", "google_docs", "confluence", "github", "linear", "other"], description: "Hosting platform" },
|
|
10940
11005
|
document_type: { type: "string", enum: ["vision", "plan", "decision", "research", "spec", "audit", "session", "feedback", "case-study", "narrative", "bug-report", "archive-collection", "rfc", "runbook", "guide", "onboarding", "brief", "report", "reference"], description: "Purpose classification" },
|
|
10941
|
-
author: { type: "string", description: "Author (free-form: name, email, or handle). Promote to a `node_owned_by_person` edge if ownership must be queryable." },
|
|
10942
11006
|
last_updated: { type: "string", description: "ISO 8601 last-meaningful-update" },
|
|
10943
11007
|
word_count: { type: "number", description: "Approximate word count. Useful for planning, indexing, summarisation.", modifier: "snapshot" },
|
|
10944
11008
|
content_summary: { type: "string", description: "1\u20133 sentence summary. Drives previews, search snippets, embedding context." },
|
|
@@ -11247,7 +11311,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
11247
11311
|
fix: {
|
|
11248
11312
|
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." },
|
|
11249
11313
|
commit: { type: "string", description: "Git commit SHA" },
|
|
11250
|
-
files_changed: { type: "string[]", description: "Files changed" },
|
|
11314
|
+
files_changed: { type: "string[]", description: "Files changed", modifier: "volatile" },
|
|
11251
11315
|
deployed_at: { type: "string", description: "ISO timestamp landed in the target environment." },
|
|
11252
11316
|
fixed_date: { type: "string", description: "Application date (ISO date). Coarser-grained complement to `deployed_at`." },
|
|
11253
11317
|
verified: { type: "boolean", description: "Verified in production" },
|
|
@@ -11340,7 +11404,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
11340
11404
|
video_type: { type: "string", enum: ["how_to", "overview", "troubleshooting", "best_practice"], description: "Purpose of the video" },
|
|
11341
11405
|
duration_seconds: { type: "number", description: "Duration of the video in seconds" },
|
|
11342
11406
|
views: { type: "number", description: "Total number of views" },
|
|
11343
|
-
url: { type: "string", description: "URL where the video is hosted" }
|
|
11407
|
+
url: { type: "string", description: "URL where the video is hosted", modifier: "volatile" }
|
|
11344
11408
|
},
|
|
11345
11409
|
// HypothesisProperties: A testable belief. The canonical design artefact for validating product assumptions.
|
|
11346
11410
|
hypothesis: {
|
|
@@ -11483,7 +11547,6 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
11483
11547
|
started_at: { type: "string", description: "ISO timestamp the investigation began" },
|
|
11484
11548
|
resolved_at: { type: "string", description: "ISO timestamp the investigation was concluded. Pairs with `status === 'resolved' | 'abandoned'`." },
|
|
11485
11549
|
lead_investigator: { type: "string", description: "Lead investigator (email or handle). Distinct from the team owning the affected service. Promote to a `node_owned_by_person` edge if ownership must be queryable." },
|
|
11486
|
-
session_id: { type: "string", description: "Originating session" },
|
|
11487
11550
|
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*." }
|
|
11488
11551
|
},
|
|
11489
11552
|
// InvoiceProperties: Invoice.
|
|
@@ -11688,9 +11751,6 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
11688
11751
|
entity_type: { type: "string", enum: ["corporation", "llc", "partnership", "sole_proprietor", "nonprofit"], description: "Legal structure of the entity" },
|
|
11689
11752
|
jurisdiction: { type: "string", description: "Jurisdiction where the entity is registered" },
|
|
11690
11753
|
ip_ownership: { type: "string", description: "Description of intellectual property ownership" },
|
|
11691
|
-
principal_address: { type: "string", description: "Principal business address" },
|
|
11692
|
-
tax_id: { type: "string", description: "Tax identification number" },
|
|
11693
|
-
registration_number: { type: "string", description: "Official registration or incorporation number" },
|
|
11694
11754
|
date_incorporated: { type: "string", description: "Date the entity was incorporated (ISO format)" }
|
|
11695
11755
|
},
|
|
11696
11756
|
// LibraryDependencyProperties: Library or package dependency.
|
|
@@ -11961,8 +12021,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
11961
12021
|
opportunity: {},
|
|
11962
12022
|
// OrganizationProperties: Organization entity.
|
|
11963
12023
|
organization: {
|
|
11964
|
-
logo_url: { type: "string", description: "URL of the organisation's logo" },
|
|
11965
|
-
billing_plan: { type: "string", description: "Current billing / subscription plan" },
|
|
12024
|
+
logo_url: { type: "string", description: "URL of the organisation's logo", modifier: "volatile" },
|
|
11966
12025
|
industry: { type: "string", description: "Industry vertical the organisation operates in" }
|
|
11967
12026
|
},
|
|
11968
12027
|
// OutcomeProperties: A measurable change in user or business state the product drives.
|
|
@@ -12048,7 +12107,6 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
12048
12107
|
},
|
|
12049
12108
|
// PersonProperties: Person entity. A named, accountable individual.
|
|
12050
12109
|
person: {
|
|
12051
|
-
email: { type: "string", description: "Primary contact email. Stable identifier for de-duplication." },
|
|
12052
12110
|
role_title: { type: "string", description: "Free-text job title. Distinct from the structured `role` entity." },
|
|
12053
12111
|
time_zone: { type: "string", description: 'IANA time zone (e.g. "Europe/Berlin"). Useful for capacity / on-call planning.' }
|
|
12054
12112
|
},
|
|
@@ -12146,8 +12204,8 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
12146
12204
|
product: {
|
|
12147
12205
|
stage: { type: "string", enum: ["concept", "validation", "build", "beta", "launch", "growth", "mature", "maintenance", "sunset"], description: "Lifecycle stage" },
|
|
12148
12206
|
health_status: { type: "string", enum: ["on_track", "at_risk", "off_track"], description: "Overall health" },
|
|
12149
|
-
url: { type: "string", description: "Where the product lives. Marketing site, app store URL, etc." },
|
|
12150
|
-
logo_url: { type: "string", description: "Logo or icon URL. Used to render product cards and lists." },
|
|
12207
|
+
url: { type: "string", description: "Where the product lives. Marketing site, app store URL, etc.", modifier: "volatile" },
|
|
12208
|
+
logo_url: { type: "string", description: "Logo or icon URL. Used to render product cards and lists.", modifier: "volatile" },
|
|
12151
12209
|
launched_at: { type: "string", description: "When the product became generally available (ISO 8601)" }
|
|
12152
12210
|
},
|
|
12153
12211
|
// ProductAreaProperties: ProductArea entity.
|
|
@@ -13023,7 +13081,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
13023
13081
|
version: { type: "string", description: 'Version or iteration (e.g. "v2", "2026-04-B")' },
|
|
13024
13082
|
tool: { type: "string", description: 'Authoring tool. @example "Figma", "Balsamiq", "pen and paper"' },
|
|
13025
13083
|
review_status: { type: "string", enum: ["draft", "in_review", "approved", "rejected"], description: "Review gate status" },
|
|
13026
|
-
linked_prototype_url: { type: "string", description: "URL of the corresponding interactive prototype" }
|
|
13084
|
+
linked_prototype_url: { type: "string", description: "URL of the corresponding interactive prototype", modifier: "volatile" }
|
|
13027
13085
|
},
|
|
13028
13086
|
// WorkflowArtifactProperties: Workflow artifact.
|
|
13029
13087
|
workflow_artifact: {
|
|
@@ -13055,7 +13113,6 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
13055
13113
|
},
|
|
13056
13114
|
// WorkspaceProperties: Workspace: a spatial thinking space for arranging entities.
|
|
13057
13115
|
workspace: {
|
|
13058
|
-
slug: { type: "string", description: "URL-friendly identifier" },
|
|
13059
13116
|
visibility: { type: "string", enum: ["private", "shared", "public"], description: "Who can see this workspace" },
|
|
13060
13117
|
purpose: { type: "string", description: "Free-text description. Pairs with the closed-enum `workspace_purpose`." },
|
|
13061
13118
|
workspace_purpose: { type: "string", enum: ["discovery", "planning", "retrospective", "design", "research", "strategy", "general"], description: "Closed-enum classifier. Drives template suggestions and surfaces in workspace browsers. `discovery` = persona/job/opportunity exploration. `planning` = roadmap and decision sessions. `retrospective` = reflection on shipped work. `design` = experience or UI exploration. `research` = organising study data and synthesis. `strategy` = high-level direction setting. `general` = catch-all." },
|
|
@@ -29381,7 +29438,7 @@ function isCanonical(text) {
|
|
|
29381
29438
|
}
|
|
29382
29439
|
|
|
29383
29440
|
// src/index.ts
|
|
29384
|
-
var UPG_VERSION = "0.
|
|
29441
|
+
var UPG_VERSION = "0.16.0";
|
|
29385
29442
|
var UPG_FORMAT_VERSION = "0.4.0";
|
|
29386
29443
|
var MARKDOWN_FORMAT_VERSION = "0.1";
|
|
29387
29444
|
var UPG_TYPES = getTypes();
|