@unified-product-graph/core 0.17.4 → 0.17.5

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.d.cts CHANGED
@@ -4782,6 +4782,20 @@ declare const UPG_EDGE_CATALOG: {
4782
4782
  source_type: string;
4783
4783
  target_type: string;
4784
4784
  };
4785
+ document_contains_quote: {
4786
+ forward_verb: string;
4787
+ reverse_verb: string;
4788
+ classification: "semantic";
4789
+ source_type: string;
4790
+ target_type: string;
4791
+ };
4792
+ document_contains_observation: {
4793
+ forward_verb: string;
4794
+ reverse_verb: string;
4795
+ classification: "semantic";
4796
+ source_type: string;
4797
+ target_type: string;
4798
+ };
4785
4799
  product_educates_via_education_program: {
4786
4800
  forward_verb: string;
4787
4801
  reverse_verb: string;
@@ -11710,6 +11724,12 @@ interface ParticipantProperties {
11710
11724
  recruit_source?: string;
11711
11725
  /** Current consent status for data usage */
11712
11726
  consent_status?: 'pending' | 'given' | 'withdrawn';
11727
+ /**
11728
+ * Stable deep-link to the exact moment this participant appears in the
11729
+ * originating recording or transcript. A per-moment locator, not a
11730
+ * study-level link. Rot-prone external pointer; treat as `volatile`.
11731
+ */
11732
+ source_url?: string;
11713
11733
  }
11714
11734
  /** Discrete observation captured during research. Absorbed from the deprecated Highlight entity.
11715
11735
  *
@@ -11743,6 +11763,13 @@ interface ObservationProperties {
11743
11763
  * four values. More precise than `highlight_tag` for aggregation.
11744
11764
  */
11745
11765
  sentiment?: SignalSentiment;
11766
+ /**
11767
+ * Stable deep-link to the exact moment this observation was captured in the
11768
+ * originating recording or transcript. A per-moment locator, not a
11769
+ * study-level link. Distinct from `session_ref`, which holds an opaque
11770
+ * session ID for AI inference. Rot-prone external pointer; treat as `volatile`.
11771
+ */
11772
+ source_url?: string;
11746
11773
  }
11747
11774
  /** Verbatim quote from a participant.
11748
11775
  * Link to the participant via an edge, not a speaker property.
@@ -11758,6 +11785,12 @@ interface QuoteProperties {
11758
11785
  text: string;
11759
11786
  /** When said (ISO timestamp or session offset) */
11760
11787
  timestamp?: string;
11788
+ /**
11789
+ * Stable deep-link to the exact moment this quote was spoken in the
11790
+ * originating recording or transcript. A per-moment locator, not a
11791
+ * study-level link. Rot-prone external pointer; treat as `volatile`.
11792
+ */
11793
+ source_url?: string;
11761
11794
  }
11762
11795
  /** Unified insight, synthesised from evidence and observations.
11763
11796
  *
@@ -22204,7 +22237,7 @@ declare function isCanonical(text: string): boolean;
22204
22237
  * it stamps the `upg_version` field of every `.upg` file written by the SDK.
22205
22238
  * The `check:version-lockstep` gate enforces this at release time.
22206
22239
  */
22207
- declare const UPG_VERSION: "0.17.4";
22240
+ declare const UPG_VERSION: "0.17.5";
22208
22241
  /**
22209
22242
  * The `.upg` JSON document format version. Written to the `upg_version` field.
22210
22243
  * Evolves independently from `UPG_VERSION` (the catalogue version).
package/dist/index.d.ts CHANGED
@@ -4782,6 +4782,20 @@ declare const UPG_EDGE_CATALOG: {
4782
4782
  source_type: string;
4783
4783
  target_type: string;
4784
4784
  };
4785
+ document_contains_quote: {
4786
+ forward_verb: string;
4787
+ reverse_verb: string;
4788
+ classification: "semantic";
4789
+ source_type: string;
4790
+ target_type: string;
4791
+ };
4792
+ document_contains_observation: {
4793
+ forward_verb: string;
4794
+ reverse_verb: string;
4795
+ classification: "semantic";
4796
+ source_type: string;
4797
+ target_type: string;
4798
+ };
4785
4799
  product_educates_via_education_program: {
4786
4800
  forward_verb: string;
4787
4801
  reverse_verb: string;
@@ -11710,6 +11724,12 @@ interface ParticipantProperties {
11710
11724
  recruit_source?: string;
11711
11725
  /** Current consent status for data usage */
11712
11726
  consent_status?: 'pending' | 'given' | 'withdrawn';
11727
+ /**
11728
+ * Stable deep-link to the exact moment this participant appears in the
11729
+ * originating recording or transcript. A per-moment locator, not a
11730
+ * study-level link. Rot-prone external pointer; treat as `volatile`.
11731
+ */
11732
+ source_url?: string;
11713
11733
  }
11714
11734
  /** Discrete observation captured during research. Absorbed from the deprecated Highlight entity.
11715
11735
  *
@@ -11743,6 +11763,13 @@ interface ObservationProperties {
11743
11763
  * four values. More precise than `highlight_tag` for aggregation.
11744
11764
  */
11745
11765
  sentiment?: SignalSentiment;
11766
+ /**
11767
+ * Stable deep-link to the exact moment this observation was captured in the
11768
+ * originating recording or transcript. A per-moment locator, not a
11769
+ * study-level link. Distinct from `session_ref`, which holds an opaque
11770
+ * session ID for AI inference. Rot-prone external pointer; treat as `volatile`.
11771
+ */
11772
+ source_url?: string;
11746
11773
  }
