@unified-product-graph/core 0.17.4 → 0.17.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/index.cjs +26 -6
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +35 -1
- package/dist/index.d.ts +35 -1
- package/dist/index.js +26 -6
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.d.cts
CHANGED
|
@@ -659,6 +659,7 @@ declare const UPG_EDGE_CATALOG: {
|
|
|
659
659
|
classification: "cross-domain";
|
|
660
660
|
source_type: string;
|
|
661
661
|
target_type: string;
|
|
662
|
+
deliberate_only: true;
|
|
662
663
|
};
|
|
663
664
|
product_contains_competitive_analysis: {
|
|
664
665
|
forward_verb: string;
|
|
@@ -4782,6 +4783,20 @@ declare const UPG_EDGE_CATALOG: {
|
|
|
4782
4783
|
source_type: string;
|
|
4783
4784
|
target_type: string;
|
|
4784
4785
|
};
|
|
4786
|
+
document_contains_quote: {
|
|
4787
|
+
forward_verb: string;
|
|
4788
|
+
reverse_verb: string;
|
|
4789
|
+
classification: "semantic";
|
|
4790
|
+
source_type: string;
|
|
4791
|
+
target_type: string;
|
|
4792
|
+
};
|
|
4793
|
+
document_contains_observation: {
|
|
4794
|
+
forward_verb: string;
|
|
4795
|
+
reverse_verb: string;
|
|
4796
|
+
classification: "semantic";
|
|
4797
|
+
source_type: string;
|
|
4798
|
+
target_type: string;
|
|
4799
|
+
};
|
|
4785
4800
|
product_educates_via_education_program: {
|
|
4786
4801
|
forward_verb: string;
|
|
4787
4802
|
reverse_verb: string;
|
|
@@ -11710,6 +11725,12 @@ interface ParticipantProperties {
|
|
|
11710
11725
|
recruit_source?: string;
|
|
11711
11726
|
/** Current consent status for data usage */
|
|
11712
11727
|
consent_status?: 'pending' | 'given' | 'withdrawn';
|
|
11728
|
+
/**
|
|
11729
|
+
* Stable deep-link to the exact moment this participant appears in the
|
|
11730
|
+
* originating recording or transcript. A per-moment locator, not a
|
|
11731
|
+
* study-level link. Rot-prone external pointer; treat as `volatile`.
|
|
11732
|
+
*/
|
|
11733
|
+
source_url?: string;
|
|
11713
11734
|
}
|
|
11714
11735
|
/** Discrete observation captured during research. Absorbed from the deprecated Highlight entity.
|
|
11715
11736
|
*
|
|
@@ -11743,6 +11764,13 @@ interface ObservationProperties {
|
|
|
11743
11764
|
* four values. More precise than `highlight_tag` for aggregation.
|
|
11744
11765
|
*/
|
|
11745
11766
|
sentiment?: SignalSentiment;
|
|
11767
|
+
/**
|
|
11768
|
+
* Stable deep-link to the exact moment this observation was captured in the
|
|
11769
|
+
* originating recording or transcript. A per-moment locator, not a
|
|
11770
|
+
* study-level link. Distinct from `session_ref`, which holds an opaque
|
|
11771
|
+
* session ID for AI inference. Rot-prone external pointer; treat as `volatile`.
|
|
11772
|
+
*/
|
|
11773
|
+
source_url?: string;
|
|
11746
11774
|
}
|
|
11747
11775
|
/** Verbatim quote from a participant.
|
|
11748
11776
|
* Link to the participant via an edge, not a speaker property.
|
|
@@ -11758,6 +11786,12 @@ interface QuoteProperties {
|
|
|
11758
11786
|
text: string;
|
|
11759
11787
|
/** When said (ISO timestamp or session offset) */
|
|
11760
11788
|
timestamp?: string;
|
|
11789
|
+
/**
|
|
11790
|
+
* Stable deep-link to the exact moment this quote was spoken in the
|
|
11791
|
+
* originating recording or transcript. A per-moment locator, not a
|
|
11792
|
+
* study-level link. Rot-prone external pointer; treat as `volatile`.
|
|
11793
|
+
*/
|
|
11794
|
+
source_url?: string;
|
|
11761
11795
|
}
|
|
11762
11796
|
/** Unified insight, synthesised from evidence and observations.
|
|
11763
11797
|
*
|
|
@@ -22204,7 +22238,7 @@ declare function isCanonical(text: string): boolean;
|
|
|
22204
22238
|
* it stamps the `upg_version` field of every `.upg` file written by the SDK.
|
|
22205
22239
|
* The `check:version-lockstep` gate enforces this at release time.
|
|
22206
22240
|
*/
|
|
22207
|
-
declare const UPG_VERSION: "0.17.
|
|
22241
|
+
declare const UPG_VERSION: "0.17.6";
|
|
22208
22242
|
/**
|
|
22209
22243
|
* The `.upg` JSON document format version. Written to the `upg_version` field.
|
|
22210
22244
|
* Evolves independently from `UPG_VERSION` (the catalogue version).
|
package/dist/index.d.ts
CHANGED
|
@@ -659,6 +659,7 @@ declare const UPG_EDGE_CATALOG: {
|
|
|
659
659
|
classification: "cross-domain";
|
|
660
660
|
source_type: string;
|
|
661
661
|
target_type: string;
|
|
662
|
+
deliberate_only: true;
|
|
662
663
|
};
|
|
663
664
|
product_contains_competitive_analysis: {
|
|
664
665
|
forward_verb: string;
|
|
@@ -4782,6 +4783,20 @@ declare const UPG_EDGE_CATALOG: {
|
|
|
4782
4783
|
source_type: string;
|
|
4783
4784
|
target_type: string;
|
|
4784
4785
|
};
|
|
4786
|
+
document_contains_quote: {
|
|
4787
|
+
forward_verb: string;
|
|
4788
|
+
reverse_verb: string;
|
|
4789
|
+
classification: "semantic";
|
|
4790
|
+
source_type: string;
|
|
4791
|
+
target_type: string;
|
|
4792
|
+
};
|
|
4793
|
+
document_contains_observation: {
|
|
4794
|
+
forward_verb: string;
|
|
4795
|
+
reverse_verb: string;
|
|
4796
|
+
classification: "semantic";
|
|
4797
|
+
source_type: string;
|
|
4798
|
+
target_type: string;
|
|
4799
|
+
};
|
|
4785
4800
|
product_educates_via_education_program: {
|
|
4786
4801
|
forward_verb: string;
|
|
4787
4802
|
reverse_verb: string;
|
|
@@ -11710,6 +11725,12 @@ interface ParticipantProperties {
|
|
|
11710
11725
|
recruit_source?: string;
|
|
11711
11726
|
/** Current consent status for data usage */
|
|
11712
11727
|
consent_status?: 'pending' | 'given' | 'withdrawn';
|
|
11728
|
+
/**
|
|
11729
|
+
* Stable deep-link to the exact moment this participant appears in the
|
|
11730
|
+
* originating recording or transcript. A per-moment locator, not a
|
|
11731
|
+
* study-level link. Rot-prone external pointer; treat as `volatile`.
|
|
11732
|
+
*/
|
|
11733
|
+
source_url?: string;
|
|
11713
11734
|
}
|
|
11714
11735
|
/** Discrete observation captured during research. Absorbed from the deprecated Highlight entity.
|
|
11715
11736
|
*
|
|
@@ -11743,6 +11764,13 @@ interface ObservationProperties {
|
|
|
11743
11764
|
* four values. More precise than `highlight_tag` for aggregation.
|
|
11744
11765
|
*/
|
|
11745
11766
|
sentiment?: SignalSentiment;
|
|
11767
|
+
/**
|
|
11768
|
+
* Stable deep-link to the exact moment this observation was captured in the
|
|
11769
|
+
* originating recording or transcript. A per-moment locator, not a
|
|
11770
|
+
* study-level link. Distinct from `session_ref`, which holds an opaque
|
|
11771
|
+
* session ID for AI inference. Rot-prone external pointer; treat as `volatile`.
|
|
11772
|
+
*/
|
|
11773
|
+
source_url?: string;
|
|
11746
11774
|
}
|
|
11747
11775
|
/** Verbatim quote from a participant.
|
|
11748
11776
|
* Link to the participant via an edge, not a speaker property.
|
|
@@ -11758,6 +11786,12 @@ interface QuoteProperties {
|
|
|
11758
11786
|
text: string;
|
|
11759
11787
|
/** When said (ISO timestamp or session offset) */
|
|
11760
11788
|
timestamp?: string;
|
|
11789
|
+
/**
|
|
11790
|
+
* Stable deep-link to the exact moment this quote was spoken in the
|
|
11791
|
+
* originating recording or transcript. A per-moment locator, not a
|
|
11792
|
+
* study-level link. Rot-prone external pointer; treat as `volatile`.
|
|
11793
|
+
*/
|
|
11794
|
+
source_url?: string;
|
|
11761
11795
|
}
|
|
11762
11796
|
/** Unified insight, synthesised from evidence and observations.
|
|
11763
11797
|
*
|
|
@@ -22204,7 +22238,7 @@ declare function isCanonical(text: string): boolean;
|
|
|
22204
22238
|
* it stamps the `upg_version` field of every `.upg` file written by the SDK.
|
|
22205
22239
|
* The `check:version-lockstep` gate enforces this at release time.
|
|
22206
22240
|
*/
|
|
22207
|
-
declare const UPG_VERSION: "0.17.
|
|
22241
|
+
declare const UPG_VERSION: "0.17.6";
|
|
22208
22242
|
/**
|
|
22209
22243
|
* The `.upg` JSON document format version. Written to the `upg_version` field.
|
|
22210
22244
|
* Evolves independently from `UPG_VERSION` (the catalogue version).
|
package/dist/index.js
CHANGED
|
@@ -1136,7 +1136,13 @@ var UPG_EDGE_CATALOG = {
|
|
|
1136
1136
|
research_study_collects_survey_response: { forward_verb: "collects", reverse_verb: "collected_in", classification: "hierarchy", source_type: "research_study", target_type: "survey_response" },
|
|
1137
1137
|
observation_evidenced_by_quote: { forward_verb: "evidenced_by", reverse_verb: "evidences", classification: "hierarchy", source_type: "observation", target_type: "quote" },
|
|
1138
1138
|
affinity_cluster_synthesises_insight: { forward_verb: "synthesises", reverse_verb: "synthesised_from", classification: "hierarchy", source_type: "affinity_cluster", target_type: "insight" },
|
|
1139
|
-
|
|
1139
|
+
// deliberate_only (0.17.6): "this insight informs that opportunity" is a
|
|
1140
|
+
// PM-judgment link — which of many opportunities a finding actually feeds is
|
|
1141
|
+
// authored, never inferred from a source's hierarchy. Auto-nest / adapter
|
|
1142
|
+
// parentage resolvers decline to materialise it (fall through to a
|
|
1143
|
+
// node_informs_node link or a decline+warn); explicit create_edge /
|
|
1144
|
+
// resolve_edge_for_pair still return it. Fixes the latent auto-emission.
|
|
1145
|
+
insight_informs_opportunity: { forward_verb: "informs", reverse_verb: "informed_by", classification: "cross-domain", source_type: "insight", target_type: "opportunity", deliberate_only: true },
|
|
1140
1146
|
// 1.5 Market Intelligence Domain
|
|
1141
1147
|
// product → competitive_analysis closes the parallel gap to
|
|
1142
1148
|
// product → persona. competitive_analysis is the anchor of the
|
|
@@ -2054,6 +2060,11 @@ var UPG_EDGE_CATALOG = {
|
|
|
2054
2060
|
document_describes_positioning: { forward_verb: "describes", reverse_verb: "described_by", classification: "semantic", source_type: "document", target_type: "positioning" },
|
|
2055
2061
|
document_describes_decision: { forward_verb: "describes", reverse_verb: "described_by", classification: "semantic", source_type: "document", target_type: "decision" },
|
|
2056
2062
|
document_contains_insight: { forward_verb: "contains", reverse_verb: "contained_in", classification: "semantic", source_type: "document", target_type: "insight" },
|
|
2063
|
+
// Research-provenance containment (0.17.5): a synthesis document is walkable
|
|
2064
|
+
// to the evidence it sourced. Within-graph containment (the document and the
|
|
2065
|
+
// evidence co-reside), so NOT cross_product_eligible.
|
|
2066
|
+
document_contains_quote: { forward_verb: "contains", reverse_verb: "contained_in", classification: "semantic", source_type: "document", target_type: "quote" },
|
|
2067
|
+
document_contains_observation: { forward_verb: "contains", reverse_verb: "contained_in", classification: "semantic", source_type: "document", target_type: "observation" },
|
|
2057
2068
|
// 5.3 Customer Education & Training Domain
|
|
2058
2069
|
product_educates_via_education_program: { forward_verb: "educates_via", reverse_verb: "educates", classification: "hierarchy", source_type: "product", target_type: "education_program" },
|
|
2059
2070
|
education_program_teaches_via_tutorial: { forward_verb: "teaches_via", reverse_verb: "teaches", classification: "hierarchy", source_type: "education_program", target_type: "tutorial" },
|
|
@@ -12100,7 +12111,8 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
12100
12111
|
session_ref: { type: "string", description: "Capturing session reference. Convenience field; the canonical relationship to study/session is an edge per P14. Retained as a lightweight context anchor for AI inference." },
|
|
12101
12112
|
is_highlighted: { type: "boolean", description: "Flagged as a highlight. Absorbed from the deprecated Highlight entity." },
|
|
12102
12113
|
highlight_tag: { type: "string", description: 'Free-form highlight type tag. @example "pain", "delight", "behaviour", "moment of clarity"' },
|
|
12103
|
-
sentiment: { type: "string", enum: ["positive", "neutral", "negative", "mixed"], description: "Structured sentiment. Tools like Dovetail and EnjoyHQ converge on these four values. More precise than `highlight_tag` for aggregation." }
|
|
12114
|
+
sentiment: { type: "string", enum: ["positive", "neutral", "negative", "mixed"], description: "Structured sentiment. Tools like Dovetail and EnjoyHQ converge on these four values. More precise than `highlight_tag` for aggregation." },
|
|
12115
|
+
source_url: { type: "string", description: "Stable deep-link to the exact moment this observation was captured in the originating recording or transcript. A per-moment locator, not a study-level link. Distinct from `session_ref`, which holds an opaque session ID.", modifier: "volatile" }
|
|
12104
12116
|
},
|
|
12105
12117
|
// OnCallRotationProperties: On-call rotation.
|
|
12106
12118
|
on_call_rotation: {
|
|
@@ -12144,7 +12156,8 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
12144
12156
|
participant: {
|
|
12145
12157
|
alias: { type: "string", description: 'Anonymous alias for privacy (e.g. "P01")' },
|
|
12146
12158
|
recruit_source: { type: "string", description: "How the participant was recruited" },
|
|
12147
|
-
consent_status: { type: "string", enum: ["pending", "given", "withdrawn"], description: "Current consent status for data usage" }
|
|
12159
|
+
consent_status: { type: "string", enum: ["pending", "given", "withdrawn"], description: "Current consent status for data usage" },
|
|
12160
|
+
source_url: { type: "string", description: "Stable deep-link to the exact moment this participant appears in the originating recording or transcript. A per-moment locator, not a study-level link.", modifier: "volatile" }
|
|
12148
12161
|
},
|
|
12149
12162
|
// PartnerProgramProperties: Partner program.
|
|
12150
12163
|
partner_program: {
|
|
@@ -12367,7 +12380,8 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
12367
12380
|
// QuoteProperties: Verbatim quote from a participant.
|
|
12368
12381
|
quote: {
|
|
12369
12382
|
text: { type: "string", description: "Quoted text" },
|
|
12370
|
-
timestamp: { type: "string", description: "When said (ISO timestamp or session offset)" }
|
|
12383
|
+
timestamp: { type: "string", description: "When said (ISO timestamp or session offset)" },
|
|
12384
|
+
source_url: { type: "string", description: "Stable deep-link to the exact moment this quote was spoken in the originating recording or transcript. A per-moment locator, not a study-level link.", modifier: "volatile" }
|
|
12371
12385
|
},
|
|
12372
12386
|
// QuoteDocumentProperties: Quote document.
|
|
12373
12387
|
quote_document: {
|
|
@@ -22807,7 +22821,13 @@ var USER_RESEARCH_GUIDE = {
|
|
|
22807
22821
|
anti_patterns: [
|
|
22808
22822
|
{ description: "Insights without evidence: every insight must trace back to observations and quotes" },
|
|
22809
22823
|
{ description: "Orphan quotes: quotes should belong to observations, not float independently" },
|
|
22810
|
-
{ description: "Research studies without questions: always define what you want to learn before starting" }
|
|
22824
|
+
{ description: "Research studies without questions: always define what you want to learn before starting" },
|
|
22825
|
+
{
|
|
22826
|
+
name: "Study conflation",
|
|
22827
|
+
affected_entity: "research_study",
|
|
22828
|
+
description: "Do not merge multiple research rounds with different stated goals into one `research_study` (or one participant pool) just because they were synthesized into the same downstream document. If two rounds have different research questions, they are different `research_study` nodes, even if an analyst wrote them up together.",
|
|
22829
|
+
remediation: "Verify against the *original* recording or session metadata, not the synthesis doc's grouping."
|
|
22830
|
+
}
|
|
22811
22831
|
]
|
|
22812
22832
|
};
|
|
22813
22833
|
var MARKET_INTELLIGENCE_GUIDE = {
|
|
@@ -29717,7 +29737,7 @@ function isCanonical(text) {
|
|
|
29717
29737
|
}
|
|
29718
29738
|
|
|
29719
29739
|
// src/index.ts
|
|
29720
|
-
var UPG_VERSION = "0.17.
|
|
29740
|
+
var UPG_VERSION = "0.17.6";
|
|
29721
29741
|
var UPG_FORMAT_VERSION = "0.4.0";
|
|
29722
29742
|
var MARKDOWN_FORMAT_VERSION = "0.1";
|
|
29723
29743
|
var UPG_TYPES = getTypes();
|