@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.cjs
CHANGED
|
@@ -7615,6 +7615,187 @@ function getDeprecatedTypes() {
|
|
|
7615
7615
|
return deprecated;
|
|
7616
7616
|
}
|
|
7617
7617
|
var UPG_PROPERTY_MIGRATIONS = {
|
|
7618
|
+
// ── v0.16.0: Pattern G — open-standard data boundary (UPG-691) ───────────────
|
|
7619
|
+
//
|
|
7620
|
+
// The portable graph holds modeling knowledge, not PII, registry filings,
|
|
7621
|
+
// app-session ids, or live vendor figures. These flowed through every export /
|
|
7622
|
+
// snapshot / sync. They are dropped from the body and belong to the hosting
|
|
7623
|
+
// app's identity / tenancy / measurement layer instead (boundary ADR
|
|
7624
|
+
// 2026-06-16-open-standard-data-boundary). The infra-pointer URLs that stay
|
|
7625
|
+
// (repo_url, storage_uri, *.logo_url, help_video.url, ...) were marked
|
|
7626
|
+
// `modifier:'volatile'` in this release rather than dropped, so a consumer
|
|
7627
|
+
// knows they are environment-specific and may be stripped on export. The
|
|
7628
|
+
// `owner: string` -> ownership-edge migration (C1) is a separate, larger wave
|
|
7629
|
+
// (0.17.0). (FALSE-POSITIVE guard kept: specification.spec_url, design_token.value,
|
|
7630
|
+
// vulnerability.cve_id, screen.route, bug.environment -- content / standard refs.)
|
|
7631
|
+
"0.16.0": [
|
|
7632
|
+
{
|
|
7633
|
+
kind: "drop_props",
|
|
7634
|
+
type: "person",
|
|
7635
|
+
drop_props: ["email"],
|
|
7636
|
+
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."
|
|
7637
|
+
},
|
|
7638
|
+
{
|
|
7639
|
+
kind: "drop_props",
|
|
7640
|
+
type: "contact",
|
|
7641
|
+
drop_props: ["email", "phone"],
|
|
7642
|
+
reason: "UPG-691 boundary: contact.email / contact.phone are PII for the app identity layer, not the portable graph."
|
|
7643
|
+
},
|
|
7644
|
+
{
|
|
7645
|
+
kind: "drop_props",
|
|
7646
|
+
type: "document",
|
|
7647
|
+
drop_props: ["author"],
|
|
7648
|
+
reason: "UPG-691 boundary: document.author was free-text name/email (PII). The authoring actor is referenced by edge, not inlined."
|
|
7649
|
+
},
|
|
7650
|
+
{
|
|
7651
|
+
kind: "drop_props",
|
|
7652
|
+
type: "legal_entity",
|
|
7653
|
+
drop_props: ["tax_id", "registration_number", "principal_address"],
|
|
7654
|
+
reason: "UPG-691 boundary: government / registry identifiers belong to the tenancy / records system, not the open interchange body."
|
|
7655
|
+
},
|
|
7656
|
+
{
|
|
7657
|
+
kind: "drop_props",
|
|
7658
|
+
type: "investigation",
|
|
7659
|
+
drop_props: ["session_id"],
|
|
7660
|
+
reason: "UPG-691 boundary: investigation.session_id is an app-runtime / routing artifact, not modeling knowledge."
|
|
7661
|
+
},
|
|
7662
|
+
{
|
|
7663
|
+
kind: "drop_props",
|
|
7664
|
+
type: "workspace",
|
|
7665
|
+
drop_props: ["slug"],
|
|
7666
|
+
reason: "UPG-691 boundary: workspace.slug is an app-routing artifact, not modeling knowledge."
|
|
7667
|
+
},
|
|
7668
|
+
{
|
|
7669
|
+
kind: "drop_props",
|
|
7670
|
+
type: "organization",
|
|
7671
|
+
drop_props: ["billing_plan"],
|
|
7672
|
+
reason: "UPG-691 boundary: organization.billing_plan is a SaaS-account/tenancy concept. Model it via subscription / pricing_tier, not on the structural entity."
|
|
7673
|
+
},
|
|
7674
|
+
{
|
|
7675
|
+
kind: "drop_props",
|
|
7676
|
+
type: "account",
|
|
7677
|
+
drop_props: ["annual_revenue"],
|
|
7678
|
+
reason: "UPG-691 boundary: account.annual_revenue is live firmographic vendor data. Route live figures to a metric node, not the definition entity."
|
|
7679
|
+
},
|
|
7680
|
+
{
|
|
7681
|
+
kind: "drop_props",
|
|
7682
|
+
type: "ai_model",
|
|
7683
|
+
drop_props: ["cost_per_1k_tokens"],
|
|
7684
|
+
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."
|
|
7685
|
+
}
|
|
7686
|
+
],
|
|
7687
|
+
// ── v0.15.0: Pattern D — collapse *_status shadows into the lifecycle ─────────
|
|
7688
|
+
//
|
|
7689
|
+
// 14 `*_status` enum properties whose values ARE the entity's own lifecycle
|
|
7690
|
+
// phase set (UPG-689 Pattern D, the T1.1 guardrail set). They re-encoded the
|
|
7691
|
+
// lifecycle as a property, shadowing the base-node `status` field that the
|
|
7692
|
+
// lifecycle already drives. Each property is removed and any authored value
|
|
7693
|
+
// LIFTS to `UPGBaseNode.status` (same convention as 0.9.14 kr_status). Two
|
|
7694
|
+
// diverge in vocabulary from their own lifecycle and remap on lift:
|
|
7695
|
+
// - marketing_channel.channel_status: deprecated -> sunset
|
|
7696
|
+
// - security_audit.audit_status: scheduled -> planning, in_progress -> active
|
|
7697
|
+
"0.15.0": [
|
|
7698
|
+
{
|
|
7699
|
+
kind: "lift_property_to_top_level",
|
|
7700
|
+
type: "agent_definition",
|
|
7701
|
+
from_property: "agent_status",
|
|
7702
|
+
to: "status",
|
|
7703
|
+
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."
|
|
7704
|
+
},
|
|
7705
|
+
{
|
|
7706
|
+
kind: "lift_property_to_top_level",
|
|
7707
|
+
type: "data_pipeline",
|
|
7708
|
+
from_property: "pipeline_status",
|
|
7709
|
+
to: "status",
|
|
7710
|
+
reason: "UPG-689 Pattern D: pipeline_status duplicated the data_pipeline lifecycle (active/paused/failed/deprecated). Removed in 0.15.0; lifts to status."
|
|
7711
|
+
},
|
|
7712
|
+
{
|
|
7713
|
+
kind: "lift_property_to_top_level",
|
|
7714
|
+
type: "database_schema",
|
|
7715
|
+
from_property: "migration_status",
|
|
7716
|
+
to: "status",
|
|
7717
|
+
reason: "UPG-689 Pattern D: migration_status duplicated the database_schema lifecycle (current/pending/failed). Removed in 0.15.0; lifts to status."
|
|
7718
|
+
},
|
|
7719
|
+
{
|
|
7720
|
+
kind: "lift_property_to_top_level",
|
|
7721
|
+
type: "deployment",
|
|
7722
|
+
from_property: "deploy_status",
|
|
7723
|
+
to: "status",
|
|
7724
|
+
reason: "UPG-689 Pattern D: deploy_status duplicated the deployment lifecycle (rolling/success/failure). Removed in 0.15.0; lifts to status."
|
|
7725
|
+
},
|
|
7726
|
+
{
|
|
7727
|
+
kind: "lift_property_to_top_level",
|
|
7728
|
+
type: "external_api",
|
|
7729
|
+
from_property: "api_status",
|
|
7730
|
+
to: "status",
|
|
7731
|
+
reason: "UPG-689 Pattern D: api_status duplicated the external_api lifecycle (beta/active/deprecated/unavailable). Removed in 0.15.0; lifts to status."
|
|
7732
|
+
},
|
|
7733
|
+
{
|
|
7734
|
+
kind: "lift_property_to_top_level",
|
|
7735
|
+
type: "feature_area",
|
|
7736
|
+
from_property: "area_status",
|
|
7737
|
+
to: "status",
|
|
7738
|
+
reason: "UPG-689 Pattern D: area_status duplicated the feature_area lifecycle (planned/active/deprecated). Removed in 0.15.0; lifts to status."
|
|
7739
|
+
},
|
|
7740
|
+
{
|
|
7741
|
+
kind: "lift_property_to_top_level",
|
|
7742
|
+
type: "feature_flag",
|
|
7743
|
+
from_property: "flag_status",
|
|
7744
|
+
to: "status",
|
|
7745
|
+
reason: "UPG-689 Pattern D: flag_status duplicated the feature_flag lifecycle (off/rollout/on). Removed in 0.15.0; lifts to status."
|
|
7746
|
+
},
|
|
7747
|
+
{
|
|
7748
|
+
kind: "lift_property_to_top_level",
|
|
7749
|
+
type: "objective",
|
|
7750
|
+
from_property: "objective_status",
|
|
7751
|
+
to: "status",
|
|
7752
|
+
reason: "UPG-689 Pattern D: objective_status duplicated the objective lifecycle (active/achieved/deferred). Removed in 0.15.0; lifts to status."
|
|
7753
|
+
},
|
|
7754
|
+
{
|
|
7755
|
+
kind: "lift_property_to_top_level",
|
|
7756
|
+
type: "outcome",
|
|
7757
|
+
from_property: "outcome_status",
|
|
7758
|
+
to: "status",
|
|
7759
|
+
reason: "UPG-689 Pattern D: outcome_status duplicated the outcome lifecycle (identified/measuring/achieved/abandoned). Removed in 0.15.0; lifts to status."
|
|
7760
|
+
},
|
|
7761
|
+
{
|
|
7762
|
+
kind: "lift_property_to_top_level",
|
|
7763
|
+
type: "prototype",
|
|
7764
|
+
from_property: "test_status",
|
|
7765
|
+
to: "status",
|
|
7766
|
+
reason: "UPG-689 Pattern D: test_status duplicated the prototype lifecycle (untested/testing/passed/failed). Removed in 0.15.0; lifts to status."
|
|
7767
|
+
},
|
|
7768
|
+
{
|
|
7769
|
+
kind: "lift_property_to_top_level",
|
|
7770
|
+
type: "review_gate",
|
|
7771
|
+
from_property: "gate_status",
|
|
7772
|
+
to: "status",
|
|
7773
|
+
reason: "UPG-689 Pattern D: gate_status duplicated the review_gate lifecycle (pending/approved/rejected/bypassed). Removed in 0.15.0; lifts to status."
|
|
7774
|
+
},
|
|
7775
|
+
{
|
|
7776
|
+
kind: "lift_property_to_top_level",
|
|
7777
|
+
type: "roadmap_item",
|
|
7778
|
+
from_property: "item_status",
|
|
7779
|
+
to: "status",
|
|
7780
|
+
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."
|
|
7781
|
+
},
|
|
7782
|
+
{
|
|
7783
|
+
kind: "lift_property_to_top_level",
|
|
7784
|
+
type: "marketing_channel",
|
|
7785
|
+
from_property: "channel_status",
|
|
7786
|
+
to: "status",
|
|
7787
|
+
value_map: { deprecated: "sunset" },
|
|
7788
|
+
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."
|
|
7789
|
+
},
|
|
7790
|
+
{
|
|
7791
|
+
kind: "lift_property_to_top_level",
|
|
7792
|
+
type: "security_audit",
|
|
7793
|
+
from_property: "audit_status",
|
|
7794
|
+
to: "status",
|
|
7795
|
+
value_map: { scheduled: "planning", in_progress: "active" },
|
|
7796
|
+
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."
|
|
7797
|
+
}
|
|
7798
|
+
],
|
|
7618
7799
|
// ── v0.14.0: Pattern E — remove deprecated/ghost properties (UPG-574) ────────
|
|
7619
7800
|
//
|
|
7620
7801
|
// Properties marked deprecated (some "Removed in 0.9.1") that were never
|
|
@@ -10064,8 +10245,8 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10064
10245
|
rule_id: { type: "string", description: "Identifier of the rule that flagged the issue" },
|
|
10065
10246
|
help_url: { type: "string", description: "URL to documentation explaining the issue and how to fix it" },
|
|
10066
10247
|
affected_element: { type: "string", description: "Description of the affected UI element" },
|
|
10067
|
-
css_selector: { type: "string", description: "CSS selector targeting the affected element" },
|
|
10068
|
-
html_snippet: { type: "string", description: "HTML snippet containing the violation" },
|
|
10248
|
+
css_selector: { type: "string", description: "CSS selector targeting the affected element", modifier: "volatile" },
|
|
10249
|
+
html_snippet: { type: "string", description: "HTML snippet containing the violation", modifier: "volatile" },
|
|
10069
10250
|
tags: { type: "string[]", description: 'Tags from the audit tool (e.g. "wcag2aa", "cat.color")' },
|
|
10070
10251
|
remediation: { type: "string", description: "Recommended fix for the issue" },
|
|
10071
10252
|
impact_description: { type: "string", description: "Description of the user impact" }
|
|
@@ -10092,8 +10273,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10092
10273
|
account: {
|
|
10093
10274
|
account_type: { type: "string", enum: ["prospect", "customer", "partner", "churned"], description: "Relationship status of this account" },
|
|
10094
10275
|
industry: { type: "string", description: "Industry vertical the account operates in" },
|
|
10095
|
-
employee_count: { type: "number", description: "Number of employees at the account", modifier: "snapshot" }
|
|
10096
|
-
annual_revenue: { type: "number", description: "Annual revenue of the account" }
|
|
10276
|
+
employee_count: { type: "number", description: "Number of employees at the account", modifier: "snapshot" }
|
|
10097
10277
|
},
|
|
10098
10278
|
// AcquisitionChannelProperties: AcquisitionChannel entity.
|
|
10099
10279
|
acquisition_channel: {
|
|
@@ -10140,7 +10320,6 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10140
10320
|
max_execution_time_seconds: { type: "number", description: "Hard timeout for agent execution in seconds" },
|
|
10141
10321
|
allow_code_execution: { type: "boolean", description: "Whether the agent can execute generated code" },
|
|
10142
10322
|
multimodal: { type: "boolean", description: "Whether the agent can process images and other media" },
|
|
10143
|
-
agent_status: { type: "string", enum: ["active", "disabled", "testing"], description: "Operational status of this agent definition" },
|
|
10144
10323
|
version: { type: "string", description: 'Version label for this agent definition (e.g. "1.4.2")' }
|
|
10145
10324
|
},
|
|
10146
10325
|
// AgentHookProperties: Agent hook.
|
|
@@ -10199,7 +10378,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10199
10378
|
version: { type: "string", description: "Version" },
|
|
10200
10379
|
record_count: { type: "number", description: "Records", modifier: "snapshot" },
|
|
10201
10380
|
format: { type: "string", description: 'Format (e.g. "jsonl", "csv", "parquet")' },
|
|
10202
|
-
storage_uri: { type: "string", description: "Storage URI" },
|
|
10381
|
+
storage_uri: { type: "string", description: "Storage URI", modifier: "volatile" },
|
|
10203
10382
|
checksum: { type: "string", description: "Integrity hash" },
|
|
10204
10383
|
provenance: { type: "string", enum: ["human_labelled", "synthetic", "scraped", "converted", "mixed"], description: "Origin" },
|
|
10205
10384
|
license: { type: "string", description: "SPDX license identifier" },
|
|
@@ -10214,7 +10393,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10214
10393
|
started_at: { type: "string", description: "ISO timestamp started" },
|
|
10215
10394
|
completed_at: { type: "string", description: "ISO timestamp completed" },
|
|
10216
10395
|
training_steps: { type: "number", description: "Training steps or epochs completed" },
|
|
10217
|
-
artifact_uri: { type: "string", description: "Produced artifact URI" },
|
|
10396
|
+
artifact_uri: { type: "string", description: "Produced artifact URI", modifier: "volatile" },
|
|
10218
10397
|
notes: { type: "string", description: "Free-text notes" },
|
|
10219
10398
|
tags: { type: "string[]", description: "Free-form classification tags" }
|
|
10220
10399
|
},
|
|
@@ -10227,10 +10406,9 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10227
10406
|
// AiModelProperties: AI model.
|
|
10228
10407
|
ai_model: {
|
|
10229
10408
|
model_provider: { type: "string", enum: ["anthropic", "openai", "google", "meta", "mistral", "custom"], description: "Provider or vendor" },
|
|
10230
|
-
model_id: { type: "string", description: 'Unique model identifier (e.g. "claude-sonnet-4-20250514")' },
|
|
10409
|
+
model_id: { type: "string", description: 'Unique model identifier (e.g. "claude-sonnet-4-20250514")', modifier: "volatile" },
|
|
10231
10410
|
model_version: { type: "string", description: "Specific version" },
|
|
10232
10411
|
model_purpose: { type: "string", description: "Intended use case" },
|
|
10233
|
-
cost_per_1k_tokens: { type: "number", description: "Cost per 1,000 tokens", modifier: "snapshot" },
|
|
10234
10412
|
context_window: { type: "number", description: "Maximum context window (tokens)" },
|
|
10235
10413
|
latency_p50_ms: { type: "number", description: "Median latency (p50, ms)", modifier: "snapshot" },
|
|
10236
10414
|
latency_p99_ms: { type: "number", description: "Tail latency (p99, ms)", modifier: "snapshot" },
|
|
@@ -10269,7 +10447,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10269
10447
|
},
|
|
10270
10448
|
// ApiContractProperties: API contract.
|
|
10271
10449
|
api_contract: {
|
|
10272
|
-
spec_url: { type: "string", description: "URL of the specification document" },
|
|
10450
|
+
spec_url: { type: "string", description: "URL of the specification document", modifier: "volatile" },
|
|
10273
10451
|
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." },
|
|
10274
10452
|
version: { type: "string", description: "API version" },
|
|
10275
10453
|
owner: { type: "string", description: "Maintaining person or team. Promote to a `node_owned_by_team` edge if ownership must be queryable." }
|
|
@@ -10359,7 +10537,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10359
10537
|
// BrandAssetProperties: Brand asset.
|
|
10360
10538
|
brand_asset: {
|
|
10361
10539
|
asset_type: { type: "string", enum: ["logo", "icon", "illustration", "photo", "video", "template"], description: "Category of the brand asset" },
|
|
10362
|
-
url: { type: "string", description: "URL or path to the asset file" },
|
|
10540
|
+
url: { type: "string", description: "URL or path to the asset file", modifier: "volatile" },
|
|
10363
10541
|
usage_rights: { type: "string", description: "Usage rights or licensing restrictions" }
|
|
10364
10542
|
},
|
|
10365
10543
|
// BrandColourProperties: Brand colour. A single colour in the brand palette.
|
|
@@ -10401,7 +10579,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10401
10579
|
approved_backgrounds: { type: "string[]", description: 'Background colours the logo is approved for use on. @example ["#FFFFFF", "#1A1A1A", "#F5F5F5"]' },
|
|
10402
10580
|
forbidden_backgrounds: { type: "string[]", description: 'Background colours or contexts where the logo must NOT be placed. @example ["busy photography", "low-contrast surfaces"]' },
|
|
10403
10581
|
file_formats: { type: "string[]", description: 'File formats this logo variant is available in. @example ["svg", "png", "eps", "pdf"]' },
|
|
10404
|
-
asset_url: { type: "string", description: "URL to the logo asset file or asset library entry." }
|
|
10582
|
+
asset_url: { type: "string", description: "URL to the logo asset file or asset library entry.", modifier: "volatile" }
|
|
10405
10583
|
},
|
|
10406
10584
|
// BrandTypographyProperties: Brand typography. A font family and its usage rules.
|
|
10407
10585
|
brand_typography: {
|
|
@@ -10450,8 +10628,8 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10450
10628
|
artifact_type: { type: "string", enum: ["docker_image", "npm_package", "binary", "static_assets", "other"], description: "Type" },
|
|
10451
10629
|
version: { type: "string", description: "Version" },
|
|
10452
10630
|
size: { type: "string", description: 'Human-readable size (e.g. "12.4 MB")' },
|
|
10453
|
-
registry: { type: "string", description: "Registry or storage location" },
|
|
10454
|
-
build_url: { type: "string", description: "URL of the producing CI/CD build run (GitHub Actions, CircleCI, etc.)." }
|
|
10631
|
+
registry: { type: "string", description: "Registry or storage location", modifier: "volatile" },
|
|
10632
|
+
build_url: { type: "string", description: "URL of the producing CI/CD build run (GitHub Actions, CircleCI, etc.).", modifier: "volatile" }
|
|
10455
10633
|
},
|
|
10456
10634
|
// BusinessModelProperties: BusinessModel: root of a BMC-style model.
|
|
10457
10635
|
business_model: {
|
|
@@ -10684,8 +10862,6 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10684
10862
|
// ContactProperties: Contact.
|
|
10685
10863
|
contact: {
|
|
10686
10864
|
contact_role: { type: "string", description: "Job title or role within the account" },
|
|
10687
|
-
email: { type: "string", description: "Email address" },
|
|
10688
|
-
phone: { type: "string", description: "Phone number" },
|
|
10689
10865
|
is_decision_maker: { type: "boolean", description: "Whether this person has purchasing authority" }
|
|
10690
10866
|
},
|
|
10691
10867
|
// ContentCalendarProperties: Content calendar.
|
|
@@ -10789,7 +10965,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10789
10965
|
// DashboardProperties: Dashboard entity.
|
|
10790
10966
|
dashboard: {
|
|
10791
10967
|
tool: { type: "string", enum: ["looker", "amplitude", "mixpanel", "posthog", "custom"], description: "Analytics tool hosting this dashboard" },
|
|
10792
|
-
url: { type: "string", description: "URL to the live dashboard" },
|
|
10968
|
+
url: { type: "string", description: "URL to the live dashboard", modifier: "volatile" },
|
|
10793
10969
|
audience: { type: "string", description: "Intended audience for this dashboard" },
|
|
10794
10970
|
element_count: { type: "number", description: "Number of widgets or panels on the dashboard", modifier: "derived" },
|
|
10795
10971
|
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." },
|
|
@@ -10841,7 +11017,6 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10841
11017
|
},
|
|
10842
11018
|
// DataPipelineProperties: DataPipeline entity.
|
|
10843
11019
|
data_pipeline: {
|
|
10844
|
-
pipeline_status: { type: "string", enum: ["active", "paused", "failed", "deprecated"], description: "Operational status of the pipeline" },
|
|
10845
11020
|
schedule: { type: "string", description: "Cron or scheduling expression" },
|
|
10846
11021
|
avg_runtime: { type: "string", description: "Average wall-clock runtime per execution" },
|
|
10847
11022
|
orchestrator: { type: "string", description: 'Orchestration tool (e.g. "Airflow", "Dagster", "dbt Cloud")' },
|
|
@@ -10876,7 +11051,6 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10876
11051
|
database_schema: {
|
|
10877
11052
|
db_type: { type: "string", enum: ["postgres", "mysql", "mongodb", "redis", "other"], description: "Engine" },
|
|
10878
11053
|
schema_version: { type: "string", description: "Current schema version" },
|
|
10879
|
-
migration_status: { type: "string", enum: ["current", "pending", "failed"], description: "Pending-migration status" },
|
|
10880
11054
|
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." },
|
|
10881
11055
|
table_count: { type: "number", description: "Tables or collections in this schema. Useful for migration scope estimation.", modifier: "derived" }
|
|
10882
11056
|
},
|
|
@@ -10931,7 +11105,6 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10931
11105
|
deployment: {
|
|
10932
11106
|
environment: { type: "string", enum: ["dev", "staging", "prod"], description: "Target environment" },
|
|
10933
11107
|
timestamp: { type: "string", description: "ISO timestamp" },
|
|
10934
|
-
deploy_status: { type: "string", enum: ["success", "failure", "rolling"], description: "Current status" },
|
|
10935
11108
|
sha: { type: "string", description: "Git SHA of the deployed commit" },
|
|
10936
11109
|
duration_seconds: { type: "number", description: "Wall-clock duration in seconds. Tracks deployment speed trends." },
|
|
10937
11110
|
deployer: { type: "string", description: "Triggering person or system. Promote to a `node_owned_by_person` edge if ownership must be queryable." }
|
|
@@ -10947,7 +11120,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10947
11120
|
},
|
|
10948
11121
|
// DesignConceptProperties: Design concept being explored.
|
|
10949
11122
|
design_concept: {
|
|
10950
|
-
sketch_url: { type: "string", description: "URL of the sketch or visual" },
|
|
11123
|
+
sketch_url: { type: "string", description: "URL of the sketch or visual", modifier: "volatile" },
|
|
10951
11124
|
rationale: { type: "string", description: "Selection or rejection rationale" },
|
|
10952
11125
|
concept_status: { type: "string", enum: ["exploring", "validated", "selected", "rejected"], description: "Current selection status" },
|
|
10953
11126
|
maturity: { type: "string", enum: ["sketch", "refined", "final"], description: "Development stage, from rough idea to presentation-ready" },
|
|
@@ -11041,7 +11214,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
11041
11214
|
},
|
|
11042
11215
|
// DeveloperPortalProperties: Developer portal.
|
|
11043
11216
|
developer_portal: {
|
|
11044
|
-
portal_url: { type: "string", description: "URL of the developer portal" },
|
|
11217
|
+
portal_url: { type: "string", description: "URL of the developer portal", modifier: "volatile" },
|
|
11045
11218
|
doc_count: { type: "number", description: "Number of documentation pages", modifier: "derived" },
|
|
11046
11219
|
sandbox_available: { type: "boolean", description: "Whether a sandbox environment is available" }
|
|
11047
11220
|
},
|
|
@@ -11064,7 +11237,6 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
11064
11237
|
source_url: { type: "string", description: "Canonical retrievable URL" },
|
|
11065
11238
|
platform: { type: "string", enum: ["markdown", "notion", "figma", "google_docs", "confluence", "github", "linear", "other"], description: "Hosting platform" },
|
|
11066
11239
|
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" },
|
|
11067
|
-
author: { type: "string", description: "Author (free-form: name, email, or handle). Promote to a `node_owned_by_person` edge if ownership must be queryable." },
|
|
11068
11240
|
last_updated: { type: "string", description: "ISO 8601 last-meaningful-update" },
|
|
11069
11241
|
word_count: { type: "number", description: "Approximate word count. Useful for planning, indexing, summarisation.", modifier: "snapshot" },
|
|
11070
11242
|
content_summary: { type: "string", description: "1\u20133 sentence summary. Drives previews, search snippets, embedding context." },
|
|
@@ -11259,8 +11431,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
11259
11431
|
provider: { type: "string", description: "Provider" },
|
|
11260
11432
|
base_url: { type: "string", description: "Base URL" },
|
|
11261
11433
|
auth_type: { type: "string", enum: ["api_key", "oauth2", "jwt", "basic", "none"], description: "Authentication method" },
|
|
11262
|
-
rate_limits: { type: "string", description: "Rate limit description" }
|
|
11263
|
-
api_status: { type: "string", enum: ["active", "deprecated", "beta", "unavailable"], description: "Availability" }
|
|
11434
|
+
rate_limits: { type: "string", description: "Rate limit description" }
|
|
11264
11435
|
},
|
|
11265
11436
|
// FeasibilityStudyProperties: FeasibilityStudy entity.
|
|
11266
11437
|
feasibility_study: {
|
|
@@ -11294,13 +11465,11 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
11294
11465
|
feature_count: { type: "number", description: "Approximate feature count under this area. Snapshot; `feature_area_contains_feature` edges are the source of truth.", modifier: "derived" },
|
|
11295
11466
|
owner: { type: "string", description: "Area owner (handle or email). Promote to a `node_owned_by_team` edge if ownership must be queryable." },
|
|
11296
11467
|
priority: { type: "string", enum: ["urgent", "high", "medium", "low", "none"], description: "Importance to the product overall" },
|
|
11297
|
-
maturity: { type: "string", enum: ["nascent", "growing", "mature", "legacy"], description: "Maturity. `nascent` = newly-formed grouping. `mature` = established surface. `legacy` = being phased out for a successor." }
|
|
11298
|
-
area_status: { type: "string", enum: ["active", "planned", "deprecated"], description: "Status in the product structure" }
|
|
11468
|
+
maturity: { type: "string", enum: ["nascent", "growing", "mature", "legacy"], description: "Maturity. `nascent` = newly-formed grouping. `mature` = established surface. `legacy` = being phased out for a successor." }
|
|
11299
11469
|
},
|
|
11300
11470
|
// FeatureFlagProperties: Feature flag.
|
|
11301
11471
|
feature_flag: {
|
|
11302
11472
|
key: { type: "string", description: 'Required. Stable flag key used in code (e.g. "new-checkout-flow").' },
|
|
11303
|
-
flag_status: { type: "string", enum: ["on", "off", "rollout"], description: "Activation state. `on` = enabled for all. `off` = disabled for all. `rollout` = partial via targeting_rules." },
|
|
11304
11473
|
rollout_pct: { type: "number", description: "Percentage enabled (0\u2013100). Meaningful when `flag_status === 'rollout'`.", modifier: "snapshot" },
|
|
11305
11474
|
targeting_rules: { type: "string", description: "Human-readable targeting rules. Full rule evaluation happens in the flag service." },
|
|
11306
11475
|
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." },
|
|
@@ -11376,7 +11545,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
11376
11545
|
fix: {
|
|
11377
11546
|
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." },
|
|
11378
11547
|
commit: { type: "string", description: "Git commit SHA" },
|
|
11379
|
-
files_changed: { type: "string[]", description: "Files changed" },
|
|
11548
|
+
files_changed: { type: "string[]", description: "Files changed", modifier: "volatile" },
|
|
11380
11549
|
deployed_at: { type: "string", description: "ISO timestamp landed in the target environment." },
|
|
11381
11550
|
fixed_date: { type: "string", description: "Application date (ISO date). Coarser-grained complement to `deployed_at`." },
|
|
11382
11551
|
verified: { type: "boolean", description: "Verified in production" },
|
|
@@ -11469,7 +11638,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
11469
11638
|
video_type: { type: "string", enum: ["how_to", "overview", "troubleshooting", "best_practice"], description: "Purpose of the video" },
|
|
11470
11639
|
duration_seconds: { type: "number", description: "Duration of the video in seconds" },
|
|
11471
11640
|
views: { type: "number", description: "Total number of views" },
|
|
11472
|
-
url: { type: "string", description: "URL where the video is hosted" }
|
|
11641
|
+
url: { type: "string", description: "URL where the video is hosted", modifier: "volatile" }
|
|
11473
11642
|
},
|
|
11474
11643
|
// HypothesisProperties: A testable belief. The canonical design artefact for validating product assumptions.
|
|
11475
11644
|
hypothesis: {
|
|
@@ -11612,7 +11781,6 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
11612
11781
|
started_at: { type: "string", description: "ISO timestamp the investigation began" },
|
|
11613
11782
|
resolved_at: { type: "string", description: "ISO timestamp the investigation was concluded. Pairs with `status === 'resolved' | 'abandoned'`." },
|
|
11614
11783
|
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." },
|
|
11615
|
-
session_id: { type: "string", description: "Originating session" },
|
|
11616
11784
|
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*." }
|
|
11617
11785
|
},
|
|
11618
11786
|
// InvoiceProperties: Invoice.
|
|
@@ -11817,9 +11985,6 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
11817
11985
|
entity_type: { type: "string", enum: ["corporation", "llc", "partnership", "sole_proprietor", "nonprofit"], description: "Legal structure of the entity" },
|
|
11818
11986
|
jurisdiction: { type: "string", description: "Jurisdiction where the entity is registered" },
|
|
11819
11987
|
ip_ownership: { type: "string", description: "Description of intellectual property ownership" },
|
|
11820
|
-
principal_address: { type: "string", description: "Principal business address" },
|
|
11821
|
-
tax_id: { type: "string", description: "Tax identification number" },
|
|
11822
|
-
registration_number: { type: "string", description: "Official registration or incorporation number" },
|
|
11823
11988
|
date_incorporated: { type: "string", description: "Date the entity was incorporated (ISO format)" }
|
|
11824
11989
|
},
|
|
11825
11990
|
// LibraryDependencyProperties: Library or package dependency.
|
|
@@ -11907,8 +12072,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
11907
12072
|
marketing_channel: {
|
|
11908
12073
|
channel_type: { type: "string", enum: ["social", "email", "seo", "sem", "content", "events", "other"], description: "Category of marketing channel" },
|
|
11909
12074
|
monthly_budget: { type: "number", description: "Monthly spend allocated to this channel", modifier: "snapshot" },
|
|
11910
|
-
roi: { type: "number", description: "Return on investment ratio" }
|
|
11911
|
-
channel_status: { type: "string", enum: ["active", "paused", "deprecated"], description: "Operational status of the channel" }
|
|
12075
|
+
roi: { type: "number", description: "Return on investment ratio" }
|
|
11912
12076
|
},
|
|
11913
12077
|
// MarketingStrategyProperties: Marketing strategy.
|
|
11914
12078
|
marketing_strategy: {
|
|
@@ -12066,7 +12230,6 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
12066
12230
|
// ObjectiveProperties: A high-level strategic goal. The O in OKR.
|
|
12067
12231
|
objective: {
|
|
12068
12232
|
timeframe: { type: "string", description: 'Planning timeframe (e.g. "Q1 2026", "H1 2026")' },
|
|
12069
|
-
objective_status: { type: "string", enum: ["active", "achieved", "deferred"], description: "Current status" },
|
|
12070
12233
|
progress: { type: "number", description: "Overall progress (0\u2013100)" }
|
|
12071
12234
|
},
|
|
12072
12235
|
// ObservationProperties: Discrete observation captured during research. Absorbed from the deprecated Highlight entity.
|
|
@@ -12092,8 +12255,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
12092
12255
|
opportunity: {},
|
|
12093
12256
|
// OrganizationProperties: Organization entity.
|
|
12094
12257
|
organization: {
|
|
12095
|
-
logo_url: { type: "string", description: "URL of the organisation's logo" },
|
|
12096
|
-
billing_plan: { type: "string", description: "Current billing / subscription plan" },
|
|
12258
|
+
logo_url: { type: "string", description: "URL of the organisation's logo", modifier: "volatile" },
|
|
12097
12259
|
industry: { type: "string", description: "Industry vertical the organisation operates in" }
|
|
12098
12260
|
},
|
|
12099
12261
|
// OutcomeProperties: A measurable change in user or business state the product drives.
|
|
@@ -12115,8 +12277,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
12115
12277
|
normalized: { type: "number", description: "Normalized 0-1 value for cross-tool comparison (optional)." }
|
|
12116
12278
|
},
|
|
12117
12279
|
required: ["value", "label"]
|
|
12118
|
-
}
|
|
12119
|
-
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`." }
|
|
12280
|
+
}
|
|
12120
12281
|
},
|
|
12121
12282
|
// ParticipantProperties: Research participant.
|
|
12122
12283
|
participant: {
|
|
@@ -12180,7 +12341,6 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
12180
12341
|
},
|
|
12181
12342
|
// PersonProperties: Person entity. A named, accountable individual.
|
|
12182
12343
|
person: {
|
|
12183
|
-
email: { type: "string", description: "Primary contact email. Stable identifier for de-duplication." },
|
|
12184
12344
|
role_title: { type: "string", description: "Free-text job title. Distinct from the structured `role` entity." },
|
|
12185
12345
|
time_zone: { type: "string", description: 'IANA time zone (e.g. "Europe/Berlin"). Useful for capacity / on-call planning.' }
|
|
12186
12346
|
},
|
|
@@ -12278,8 +12438,8 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
12278
12438
|
product: {
|
|
12279
12439
|
stage: { type: "string", enum: ["concept", "validation", "build", "beta", "launch", "growth", "mature", "maintenance", "sunset"], description: "Lifecycle stage" },
|
|
12280
12440
|
health_status: { type: "string", enum: ["on_track", "at_risk", "off_track"], description: "Overall health" },
|
|
12281
|
-
url: { type: "string", description: "Where the product lives. Marketing site, app store URL, etc." },
|
|
12282
|
-
logo_url: { type: "string", description: "Logo or icon URL. Used to render product cards and lists." },
|
|
12441
|
+
url: { type: "string", description: "Where the product lives. Marketing site, app store URL, etc.", modifier: "volatile" },
|
|
12442
|
+
logo_url: { type: "string", description: "Logo or icon URL. Used to render product cards and lists.", modifier: "volatile" },
|
|
12283
12443
|
launched_at: { type: "string", description: "When the product became generally available (ISO 8601)" }
|
|
12284
12444
|
},
|
|
12285
12445
|
// ProductAreaProperties: ProductArea entity.
|
|
@@ -12328,7 +12488,6 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
12328
12488
|
// PrototypeProperties: Prototype.
|
|
12329
12489
|
prototype: {
|
|
12330
12490
|
fidelity: { type: "string", enum: ["low", "medium", "high"], description: "Detail level" },
|
|
12331
|
-
test_status: { type: "string", enum: ["untested", "testing", "passed", "failed"], description: "User-test status" },
|
|
12332
12491
|
tool: { type: "string", description: "Authoring tool" }
|
|
12333
12492
|
},
|
|
12334
12493
|
// QaSessionProperties: QA session.
|
|
@@ -12458,8 +12617,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
12458
12617
|
// ReviewGateProperties: Review gate.
|
|
12459
12618
|
review_gate: {
|
|
12460
12619
|
gate_type: { type: "string", enum: ["human_review", "automated_check", "approval"], description: "Kind of review required at this gate" },
|
|
12461
|
-
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." }
|
|
12462
|
-
gate_status: { type: "string", enum: ["pending", "approved", "rejected", "bypassed"], description: "Current approval status of the gate" }
|
|
12620
|
+
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." }
|
|
12463
12621
|
},
|
|
12464
12622
|
// RiskProperties: Risk.
|
|
12465
12623
|
risk: {
|
|
@@ -12504,7 +12662,6 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
12504
12662
|
roadmap_item: {
|
|
12505
12663
|
quarter: { type: "string", description: 'Planning quarter (e.g. "Q2 2026"). Pair with `start_date`/`target_date` for precise scheduling.' },
|
|
12506
12664
|
priority: { type: "string", enum: ["urgent", "high", "medium", "low", "none"], description: "Importance against other items" },
|
|
12507
|
-
item_status: { type: "string", enum: ["planned", "in_progress", "shipped", "deferred"], description: "Status. `deferred` = explicitly pushed to a later period." },
|
|
12508
12665
|
confidence: {
|
|
12509
12666
|
type: "assessment",
|
|
12510
12667
|
scale_id: "confidence_5",
|
|
@@ -12584,7 +12741,6 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
12584
12741
|
// SecurityAuditProperties: Security audit.
|
|
12585
12742
|
security_audit: {
|
|
12586
12743
|
audit_scope: { type: "string", description: "Systems or processes covered by the audit" },
|
|
12587
|
-
audit_status: { type: "string", enum: ["scheduled", "in_progress", "completed"], description: "Current progress of the audit" },
|
|
12588
12744
|
findings_count: { type: "number", description: "Total number of findings", modifier: "derived" },
|
|
12589
12745
|
critical_findings: { type: "number", description: "Number of critical-severity findings" }
|
|
12590
12746
|
},
|
|
@@ -13159,7 +13315,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
13159
13315
|
version: { type: "string", description: 'Version or iteration (e.g. "v2", "2026-04-B")' },
|
|
13160
13316
|
tool: { type: "string", description: 'Authoring tool. @example "Figma", "Balsamiq", "pen and paper"' },
|
|
13161
13317
|
review_status: { type: "string", enum: ["draft", "in_review", "approved", "rejected"], description: "Review gate status" },
|
|
13162
|
-
linked_prototype_url: { type: "string", description: "URL of the corresponding interactive prototype" }
|
|
13318
|
+
linked_prototype_url: { type: "string", description: "URL of the corresponding interactive prototype", modifier: "volatile" }
|
|
13163
13319
|
},
|
|
13164
13320
|
// WorkflowArtifactProperties: Workflow artifact.
|
|
13165
13321
|
workflow_artifact: {
|
|
@@ -13191,7 +13347,6 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
13191
13347
|
},
|
|
13192
13348
|
// WorkspaceProperties: Workspace: a spatial thinking space for arranging entities.
|
|
13193
13349
|
workspace: {
|
|
13194
|
-
slug: { type: "string", description: "URL-friendly identifier" },
|
|
13195
13350
|
visibility: { type: "string", enum: ["private", "shared", "public"], description: "Who can see this workspace" },
|
|
13196
13351
|
purpose: { type: "string", description: "Free-text description. Pairs with the closed-enum `workspace_purpose`." },
|
|
13197
13352
|
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." },
|
|
@@ -29517,7 +29672,7 @@ function isCanonical(text) {
|
|
|
29517
29672
|
}
|
|
29518
29673
|
|
|
29519
29674
|
// src/index.ts
|
|
29520
|
-
var UPG_VERSION = "0.
|
|
29675
|
+
var UPG_VERSION = "0.16.0";
|
|
29521
29676
|
var UPG_FORMAT_VERSION = "0.4.0";
|
|
29522
29677
|
var MARKDOWN_FORMAT_VERSION = "0.1";
|
|
29523
29678
|
var UPG_TYPES = getTypes();
|