11747
11774
  /** Verbatim quote from a participant.
11748
11775
  * Link to the participant via an edge, not a speaker property.
@@ -11758,6 +11785,12 @@ interface QuoteProperties {
11758
11785
  text: string;
11759
11786
  /** When said (ISO timestamp or session offset) */
11760
11787
  timestamp?: string;
11788
+ /**
11789
+ * Stable deep-link to the exact moment this quote was spoken in the
11790
+ * originating recording or transcript. A per-moment locator, not a
11791
+ * study-level link. Rot-prone external pointer; treat as `volatile`.
11792
+ */
11793
+ source_url?: string;
11761
11794
  }
11762
11795
  /** Unified insight, synthesised from evidence and observations.
11763
11796
  *
@@ -22204,7 +22237,7 @@ declare function isCanonical(text: string): boolean;
22204
22237
  * it stamps the `upg_version` field of every `.upg` file written by the SDK.
22205
22238
  * The `check:version-lockstep` gate enforces this at release time.
22206
22239
  */
22207
- declare const UPG_VERSION: "0.17.4";
22240
+ declare const UPG_VERSION: "0.17.5";
22208
22241
  /**
22209
22242
  * The `.upg` JSON document format version. Written to the `upg_version` field.
22210
22243
  * Evolves independently from `UPG_VERSION` (the catalogue version).
package/dist/index.js CHANGED
@@ -2054,6 +2054,11 @@ var UPG_EDGE_CATALOG = {
2054
2054
  document_describes_positioning: { forward_verb: "describes", reverse_verb: "described_by", classification: "semantic", source_type: "document", target_type: "positioning" },
2055
2055
  document_describes_decision: { forward_verb: "describes", reverse_verb: "described_by", classification: "semantic", source_type: "document", target_type: "decision" },
2056
2056
  document_contains_insight: { forward_verb: "contains", reverse_verb: "contained_in", classification: "semantic", source_type: "document", target_type: "insight" },
2057
+ // Research-provenance containment (0.17.5): a synthesis document is walkable
2058
+ // to the evidence it sourced. Within-graph containment (the document and the
2059
+ // evidence co-reside), so NOT cross_product_eligible.
2060
+ document_contains_quote: { forward_verb: "contains", reverse_verb: "contained_in", classification: "semantic", source_type: "document", target_type: "quote" },
2061
+ document_contains_observation: { forward_verb: "contains", reverse_verb: "contained_in", classification: "semantic", source_type: "document", target_type: "observation" },
2057
2062
  // 5.3 Customer Education & Training Domain
2058
2063
  product_educates_via_education_program: { forward_verb: "educates_via", reverse_verb: "educates", classification: "hierarchy", source_type: "product", target_type: "education_program" },
2059
2064
  education_program_teaches_via_tutorial: { forward_verb: "teaches_via", reverse_verb: "teaches", classification: "hierarchy", source_type: "education_program", target_type: "tutorial" },
@@ -12100,7 +12105,8 @@ var UPG_PROPERTY_SCHEMA = {
12100
12105
  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
12106
  is_highlighted: { type: "boolean", description: "Flagged as a highlight. Absorbed from the deprecated Highlight entity." },
12102
12107
  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." }
12108
+ 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." },
12109
+ 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
12110
  },
12105
12111
  // OnCallRotationProperties: On-call rotation.
12106
12112
  on_call_rotation: {
@@ -12144,7 +12150,8 @@ var UPG_PROPERTY_SCHEMA = {
12144
12150
  participant: {
12145
12151
  alias: { type: "string", description: 'Anonymous alias for privacy (e.g. "P01")' },
12146
12152
  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" }
12153
+ consent_status: { type: "string", enum: ["pending", "given", "withdrawn"], description: "Current consent status for data usage" },
12154
+ 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
12155
  },
12149
12156
  // PartnerProgramProperties: Partner program.
12150
12157
  partner_program: {
@@ -12367,7 +12374,8 @@ var UPG_PROPERTY_SCHEMA = {
12367
12374
  // QuoteProperties: Verbatim quote from a participant.
12368
12375
  quote: {
12369
12376
  text: { type: "string", description: "Quoted text" },
12370
- timestamp: { type: "string", description: "When said (ISO timestamp or session offset)" }
12377
+ timestamp: { type: "string", description: "When said (ISO timestamp or session offset)" },
12378
+ 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
12379
  },
12372
12380
  // QuoteDocumentProperties: Quote document.
12373
12381
  quote_document: {
@@ -22807,7 +22815,13 @@ var USER_RESEARCH_GUIDE = {
22807
22815
  anti_patterns: [
22808
22816
  { description: "Insights without evidence: every insight must trace back to observations and quotes" },
22809
22817
  { 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" }
22818
+ { description: "Research studies without questions: always define what you want to learn before starting" },
22819
+ {
22820
+ name: "Study conflation",
22821
+ affected_entity: "research_study",
22822
+ 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.",
22823
+ remediation: "Verify against the *original* recording or session metadata, not the synthesis doc's grouping."
22824
+ }
22811
22825
  ]
22812
22826
  };
22813
22827
  var MARKET_INTELLIGENCE_GUIDE = {
@@ -29717,7 +29731,7 @@ function isCanonical(text) {
29717
29731
  }
29718
29732
 
29719
29733
  // src/index.ts
29720
- var UPG_VERSION = "0.17.4";
29734
+ var UPG_VERSION = "0.17.5";
29721
29735
  var UPG_FORMAT_VERSION = "0.4.0";
29722
29736
  var MARKDOWN_FORMAT_VERSION = "0.1";
29723
29737
  var UPG_TYPES = getTypes();