@unified-product-graph/core 0.9.11 → 0.9.12
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/CHANGELOG.md +23 -0
- package/dist/index.cjs +244 -9
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +155 -17
- package/dist/index.d.ts +155 -17
- package/dist/index.js +243 -9
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -489,6 +489,12 @@ var UPG_DOMAINS = [
|
|
|
489
489
|
label: "Workspace",
|
|
490
490
|
description: "Spatial thinking spaces for arranging entities, debating decisions, and committing to the graph. Workspaces are transient canvases that sit alongside all other domains, letting you compose and explore relationships before they become permanent graph structure. A framework exercise is a structured workspace: one run of a framework (MoSCoW, RICE, Kano, \u2026) applied to a chosen set of entities, with each entity's result recorded on the exercise-to-entity edge rather than the entity itself.",
|
|
491
491
|
types: ["workspace", "framework_exercise"]
|
|
492
|
+
},
|
|
493
|
+
{
|
|
494
|
+
id: "foundations",
|
|
495
|
+
label: "Foundations",
|
|
496
|
+
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 GROQ or Portable 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.",
|
|
497
|
+
types: ["specification", "primitive"]
|
|
492
498
|
}
|
|
493
499
|
];
|
|
494
500
|
var UPG_ENTITY_TO_DOMAIN = Object.freeze(
|
|
@@ -508,6 +514,9 @@ function getDomainIdForType(entityType) {
|
|
|
508
514
|
|
|
509
515
|
// src/registry/entity-meta.ts
|
|
510
516
|
var UPG_ENTITY_META = [
|
|
517
|
+
// Foundations (0.9.12): shared specifications + the primitives they define.
|
|
518
|
+
{ name: "specification", type_id: "ent_352", maturity: "proposed", since: "0.9.12" },
|
|
519
|
+
{ name: "primitive", type_id: "ent_353", maturity: "proposed", since: "0.9.12" },
|
|
511
520
|
// ── Strategic ──
|
|
512
521
|
{ name: "product", type_id: "ent_001", maturity: "stable", since: "0.1.0" },
|
|
513
522
|
{ name: "outcome", type_id: "ent_002", maturity: "stable", since: "0.1.0" },
|
|
@@ -2926,7 +2935,14 @@ var UPG_EDGE_CATALOG = {
|
|
|
2926
2935
|
data_quality_rule_governs_data_source: { forward_verb: "governs", reverse_verb: "governed_by", classification: "semantic", source_type: "data_quality_rule", target_type: "data_source" },
|
|
2927
2936
|
// press_release → launch (marketing → go_to_market). A press release had 0
|
|
2928
2937
|
// outbound; it could not name the launch it announces.
|
|
2929
|
-
press_release_announces_launch: { forward_verb: "announces", reverse_verb: "announced_by", classification: "cross-domain", source_type: "press_release", target_type: "launch" }
|
|
2938
|
+
press_release_announces_launch: { forward_verb: "announces", reverse_verb: "announced_by", classification: "cross-domain", source_type: "press_release", target_type: "launch" },
|
|
2939
|
+
// ── Foundations (0.9.12): registry-internal relationships between canonical
|
|
2940
|
+
// specifications and primitives. Product-to-foundation links (implements,
|
|
2941
|
+
// exposes, conforms_to) are portfolio cross-edges, not catalog edges.
|
|
2942
|
+
specification_extends_specification: { forward_verb: "extends", reverse_verb: "extended_by", classification: "hierarchy", source_type: "specification", target_type: "specification" },
|
|
2943
|
+
specification_competes_with_specification: { forward_verb: "competes_with", reverse_verb: "competes_with", classification: "semantic", source_type: "specification", target_type: "specification" },
|
|
2944
|
+
primitive_defined_by_specification: { forward_verb: "defined_by", reverse_verb: "defines", classification: "semantic", source_type: "primitive", target_type: "specification" },
|
|
2945
|
+
primitive_composes_primitive: { forward_verb: "composes", reverse_verb: "composed_by", classification: "hierarchy", source_type: "primitive", target_type: "primitive" }
|
|
2930
2946
|
};
|
|
2931
2947
|
var UPG_POLYMORPHIC_EDGE_KEYS = [
|
|
2932
2948
|
// Universal semantic verbs
|
|
@@ -2993,7 +3009,14 @@ var UPG_CROSS_EDGE_TYPES = [
|
|
|
2993
3009
|
"instance_of",
|
|
2994
3010
|
"area_serves_persona",
|
|
2995
3011
|
"area_targets_market_segment",
|
|
2996
|
-
"rolls_up_to"
|
|
3012
|
+
"rolls_up_to",
|
|
3013
|
+
"product_implements_specification",
|
|
3014
|
+
"product_exposes_specification",
|
|
3015
|
+
"feature_conforms_to_specification",
|
|
3016
|
+
"api_contract_speaks_specification",
|
|
3017
|
+
"product_exposes_primitive",
|
|
3018
|
+
"feature_manipulates_primitive",
|
|
3019
|
+
"primitive_stored_as_data_type"
|
|
2997
3020
|
];
|
|
2998
3021
|
var REGISTRY_PRODUCT_ID = "registry";
|
|
2999
3022
|
|
|
@@ -3057,6 +3080,13 @@ function resolveEntityType(rawType) {
|
|
|
3057
3080
|
|
|
3058
3081
|
// src/grammar/hierarchy.ts
|
|
3059
3082
|
var UPG_VALID_CHILDREN = {
|
|
3083
|
+
// ── Foundations (0.9.12): registry canonicals that self-nest. A
|
|
3084
|
+
// specification extends a specification (a dialect of a parent spec); a
|
|
3085
|
+
// primitive composes primitives (a block contains spans). These back the
|
|
3086
|
+
// hierarchy-classified specification_extends_specification /
|
|
3087
|
+
// primitive_composes_primitive catalog edges.
|
|
3088
|
+
specification: ["specification"],
|
|
3089
|
+
primitive: ["primitive"],
|
|
3060
3090
|
// ── Product (root) ─────────────────────────────────────────────────────────
|
|
3061
3091
|
product: [
|
|
3062
3092
|
// Strategy
|
|
@@ -5977,9 +6007,42 @@ var FRAMEWORK_EXERCISE_LIFECYCLE = {
|
|
|
5977
6007
|
}
|
|
5978
6008
|
]
|
|
5979
6009
|
};
|
|
6010
|
+
var SPECIFICATION_LIFECYCLE = {
|
|
6011
|
+
entity_type: "specification",
|
|
6012
|
+
initial_phase: "draft",
|
|
6013
|
+
terminal_phases: ["superseded"],
|
|
6014
|
+
phases: [
|
|
6015
|
+
{
|
|
6016
|
+
id: "draft",
|
|
6017
|
+
label: "Draft",
|
|
6018
|
+
description: "Being authored. Not yet adopted as the canonical specification.",
|
|
6019
|
+
transitions_to: ["active", "superseded"]
|
|
6020
|
+
},
|
|
6021
|
+
{
|
|
6022
|
+
id: "active",
|
|
6023
|
+
label: "Active",
|
|
6024
|
+
description: "In force. The current authoritative version products implement and conform to.",
|
|
6025
|
+
transitions_to: ["deprecated", "superseded"]
|
|
6026
|
+
},
|
|
6027
|
+
{
|
|
6028
|
+
id: "deprecated",
|
|
6029
|
+
label: "Deprecated",
|
|
6030
|
+
description: "Still valid but no longer recommended; a successor exists or is imminent.",
|
|
6031
|
+
transitions_to: ["superseded"]
|
|
6032
|
+
},
|
|
6033
|
+
{
|
|
6034
|
+
id: "superseded",
|
|
6035
|
+
label: "Superseded",
|
|
6036
|
+
description: "Replaced by a newer specification. Retained for historical reference.",
|
|
6037
|
+
transitions_to: []
|
|
6038
|
+
}
|
|
6039
|
+
]
|
|
6040
|
+
};
|
|
5980
6041
|
var UPG_LIFECYCLES = [
|
|
5981
6042
|
// Product (root)
|
|
5982
6043
|
PRODUCT_LIFECYCLE,
|
|
6044
|
+
// Foundations (0.9.12)
|
|
6045
|
+
SPECIFICATION_LIFECYCLE,
|
|
5983
6046
|
// Discovery & Validation
|
|
5984
6047
|
RESEARCH_STUDY_LIFECYCLE,
|
|
5985
6048
|
NEED_LIFECYCLE,
|
|
@@ -6087,6 +6150,9 @@ function getLifecycleForType(entityType) {
|
|
|
6087
6150
|
return UPG_LIFECYCLES.find((l) => l.entity_type === entityType);
|
|
6088
6151
|
}
|
|
6089
6152
|
var UPG_LIFECYCLE_FREE_TYPES = /* @__PURE__ */ new Set([
|
|
6153
|
+
// ── Foundations (1 of 2): a primitive either exists or is deprecated; no
|
|
6154
|
+
// phase ladder (like metric). `specification` carries a lifecycle. ──
|
|
6155
|
+
"primitive",
|
|
6090
6156
|
// ── User (5): personas and JTBD atoms are reference data ──────────────────
|
|
6091
6157
|
"persona",
|
|
6092
6158
|
"job",
|
|
@@ -7158,6 +7224,50 @@ function getDeprecatedTypes() {
|
|
|
7158
7224
|
return deprecated;
|
|
7159
7225
|
}
|
|
7160
7226
|
var UPG_PROPERTY_MIGRATIONS = {
|
|
7227
|
+
// ── v0.9.12: technical-domain enum widening + data_flow orientation split ──
|
|
7228
|
+
//
|
|
7229
|
+
// Real authoring outgrew four engineering-domain enums. 0.9.12 widens them
|
|
7230
|
+
// (see properties/domains/engineering.ts) and adds a data_flow `orientation`
|
|
7231
|
+
// axis distinct from `direction` (cardinality). These rules dual-read the
|
|
7232
|
+
// legacy values so graphs authored before 0.9.12 stay valid on load:
|
|
7233
|
+
// - data_flow.direction inbound/outbound/internal -> properties.orientation,
|
|
7234
|
+
// and direction resets to unidirectional (all three were one-way).
|
|
7235
|
+
// - integration_pattern.pattern_type "data sync" -> data_sync,
|
|
7236
|
+
// backend_client -> client_library.
|
|
7237
|
+
// - service.service_type backend -> api (use the new `cli` for CLI tools).
|
|
7238
|
+
// - api_contract.protocol HTTP -> REST, HTTP/SSE -> the new SSE value.
|
|
7239
|
+
"0.9.12": [
|
|
7240
|
+
{
|
|
7241
|
+
kind: "remap_property_value",
|
|
7242
|
+
type: "data_flow",
|
|
7243
|
+
property: "direction",
|
|
7244
|
+
value_map: { inbound: "inbound", outbound: "outbound", internal: "internal" },
|
|
7245
|
+
to_property: "orientation",
|
|
7246
|
+
reset_value: "unidirectional",
|
|
7247
|
+
reason: "data_flow.direction conflated cardinality with orientation; the orientation values move to the new `orientation` property and direction resets to `unidirectional` (0.9.12)."
|
|
7248
|
+
},
|
|
7249
|
+
{
|
|
7250
|
+
kind: "remap_property_value",
|
|
7251
|
+
type: "integration_pattern",
|
|
7252
|
+
property: "pattern_type",
|
|
7253
|
+
value_map: { "data sync": "data_sync", backend_client: "client_library" },
|
|
7254
|
+
reason: 'integration_pattern.pattern_type widened in 0.9.12; legacy "data sync" snake-cases to data_sync and backend_client collapses to client_library.'
|
|
7255
|
+
},
|
|
7256
|
+
{
|
|
7257
|
+
kind: "remap_property_value",
|
|
7258
|
+
type: "service",
|
|
7259
|
+
property: "service_type",
|
|
7260
|
+
value_map: { backend: "api" },
|
|
7261
|
+
reason: "service.service_type `backend` is too generic to canonise; normalised to `api` in 0.9.12 (use `cli` for command-line tools)."
|
|
7262
|
+
},
|
|
7263
|
+
{
|
|
7264
|
+
kind: "remap_property_value",
|
|
7265
|
+
type: "api_contract",
|
|
7266
|
+
property: "protocol",
|
|
7267
|
+
value_map: { HTTP: "REST", "HTTP/SSE": "SSE" },
|
|
7268
|
+
reason: "api_contract.protocol normalised in 0.9.12: HTTP maps to REST and HTTP/SSE maps to the new SSE value."
|
|
7269
|
+
}
|
|
7270
|
+
],
|
|
7161
7271
|
// ── v0.8.0: UPG-574 deprecated-property removal pass ───────────────────
|
|
7162
7272
|
//
|
|
7163
7273
|
// The seven properties tagged `@deprecated since v0.4.0` that survived the
|
|
@@ -7651,6 +7761,25 @@ function migrateNodeProperties(node, fromVersion, toVersion) {
|
|
|
7651
7761
|
}
|
|
7652
7762
|
break;
|
|
7653
7763
|
}
|
|
7764
|
+
case "remap_property_value": {
|
|
7765
|
+
const props = workingNode.properties;
|
|
7766
|
+
if (!props || !(m.property in props)) break;
|
|
7767
|
+
const oldValue = props[m.property];
|
|
7768
|
+
if (typeof oldValue !== "string" || !(oldValue in m.value_map)) break;
|
|
7769
|
+
const mapped = m.value_map[oldValue];
|
|
7770
|
+
const nextProps = { ...props };
|
|
7771
|
+
if (m.to_property) {
|
|
7772
|
+
nextProps[m.to_property] = mapped;
|
|
7773
|
+
nextProps[m.property] = m.reset_value ?? mapped;
|
|
7774
|
+
changes.push({ kind: "remapped_property_value", property: m.property, to_property: m.to_property, value_changed: true });
|
|
7775
|
+
} else {
|
|
7776
|
+
nextProps[m.property] = mapped;
|
|
7777
|
+
changes.push({ kind: "remapped_property_value", property: m.property, value_changed: mapped !== oldValue });
|
|
7778
|
+
}
|
|
7779
|
+
workingNode.properties = nextProps;
|
|
7780
|
+
mutated = true;
|
|
7781
|
+
break;
|
|
7782
|
+
}
|
|
7654
7783
|
}
|
|
7655
7784
|
}
|
|
7656
7785
|
}
|
|
@@ -9104,7 +9233,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
9104
9233
|
// ApiContractProperties: API contract.
|
|
9105
9234
|
api_contract: {
|
|
9106
9235
|
spec_url: { type: "string", description: "URL of the specification document" },
|
|
9107
|
-
protocol: { type: "string", enum: ["REST", "GraphQL", "gRPC", "AsyncAPI", "SOAP", "WebSocket", "MQTT", "other"], description: "Communication protocol" },
|
|
9236
|
+
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." },
|
|
9108
9237
|
version: { type: "string", description: "API version" },
|
|
9109
9238
|
owner: { type: "string", description: "Maintaining person or team." }
|
|
9110
9239
|
},
|
|
@@ -9585,7 +9714,8 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
9585
9714
|
data_flow: {
|
|
9586
9715
|
trigger: { type: "string", description: "What triggers the flow" },
|
|
9587
9716
|
data_type: { type: "string", description: "Type of data transferred" },
|
|
9588
|
-
direction: { type: "string", enum: ["unidirectional", "bidirectional"], description: "Direction" },
|
|
9717
|
+
direction: { type: "string", enum: ["unidirectional", "bidirectional"], description: "Direction (cardinality of the link)." },
|
|
9718
|
+
orientation: { type: "string", enum: ["inbound", "outbound", "internal"], description: "Flow orientation relative to the system or component, a separate axis from `direction` (which is cardinality). A flow can be `unidirectional` AND `inbound`. Added in 0.9.12 to split the orientation axis that authors were conflating into `direction` (inbound/outbound/internal values)." },
|
|
9589
9719
|
protocol: { type: "string", enum: ["rest", "graphql", "grpc", "event", "webhook", "file"], description: "Communication protocol" }
|
|
9590
9720
|
},
|
|
9591
9721
|
// DataLineageProperties: DataLineage entity.
|
|
@@ -10341,7 +10471,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
10341
10471
|
},
|
|
10342
10472
|
// IntegrationPatternProperties: Integration pattern between systems.
|
|
10343
10473
|
integration_pattern: {
|
|
10344
|
-
pattern_type: { type: "string", enum: ["api", "event", "file", "database", "webhook"], description: "Type" },
|
|
10474
|
+
pattern_type: { type: "string", enum: ["api", "event", "file", "database", "webhook", "adapter", "client_library", "host_embedding", "pipes_and_filters", "data_sync"], description: "Type. `adapter`, `client_library`, `host_embedding`, `pipes_and_filters`, `data_sync` added in 0.9.12." },
|
|
10345
10475
|
protocol: { type: "string", description: "Communication protocol" }
|
|
10346
10476
|
},
|
|
10347
10477
|
// InteractionSpecProperties: Interaction specification.
|
|
@@ -11046,6 +11176,12 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
11046
11176
|
tier_order: { type: "number", description: "Display ordering (1 = first tier shown)" },
|
|
11047
11177
|
is_highlighted: { type: "boolean", description: "Highlighted as recommended / most popular" }
|
|
11048
11178
|
},
|
|
11179
|
+
// PrimitiveProperties: A foundational compositional unit a specification defines: the noun products
|
|
11180
|
+
primitive: {
|
|
11181
|
+
primitive_kind: { type: "string", enum: ["data_type", "object", "block", "unit"], description: "The shape of the thing products pass around." },
|
|
11182
|
+
defined_by: { type: "string", description: "The `specification/<slug>` this primitive comes from; nullable for spec-less internal primitives. Mirrors the `primitive_defined_by_specification` edge for quick lookup." },
|
|
11183
|
+
since: { type: "string", description: "Year or version the primitive was introduced." }
|
|
11184
|
+
},
|
|
11049
11185
|
// PrivacyPolicyProperties: Privacy policy.
|
|
11050
11186
|
privacy_policy: {
|
|
11051
11187
|
version: { type: "string", description: "Version identifier of the policy" },
|
|
@@ -11416,7 +11552,7 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
11416
11552
|
},
|
|
11417
11553
|
// ServiceProperties: Service or microservice.
|
|
11418
11554
|
service: {
|
|
11419
|
-
service_type: { type: "string", enum: ["web", "api", "worker", "db", "queue", "library", "mobile", "docs", "lambda"], description: "Functional classification. Expanded from Backstage's component type vocabulary." },
|
|
11555
|
+
service_type: { type: "string", enum: ["web", "api", "worker", "db", "queue", "library", "mobile", "docs", "lambda", "cli"], description: "Functional classification. Expanded from Backstage's component type vocabulary. `cli` added in 0.9.12." },
|
|
11420
11556
|
tech_stack: { type: "string[]", description: 'Technologies used (e.g. ["TypeScript", "Postgres", "Redis"])' },
|
|
11421
11557
|
owner: { type: "string", description: "Owning person or team. Backstage marks this required; strongly recommended." },
|
|
11422
11558
|
lifecycle: { type: "string", enum: ["experimental", "production", "deprecated"], description: 'Service maturity. Answers "how mature is it?". `experimental` = early-stage. `production` = battle-tested. `deprecated` = being phased out.' },
|
|
@@ -11538,6 +11674,18 @@ var UPG_PROPERTY_SCHEMA = {
|
|
|
11538
11674
|
},
|
|
11539
11675
|
rice_score: { type: "number", description: "Computed: (reach \xD7 impact \xD7 confidence) / effort. @deprecated 0.9.0:computed by the `rice-scoring` framework on its application edge, not stored on the entity. Removed in 0.9.1." }
|
|
11540
11676
|
},
|
|
11677
|
+
// SpecificationProperties: A governed specification: a query language, protocol, data format, encoding,
|
|
11678
|
+
specification: {
|
|
11679
|
+
kind: { type: "string", enum: ["language", "protocol", "data_format", "encoding", "interface_contract", "object_model"], description: "What the artifact fundamentally is, independent of how it is governed." },
|
|
11680
|
+
language_flavor: { type: "string", enum: ["query", "programming", "markup", "styling", "schema", "template"], description: "Set only when `kind` is `language`: the kind of language." },
|
|
11681
|
+
governance: { type: "string", enum: ["open_spec_stewarded", "open_standard_consortium", "proprietary_open", "internal_primitive", "de_facto"], description: "How the specification is governed (its ratification status, and whether it counts as a `standard`). `open_standard_consortium` is a formal standard (W3C, IETF, ISO); `de_facto` and `internal_primitive` never became one." },
|
|
11682
|
+
steward: { type: "string", description: "The governing body or organisation (may later become an `organization` ref)." },
|
|
11683
|
+
openness: { type: "string", enum: ["open", "proprietary"], description: "Whether the specification itself is open or proprietary." },
|
|
11684
|
+
spec_url: { type: "string", description: "URL of the published specification." },
|
|
11685
|
+
current_version: { type: "string", description: "Latest published version string." },
|
|
11686
|
+
since: { type: "string", description: "Year or version the specification was introduced." },
|
|
11687
|
+
conformance: { type: "string", description: "How conformance is tested (test suite, certification program). Optional." }
|
|
11688
|
+
},
|
|
11541
11689
|
// StakeholderProperties: Stakeholder entity.
|
|
11542
11690
|
stakeholder: {
|
|
11543
11691
|
stakeholder_type: { type: "string", enum: ["internal", "external", "investor", "regulator"], description: "Relationship of the stakeholder to the organisation" },
|
|
@@ -19523,6 +19671,30 @@ var OPERATIONS_QUALITY_PLAYBOOK = {
|
|
|
19523
19671
|
)
|
|
19524
19672
|
]
|
|
19525
19673
|
};
|
|
19674
|
+
var FOUNDATIONS_PLAYBOOK = {
|
|
19675
|
+
id: "playbook:foundations",
|
|
19676
|
+
name: "Foundations",
|
|
19677
|
+
version: "0.9.12",
|
|
19678
|
+
description: "Register the specifications your products implement and expose, and the primitives those specs define, as canonical entities instead of scattered per-product features.",
|
|
19679
|
+
region: "foundations",
|
|
19680
|
+
is_canonical: true,
|
|
19681
|
+
related_framework_ids: [],
|
|
19682
|
+
target_anchor_entity: "specification",
|
|
19683
|
+
creation_sequence: [
|
|
19684
|
+
seqStep(
|
|
19685
|
+
1,
|
|
19686
|
+
"Specifications",
|
|
19687
|
+
["specification"],
|
|
19688
|
+
"Define each governed spec your products implement, expose, or conform to (a query language, protocol, or format) as one canonical specification, not a per-product feature."
|
|
19689
|
+
),
|
|
19690
|
+
seqStep(
|
|
19691
|
+
2,
|
|
19692
|
+
"Primitives",
|
|
19693
|
+
["primitive"],
|
|
19694
|
+
"Define the compositional units those specs define (a block, a reference, a query value) as primitives, each linked to its specification."
|
|
19695
|
+
)
|
|
19696
|
+
]
|
|
19697
|
+
};
|
|
19526
19698
|
var UPG_PLAYBOOKS = [
|
|
19527
19699
|
// Region 1 - strategy_outcomes
|
|
19528
19700
|
STRATEGY_OUTCOMES_PLAYBOOK,
|
|
@@ -19545,7 +19717,9 @@ var UPG_PLAYBOOKS = [
|
|
|
19545
19717
|
// Region 9 - analytics_data
|
|
19546
19718
|
ANALYTICS_DATA_PLAYBOOK,
|
|
19547
19719
|
// Region 10 - operations_quality
|
|
19548
|
-
OPERATIONS_QUALITY_PLAYBOOK
|
|
19720
|
+
OPERATIONS_QUALITY_PLAYBOOK,
|
|
19721
|
+
// Region 11 - foundations
|
|
19722
|
+
FOUNDATIONS_PLAYBOOK
|
|
19549
19723
|
];
|
|
19550
19724
|
|
|
19551
19725
|
// src/step-sequence.ts
|
|
@@ -20287,7 +20461,7 @@ var UPG_DOMAIN_RINGS = [
|
|
|
20287
20461
|
id: "build",
|
|
20288
20462
|
label: "Build",
|
|
20289
20463
|
description: "How do we construct it?",
|
|
20290
|
-
domain_ids: ["engineering", "ai", "automation", "data_analytics", "testing", "devops", "security", "accessibility"]
|
|
20464
|
+
domain_ids: ["engineering", "foundations", "ai", "automation", "data_analytics", "testing", "devops", "security", "accessibility"]
|
|
20291
20465
|
},
|
|
20292
20466
|
{
|
|
20293
20467
|
id: "grow",
|
|
@@ -21202,10 +21376,30 @@ var WORKSPACE_GUIDE = {
|
|
|
21202
21376
|
{ description: "Workspace content is transient by default: promote discoveries to the graph, do not leave them in the workspace" }
|
|
21203
21377
|
]
|
|
21204
21378
|
};
|
|
21379
|
+
var FOUNDATIONS_GUIDE = {
|
|
21380
|
+
domain_id: "foundations",
|
|
21381
|
+
anchor_entity: "specification",
|
|
21382
|
+
creation_sequence: ["specification", "primitive"],
|
|
21383
|
+
patterns: [
|
|
21384
|
+
{
|
|
21385
|
+
name: "Specification defines primitives",
|
|
21386
|
+
description: "A specification governs one or more primitives; each primitive is defined_by the spec and may compose other primitives",
|
|
21387
|
+
entity_types: ["specification", "primitive"],
|
|
21388
|
+
edge_chain: ["primitive_defined_by_specification", "primitive_composes_primitive"]
|
|
21389
|
+
}
|
|
21390
|
+
],
|
|
21391
|
+
required_bridges: [],
|
|
21392
|
+
anti_patterns: [
|
|
21393
|
+
{ description: "A specification scattered as duplicate features across products instead of one canonical with instance_of links" },
|
|
21394
|
+
{ description: "Modelling a governed spec as a product: it has no single owner, P&L, or buyer; it is the rulebook products point at" }
|
|
21395
|
+
]
|
|
21396
|
+
};
|
|
21205
21397
|
var UPG_DOMAIN_GUIDES = [
|
|
21206
21398
|
// Nucleus
|
|
21207
21399
|
PORTFOLIO_GUIDE,
|
|
21208
21400
|
WORKSPACE_GUIDE,
|
|
21401
|
+
// Foundations (0.9.12)
|
|
21402
|
+
FOUNDATIONS_GUIDE,
|
|
21209
21403
|
// Ring 1: Understand
|
|
21210
21404
|
USER_GUIDE,
|
|
21211
21405
|
USER_RESEARCH_GUIDE,
|
|
@@ -26498,6 +26692,45 @@ var UPG_REGIONS = [
|
|
|
26498
26692
|
crosses_into: "users_needs"
|
|
26499
26693
|
}
|
|
26500
26694
|
]
|
|
26695
|
+
},
|
|
26696
|
+
{
|
|
26697
|
+
id: "foundations",
|
|
26698
|
+
label: "Foundations",
|
|
26699
|
+
order: 11,
|
|
26700
|
+
shape: "polymorphic-target",
|
|
26701
|
+
mental_model: "Shared specs and primitives that many products implement, expose, and conform to.",
|
|
26702
|
+
operators: [
|
|
26703
|
+
"platform architect",
|
|
26704
|
+
"standards author",
|
|
26705
|
+
"staff engineer",
|
|
26706
|
+
"API designer"
|
|
26707
|
+
],
|
|
26708
|
+
composes_atomic_domains: [
|
|
26709
|
+
"foundations"
|
|
26710
|
+
],
|
|
26711
|
+
entities: [
|
|
26712
|
+
{
|
|
26713
|
+
type: "specification",
|
|
26714
|
+
role: "anchor"
|
|
26715
|
+
},
|
|
26716
|
+
{
|
|
26717
|
+
type: "primitive",
|
|
26718
|
+
role: "container"
|
|
26719
|
+
}
|
|
26720
|
+
],
|
|
26721
|
+
anchor: {
|
|
26722
|
+
type: "specification",
|
|
26723
|
+
rationale: "The specification is the rulebook many products point at: they implement, expose, and conform to it, and primitives are defined by it. It is the high-inbound canonical of the Foundations region.",
|
|
26724
|
+
outbound_cross_edge_count: 0,
|
|
26725
|
+
inbound_cross_edge_count: 6
|
|
26726
|
+
},
|
|
26727
|
+
intra_edges: [
|
|
26728
|
+
"specification_extends_specification",
|
|
26729
|
+
"specification_competes_with_specification",
|
|
26730
|
+
"primitive_defined_by_specification",
|
|
26731
|
+
"primitive_composes_primitive"
|
|
26732
|
+
],
|
|
26733
|
+
boundary_edges: []
|
|
26501
26734
|
}
|
|
26502
26735
|
];
|
|
26503
26736
|
var UPG_REGION_MAP = Object.fromEntries(UPG_REGIONS.map((r) => [r.id, r]));
|
|
@@ -27004,7 +27237,7 @@ function isCanonical(text) {
|
|
|
27004
27237
|
}
|
|
27005
27238
|
|
|
27006
27239
|
// src/index.ts
|
|
27007
|
-
var UPG_VERSION = "0.9.
|
|
27240
|
+
var UPG_VERSION = "0.9.12";
|
|
27008
27241
|
var UPG_FORMAT_VERSION = "0.4.0";
|
|
27009
27242
|
var MARKDOWN_FORMAT_VERSION = "0.1";
|
|
27010
27243
|
var UPG_TYPES = getTypes();
|
|
@@ -27076,6 +27309,7 @@ export {
|
|
|
27076
27309
|
DISCOVERY_RESEARCH_VALIDATION_PLAYBOOK,
|
|
27077
27310
|
ENGINEERING_PLATFORM_PLAYBOOK,
|
|
27078
27311
|
EXPERIENCE_DESIGN_BRAND_PLAYBOOK,
|
|
27312
|
+
FOUNDATIONS_PLAYBOOK,
|
|
27079
27313
|
LEGACY_PRODUCT_STAGES,
|
|
27080
27314
|
MARKDOWN_FORMAT_VERSION,
|
|
27081
27315
|
MARKET_COMPETITIVE_PLAYBOOK,
|