@unified-product-graph/core 0.23.0 → 0.23.1
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 +19 -10
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +29 -21
- package/dist/index.d.ts +29 -21
- package/dist/index.js +19 -10
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/spec/examples/cms-field-guide.upg +24 -24
package/dist/index.d.cts
CHANGED
|
@@ -7597,6 +7597,14 @@ declare const UPG_EDGE_CATALOG: {
|
|
|
7597
7597
|
target_type: string;
|
|
7598
7598
|
cross_product_eligible: true;
|
|
7599
7599
|
};
|
|
7600
|
+
dependency_resolved_by_objective: {
|
|
7601
|
+
forward_verb: string;
|
|
7602
|
+
reverse_verb: string;
|
|
7603
|
+
classification: "cross-domain";
|
|
7604
|
+
source_type: string;
|
|
7605
|
+
target_type: string;
|
|
7606
|
+
cross_product_eligible: true;
|
|
7607
|
+
};
|
|
7600
7608
|
objective_raises_strategic_question: {
|
|
7601
7609
|
forward_verb: string;
|
|
7602
7610
|
reverse_verb: string;
|
|
@@ -8202,7 +8210,7 @@ interface UPGPortfolioDocument {
|
|
|
8202
8210
|
/**
|
|
8203
8211
|
* Legacy product-stage aliases (UPG-509 Part 2).
|
|
8204
8212
|
*
|
|
8205
|
-
* Existing graphs (`entopo.upg`, `
|
|
8213
|
+
* Existing graphs (`entopo.upg`, `nimbus.upg`, `maximum-minimum.upg`,
|
|
8206
8214
|
* `notion-saturated.upg`, etc.) carry `product.stage` values that pre-date
|
|
8207
8215
|
* the canonical `UPGProductStage` enum
|
|
8208
8216
|
* (`concept | validation | build | beta | launch | growth | mature |
|
|
@@ -8645,7 +8653,7 @@ declare const UPG_DOMAINS: readonly [{
|
|
|
8645
8653
|
}, {
|
|
8646
8654
|
readonly id: "foundations";
|
|
8647
8655
|
readonly label: "Foundations";
|
|
8648
|
-
readonly description: "The shared specifications and foundational primitives a product organisation stewards or implements everywhere. Specifications are governed specs (query languages, protocols, data formats, encodings) like
|
|
8656
|
+
readonly description: "The shared specifications and foundational primitives a product organisation stewards or implements everywhere. Specifications are governed specs (query languages, protocols, data formats, encodings) like NQL or Structured Text; primitives are the compositional units those specs define (a block, a reference, a query value). Both are registry-hostable canonicals that products implement, expose, or conform to. Distinct from a product feature: a specification has no single owner, no P&L, and no buyer; it is the rulebook many products point at.";
|
|
8649
8657
|
readonly types: readonly ["specification", "primitive", "operating_lifecycle", "operating_stage"];
|
|
8650
8658
|
}];
|
|
8651
8659
|
/**
|
|
@@ -9839,7 +9847,7 @@ declare function migrateEdge<T extends {
|
|
|
9839
9847
|
* type's lifecycle exists but the graph carries pre-canonical status values
|
|
9840
9848
|
* the lifecycle never had.
|
|
9841
9849
|
*
|
|
9842
|
-
* Source: live drift in `.upg/entopo.upg`, `.upg/
|
|
9850
|
+
* Source: live drift in `.upg/entopo.upg`, `.upg/nimbus.upg`, and
|
|
9843
9851
|
* `.upg/inkling.upg` surveyed during the v0.5 launch train (UPG-527).
|
|
9844
9852
|
* Highest single drift class: 173 `service` nodes with `status: "active"`
|
|
9845
9853
|
* against the canonical `[development, staging, production, deprecated]`
|
|
@@ -11466,7 +11474,7 @@ interface CompetitorProperties {
|
|
|
11466
11474
|
/**
|
|
11467
11475
|
* Provenance: where this was observed. A changelog, pricing, or docs URL,
|
|
11468
11476
|
* an analyst report, or a research note.
|
|
11469
|
-
* @example "https://
|
|
11477
|
+
* @example "https://docs.larch.example/pricing/"
|
|
11470
11478
|
*/
|
|
11471
11479
|
source?: string;
|
|
11472
11480
|
/**
|
|
@@ -11518,7 +11526,7 @@ interface CompetitorFeatureProperties {
|
|
|
11518
11526
|
/**
|
|
11519
11527
|
* Provenance: where this was observed. A changelog, pricing, or docs URL,
|
|
11520
11528
|
* an analyst report, or a research note.
|
|
11521
|
-
* @example "https://
|
|
11529
|
+
* @example "https://docs.larch.example/changelog/"
|
|
11522
11530
|
*/
|
|
11523
11531
|
source?: string;
|
|
11524
11532
|
/**
|
|
@@ -11640,7 +11648,7 @@ interface CompetitiveAnalysisProperties {
|
|
|
11640
11648
|
*
|
|
11641
11649
|
* @example
|
|
11642
11650
|
* [
|
|
11643
|
-
* { axis_a_value_ref: 'val-git-based', axis_b_value_ref: 'val-
|
|
11651
|
+
* { axis_a_value_ref: 'val-git-based', axis_b_value_ref: 'val-structured-text',
|
|
11644
11652
|
* rationale_kind: 'opportunity',
|
|
11645
11653
|
* rationale_md: 'No technical reason; only adoption inertia. Watching brief.' },
|
|
11646
11654
|
* { axis_a_value_ref: 'val-composable', axis_b_value_ref: 'val-wysiwyg',
|
|
@@ -11658,7 +11666,7 @@ interface CompetitiveAnalysisProperties {
|
|
|
11658
11666
|
/**
|
|
11659
11667
|
* Provenance: where this was observed. A changelog, pricing, or docs URL,
|
|
11660
11668
|
* an analyst report, or a research note.
|
|
11661
|
-
* @example "https://
|
|
11669
|
+
* @example "https://docs.larch.example/changelog/"
|
|
11662
11670
|
*/
|
|
11663
11671
|
source?: string;
|
|
11664
11672
|
/**
|
|
@@ -11737,7 +11745,7 @@ interface CompetitorSignalProperties {
|
|
|
11737
11745
|
/**
|
|
11738
11746
|
* Provenance: where this was observed. A changelog, pricing, or docs URL,
|
|
11739
11747
|
* an analyst report, or a research note.
|
|
11740
|
-
* @example "https://
|
|
11748
|
+
* @example "https://docs.larch.example/changelog/"
|
|
11741
11749
|
*/
|
|
11742
11750
|
source?: string;
|
|
11743
11751
|
/**
|
|
@@ -11865,14 +11873,14 @@ interface ClassificationAxisProperties {
|
|
|
11865
11873
|
* @example
|
|
11866
11874
|
* const properties: ClassificationValueProperties = {
|
|
11867
11875
|
* rationale: 'Composable extends headless with three load-bearing commitments.',
|
|
11868
|
-
* exemplars: ['
|
|
11876
|
+
* exemplars: ['Nimbus', 'Larch', 'Prism'],
|
|
11869
11877
|
* commitments: [
|
|
11870
11878
|
* { name: 'Typed content graph', description: 'Schemas in code; references as edges.' },
|
|
11871
11879
|
* { name: 'Real-time backend', description: 'Live queries, CRDT collaboration.' },
|
|
11872
11880
|
* { name: 'Embeddable studio', description: 'Editor is a library hosted inside the team app.' },
|
|
11873
11881
|
* ],
|
|
11874
11882
|
* capabilities: [
|
|
11875
|
-
* { surface: 'delivery', bullets: ['
|
|
11883
|
+
* { surface: 'delivery', bullets: ['NQL', 'GraphQL', 'REST', 'Live Sync API'] },
|
|
11876
11884
|
* ],
|
|
11877
11885
|
* }
|
|
11878
11886
|
*/
|
|
@@ -11885,7 +11893,7 @@ interface ClassificationValueProperties {
|
|
|
11885
11893
|
/**
|
|
11886
11894
|
* Free-text examples of products occupying this value.
|
|
11887
11895
|
* For queryable occupancy, prefer `competitor` nodes with `classified_as` edges.
|
|
11888
|
-
* @example ['
|
|
11896
|
+
* @example ['Nimbus', 'Larch', 'Prism']
|
|
11889
11897
|
*/
|
|
11890
11898
|
exemplars?: string[];
|
|
11891
11899
|
/**
|
|
@@ -11912,8 +11920,8 @@ interface ClassificationValueProperties {
|
|
|
11912
11920
|
*
|
|
11913
11921
|
* @example
|
|
11914
11922
|
* [
|
|
11915
|
-
* { surface: 'delivery', bullets: ['
|
|
11916
|
-
* { surface: 'extensibility', bullets: ['Custom input components', '
|
|
11923
|
+
* { surface: 'delivery', bullets: ['NQL', 'GraphQL', 'REST', 'Live Sync API', 'Asset CDN'] },
|
|
11924
|
+
* { surface: 'extensibility', bullets: ['Custom input components', 'editor plugins'] },
|
|
11917
11925
|
* ]
|
|
11918
11926
|
*/
|
|
11919
11927
|
capabilities?: Array<ClassificationCapability>;
|
|
@@ -18857,9 +18865,9 @@ interface FrameworkExerciseProperties {
|
|
|
18857
18865
|
* kind: 'language',
|
|
18858
18866
|
* language_flavor: 'query',
|
|
18859
18867
|
* governance: 'open_spec_stewarded',
|
|
18860
|
-
* steward: '
|
|
18868
|
+
* steward: 'Nimbus',
|
|
18861
18869
|
* openness: 'open',
|
|
18862
|
-
* spec_url: 'https://
|
|
18870
|
+
* spec_url: 'https://nimbus.example/docs/nql',
|
|
18863
18871
|
* current_version: '1.0',
|
|
18864
18872
|
* since: '2019',
|
|
18865
18873
|
* }
|
|
@@ -18889,13 +18897,13 @@ interface SpecificationProperties {
|
|
|
18889
18897
|
conformance?: string;
|
|
18890
18898
|
}
|
|
18891
18899
|
/** A foundational compositional unit a specification defines: the noun products
|
|
18892
|
-
* pass around and compose with (a
|
|
18900
|
+
* pass around and compose with (a Structured Text block, a typed reference, a
|
|
18893
18901
|
* Git commit, a Stripe PaymentIntent). Lifecycle-free, like `metric`.
|
|
18894
18902
|
*
|
|
18895
18903
|
* @example
|
|
18896
18904
|
* const properties: PrimitiveProperties = {
|
|
18897
18905
|
* primitive_kind: 'block',
|
|
18898
|
-
* defined_by: 'specification/
|
|
18906
|
+
* defined_by: 'specification/structured_text',
|
|
18899
18907
|
* since: '2018',
|
|
18900
18908
|
* }
|
|
18901
18909
|
*/
|
|
@@ -18908,7 +18916,7 @@ interface PrimitiveProperties {
|
|
|
18908
18916
|
since?: string;
|
|
18909
18917
|
}
|
|
18910
18918
|
/** An operating_lifecycle: a canonical, ordered (often cyclic) operating process
|
|
18911
|
-
* that many products' journey phases map onto — e.g.
|
|
18919
|
+
* that many products' journey phases map onto — e.g. Nimbus's content-operations
|
|
18912
18920
|
* lifecycle. Registry-hostable like a `specification`; the cross-product join key
|
|
18913
18921
|
* that turns per-surface journeys into one operation. Distinct from the per-entity
|
|
18914
18922
|
* status `lifecycle` grammar concept (this is an entity, not a state machine).
|
|
@@ -18916,13 +18924,13 @@ interface PrimitiveProperties {
|
|
|
18916
18924
|
* @example
|
|
18917
18925
|
* const properties: OperatingLifecycleProperties = {
|
|
18918
18926
|
* cyclic: true,
|
|
18919
|
-
* source: '
|
|
18927
|
+
* source: 'a canonical 5-stage content-ops lifecycle',
|
|
18920
18928
|
* }
|
|
18921
18929
|
*/
|
|
18922
18930
|
interface OperatingLifecycleProperties {
|
|
18923
18931
|
/** True if the process loops (e.g. Analyze → Extend → Plan). The sequence is fully expressed by the stages' `stage_order`; `cyclic` adds the wrap from the last stage back to the first. */
|
|
18924
18932
|
cyclic?: boolean;
|
|
18925
|
-
/** Origin of the canonical model (e.g. "
|
|
18933
|
+
/** Origin of the canonical model (e.g. "a published content-ops lifecycle"). Optional provenance; promote to an edge if it names a real `specification`/`document`. */
|
|
18926
18934
|
source?: string;
|
|
18927
18935
|
}
|
|
18928
18936
|
/** An operating_stage: one ordered stage of an `operating_lifecycle`. A product's
|
|
@@ -22532,7 +22540,7 @@ declare function isCanonical(text: string): boolean;
|
|
|
22532
22540
|
* it stamps the `upg_version` field of every `.upg` file written by the SDK.
|
|
22533
22541
|
* The `check:version-lockstep` gate enforces this at release time.
|
|
22534
22542
|
*/
|
|
22535
|
-
declare const UPG_VERSION: "0.23.
|
|
22543
|
+
declare const UPG_VERSION: "0.23.1";
|
|
22536
22544
|
/**
|
|
22537
22545
|
* The `.upg` JSON document format version. Written to the `upg_version` field.
|
|
22538
22546
|
* Evolves independently from `UPG_VERSION` (the catalogue version).
|
package/dist/index.d.ts
CHANGED
|
@@ -7597,6 +7597,14 @@ declare const UPG_EDGE_CATALOG: {
|
|
|
7597
7597
|
target_type: string;
|
|
7598
7598
|
cross_product_eligible: true;
|
|
7599
7599
|
};
|
|
7600
|
+
dependency_resolved_by_objective: {
|
|
7601
|
+
forward_verb: string;
|
|
7602
|
+
reverse_verb: string;
|
|
7603
|
+
classification: "cross-domain";
|
|
7604
|
+
source_type: string;
|
|
7605
|
+
target_type: string;
|
|
7606
|
+
cross_product_eligible: true;
|
|
7607
|
+
};
|
|
7600
7608
|
objective_raises_strategic_question: {
|
|
7601
7609
|
forward_verb: string;
|
|
7602
7610
|
reverse_verb: string;
|
|
@@ -8202,7 +8210,7 @@ interface UPGPortfolioDocument {
|
|
|
8202
8210
|
/**
|
|
8203
8211
|
* Legacy product-stage aliases (UPG-509 Part 2).
|
|
8204
8212
|
*
|
|
8205
|
-
* Existing graphs (`entopo.upg`, `
|
|
8213
|
+
* Existing graphs (`entopo.upg`, `nimbus.upg`, `maximum-minimum.upg`,
|
|
8206
8214
|
* `notion-saturated.upg`, etc.) carry `product.stage` values that pre-date
|
|
8207
8215
|
* the canonical `UPGProductStage` enum
|
|
8208
8216
|
* (`concept | validation | build | beta | launch | growth | mature |
|
|
@@ -8645,7 +8653,7 @@ declare const UPG_DOMAINS: readonly [{
|
|
|
8645
8653
|
}, {
|
|
8646
8654
|
readonly id: "foundations";
|
|
8647
8655
|
readonly label: "Foundations";
|
|
8648
|
-
readonly description: "The shared specifications and foundational primitives a product organisation stewards or implements everywhere. Specifications are governed specs (query languages, protocols, data formats, encodings) like
|
|
8656
|
+
readonly description: "The shared specifications and foundational primitives a product organisation stewards or implements everywhere. Specifications are governed specs (query languages, protocols, data formats, encodings) like NQL or Structured Text; primitives are the compositional units those specs define (a block, a reference, a query value). Both are registry-hostable canonicals that products implement, expose, or conform to. Distinct from a product feature: a specification has no single owner, no P&L, and no buyer; it is the rulebook many products point at.";
|
|
8649
8657
|
readonly types: readonly ["specification", "primitive", "operating_lifecycle", "operating_stage"];
|
|
8650
8658
|
}];
|
|
8651
8659
|
/**
|
|
@@ -9839,7 +9847,7 @@ declare function migrateEdge<T extends {
|
|
|
9839
9847
|
* type's lifecycle exists but the graph carries pre-canonical status values
|
|
9840
9848
|
* the lifecycle never had.
|
|
9841
9849
|
*
|
|
9842
|
-
* Source: live drift in `.upg/entopo.upg`, `.upg/
|
|
9850
|
+
* Source: live drift in `.upg/entopo.upg`, `.upg/nimbus.upg`, and
|
|
9843
9851
|
* `.upg/inkling.upg` surveyed during the v0.5 launch train (UPG-527).
|
|
9844
9852
|
* Highest single drift class: 173 `service` nodes with `status: "active"`
|
|
9845
9853
|
* against the canonical `[development, staging, production, deprecated]`
|
|
@@ -11466,7 +11474,7 @@ interface CompetitorProperties {
|
|
|
11466
11474
|
/**
|
|
11467
11475
|
* Provenance: where this was observed. A changelog, pricing, or docs URL,
|
|
11468
11476
|
* an analyst report, or a research note.
|
|
11469
|
-
* @example "https://
|
|
11477
|
+
* @example "https://docs.larch.example/pricing/"
|
|
11470
11478
|
*/
|
|
11471
11479
|
source?: string;
|
|
11472
11480
|
/**
|
|
@@ -11518,7 +11526,7 @@ interface CompetitorFeatureProperties {
|
|
|
11518
11526
|
/**
|
|
11519
11527
|
* Provenance: where this was observed. A changelog, pricing, or docs URL,
|
|
11520
11528
|
* an analyst report, or a research note.
|
|
11521
|
-
* @example "https://
|
|
11529
|
+
* @example "https://docs.larch.example/changelog/"
|
|
11522
11530
|
*/
|
|
11523
11531
|
source?: string;
|
|
11524
11532
|
/**
|
|
@@ -11640,7 +11648,7 @@ interface CompetitiveAnalysisProperties {
|
|
|
11640
11648
|
*
|
|
11641
11649
|
* @example
|
|
11642
11650
|
* [
|
|
11643
|
-
* { axis_a_value_ref: 'val-git-based', axis_b_value_ref: 'val-
|
|
11651
|
+
* { axis_a_value_ref: 'val-git-based', axis_b_value_ref: 'val-structured-text',
|
|
11644
11652
|
* rationale_kind: 'opportunity',
|
|
11645
11653
|
* rationale_md: 'No technical reason; only adoption inertia. Watching brief.' },
|
|
11646
11654
|
* { axis_a_value_ref: 'val-composable', axis_b_value_ref: 'val-wysiwyg',
|
|
@@ -11658,7 +11666,7 @@ interface CompetitiveAnalysisProperties {
|
|
|
11658
11666
|
/**
|
|
11659
11667
|
* Provenance: where this was observed. A changelog, pricing, or docs URL,
|
|
11660
11668
|
* an analyst report, or a research note.
|
|
11661
|
-
* @example "https://
|
|
11669
|
+
* @example "https://docs.larch.example/changelog/"
|
|
11662
11670
|
*/
|
|
11663
11671
|
source?: string;
|
|
11664
11672
|
/**
|
|
@@ -11737,7 +11745,7 @@ interface CompetitorSignalProperties {
|
|
|
11737
11745
|
/**
|
|
11738
11746
|
* Provenance: where this was observed. A changelog, pricing, or docs URL,
|
|
11739
11747
|
* an analyst report, or a research note.
|
|
11740
|
-
* @example "https://
|
|
11748
|
+
* @example "https://docs.larch.example/changelog/"
|
|
11741
11749
|
*/
|
|
11742
11750
|
source?: string;
|
|
11743
11751
|
/**
|
|
@@ -11865,14 +11873,14 @@ interface ClassificationAxisProperties {
|
|
|
11865
11873
|
* @example
|
|
11866
11874
|
* const properties: ClassificationValueProperties = {
|
|
11867
11875
|
* rationale: 'Composable extends headless with three load-bearing commitments.',
|
|
11868
|
-
* exemplars: ['
|
|
11876
|
+
* exemplars: ['Nimbus', 'Larch', 'Prism'],
|
|
11869
11877
|
* commitments: [
|
|
11870
11878
|
* { name: 'Typed content graph', description: 'Schemas in code; references as edges.' },
|
|
11871
11879
|
* { name: 'Real-time backend', description: 'Live queries, CRDT collaboration.' },
|
|
11872
11880
|
* { name: 'Embeddable studio', description: 'Editor is a library hosted inside the team app.' },
|
|
11873
11881
|
* ],
|
|
11874
11882
|
* capabilities: [
|
|
11875
|
-
* { surface: 'delivery', bullets: ['
|
|
11883
|
+
* { surface: 'delivery', bullets: ['NQL', 'GraphQL', 'REST', 'Live Sync API'] },
|
|
11876
11884
|
* ],
|
|
11877
11885
|
* }
|
|
11878
11886
|
*/
|
|
@@ -11885,7 +11893,7 @@ interface ClassificationValueProperties {
|
|
|
11885
11893
|
/**
|
|
11886
11894
|
* Free-text examples of products occupying this value.
|
|
11887
11895
|
* For queryable occupancy, prefer `competitor` nodes with `classified_as` edges.
|
|
11888
|
-
* @example ['
|
|
11896
|
+
* @example ['Nimbus', 'Larch', 'Prism']
|
|
11889
11897
|
*/
|
|
11890
11898
|
exemplars?: string[];
|
|
11891
11899
|
/**
|
|
@@ -11912,8 +11920,8 @@ interface ClassificationValueProperties {
|
|
|
11912
11920
|
*
|
|
11913
11921
|
* @example
|
|
11914
11922
|
* [
|
|
11915
|
-
* { surface: 'delivery', bullets: ['
|
|
11916
|
-
* { surface: 'extensibility', bullets: ['Custom input components', '
|
|
11923
|
+
* { surface: 'delivery', bullets: ['NQL', 'GraphQL', 'REST', 'Live Sync API', 'Asset CDN'] },
|
|
11924
|
+
* { surface: 'extensibility', bullets: ['Custom input components', 'editor plugins'] },
|
|
11917
11925
|
* ]
|
|
11918
11926
|
*/
|
|
11919
11927
|
capabilities?: Array<ClassificationCapability>;
|
|
@@ -18857,9 +18865,9 @@ interface FrameworkExerciseProperties {
|
|
|
18857
18865
|
* kind: 'language',
|
|
18858
18866
|
* language_flavor: 'query',
|
|
18859
18867
|
* governance: 'open_spec_stewarded',
|
|
18860
|
-
* steward: '
|
|
18868
|
+
* steward: 'Nimbus',
|
|
18861
18869
|
* openness: 'open',
|
|
18862
|
-
* spec_url: 'https://
|
|
18870
|
+
* spec_url: 'https://nimbus.example/docs/nql',
|
|
18863
18871
|
* current_version: '1.0',
|
|
18864
18872
|
* since: '2019',
|
|
18865
18873
|
* }
|
|
@@ -18889,13 +18897,13 @@ interface SpecificationProperties {
|
|
|
18889
18897
|
conformance?: string;
|
|
18890
18898
|
}
|
|
18891
18899
|
/** A foundational compositional unit a specification defines: the noun products
|
|
18892
|
-
* pass around and compose with (a
|
|
18900
|
+
* pass around and compose with (a Structured Text block, a typed reference, a
|
|
18893
18901
|
* Git commit, a Stripe PaymentIntent). Lifecycle-free, like `metric`.
|
|
18894
18902
|
*
|
|
18895
18903
|
* @example
|
|
18896
18904
|
* const properties: PrimitiveProperties = {
|
|
18897
18905
|
* primitive_kind: 'block',
|
|
18898
|
-
* defined_by: 'specification/
|
|
18906
|
+
* defined_by: 'specification/structured_text',
|
|
18899
18907
|
* since: '2018',
|
|
18900
18908
|
* }
|
|
18901
18909
|
*/
|
|
@@ -18908,7 +18916,7 @@ interface PrimitiveProperties {
|
|
|
18908
18916
|
since?: string;
|
|
18909
18917
|
}
|
|
18910
18918
|
/** An operating_lifecycle: a canonical, ordered (often cyclic) operating process
|
|
18911
|
-
* that many products' journey phases map onto — e.g.
|
|
18919
|
+
* that many products' journey phases map onto — e.g. Nimbus's content-operations
|
|
18912
18920
|
* lifecycle. Registry-hostable like a `specification`; the cross-product join key
|
|
18913
18921
|
* that turns per-surface journeys into one operation. Distinct from the per-entity
|
|
18914
18922
|
* status `lifecycle` grammar concept (this is an entity, not a state machine).
|
|
@@ -18916,13 +18924,13 @@ interface PrimitiveProperties {
|
|
|
18916
18924
|
* @example
|
|
18917
18925
|
* const properties: OperatingLifecycleProperties = {
|
|
18918
18926
|
* cyclic: true,
|
|
18919
|
-
* source: '
|
|
18927
|
+
* source: 'a canonical 5-stage content-ops lifecycle',
|
|
18920
18928
|
* }
|
|
18921
18929
|
*/
|
|
18922
18930
|
interface OperatingLifecycleProperties {
|
|
18923
18931
|
/** True if the process loops (e.g. Analyze → Extend → Plan). The sequence is fully expressed by the stages' `stage_order`; `cyclic` adds the wrap from the last stage back to the first. */
|
|
18924
18932
|
cyclic?: boolean;
|
|
18925
|
-
/** Origin of the canonical model (e.g. "
|
|
18933
|
+
/** Origin of the canonical model (e.g. "a published content-ops lifecycle"). Optional provenance; promote to an edge if it names a real `specification`/`document`. */
|
|
18926
18934
|
source?: string;
|
|
18927
18935
|
}
|
|
18928
18936
|
/** An operating_stage: one ordered stage of an `operating_lifecycle`. A product's
|
|
@@ -22532,7 +22540,7 @@ declare function isCanonical(text: string): boolean;
|
|
|
22532
22540
|
* it stamps the `upg_version` field of every `.upg` file written by the SDK.
|
|
22533
22541
|
* The `check:version-lockstep` gate enforces this at release time.
|
|
22534
22542
|
*/
|
|
22535
|
-
declare const UPG_VERSION: "0.23.
|
|
22543
|
+
declare const UPG_VERSION: "0.23.1";
|
|
22536
22544
|
/**
|
|
22537
22545
|
* The `.upg` JSON document format version. Written to the `upg_version` field.
|
|
22538
22546
|
* Evolves independently from `UPG_VERSION` (the catalogue version).
|
package/dist/index.js
CHANGED
|
@@ -495,7 +495,7 @@ var UPG_DOMAINS = [
|
|
|
495
495
|
{
|
|
496
496
|
id: "foundations",
|
|
497
497
|
label: "Foundations",
|
|
498
|
-
description: "The shared specifications and foundational primitives a product organisation stewards or implements everywhere. Specifications are governed specs (query languages, protocols, data formats, encodings) like
|
|
498
|
+
description: "The shared specifications and foundational primitives a product organisation stewards or implements everywhere. Specifications are governed specs (query languages, protocols, data formats, encodings) like NQL or Structured Text; primitives are the compositional units those specs define (a block, a reference, a query value). Both are registry-hostable canonicals that products implement, expose, or conform to. Distinct from a product feature: a specification has no single owner, no P&L, and no buyer; it is the rulebook many products point at.",
|
|
499
499
|
types: ["specification", "primitive", "operating_lifecycle", "operating_stage"]
|
|
500
500
|
}
|
|
501
501
|
];
|
|
@@ -3216,6 +3216,15 @@ var UPG_EDGE_CATALOG = {
|
|
|
3216
3216
|
// by another team's graph within the portfolio (0.17.3 locked predicate).
|
|
3217
3217
|
objective_depends_on_dependency: { forward_verb: "depends_on", reverse_verb: "dependency_of", classification: "cross-domain", source_type: "objective", target_type: "dependency", cross_product_eligible: true },
|
|
3218
3218
|
dependency_blocks_objective: { forward_verb: "blocks", reverse_verb: "blocked_by", classification: "cross-domain", source_type: "dependency", target_type: "objective", cross_product_eligible: true },
|
|
3219
|
+
// The RESOLVING side, distinct from the two blocking edges above.
|
|
3220
|
+
// `dependency_blocks_objective` names an objective the dependency holds up (the
|
|
3221
|
+
// waiting side); this names the objective whose completion CLEARS the
|
|
3222
|
+
// dependency (the providing side). In a portfolio, a dependency in one
|
|
3223
|
+
// product's graph points at the objective in another product's graph that
|
|
3224
|
+
// delivers the awaited work, instead of recording it only in the free-text
|
|
3225
|
+
// `resolution` property. cross_product_eligible — the resolving objective
|
|
3226
|
+
// lives in another product's graph.
|
|
3227
|
+
dependency_resolved_by_objective: { forward_verb: "resolved_by", reverse_verb: "resolves", classification: "cross-domain", source_type: "dependency", target_type: "objective", cross_product_eligible: true },
|
|
3219
3228
|
// objective / initiative → strategic_question. A planning doc's "Risks & Open
|
|
3220
3229
|
// Questions" section names unresolved coordination questions the plan is
|
|
3221
3230
|
// exposed to (who owns a capability across teams after a reorg). The
|
|
@@ -10476,9 +10485,9 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10476
10485
|
// ClassificationValueProperties: ClassificationValue: a value on a classification axis.
|
|
10477
10486
|
classification_value: {
|
|
10478
10487
|
rationale: { type: "string", description: "Short paragraph: why this value earns its own row/column. Longer narrative belongs in `summary_md` or attached `content_piece` nodes." },
|
|
10479
|
-
exemplars: { type: "string[]", description: "Free-text examples of products occupying this value. For queryable occupancy, prefer `competitor` nodes with `classified_as` edges. @example ['
|
|
10488
|
+
exemplars: { type: "string[]", description: "Free-text examples of products occupying this value. For queryable occupancy, prefer `competitor` nodes with `classified_as` edges. @example ['Nimbus', 'Larch', 'Prism']" },
|
|
10480
10489
|
commitments: { type: "object[]", description: "The N (typically 2\u20134) load-bearing commitments that define this category. Each commitment is a structural axis; removing it changes the category. Pairs with `capabilities`: commitments are the *load-bearing definition*; capabilities are the *surface offering*. @example [ { name: 'Typed content graph', description: 'Schemas in code; references as edges; content is structured data.' }, { name: 'Real-time backend', description: 'Live queries, CRDT collaboration, sub-second propagation.' }, { name: 'Embeddable studio', description: 'Editor is a library hosted inside the team app, not an external portal.' }, ]" },
|
|
10481
|
-
capabilities: { type: "object[]", description: "Structured capability bullets across the six canonical surfaces. Each surface appears at most once per `classification_value`. Pairs with `commitments`: capabilities describe what the category *offers*; commitments describe what *defines* it. @example [ { surface: 'delivery', bullets: ['
|
|
10490
|
+
capabilities: { type: "object[]", description: "Structured capability bullets across the six canonical surfaces. Each surface appears at most once per `classification_value`. Pairs with `commitments`: capabilities describe what the category *offers*; commitments describe what *defines* it. @example [ { surface: 'delivery', bullets: ['NQL', 'GraphQL', 'REST', 'Live Sync API', 'Asset CDN'] }, { surface: 'extensibility', bullets: ['Custom input components', 'editor plugins'] }, ]" }
|
|
10482
10491
|
},
|
|
10483
10492
|
// CodeRepositoryProperties: Code repository.
|
|
10484
10493
|
code_repository: {
|
|
@@ -10513,9 +10522,9 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10513
10522
|
analysis_type: { type: "string", enum: ["feature_comparison", "positioning", "swot", "pricing"], description: "Type of analysis. `feature_comparison` = side-by-side matrix. `positioning` = competitor positioning relative to each other. `swot` = strengths, weaknesses, opportunities, threats. `pricing` = pricing structure comparison." },
|
|
10514
10523
|
analysis_date: { type: "string", description: 'ISO date conducted. Competitive intelligence decays quickly; track snapshot age. @example "2026-03-15"' },
|
|
10515
10524
|
framework_id: { type: "string", description: 'Framework ID (references `UPGFramework.id`). @example "porter-five-forces", "swot-analysis", "competitive-matrix"' },
|
|
10516
|
-
empty_cells: { type: "object[]", description: "Empty cells in a 2-axis classification matrix that earn explicit commentary. Only the strategically interesting cells. Opportunity-kind cells are the most valuable; they identify unoccupied strategic space. Each entry references two `classification_value` nodes by id (one from each `classification_axis` child of this `competitive_analysis`). `validate_graph` enforces that the refs resolve to `classification_value` nodes whose parents are distinct `classification_axis` instances. See `ClassificationValueProperties.commitments` for the inverse \"occupied cell\" structural-definition shape. @example [ { axis_a_value_ref: 'val-git-based', axis_b_value_ref: 'val-
|
|
10525
|
+
empty_cells: { type: "object[]", description: "Empty cells in a 2-axis classification matrix that earn explicit commentary. Only the strategically interesting cells. Opportunity-kind cells are the most valuable; they identify unoccupied strategic space. Each entry references two `classification_value` nodes by id (one from each `classification_axis` child of this `competitive_analysis`). `validate_graph` enforces that the refs resolve to `classification_value` nodes whose parents are distinct `classification_axis` instances. See `ClassificationValueProperties.commitments` for the inverse \"occupied cell\" structural-definition shape. @example [ { axis_a_value_ref: 'val-git-based', axis_b_value_ref: 'val-structured-text', rationale_kind: 'opportunity', rationale_md: 'No technical reason; only adoption inertia. Watching brief.' }, { axis_a_value_ref: 'val-composable', axis_b_value_ref: 'val-wysiwyg', rationale_kind: 'structural', rationale_md: 'Composable rejects HTML blobs; WYSIWYG requires them.' }, ]" },
|
|
10517
10526
|
last_updated: { type: "string", description: 'Provenance: ISO date-time this record was last observed or refreshed. Distinct from `analysis_date` (when the analysis was conducted). @example "2026-06-13"' },
|
|
10518
|
-
source: { type: "string", description: 'Provenance: where this was observed. A changelog, pricing, or docs URL, an analyst report, or a research note. @example "https://
|
|
10527
|
+
source: { type: "string", description: 'Provenance: where this was observed. A changelog, pricing, or docs URL, an analyst report, or a research note. @example "https://docs.larch.example/changelog/"' },
|
|
10519
10528
|
confidence: {
|
|
10520
10529
|
type: "assessment",
|
|
10521
10530
|
scale_id: "confidence_5",
|
|
@@ -10543,7 +10552,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10543
10552
|
strengths: { type: "string[]", description: "Bulleted factual strengths. Each item is a short statement, not prose. @example ['Real-time multiplayer canvas', 'Generous free tier']" },
|
|
10544
10553
|
weaknesses: { type: "string[]", description: "Bulleted factual weaknesses: gaps, friction, or capabilities materially below market. @example ['Weak API query capabilities', 'No mobile companion']" },
|
|
10545
10554
|
last_updated: { type: "string", description: 'Provenance: ISO date-time this record was last observed or refreshed. Lets a stale record be told apart from a fresh one. @example "2026-06-13"' },
|
|
10546
|
-
source: { type: "string", description: 'Provenance: where this was observed. A changelog, pricing, or docs URL, an analyst report, or a research note. @example "https://
|
|
10555
|
+
source: { type: "string", description: 'Provenance: where this was observed. A changelog, pricing, or docs URL, an analyst report, or a research note. @example "https://docs.larch.example/pricing/"' },
|
|
10547
10556
|
confidence: {
|
|
10548
10557
|
type: "assessment",
|
|
10549
10558
|
scale_id: "confidence_5",
|
|
@@ -10565,7 +10574,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10565
10574
|
quality: { type: "string", enum: ["better", "same", "worse", "missing"], description: "Quality comparison. `better` = ours is meaningfully superior. `same` = roughly equivalent. `worse` = theirs is meaningfully superior. `missing` = we have no equivalent." },
|
|
10566
10575
|
parity_status: { type: "string", enum: ["ahead", "behind", "parity", "unique_to_us", "unique_to_them"], description: "Parity. More granular than `quality`; captures whether the gap is offensive or defensive. `ahead` = we lead. `behind` = they lead. `parity` = equivalent. `unique_to_us` / `unique_to_them` = only one side offers it." },
|
|
10567
10576
|
last_updated: { type: "string", description: 'ISO date this assessment was last updated. Competitor feature landscapes change quickly. @example "2026-02-15"' },
|
|
10568
|
-
source: { type: "string", description: 'Provenance: where this was observed. A changelog, pricing, or docs URL, an analyst report, or a research note. @example "https://
|
|
10577
|
+
source: { type: "string", description: 'Provenance: where this was observed. A changelog, pricing, or docs URL, an analyst report, or a research note. @example "https://docs.larch.example/changelog/"' },
|
|
10569
10578
|
confidence: {
|
|
10570
10579
|
type: "assessment",
|
|
10571
10580
|
scale_id: "confidence_5",
|
|
@@ -10591,7 +10600,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10591
10600
|
from_value: { type: "string", description: "Reclassification only. The prior `classification_value` id the competitor was classified as before this move (the superseded cell). Absent for a first-time classification (nothing was superseded)." },
|
|
10592
10601
|
to_value: { type: "string", description: "Reclassification only. The new `classification_value` id the competitor is classified as after this move (the cell the new classify edge points at)." },
|
|
10593
10602
|
last_updated: { type: "string", description: 'Provenance: ISO date-time this record was last observed or refreshed. @example "2026-06-13"' },
|
|
10594
|
-
source: { type: "string", description: 'Provenance: where this was observed. A changelog, pricing, or docs URL, an analyst report, or a research note. @example "https://
|
|
10603
|
+
source: { type: "string", description: 'Provenance: where this was observed. A changelog, pricing, or docs URL, an analyst report, or a research note. @example "https://docs.larch.example/changelog/"' },
|
|
10595
10604
|
confidence: {
|
|
10596
10605
|
type: "assessment",
|
|
10597
10606
|
scale_id: "confidence_5",
|
|
@@ -12022,7 +12031,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
12022
12031
|
// OperatingLifecycleProperties: An operating_lifecycle: a canonical, ordered (often cyclic) operating process
|
|
12023
12032
|
operating_lifecycle: {
|
|
12024
12033
|
cyclic: { type: "boolean", description: "True if the process loops (e.g. Analyze \u2192 Extend \u2192 Plan). The sequence is fully expressed by the stages' `stage_order`; `cyclic` adds the wrap from the last stage back to the first." },
|
|
12025
|
-
source: { type: "string", description: 'Origin of the canonical model (e.g. "
|
|
12034
|
+
source: { type: "string", description: 'Origin of the canonical model (e.g. "a published content-ops lifecycle"). Optional provenance; promote to an edge if it names a real `specification`/`document`.' }
|
|
12026
12035
|
},
|
|
12027
12036
|
// OperatingStageProperties: An operating_stage: one ordered stage of an `operating_lifecycle`. A product's
|
|
12028
12037
|
operating_stage: {
|
|
@@ -29712,7 +29721,7 @@ function isCanonical(text) {
|
|
|
29712
29721
|
}
|
|
29713
29722
|
|
|
29714
29723
|
// src/index.ts
|
|
29715
|
-
var UPG_VERSION = "0.23.
|
|
29724
|
+
var UPG_VERSION = "0.23.1";
|
|
29716
29725
|
var UPG_FORMAT_VERSION = "0.4.0";
|
|
29717
29726
|
var MARKDOWN_FORMAT_VERSION = "0.1";
|
|
29718
29727
|
var UPG_TYPES = getTypes();
|