@unified-product-graph/core 0.14.1 → 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 +207 -52
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +4 -79
- package/dist/index.d.ts +4 -79
- package/dist/index.js +207 -52
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -7381,6 +7381,187 @@ 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
|
+
],
|
|
7453
|
+
// ── v0.15.0: Pattern D — collapse *_status shadows into the lifecycle ─────────
|
|
7454
|
+
//
|
|
7455
|
+
// 14 `*_status` enum properties whose values ARE the entity's own lifecycle
|
|
7456
|
+
// phase set (UPG-689 Pattern D, the T1.1 guardrail set). They re-encoded the
|
|
7457
|
+
// lifecycle as a property, shadowing the base-node `status` field that the
|
|
7458
|
+
// lifecycle already drives. Each property is removed and any authored value
|
|
7459
|
+
// LIFTS to `UPGBaseNode.status` (same convention as 0.9.14 kr_status). Two
|
|
7460
|
+
// diverge in vocabulary from their own lifecycle and remap on lift:
|
|
7461
|
+
// - marketing_channel.channel_status: deprecated -> sunset
|
|
7462
|
+
// - security_audit.audit_status: scheduled -> planning, in_progress -> active
|
|
7463
|
+
"0.15.0": [
|
|
7464
|
+
{
|
|
7465
|
+
kind: "lift_property_to_top_level",
|
|
7466
|
+
type: "agent_definition",
|
|
7467
|
+
from_property: "agent_status",
|
|
7468
|
+
to: "status",
|
|
7469
|
+
reason: "UPG-689 Pattern D: agent_status duplicated the agent_definition lifecycle (testing/active/disabled). Removed in 0.15.0; the authored value lifts to UPGBaseNode.status."
|
|
7470
|
+
},
|
|
7471
|
+
{
|
|
7472
|
+
kind: "lift_property_to_top_level",
|
|
7473
|
+
type: "data_pipeline",
|
|
7474
|
+
from_property: "pipeline_status",
|
|
7475
|
+
to: "status",
|
|
7476
|
+
reason: "UPG-689 Pattern D: pipeline_status duplicated the data_pipeline lifecycle (active/paused/failed/deprecated). Removed in 0.15.0; lifts to status."
|
|
7477
|
+
},
|
|
7478
|
+
{
|
|
7479
|
+
kind: "lift_property_to_top_level",
|
|
7480
|
+
type: "database_schema",
|
|
7481
|
+
from_property: "migration_status",
|
|
7482
|
+
to: "status",
|
|
7483
|
+
reason: "UPG-689 Pattern D: migration_status duplicated the database_schema lifecycle (current/pending/failed). Removed in 0.15.0; lifts to status."
|
|
7484
|
+
},
|
|
7485
|
+
{
|
|
7486
|
+
kind: "lift_property_to_top_level",
|
|
7487
|
+
type: "deployment",
|
|
7488
|
+
from_property: "deploy_status",
|
|
7489
|
+
to: "status",
|
|
7490
|
+
reason: "UPG-689 Pattern D: deploy_status duplicated the deployment lifecycle (rolling/success/failure). Removed in 0.15.0; lifts to status."
|
|
7491
|
+
},
|
|
7492
|
+
{
|
|
7493
|
+
kind: "lift_property_to_top_level",
|
|
7494
|
+
type: "external_api",
|
|
7495
|
+
from_property: "api_status",
|
|
7496
|
+
to: "status",
|
|
7497
|
+
reason: "UPG-689 Pattern D: api_status duplicated the external_api lifecycle (beta/active/deprecated/unavailable). Removed in 0.15.0; lifts to status."
|
|
7498
|
+
},
|
|
7499
|
+
{
|
|
7500
|
+
kind: "lift_property_to_top_level",
|
|
7501
|
+
type: "feature_area",
|
|
7502
|
+
from_property: "area_status",
|
|
7503
|
+
to: "status",
|
|
7504
|
+
reason: "UPG-689 Pattern D: area_status duplicated the feature_area lifecycle (planned/active/deprecated). Removed in 0.15.0; lifts to status."
|
|
7505
|
+
},
|
|
7506
|
+
{
|
|
7507
|
+
kind: "lift_property_to_top_level",
|
|
7508
|
+
type: "feature_flag",
|
|
7509
|
+
from_property: "flag_status",
|
|
7510
|
+
to: "status",
|
|
7511
|
+
reason: "UPG-689 Pattern D: flag_status duplicated the feature_flag lifecycle (off/rollout/on). Removed in 0.15.0; lifts to status."
|
|
7512
|
+
},
|
|
7513
|
+
{
|
|
7514
|
+
kind: "lift_property_to_top_level",
|
|
7515
|
+
type: "objective",
|
|
7516
|
+
from_property: "objective_status",
|
|
7517
|
+
to: "status",
|
|
7518
|
+
reason: "UPG-689 Pattern D: objective_status duplicated the objective lifecycle (active/achieved/deferred). Removed in 0.15.0; lifts to status."
|
|
7519
|
+
},
|
|
7520
|
+
{
|
|
7521
|
+
kind: "lift_property_to_top_level",
|
|
7522
|
+
type: "outcome",
|
|
7523
|
+
from_property: "outcome_status",
|
|
7524
|
+
to: "status",
|
|
7525
|
+
reason: "UPG-689 Pattern D: outcome_status duplicated the outcome lifecycle (identified/measuring/achieved/abandoned). Removed in 0.15.0; lifts to status."
|
|
7526
|
+
},
|
|
7527
|
+
{
|
|
7528
|
+
kind: "lift_property_to_top_level",
|
|
7529
|
+
type: "prototype",
|
|
7530
|
+
from_property: "test_status",
|
|
7531
|
+
to: "status",
|
|
7532
|
+
reason: "UPG-689 Pattern D: test_status duplicated the prototype lifecycle (untested/testing/passed/failed). Removed in 0.15.0; lifts to status."
|
|
7533
|
+
},
|
|
7534
|
+
{
|
|
7535
|
+
kind: "lift_property_to_top_level",
|
|
7536
|
+
type: "review_gate",
|
|
7537
|
+
from_property: "gate_status",
|
|
7538
|
+
to: "status",
|
|
7539
|
+
reason: "UPG-689 Pattern D: gate_status duplicated the review_gate lifecycle (pending/approved/rejected/bypassed). Removed in 0.15.0; lifts to status."
|
|
7540
|
+
},
|
|
7541
|
+
{
|
|
7542
|
+
kind: "lift_property_to_top_level",
|
|
7543
|
+
type: "roadmap_item",
|
|
7544
|
+
from_property: "item_status",
|
|
7545
|
+
to: "status",
|
|
7546
|
+
reason: "UPG-689 Pattern D: item_status duplicated the roadmap_item lifecycle (planned/in_progress/shipped/deferred). Removed in 0.15.0; lifts to status."
|
|
7547
|
+
},
|
|
7548
|
+
{
|
|
7549
|
+
kind: "lift_property_to_top_level",
|
|
7550
|
+
type: "marketing_channel",
|
|
7551
|
+
from_property: "channel_status",
|
|
7552
|
+
to: "status",
|
|
7553
|
+
value_map: { deprecated: "sunset" },
|
|
7554
|
+
reason: "UPG-689 Pattern D: channel_status (active/paused/deprecated) re-encoded the marketing_channel lifecycle (planning/active/paused/completed/sunset). Removed in 0.15.0; lifts to status with deprecated -> sunset."
|
|
7555
|
+
},
|
|
7556
|
+
{
|
|
7557
|
+
kind: "lift_property_to_top_level",
|
|
7558
|
+
type: "security_audit",
|
|
7559
|
+
from_property: "audit_status",
|
|
7560
|
+
to: "status",
|
|
7561
|
+
value_map: { scheduled: "planning", in_progress: "active" },
|
|
7562
|
+
reason: "UPG-689 Pattern D: audit_status (scheduled/in_progress/completed) re-encoded the security_audit lifecycle (planning/active/paused/completed/sunset). Removed in 0.15.0; lifts to status with scheduled -> planning, in_progress -> active."
|
|
7563
|
+
}
|
|
7564
|
+
],
|
|
7384
7565
|
// ── v0.14.0: Pattern E — remove deprecated/ghost properties (UPG-574) ────────
|
|
7385
7566
|
//
|
|
7386
7567
|
// Properties marked deprecated (some "Removed in 0.9.1") that were never
|
|
@@ -9830,8 +10011,8 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
9830
10011
|
rule_id: { type: "string", description: "Identifier of the rule that flagged the issue" },
|
|
9831
10012
|
help_url: { type: "string", description: "URL to documentation explaining the issue and how to fix it" },
|
|
9832
10013
|
affected_element: { type: "string", description: "Description of the affected UI element" },
|
|
9833
|
-
css_selector: { type: "string", description: "CSS selector targeting the affected element" },
|
|
9834
|
-
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" },
|
|
9835
10016
|
tags: { type: "string[]", description: 'Tags from the audit tool (e.g. "wcag2aa", "cat.color")' },
|
|
9836
10017
|
remediation: { type: "string", description: "Recommended fix for the issue" },
|
|
9837
10018
|
impact_description: { type: "string", description: "Description of the user impact" }
|
|
@@ -9858,8 +10039,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
9858
10039
|
account: {
|
|
9859
10040
|
account_type: { type: "string", enum: ["prospect", "customer", "partner", "churned"], description: "Relationship status of this account" },
|
|
9860
10041
|
industry: { type: "string", description: "Industry vertical the account operates in" },
|
|
9861
|
-
employee_count: { type: "number", description: "Number of employees at the account", modifier: "snapshot" }
|
|
9862
|
-
annual_revenue: { type: "number", description: "Annual revenue of the account" }
|
|
10042
|
+
employee_count: { type: "number", description: "Number of employees at the account", modifier: "snapshot" }
|
|
9863
10043
|
},
|
|
9864
10044
|
// AcquisitionChannelProperties: AcquisitionChannel entity.
|
|
9865
10045
|
acquisition_channel: {
|
|
@@ -9906,7 +10086,6 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
9906
10086
|
max_execution_time_seconds: { type: "number", description: "Hard timeout for agent execution in seconds" },
|
|
9907
10087
|
allow_code_execution: { type: "boolean", description: "Whether the agent can execute generated code" },
|
|
9908
10088
|
multimodal: { type: "boolean", description: "Whether the agent can process images and other media" },
|
|
9909
|
-
agent_status: { type: "string", enum: ["active", "disabled", "testing"], description: "Operational status of this agent definition" },
|
|
9910
10089
|
version: { type: "string", description: 'Version label for this agent definition (e.g. "1.4.2")' }
|
|
9911
10090
|
},
|
|
9912
10091
|
// AgentHookProperties: Agent hook.
|
|
@@ -9965,7 +10144,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
9965
10144
|
version: { type: "string", description: "Version" },
|
|
9966
10145
|
record_count: { type: "number", description: "Records", modifier: "snapshot" },
|
|
9967
10146
|
format: { type: "string", description: 'Format (e.g. "jsonl", "csv", "parquet")' },
|
|
9968
|
-
storage_uri: { type: "string", description: "Storage URI" },
|
|
10147
|
+
storage_uri: { type: "string", description: "Storage URI", modifier: "volatile" },
|
|
9969
10148
|
checksum: { type: "string", description: "Integrity hash" },
|
|
9970
10149
|
provenance: { type: "string", enum: ["human_labelled", "synthetic", "scraped", "converted", "mixed"], description: "Origin" },
|
|
9971
10150
|
license: { type: "string", description: "SPDX license identifier" },
|
|
@@ -9980,7 +10159,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
9980
10159
|
started_at: { type: "string", description: "ISO timestamp started" },
|
|
9981
10160
|
completed_at: { type: "string", description: "ISO timestamp completed" },
|
|
9982
10161
|
training_steps: { type: "number", description: "Training steps or epochs completed" },
|
|
9983
|
-
artifact_uri: { type: "string", description: "Produced artifact URI" },
|
|
10162
|
+
artifact_uri: { type: "string", description: "Produced artifact URI", modifier: "volatile" },
|
|
9984
10163
|
notes: { type: "string", description: "Free-text notes" },
|
|
9985
10164
|
tags: { type: "string[]", description: "Free-form classification tags" }
|
|
9986
10165
|
},
|
|
@@ -9993,10 +10172,9 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
9993
10172
|
// AiModelProperties: AI model.
|
|
9994
10173
|
ai_model: {
|
|
9995
10174
|
model_provider: { type: "string", enum: ["anthropic", "openai", "google", "meta", "mistral", "custom"], description: "Provider or vendor" },
|
|
9996
|
-
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" },
|
|
9997
10176
|
model_version: { type: "string", description: "Specific version" },
|
|
9998
10177
|
model_purpose: { type: "string", description: "Intended use case" },
|
|
9999
|
-
cost_per_1k_tokens: { type: "number", description: "Cost per 1,000 tokens", modifier: "snapshot" },
|
|
10000
10178
|
context_window: { type: "number", description: "Maximum context window (tokens)" },
|
|
10001
10179
|
latency_p50_ms: { type: "number", description: "Median latency (p50, ms)", modifier: "snapshot" },
|
|
10002
10180
|
latency_p99_ms: { type: "number", description: "Tail latency (p99, ms)", modifier: "snapshot" },
|
|
@@ -10035,7 +10213,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10035
10213
|
},
|
|
10036
10214
|
// ApiContractProperties: API contract.
|
|
10037
10215
|
api_contract: {
|
|
10038
|
-
spec_url: { type: "string", description: "URL of the specification document" },
|
|
10216
|
+
spec_url: { type: "string", description: "URL of the specification document", modifier: "volatile" },
|
|
10039
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." },
|
|
10040
10218
|
version: { type: "string", description: "API version" },
|
|
10041
10219
|
owner: { type: "string", description: "Maintaining person or team. Promote to a `node_owned_by_team` edge if ownership must be queryable." }
|
|
@@ -10125,7 +10303,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10125
10303
|
// BrandAssetProperties: Brand asset.
|
|
10126
10304
|
brand_asset: {
|
|
10127
10305
|
asset_type: { type: "string", enum: ["logo", "icon", "illustration", "photo", "video", "template"], description: "Category of the brand asset" },
|
|
10128
|
-
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" },
|
|
10129
10307
|
usage_rights: { type: "string", description: "Usage rights or licensing restrictions" }
|
|
10130
10308
|
},
|
|
10131
10309
|
// BrandColourProperties: Brand colour. A single colour in the brand palette.
|
|
@@ -10167,7 +10345,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10167
10345
|
approved_backgrounds: { type: "string[]", description: 'Background colours the logo is approved for use on. @example ["#FFFFFF", "#1A1A1A", "#F5F5F5"]' },
|
|
10168
10346
|
forbidden_backgrounds: { type: "string[]", description: 'Background colours or contexts where the logo must NOT be placed. @example ["busy photography", "low-contrast surfaces"]' },
|
|
10169
10347
|
file_formats: { type: "string[]", description: 'File formats this logo variant is available in. @example ["svg", "png", "eps", "pdf"]' },
|
|
10170
|
-
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" }
|
|
10171
10349
|
},
|
|
10172
10350
|
// BrandTypographyProperties: Brand typography. A font family and its usage rules.
|
|
10173
10351
|
brand_typography: {
|
|
@@ -10216,8 +10394,8 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10216
10394
|
artifact_type: { type: "string", enum: ["docker_image", "npm_package", "binary", "static_assets", "other"], description: "Type" },
|
|
10217
10395
|
version: { type: "string", description: "Version" },
|
|
10218
10396
|
size: { type: "string", description: 'Human-readable size (e.g. "12.4 MB")' },
|
|
10219
|
-
registry: { type: "string", description: "Registry or storage location" },
|
|
10220
|
-
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" }
|
|
10221
10399
|
},
|
|
10222
10400
|
// BusinessModelProperties: BusinessModel: root of a BMC-style model.
|
|
10223
10401
|
business_model: {
|
|
@@ -10450,8 +10628,6 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10450
10628
|
// ContactProperties: Contact.
|
|
10451
10629
|
contact: {
|
|
10452
10630
|
contact_role: { type: "string", description: "Job title or role within the account" },
|
|
10453
|
-
email: { type: "string", description: "Email address" },
|
|
10454
|
-
phone: { type: "string", description: "Phone number" },
|
|
10455
10631
|
is_decision_maker: { type: "boolean", description: "Whether this person has purchasing authority" }
|
|
10456
10632
|
},
|
|
10457
10633
|
// ContentCalendarProperties: Content calendar.
|
|
@@ -10555,7 +10731,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10555
10731
|
// DashboardProperties: Dashboard entity.
|
|
10556
10732
|
dashboard: {
|
|
10557
10733
|
tool: { type: "string", enum: ["looker", "amplitude", "mixpanel", "posthog", "custom"], description: "Analytics tool hosting this dashboard" },
|
|
10558
|
-
url: { type: "string", description: "URL to the live dashboard" },
|
|
10734
|
+
url: { type: "string", description: "URL to the live dashboard", modifier: "volatile" },
|
|
10559
10735
|
audience: { type: "string", description: "Intended audience for this dashboard" },
|
|
10560
10736
|
element_count: { type: "number", description: "Number of widgets or panels on the dashboard", modifier: "derived" },
|
|
10561
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." },
|
|
@@ -10607,7 +10783,6 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10607
10783
|
},
|
|
10608
10784
|
// DataPipelineProperties: DataPipeline entity.
|
|
10609
10785
|
data_pipeline: {
|
|
10610
|
-
pipeline_status: { type: "string", enum: ["active", "paused", "failed", "deprecated"], description: "Operational status of the pipeline" },
|
|
10611
10786
|
schedule: { type: "string", description: "Cron or scheduling expression" },
|
|
10612
10787
|
avg_runtime: { type: "string", description: "Average wall-clock runtime per execution" },
|
|
10613
10788
|
orchestrator: { type: "string", description: 'Orchestration tool (e.g. "Airflow", "Dagster", "dbt Cloud")' },
|
|
@@ -10642,7 +10817,6 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10642
10817
|
database_schema: {
|
|
10643
10818
|
db_type: { type: "string", enum: ["postgres", "mysql", "mongodb", "redis", "other"], description: "Engine" },
|
|
10644
10819
|
schema_version: { type: "string", description: "Current schema version" },
|
|
10645
|
-
migration_status: { type: "string", enum: ["current", "pending", "failed"], description: "Pending-migration status" },
|
|
10646
10820
|
owner: { type: "string", description: "Owning person or team responsible for design and migrations. Promote to a `node_owned_by_team` edge if ownership must be queryable." },
|
|
10647
10821
|
table_count: { type: "number", description: "Tables or collections in this schema. Useful for migration scope estimation.", modifier: "derived" }
|
|
10648
10822
|
},
|
|
@@ -10697,7 +10871,6 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10697
10871
|
deployment: {
|
|
10698
10872
|
environment: { type: "string", enum: ["dev", "staging", "prod"], description: "Target environment" },
|
|
10699
10873
|
timestamp: { type: "string", description: "ISO timestamp" },
|
|
10700
|
-
deploy_status: { type: "string", enum: ["success", "failure", "rolling"], description: "Current status" },
|
|
10701
10874
|
sha: { type: "string", description: "Git SHA of the deployed commit" },
|
|
10702
10875
|
duration_seconds: { type: "number", description: "Wall-clock duration in seconds. Tracks deployment speed trends." },
|
|
10703
10876
|
deployer: { type: "string", description: "Triggering person or system. Promote to a `node_owned_by_person` edge if ownership must be queryable." }
|
|
@@ -10713,7 +10886,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10713
10886
|
},
|
|
10714
10887
|
// DesignConceptProperties: Design concept being explored.
|
|
10715
10888
|
design_concept: {
|
|
10716
|
-
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" },
|
|
10717
10890
|
rationale: { type: "string", description: "Selection or rejection rationale" },
|
|
10718
10891
|
concept_status: { type: "string", enum: ["exploring", "validated", "selected", "rejected"], description: "Current selection status" },
|
|
10719
10892
|
maturity: { type: "string", enum: ["sketch", "refined", "final"], description: "Development stage, from rough idea to presentation-ready" },
|
|
@@ -10807,7 +10980,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10807
10980
|
},
|
|
10808
10981
|
// DeveloperPortalProperties: Developer portal.
|
|
10809
10982
|
developer_portal: {
|
|
10810
|
-
portal_url: { type: "string", description: "URL of the developer portal" },
|
|
10983
|
+
portal_url: { type: "string", description: "URL of the developer portal", modifier: "volatile" },
|
|
10811
10984
|
doc_count: { type: "number", description: "Number of documentation pages", modifier: "derived" },
|
|
10812
10985
|
sandbox_available: { type: "boolean", description: "Whether a sandbox environment is available" }
|
|
10813
10986
|
},
|
|
@@ -10830,7 +11003,6 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10830
11003
|
source_url: { type: "string", description: "Canonical retrievable URL" },
|
|
10831
11004
|
platform: { type: "string", enum: ["markdown", "notion", "figma", "google_docs", "confluence", "github", "linear", "other"], description: "Hosting platform" },
|
|
10832
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" },
|
|
10833
|
-
author: { type: "string", description: "Author (free-form: name, email, or handle). Promote to a `node_owned_by_person` edge if ownership must be queryable." },
|
|
10834
11006
|
last_updated: { type: "string", description: "ISO 8601 last-meaningful-update" },
|
|
10835
11007
|
word_count: { type: "number", description: "Approximate word count. Useful for planning, indexing, summarisation.", modifier: "snapshot" },
|
|
10836
11008
|
content_summary: { type: "string", description: "1\u20133 sentence summary. Drives previews, search snippets, embedding context." },
|
|
@@ -11025,8 +11197,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
11025
11197
|
provider: { type: "string", description: "Provider" },
|
|
11026
11198
|
base_url: { type: "string", description: "Base URL" },
|
|
11027
11199
|
auth_type: { type: "string", enum: ["api_key", "oauth2", "jwt", "basic", "none"], description: "Authentication method" },
|
|
11028
|
-
rate_limits: { type: "string", description: "Rate limit description" }
|
|
11029
|
-
api_status: { type: "string", enum: ["active", "deprecated", "beta", "unavailable"], description: "Availability" }
|
|
11200
|
+
rate_limits: { type: "string", description: "Rate limit description" }
|
|
11030
11201
|
},
|
|
11031
11202
|
// FeasibilityStudyProperties: FeasibilityStudy entity.
|
|
11032
11203
|
feasibility_study: {
|
|
@@ -11060,13 +11231,11 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
11060
11231
|
feature_count: { type: "number", description: "Approximate feature count under this area. Snapshot; `feature_area_contains_feature` edges are the source of truth.", modifier: "derived" },
|
|
11061
11232
|
owner: { type: "string", description: "Area owner (handle or email). Promote to a `node_owned_by_team` edge if ownership must be queryable." },
|
|
11062
11233
|
priority: { type: "string", enum: ["urgent", "high", "medium", "low", "none"], description: "Importance to the product overall" },
|
|
11063
|
-
maturity: { type: "string", enum: ["nascent", "growing", "mature", "legacy"], description: "Maturity. `nascent` = newly-formed grouping. `mature` = established surface. `legacy` = being phased out for a successor." }
|
|
11064
|
-
area_status: { type: "string", enum: ["active", "planned", "deprecated"], description: "Status in the product structure" }
|
|
11234
|
+
maturity: { type: "string", enum: ["nascent", "growing", "mature", "legacy"], description: "Maturity. `nascent` = newly-formed grouping. `mature` = established surface. `legacy` = being phased out for a successor." }
|
|
11065
11235
|
},
|
|
11066
11236
|
// FeatureFlagProperties: Feature flag.
|
|
11067
11237
|
feature_flag: {
|
|
11068
11238
|
key: { type: "string", description: 'Required. Stable flag key used in code (e.g. "new-checkout-flow").' },
|
|
11069
|
-
flag_status: { type: "string", enum: ["on", "off", "rollout"], description: "Activation state. `on` = enabled for all. `off` = disabled for all. `rollout` = partial via targeting_rules." },
|
|
11070
11239
|
rollout_pct: { type: "number", description: "Percentage enabled (0\u2013100). Meaningful when `flag_status === 'rollout'`.", modifier: "snapshot" },
|
|
11071
11240
|
targeting_rules: { type: "string", description: "Human-readable targeting rules. Full rule evaluation happens in the flag service." },
|
|
11072
11241
|
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." },
|
|
@@ -11142,7 +11311,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
11142
11311
|
fix: {
|
|
11143
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." },
|
|
11144
11313
|
commit: { type: "string", description: "Git commit SHA" },
|
|
11145
|
-
files_changed: { type: "string[]", description: "Files changed" },
|
|
11314
|
+
files_changed: { type: "string[]", description: "Files changed", modifier: "volatile" },
|
|
11146
11315
|
deployed_at: { type: "string", description: "ISO timestamp landed in the target environment." },
|
|
11147
11316
|
fixed_date: { type: "string", description: "Application date (ISO date). Coarser-grained complement to `deployed_at`." },
|
|
11148
11317
|
verified: { type: "boolean", description: "Verified in production" },
|
|
@@ -11235,7 +11404,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
11235
11404
|
video_type: { type: "string", enum: ["how_to", "overview", "troubleshooting", "best_practice"], description: "Purpose of the video" },
|
|
11236
11405
|
duration_seconds: { type: "number", description: "Duration of the video in seconds" },
|
|
11237
11406
|
views: { type: "number", description: "Total number of views" },
|
|
11238
|
-
url: { type: "string", description: "URL where the video is hosted" }
|
|
11407
|
+
url: { type: "string", description: "URL where the video is hosted", modifier: "volatile" }
|
|
11239
11408
|
},
|
|
11240
11409
|
// HypothesisProperties: A testable belief. The canonical design artefact for validating product assumptions.
|
|
11241
11410
|
hypothesis: {
|
|
@@ -11378,7 +11547,6 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
11378
11547
|
started_at: { type: "string", description: "ISO timestamp the investigation began" },
|
|
11379
11548
|
resolved_at: { type: "string", description: "ISO timestamp the investigation was concluded. Pairs with `status === 'resolved' | 'abandoned'`." },
|
|
11380
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." },
|
|
11381
|
-
session_id: { type: "string", description: "Originating session" },
|
|
11382
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*." }
|
|
11383
11551
|
},
|
|
11384
11552
|
// InvoiceProperties: Invoice.
|
|
@@ -11583,9 +11751,6 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
11583
11751
|
entity_type: { type: "string", enum: ["corporation", "llc", "partnership", "sole_proprietor", "nonprofit"], description: "Legal structure of the entity" },
|
|
11584
11752
|
jurisdiction: { type: "string", description: "Jurisdiction where the entity is registered" },
|
|
11585
11753
|
ip_ownership: { type: "string", description: "Description of intellectual property ownership" },
|
|
11586
|
-
principal_address: { type: "string", description: "Principal business address" },
|
|
11587
|
-
tax_id: { type: "string", description: "Tax identification number" },
|
|
11588
|
-
registration_number: { type: "string", description: "Official registration or incorporation number" },
|
|
11589
11754
|
date_incorporated: { type: "string", description: "Date the entity was incorporated (ISO format)" }
|
|
11590
11755
|
},
|
|
11591
11756
|
// LibraryDependencyProperties: Library or package dependency.
|
|
@@ -11673,8 +11838,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
11673
11838
|
marketing_channel: {
|
|
11674
11839
|
channel_type: { type: "string", enum: ["social", "email", "seo", "sem", "content", "events", "other"], description: "Category of marketing channel" },
|
|
11675
11840
|
monthly_budget: { type: "number", description: "Monthly spend allocated to this channel", modifier: "snapshot" },
|
|
11676
|
-
roi: { type: "number", description: "Return on investment ratio" }
|
|
11677
|
-
channel_status: { type: "string", enum: ["active", "paused", "deprecated"], description: "Operational status of the channel" }
|
|
11841
|
+
roi: { type: "number", description: "Return on investment ratio" }
|
|
11678
11842
|
},
|
|
11679
11843
|
// MarketingStrategyProperties: Marketing strategy.
|
|
11680
11844
|
marketing_strategy: {
|
|
@@ -11832,7 +11996,6 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
11832
11996
|
// ObjectiveProperties: A high-level strategic goal. The O in OKR.
|
|
11833
11997
|
objective: {
|
|
11834
11998
|
timeframe: { type: "string", description: 'Planning timeframe (e.g. "Q1 2026", "H1 2026")' },
|
|
11835
|
-
objective_status: { type: "string", enum: ["active", "achieved", "deferred"], description: "Current status" },
|
|
11836
11999
|
progress: { type: "number", description: "Overall progress (0\u2013100)" }
|
|
11837
12000
|
},
|
|
11838
12001
|
// ObservationProperties: Discrete observation captured during research. Absorbed from the deprecated Highlight entity.
|
|
@@ -11858,8 +12021,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
11858
12021
|
opportunity: {},
|
|
11859
12022
|
// OrganizationProperties: Organization entity.
|
|
11860
12023
|
organization: {
|
|
11861
|
-
logo_url: { type: "string", description: "URL of the organisation's logo" },
|
|
11862
|
-
billing_plan: { type: "string", description: "Current billing / subscription plan" },
|
|
12024
|
+
logo_url: { type: "string", description: "URL of the organisation's logo", modifier: "volatile" },
|
|
11863
12025
|
industry: { type: "string", description: "Industry vertical the organisation operates in" }
|
|
11864
12026
|
},
|
|
11865
12027
|
// OutcomeProperties: A measurable change in user or business state the product drives.
|
|
@@ -11881,8 +12043,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
11881
12043
|
normalized: { type: "number", description: "Normalized 0-1 value for cross-tool comparison (optional)." }
|
|
11882
12044
|
},
|
|
11883
12045
|
required: ["value", "label"]
|
|
11884
|
-
}
|
|
11885
|
-
outcome_status: { type: "string", enum: ["identified", "measuring", "achieved", "abandoned"], description: "Current lifecycle phase, mirroring the `outcome` lifecycle in `grammar/lifecycles.ts` (UPG-579 Option B): `identified` -> `measuring` -> `achieved` | `abandoned`." }
|
|
12046
|
+
}
|
|
11886
12047
|
},
|
|
11887
12048
|
// ParticipantProperties: Research participant.
|
|
11888
12049
|
participant: {
|
|
@@ -11946,7 +12107,6 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
11946
12107
|
},
|
|
11947
12108
|
// PersonProperties: Person entity. A named, accountable individual.
|
|
11948
12109
|
person: {
|
|
11949
|
-
email: { type: "string", description: "Primary contact email. Stable identifier for de-duplication." },
|
|
11950
12110
|
role_title: { type: "string", description: "Free-text job title. Distinct from the structured `role` entity." },
|
|
11951
12111
|
time_zone: { type: "string", description: 'IANA time zone (e.g. "Europe/Berlin"). Useful for capacity / on-call planning.' }
|
|
11952
12112
|
},
|
|
@@ -12044,8 +12204,8 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
12044
12204
|
product: {
|
|
12045
12205
|
stage: { type: "string", enum: ["concept", "validation", "build", "beta", "launch", "growth", "mature", "maintenance", "sunset"], description: "Lifecycle stage" },
|
|
12046
12206
|
health_status: { type: "string", enum: ["on_track", "at_risk", "off_track"], description: "Overall health" },
|
|
12047
|
-
url: { type: "string", description: "Where the product lives. Marketing site, app store URL, etc." },
|
|
12048
|
-
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" },
|
|
12049
12209
|
launched_at: { type: "string", description: "When the product became generally available (ISO 8601)" }
|
|
12050
12210
|
},
|
|
12051
12211
|
// ProductAreaProperties: ProductArea entity.
|
|
@@ -12094,7 +12254,6 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
12094
12254
|
// PrototypeProperties: Prototype.
|
|
12095
12255
|
prototype: {
|
|
12096
12256
|
fidelity: { type: "string", enum: ["low", "medium", "high"], description: "Detail level" },
|
|
12097
|
-
test_status: { type: "string", enum: ["untested", "testing", "passed", "failed"], description: "User-test status" },
|
|
12098
12257
|
tool: { type: "string", description: "Authoring tool" }
|
|
12099
12258
|
},
|
|
12100
12259
|
// QaSessionProperties: QA session.
|
|
@@ -12224,8 +12383,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
12224
12383
|
// ReviewGateProperties: Review gate.
|
|
12225
12384
|
review_gate: {
|
|
12226
12385
|
gate_type: { type: "string", enum: ["human_review", "automated_check", "approval"], description: "Kind of review required at this gate" },
|
|
12227
|
-
required_approvers: { type: "string[]", description: "People or roles that must approve. Promote to `node_owned_by_person` edges (one per name) if ownership must be queryable." }
|
|
12228
|
-
gate_status: { type: "string", enum: ["pending", "approved", "rejected", "bypassed"], description: "Current approval status of the gate" }
|
|
12386
|
+
required_approvers: { type: "string[]", description: "People or roles that must approve. Promote to `node_owned_by_person` edges (one per name) if ownership must be queryable." }
|
|
12229
12387
|
},
|
|
12230
12388
|
// RiskProperties: Risk.
|
|
12231
12389
|
risk: {
|
|
@@ -12270,7 +12428,6 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
12270
12428
|
roadmap_item: {
|
|
12271
12429
|
quarter: { type: "string", description: 'Planning quarter (e.g. "Q2 2026"). Pair with `start_date`/`target_date` for precise scheduling.' },
|
|
12272
12430
|
priority: { type: "string", enum: ["urgent", "high", "medium", "low", "none"], description: "Importance against other items" },
|
|
12273
|
-
item_status: { type: "string", enum: ["planned", "in_progress", "shipped", "deferred"], description: "Status. `deferred` = explicitly pushed to a later period." },
|
|
12274
12431
|
confidence: {
|
|
12275
12432
|
type: "assessment",
|
|
12276
12433
|
scale_id: "confidence_5",
|
|
@@ -12350,7 +12507,6 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
12350
12507
|
// SecurityAuditProperties: Security audit.
|
|
12351
12508
|
security_audit: {
|
|
12352
12509
|
audit_scope: { type: "string", description: "Systems or processes covered by the audit" },
|
|
12353
|
-
audit_status: { type: "string", enum: ["scheduled", "in_progress", "completed"], description: "Current progress of the audit" },
|
|
12354
12510
|
findings_count: { type: "number", description: "Total number of findings", modifier: "derived" },
|
|
12355
12511
|
critical_findings: { type: "number", description: "Number of critical-severity findings" }
|
|
12356
12512
|
},
|
|
@@ -12925,7 +13081,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
12925
13081
|
version: { type: "string", description: 'Version or iteration (e.g. "v2", "2026-04-B")' },
|
|
12926
13082
|
tool: { type: "string", description: 'Authoring tool. @example "Figma", "Balsamiq", "pen and paper"' },
|
|
12927
13083
|
review_status: { type: "string", enum: ["draft", "in_review", "approved", "rejected"], description: "Review gate status" },
|
|
12928
|
-
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" }
|
|
12929
13085
|
},
|
|
12930
13086
|
// WorkflowArtifactProperties: Workflow artifact.
|
|
12931
13087
|
workflow_artifact: {
|
|
@@ -12957,7 +13113,6 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
12957
13113
|
},
|
|
12958
13114
|
// WorkspaceProperties: Workspace: a spatial thinking space for arranging entities.
|
|
12959
13115
|
workspace: {
|
|
12960
|
-
slug: { type: "string", description: "URL-friendly identifier" },
|
|
12961
13116
|
visibility: { type: "string", enum: ["private", "shared", "public"], description: "Who can see this workspace" },
|
|
12962
13117
|
purpose: { type: "string", description: "Free-text description. Pairs with the closed-enum `workspace_purpose`." },
|
|
12963
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." },
|
|
@@ -29283,7 +29438,7 @@ function isCanonical(text) {
|
|
|
29283
29438
|
}
|
|
29284
29439
|
|
|
29285
29440
|
// src/index.ts
|
|
29286
|
-
var UPG_VERSION = "0.
|
|
29441
|
+
var UPG_VERSION = "0.16.0";
|
|
29287
29442
|
var UPG_FORMAT_VERSION = "0.4.0";
|
|
29288
29443
|
var MARKDOWN_FORMAT_VERSION = "0.1";
|
|
29289
29444
|
var UPG_TYPES = getTypes();
|