@unified-product-graph/core 0.30.0 → 0.31.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/CHANGELOG.md +28 -0
- package/README.md +1 -1
- package/dist/index.cjs +1689 -129
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +1218 -178
- package/dist/index.d.ts +1218 -178
- package/dist/index.js +1685 -129
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.d.cts
CHANGED
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
* @see registry/entity-meta.ts for type IDs and maturity
|
|
12
12
|
* @see grammar/hierarchy.ts for parent-child rules
|
|
13
13
|
*/
|
|
14
|
-
type UPGEntityType = 'specification' | 'primitive' | 'operating_lifecycle' | 'operating_stage' | 'product' | 'outcome' | 'objective' | 'key_result' | 'metric' | 'metric_quality_assessment' | 'vision' | 'mission' | 'strategic_theme' | 'initiative' | 'capability' | 'value_stream' | 'strategic_pillar' | 'assumption' | 'decision' | 'constraint' | 'strategic_question' | 'persona' | 'job' | 'need' | 'desired_outcome' | 'job_step' | 'switching_cost' | 'opportunity' | 'solution' | 'feasibility_study' | 'design_sprint' | 'hypothesis' | 'hypothesis_evidence' | 'experiment' | 'experiment_plan' | 'experiment_run' | 'learning' | 'test_plan' | 'evidence' | 'research_plan' | 'competitor' | 'competitor_feature' | 'competitor_signal' | 'market_trend' | 'market_segment' | 'competitive_analysis' | 'classification_axis' | 'classification_value' | 'research_study' | 'insight' | 'participant' | 'observation' | 'quote' | 'affinity_cluster' | 'research_question' | 'interview_guide' | 'survey_response' | 'user_journey' | 'journey_step' | 'journey_phase' | 'journey_action' | 'design_question' | 'design_concept' | 'prototype' | 'wireframe' | 'user_flow' | 'screen' | 'screen_state' | 'surface' | 'annotation' | 'interaction_spec' | 'design_component' | 'design_token' | 'design_system' | 'design_pattern' | 'design_guideline' | 'brand_identity' | 'brand_colour' | 'brand_typography' | 'brand_voice' | 'brand_logo' | 'brand_imagery' | 'feature_area' | 'feature' | 'epic' | 'user_story' | 'story_statement' | 'story_task' | 'acceptance_criterion' | 'release' | 'task' | 'bug' | 'roadmap' | 'roadmap_item' | 'theme' | 'roadmap_theme' | 'changelog' | 'planning_cycle' | 'configuration_axis' | 'bounded_context' | 'service' | 'domain_event' | 'api_contract' | 'technical_debt_item' | 'feature_flag' | 'deployment' | 'aggregate' | 'domain_entity' | 'value_object' | 'command' | 'read_model' | 'api_endpoint' | 'database_schema' | 'queue_topic' | 'build_artifact' | 'code_repository' | 'library_dependency' | 'integration_pattern' | 'external_api' | 'data_flow' | 'investigation' | 'root_cause' | 'symptom' | 'fix' | 'funnel' | 'funnel_step' | 'acquisition_channel' | 'growth_campaign' | 'cohort' | 'behavioral_segment' | 'growth_loop' | 'variant' | 'attribution_model' | 'business_model' | 'value_proposition' | 'revenue_stream' | 'pricing_tier' | 'cost_structure' | 'unit_economics' | 'partnership' | 'key_resource' | 'key_activity' | 'customer_relationship' | 'distribution_channel' | 'gtm_strategy' | 'ideal_customer_profile' | 'positioning' | 'messaging' | 'launch' | 'content_strategy' | 'sales_motion' | 'competitive_battle_card' | 'demand_gen_program' | 'territory' | 'objection' | 'rebuttal' | 'proof_point' | 'team' | 'role' | 'stakeholder' | 'person' | 'team_okr' | 'retrospective' | 'dependency' | 'department' | 'skill' | 'ceremony' | 'capacity_plan' | 'data_source' | 'event_schema' | 'dashboard' | 'data_model' | 'data_quality_rule' | 'data_product' | 'data_pipeline' | 'data_lineage' | 'glossary_term' | 'data_domain' | 'report' | 'content_piece' | 'knowledge_base_article' | 'brand_asset' | 'prompt_template' | 'content_calendar' | 'content_theme' | 'documentation_template' | 'document' | 'legal_entity' | 'ip_asset' | 'contract' | 'contract_clause' | 'privacy_policy' | 'compliance_requirement' | 'risk' | 'data_contract' | 'audit_log_policy' | 'compliance_framework' | 'security_audit' | 'service_level_indicator' | 'service_level_objective' | 'error_budget' | 'incident' | 'postmortem' | 'runbook' | 'monitor' | 'alert_rule' | 'ci_pipeline' | 'release_strategy' | 'on_call_rotation' | 'infrastructure_component' | 'threat_model' | 'threat' | 'vulnerability' | 'security_control' | 'security_policy' | 'penetration_test' | 'security_review' | 'data_classification' | 'access_policy' | 'a11y_standard' | 'a11y_guideline' | 'a11y_audit' | 'a11y_issue' | 'a11y_annotation' | 'test_suite' | 'test_case' | 'qa_session' | 'regression_test' | 'test_coverage_report' | 'test_environment' | 'test_result' | 'feedback_program' | 'feature_request' | 'feedback_vote' | 'nps_campaign' | 'user_advisory_board' | 'beta_program' | 'feedback_theme' | 'pricing_strategy' | 'discount_strategy' | 'trial_config' | 'paywall' | 'ai_model' | 'prompt_version' | 'eval_benchmark' | 'eval_run' | 'ai_cost_tracker' | 'hallucination_report' | 'ai_guardrail' | 'model_comparison' | 'ai_experiment' | 'ai_dataset' | 'ai_trace' | 'workflow_template' | 'workflow_run' | 'agent_definition' | 'agent_session' | 'review_gate' | 'approval_record' | 'agent_skill' | 'agent_hook' | 'workflow_artifact' | 'agent_task' | 'organization' | 'portfolio' | 'product_area' | 'workspace' | 'framework_exercise' | 'account' | 'contact' | 'lead' | 'deal' | 'pipeline_sales' | 'pipeline_stage' | 'quote_document' | 'subscription' | 'invoice' | 'forecast' | 'program' | 'project' | 'milestone' | 'risk_register' | 'change_request' | 'deliverable' | 'resource_allocation' | 'status_report' | 'marketing_strategy' | 'marketing_channel' | 'marketing_campaign_plan' | 'email_sequence' | 'social_post' | 'seo_keyword' | 'ad_creative' | 'press_release' | 'event' | 'community_initiative' | 'support_ticket' | 'customer_feedback' | 'churn_reason' | 'customer_health_score' | 'playbook' | 'service_level_agreement' | 'customer_journey_stage' | 'touchpoint' | 'success_milestone' | 'service_blueprint' | 'locale' | 'translation_key' | 'translation_bundle' | 'locale_config' | 'cultural_adaptation' | 'regional_pricing' | 'education_program' | 'tutorial' | 'walkthrough' | 'webinar' | 'certification' | 'help_video' | 'learning_path' | 'partner_program' | 'partner_tier' | 'api_ecosystem' | 'marketplace_listing' | 'developer_portal' | 'integration_partner' | 'partner_revenue_share';
|
|
14
|
+
type UPGEntityType = 'specification' | 'primitive' | 'operating_lifecycle' | 'operating_stage' | 'product' | 'outcome' | 'objective' | 'key_result' | 'metric' | 'metric_quality_assessment' | 'vision' | 'mission' | 'strategic_theme' | 'initiative' | 'capability' | 'value_stream' | 'strategic_pillar' | 'assumption' | 'decision' | 'constraint' | 'strategic_question' | 'persona' | 'job' | 'need' | 'desired_outcome' | 'job_step' | 'switching_cost' | 'opportunity' | 'solution' | 'feasibility_study' | 'design_sprint' | 'hypothesis' | 'hypothesis_evidence' | 'experiment' | 'experiment_plan' | 'experiment_run' | 'learning' | 'test_plan' | 'evidence' | 'research_plan' | 'competitor' | 'competitor_feature' | 'competitor_signal' | 'market_trend' | 'market_segment' | 'competitive_analysis' | 'classification_axis' | 'classification_value' | 'research_study' | 'insight' | 'participant' | 'observation' | 'quote' | 'affinity_cluster' | 'research_question' | 'interview_guide' | 'survey_response' | 'user_journey' | 'journey_step' | 'journey_phase' | 'journey_action' | 'design_question' | 'design_concept' | 'prototype' | 'wireframe' | 'user_flow' | 'screen' | 'screen_state' | 'surface' | 'annotation' | 'interaction_spec' | 'design_component' | 'design_token' | 'design_system' | 'design_pattern' | 'design_guideline' | 'brand_identity' | 'brand_colour' | 'brand_typography' | 'brand_voice' | 'brand_logo' | 'brand_imagery' | 'feature_area' | 'feature' | 'epic' | 'user_story' | 'story_statement' | 'story_task' | 'acceptance_criterion' | 'release' | 'task' | 'bug' | 'roadmap' | 'roadmap_item' | 'theme' | 'roadmap_theme' | 'changelog' | 'planning_cycle' | 'configuration_axis' | 'bounded_context' | 'service' | 'domain_event' | 'api_contract' | 'technical_debt_item' | 'feature_flag' | 'deployment' | 'aggregate' | 'domain_entity' | 'value_object' | 'command' | 'read_model' | 'api_endpoint' | 'database_schema' | 'queue_topic' | 'build_artifact' | 'code_repository' | 'library_dependency' | 'integration_pattern' | 'external_api' | 'data_flow' | 'investigation' | 'root_cause' | 'symptom' | 'fix' | 'funnel' | 'funnel_step' | 'acquisition_channel' | 'growth_campaign' | 'cohort' | 'behavioral_segment' | 'growth_loop' | 'variant' | 'attribution_model' | 'business_model' | 'value_proposition' | 'revenue_stream' | 'pricing_tier' | 'cost_structure' | 'unit_economics' | 'partnership' | 'key_resource' | 'key_activity' | 'customer_relationship' | 'distribution_channel' | 'gtm_strategy' | 'ideal_customer_profile' | 'positioning' | 'messaging' | 'launch' | 'content_strategy' | 'sales_motion' | 'competitive_battle_card' | 'demand_gen_program' | 'territory' | 'objection' | 'rebuttal' | 'proof_point' | 'team' | 'role' | 'stakeholder' | 'person' | 'team_okr' | 'retrospective' | 'dependency' | 'department' | 'skill' | 'ceremony' | 'capacity_plan' | 'data_source' | 'event_schema' | 'dashboard' | 'data_model' | 'data_quality_rule' | 'data_product' | 'data_pipeline' | 'data_lineage' | 'glossary_term' | 'data_domain' | 'report' | 'content_piece' | 'knowledge_base_article' | 'brand_asset' | 'prompt_template' | 'content_calendar' | 'content_theme' | 'documentation_template' | 'document' | 'legal_entity' | 'ip_asset' | 'contract' | 'contract_clause' | 'privacy_policy' | 'compliance_requirement' | 'risk' | 'data_contract' | 'audit_log_policy' | 'compliance_framework' | 'security_audit' | 'service_level_indicator' | 'service_level_objective' | 'error_budget' | 'incident' | 'postmortem' | 'runbook' | 'monitor' | 'alert_rule' | 'ci_pipeline' | 'release_strategy' | 'on_call_rotation' | 'infrastructure_component' | 'threat_model' | 'threat' | 'vulnerability' | 'security_control' | 'security_policy' | 'penetration_test' | 'security_review' | 'data_classification' | 'access_policy' | 'a11y_standard' | 'a11y_guideline' | 'a11y_audit' | 'a11y_issue' | 'a11y_annotation' | 'test_suite' | 'test_case' | 'qa_session' | 'regression_test' | 'test_coverage_report' | 'test_environment' | 'test_result' | 'feedback_program' | 'feature_request' | 'feedback_vote' | 'nps_campaign' | 'user_advisory_board' | 'beta_program' | 'feedback_theme' | 'pricing_strategy' | 'discount_strategy' | 'trial_config' | 'paywall' | 'ai_model' | 'prompt_version' | 'eval_benchmark' | 'eval_run' | 'ai_cost_tracker' | 'hallucination_report' | 'ai_guardrail' | 'model_comparison' | 'ai_experiment' | 'ai_dataset' | 'ai_trace' | 'workflow_template' | 'workflow_run' | 'agent_definition' | 'agent_session' | 'review_gate' | 'approval_record' | 'agent_skill' | 'agent_hook' | 'workflow_artifact' | 'agent_task' | 'organization' | 'portfolio' | 'product_area' | 'workspace' | 'framework_exercise' | 'composition' | 'account' | 'contact' | 'lead' | 'deal' | 'pipeline_sales' | 'pipeline_stage' | 'quote_document' | 'subscription' | 'invoice' | 'forecast' | 'program' | 'project' | 'milestone' | 'risk_register' | 'change_request' | 'deliverable' | 'resource_allocation' | 'status_report' | 'marketing_strategy' | 'marketing_channel' | 'marketing_campaign_plan' | 'email_sequence' | 'social_post' | 'seo_keyword' | 'ad_creative' | 'press_release' | 'event' | 'community_initiative' | 'support_ticket' | 'customer_feedback' | 'churn_reason' | 'customer_health_score' | 'playbook' | 'service_level_agreement' | 'customer_journey_stage' | 'touchpoint' | 'success_milestone' | 'service_blueprint' | 'locale' | 'translation_key' | 'translation_bundle' | 'locale_config' | 'cultural_adaptation' | 'regional_pricing' | 'education_program' | 'tutorial' | 'walkthrough' | 'webinar' | 'certification' | 'help_video' | 'learning_path' | 'partner_program' | 'partner_tier' | 'api_ecosystem' | 'marketplace_listing' | 'developer_portal' | 'integration_partner' | 'partner_revenue_share';
|
|
15
15
|
/**
|
|
16
16
|
* No entity types are currently deprecated; this union is `never`. The
|
|
17
17
|
* deprecated-name bridge, which previously widened this union to early
|
|
@@ -138,11 +138,27 @@ interface UPGBaseNode {
|
|
|
138
138
|
* wall-clock timestamp: generation is deterministic). This file is a GATED
|
|
139
139
|
* artifact — check:generated re-runs the generator and fails on any drift, so
|
|
140
140
|
* edit the sources above, never this file.
|
|
141
|
-
* Entity types with properties:
|
|
141
|
+
* Entity types with properties: 326
|
|
142
142
|
*/
|
|
143
143
|
interface PropertyDefinition {
|
|
144
144
|
type: 'string' | 'number' | 'boolean' | 'string[]' | 'object' | 'object[]' | 'assessment';
|
|
145
|
+
/**
|
|
146
|
+
* The CONTRACT: what the property means and the semantics a caller must
|
|
147
|
+
* not get wrong. Two or three sentences. This is what a hover card, a
|
|
148
|
+
* tooltip and a token-conscious agent read.
|
|
149
|
+
*/
|
|
145
150
|
description?: string;
|
|
151
|
+
/**
|
|
152
|
+
* The LONGFORM half (`@remarks` in the source JSDoc): rationale, edge
|
|
153
|
+
* cases, workflow recipes, design history. The reference page renders it
|
|
154
|
+
* behind a disclosure; hovers and schema summaries leave it out.
|
|
155
|
+
*
|
|
156
|
+
* Semantics MOVE here, they are never deleted. A field that stops being
|
|
157
|
+
* findable is worse than a field that is long, which is the lesson a
|
|
158
|
+
* reporter taught by concluding a capability did not exist when it was
|
|
159
|
+
* documented somewhere they did not read.
|
|
160
|
+
*/
|
|
161
|
+
notes?: string;
|
|
146
162
|
enum?: string[];
|
|
147
163
|
/** For 'assessment'-typed fields: the canonical UPG scale this property is rated on (e.g. 'confidence_5'). */
|
|
148
164
|
scale_id?: string;
|
|
@@ -319,6 +335,32 @@ declare const CONFIGURATION_VARIANCE_EDGE_PROPERTY_SCHEMA: PropertySchema;
|
|
|
319
335
|
* as "one axis per semantic lever".
|
|
320
336
|
*/
|
|
321
337
|
declare const CONFIGURATION_QUALIFIER_EDGE_PROPERTY_SCHEMA: PropertySchema;
|
|
338
|
+
/**
|
|
339
|
+
* Property schema carried by `workspace_arranges_node`: where a node sits on a
|
|
340
|
+
* canvas, and how its card is presented there.
|
|
341
|
+
*
|
|
342
|
+
* A PLACEMENT IS A FACT ABOUT THE RELATIONSHIP, not about either endpoint. The
|
|
343
|
+
* same persona can sit at different coordinates on five different canvases, and
|
|
344
|
+
* none of those coordinates is a property of the persona. This is the same
|
|
345
|
+
* principle `framework_exercise_includes_node` applies to per-entity results.
|
|
346
|
+
*
|
|
347
|
+
* `selected` IS DELIBERATELY ABSENT. Selection is ephemeral UI state, and
|
|
348
|
+
* persisting it means reloading a canvas restores someone's month-old
|
|
349
|
+
* selection and every click dirties the file. The spec does not bless it.
|
|
350
|
+
*
|
|
351
|
+
* AT MOST ONE ARRANGEMENT PER (WORKSPACE, NODE) PAIR: a card appears once on a
|
|
352
|
+
* canvas. The write amplification is real and named rather than hidden:
|
|
353
|
+
* dragging a card rewrites edge properties and so changes the body checksum,
|
|
354
|
+
* which is diff noise on a shared graph. It is bounded by the tool writing only
|
|
355
|
+
* the canvases a user explicitly keeps, and by viewport panning touching the
|
|
356
|
+
* opaque `canvas` bag rather than any edge.
|
|
357
|
+
*
|
|
358
|
+
* `x` and `y` are expected on every instance. Requiredness here is convention
|
|
359
|
+
* rather than enforcement: `PropertyDefinition.required` names required keys
|
|
360
|
+
* WITHIN a nested object, and the edge-property validator has no top-level
|
|
361
|
+
* required-key concept, so the contract is stated in each description.
|
|
362
|
+
*/
|
|
363
|
+
declare const WORKSPACE_ARRANGEMENT_EDGE_PROPERTY_SCHEMA: PropertySchema;
|
|
322
364
|
declare const UPG_EDGE_CATALOG: {
|
|
323
365
|
product_targets_persona: {
|
|
324
366
|
forward_verb: string;
|
|
@@ -3285,6 +3327,20 @@ declare const UPG_EDGE_CATALOG: {
|
|
|
3285
3327
|
source_type: string;
|
|
3286
3328
|
target_type: string;
|
|
3287
3329
|
};
|
|
3330
|
+
eval_benchmark_measures_node: {
|
|
3331
|
+
forward_verb: string;
|
|
3332
|
+
reverse_verb: string;
|
|
3333
|
+
classification: "semantic";
|
|
3334
|
+
source_type: string;
|
|
3335
|
+
target_type: string;
|
|
3336
|
+
};
|
|
3337
|
+
eval_benchmark_draws_cases_from_ai_dataset: {
|
|
3338
|
+
forward_verb: string;
|
|
3339
|
+
reverse_verb: string;
|
|
3340
|
+
classification: "semantic";
|
|
3341
|
+
source_type: string;
|
|
3342
|
+
target_type: string;
|
|
3343
|
+
};
|
|
3288
3344
|
ai_guardrail_enforces_security_policy: {
|
|
3289
3345
|
forward_verb: string;
|
|
3290
3346
|
reverse_verb: string;
|
|
@@ -3495,6 +3551,13 @@ declare const UPG_EDGE_CATALOG: {
|
|
|
3495
3551
|
source_type: string;
|
|
3496
3552
|
target_type: string;
|
|
3497
3553
|
};
|
|
3554
|
+
agent_task_executes_task: {
|
|
3555
|
+
forward_verb: string;
|
|
3556
|
+
reverse_verb: string;
|
|
3557
|
+
classification: "cross-domain";
|
|
3558
|
+
source_type: string;
|
|
3559
|
+
target_type: string;
|
|
3560
|
+
};
|
|
3498
3561
|
product_measures_funnel: {
|
|
3499
3562
|
forward_verb: string;
|
|
3500
3563
|
reverse_verb: string;
|
|
@@ -5301,6 +5364,13 @@ declare const UPG_EDGE_CATALOG: {
|
|
|
5301
5364
|
source_type: string;
|
|
5302
5365
|
target_type: string;
|
|
5303
5366
|
};
|
|
5367
|
+
product_targets_milestone: {
|
|
5368
|
+
forward_verb: string;
|
|
5369
|
+
reverse_verb: string;
|
|
5370
|
+
classification: "hierarchy";
|
|
5371
|
+
source_type: string;
|
|
5372
|
+
target_type: string;
|
|
5373
|
+
};
|
|
5304
5374
|
project_produces_deliverable: {
|
|
5305
5375
|
forward_verb: string;
|
|
5306
5376
|
reverse_verb: string;
|
|
@@ -5987,6 +6057,22 @@ declare const UPG_EDGE_CATALOG: {
|
|
|
5987
6057
|
source_type: string;
|
|
5988
6058
|
target_type: string;
|
|
5989
6059
|
};
|
|
6060
|
+
workspace_arranges_node: {
|
|
6061
|
+
forward_verb: string;
|
|
6062
|
+
reverse_verb: string;
|
|
6063
|
+
classification: "cross-domain";
|
|
6064
|
+
source_type: string;
|
|
6065
|
+
target_type: string;
|
|
6066
|
+
carries_properties: true;
|
|
6067
|
+
property_schema: PropertySchema;
|
|
6068
|
+
};
|
|
6069
|
+
composition_focuses_node: {
|
|
6070
|
+
forward_verb: string;
|
|
6071
|
+
reverse_verb: string;
|
|
6072
|
+
classification: "cross-domain";
|
|
6073
|
+
source_type: string;
|
|
6074
|
+
target_type: string;
|
|
6075
|
+
};
|
|
5990
6076
|
feature_addresses_job: {
|
|
5991
6077
|
forward_verb: string;
|
|
5992
6078
|
reverse_verb: string;
|
|
@@ -7974,7 +8060,9 @@ declare function isDeliberateOnlyEdge(type: string): boolean;
|
|
|
7974
8060
|
/**
|
|
7975
8061
|
* Canonical allow-list of edges that use the `'node'` wildcard endpoint.
|
|
7976
8062
|
*
|
|
7977
|
-
*
|
|
8063
|
+
* Ten semantic families are sanctioned. The count and the partition are
|
|
8064
|
+
* asserted in `spec-integrity.test.ts`, so this list cannot silently fall out
|
|
8065
|
+
* of step with the array below the way it did between 0.28.0 and 0.31.0:
|
|
7978
8066
|
*
|
|
7979
8067
|
* 1. **Universal semantic verbs**: any node can inform / constrain / inspire
|
|
7980
8068
|
* any other node. The meaning is deliberately abstract; consumers render
|
|
@@ -7998,6 +8086,17 @@ declare function isDeliberateOnlyEdge(type: string): boolean;
|
|
|
7998
8086
|
* produce any entity type arranged in it (decision, feature, persona, ...).
|
|
7999
8087
|
* Widened from the single-target `workspace_produced_decision`; see
|
|
8000
8088
|
* `UPG_EDGE_MIGRATIONS` for the rename rule.
|
|
8089
|
+
* 9. **Canvas arrangement and published-view focus**: any entity can be dragged
|
|
8090
|
+
* onto a canvas or shown in a published view, and neither placement carries
|
|
8091
|
+
* a structural role, so both collapse polymorphic rather than enumerating
|
|
8092
|
+
* the type universe twice. Both are `cross-domain`, so neither enters
|
|
8093
|
+
* `UPG_VALID_CHILDREN` and neither can be walked as containment.
|
|
8094
|
+
* 10. **Benchmark subject** (0.31.0): an eval measures a tool, a document, a
|
|
8095
|
+
* check, an importer, a feature. Registered as OVER-WIDE by admission,
|
|
8096
|
+
* because a benchmark measures a measurable thing rather than literally any
|
|
8097
|
+
* node; the width is what it costs to avoid answering "what is a tool in the
|
|
8098
|
+
* graph" as a side effect of building an eval harness. Reach for the typed
|
|
8099
|
+
* `eval_benchmark_measures_feature` when the subject IS a feature.
|
|
8001
8100
|
*
|
|
8002
8101
|
* Adding a new polymorphic edge requires extending this array AND the
|
|
8003
8102
|
* spec-integrity regression test, which forces a conscious decision and
|
|
@@ -8879,7 +8978,7 @@ declare const UPG_DOMAINS: readonly [{
|
|
|
8879
8978
|
}, {
|
|
8880
8979
|
readonly id: "program_mgmt";
|
|
8881
8980
|
readonly label: "Program Management";
|
|
8882
|
-
readonly description: "Coordinating delivery across teams and timelines. Programs are the highest container. Projects break programs down. Milestones mark key dates. Risk registers track threats to delivery. Change requests manage scope changes. Deliverables define what ships. Resource allocations assign effort. Status reports communicate progress. Connects Product Specification (what to deliver) to Team & Organisation (who delivers).";
|
|
8981
|
+
readonly description: "Coordinating delivery across teams and timelines. Programs are the highest container. Projects break programs down. Milestones mark key dates, and hang from either a project or, where a product owns the date outright with no program above it, from the product itself. Risk registers track threats to delivery. Change requests manage scope changes. Deliverables define what ships. Resource allocations assign effort. Status reports communicate progress. Connects Product Specification (what to deliver) to Team & Organisation (who delivers).";
|
|
8883
8982
|
readonly types: readonly ["program", "project", "milestone", "risk_register", "change_request", "deliverable", "resource_allocation", "status_report"];
|
|
8884
8983
|
}, {
|
|
8885
8984
|
readonly id: "marketing";
|
|
@@ -8914,8 +9013,8 @@ declare const UPG_DOMAINS: readonly [{
|
|
|
8914
9013
|
}, {
|
|
8915
9014
|
readonly id: "workspace";
|
|
8916
9015
|
readonly label: "Workspace";
|
|
8917
|
-
readonly 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, …) applied to a chosen set of entities, with each entity's result recorded on the exercise-to-entity edge rather than the entity itself.";
|
|
8918
|
-
readonly types: readonly ["workspace", "framework_exercise"];
|
|
9016
|
+
readonly 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, …) applied to a chosen set of entities, with each entity's result recorded on the exercise-to-entity edge rather than the entity itself. A composition is the durable other half: a named, published view assembled from a canvas, with a stable slug people link to and a revision history, whose frozen arrangement holds pointers rather than copied content.";
|
|
9017
|
+
readonly types: readonly ["workspace", "framework_exercise", "composition"];
|
|
8919
9018
|
}, {
|
|
8920
9019
|
readonly id: "foundations";
|
|
8921
9020
|
readonly label: "Foundations";
|
|
@@ -9564,9 +9663,29 @@ declare function getLifecycleRenderShape(entityType: string): LifecycleRenderSha
|
|
|
9564
9663
|
* encoding (value) so UIs can display labels and formulas can compute
|
|
9565
9664
|
* scores. */
|
|
9566
9665
|
interface UPGAssessment {
|
|
9567
|
-
/** The numeric value, used for computation.
|
|
9666
|
+
/** The numeric value, used for computation. Must fall within the referenced
|
|
9667
|
+
* scale's `min`..`max`. This is the ONLY field that carries cross-tool meaning. */
|
|
9568
9668
|
value: number;
|
|
9569
|
-
/** The qualitative label: what the assessor actually meant.
|
|
9669
|
+
/** The qualitative label: what the assessor actually meant.
|
|
9670
|
+
*
|
|
9671
|
+
* FREE TEXT BY CONTRACT (docket wave 2 item 7; clarification STAGED, release
|
|
9672
|
+
* number assigned at release prep). This is the
|
|
9673
|
+
* assessor's own word and is NOT required to equal the `UPGScalePoint.label` of
|
|
9674
|
+
* the matching point. The two are different vocabularies serving different jobs:
|
|
9675
|
+
* `UPGScalePoint.label` is the scale's display name for a point (what a picker
|
|
9676
|
+
* offers); `UPGAssessment.label` is the judgment as it was actually authored
|
|
9677
|
+
* (what a human wrote). `{ value: 5, label: 'critical' }` on a `severity_5`
|
|
9678
|
+
* property is CONFORMANT even though point 5 displays as "Blocker" — indeed
|
|
9679
|
+
* several property descriptions instruct writers to "carry the old word in
|
|
9680
|
+
* `label`" when migrating a legacy enum.
|
|
9681
|
+
*
|
|
9682
|
+
* Consequently: never reconcile stored labels against scale point labels, and
|
|
9683
|
+
* never widen a scale's `points` to admit authored words. Compare on `value`.
|
|
9684
|
+
*
|
|
9685
|
+
* The one exception is `friendly_aliases`. An alias (`low`/`medium`/`high`) is a
|
|
9686
|
+
* writer-side shorthand, not a judgment — expanding it MUST yield both the
|
|
9687
|
+
* canonical `value` and the canonical point label, so an unexpanded alias left
|
|
9688
|
+
* sitting in `label` is a writer bug. */
|
|
9570
9689
|
label: string;
|
|
9571
9690
|
/** Which assessment scale this was rated on.
|
|
9572
9691
|
* References a scale definition in the spec or in the document's
|
|
@@ -11072,19 +11191,22 @@ interface ProductProperties {
|
|
|
11072
11191
|
launched_at?: ISODateTime;
|
|
11073
11192
|
/**
|
|
11074
11193
|
* The product configuration this graph describes, named in plain language.
|
|
11194
|
+
* A label for readers: nothing reads it to gate, filter, or alter how a tool
|
|
11195
|
+
* interprets the graph.
|
|
11196
|
+
*
|
|
11197
|
+
* @example "Enterprise plan, split-navigation flag on"
|
|
11075
11198
|
*
|
|
11199
|
+
* @remarks
|
|
11076
11200
|
* A product's composition often differs by feature flag, plan tier,
|
|
11077
11201
|
* permission level or beta programme: surfaces appear, disappear, or are
|
|
11078
11202
|
* replaced by different surfaces with different occupants. A graph that
|
|
11079
|
-
* models one of those without saying which is qualified by a condition
|
|
11080
|
-
*
|
|
11081
|
-
*
|
|
11082
|
-
* NAMING, NOT CONFIGURING. This is a label for readers. Nothing reads it to
|
|
11083
|
-
* gate, filter, or alter how a tool interprets the graph, and it makes no
|
|
11084
|
-
* claim about which configuration most customers are on.
|
|
11203
|
+
* models one of those without saying which is qualified by a condition nobody
|
|
11204
|
+
* wrote down, and every fact in it inherits that silence.
|
|
11085
11205
|
*
|
|
11086
|
-
*
|
|
11087
|
-
*
|
|
11206
|
+
* It makes no claim about which configuration most customers are on. Where a
|
|
11207
|
+
* product genuinely ships several and the differences matter, declare a
|
|
11208
|
+
* `configuration_axis` instead and let each fact say which values it holds
|
|
11209
|
+
* under.
|
|
11088
11210
|
*/
|
|
11089
11211
|
described_configuration?: string;
|
|
11090
11212
|
}
|
|
@@ -11448,23 +11570,32 @@ interface PersonaProperties {
|
|
|
11448
11570
|
* @example "10+ years SaaS experience", "New to healthcare IT" */
|
|
11449
11571
|
domain_expertise?: string;
|
|
11450
11572
|
/**
|
|
11451
|
-
* Role in the buying
|
|
11452
|
-
*
|
|
11453
|
-
*
|
|
11454
|
-
*
|
|
11455
|
-
*
|
|
11456
|
-
* set so roles compare across products.
|
|
11573
|
+
* Role in the buying or adoption decision: who signs (`buyer`), who uses
|
|
11574
|
+
* (`user`), who advocates internally (`champion`), who shapes the choice
|
|
11575
|
+
* (`influencer`), and who delivers it (`partner`). A closed set, so roles
|
|
11576
|
+
* compare across products.
|
|
11577
|
+
*
|
|
11457
11578
|
* @example "buyer"
|
|
11579
|
+
*
|
|
11580
|
+
* @remarks
|
|
11581
|
+
* A portfolio must separate the economic buyer from the practitioner user:
|
|
11582
|
+
* they are distinct personas with distinct jobs, and collapsing them is how a
|
|
11583
|
+
* product ends up built for whoever was easiest to interview.
|
|
11458
11584
|
*/
|
|
11459
11585
|
audience_role?: 'buyer' | 'user' | 'champion' | 'influencer' | 'partner';
|
|
11460
11586
|
/**
|
|
11461
|
-
* Who performs the work: a human archetype
|
|
11462
|
-
*
|
|
11463
|
-
*
|
|
11464
|
-
*
|
|
11465
|
-
* delegate to via `persona_delegates_to_persona`. Human-coverage / segmentation
|
|
11466
|
-
* metrics count `human` only; agent/system are opt-in.
|
|
11587
|
+
* Who performs the work: a human archetype, an autonomous AI agent, or a
|
|
11588
|
+
* non-agentic platform service. Absent means `human`, so existing personas
|
|
11589
|
+
* need no migration.
|
|
11590
|
+
*
|
|
11467
11591
|
* @example "agent"
|
|
11592
|
+
*
|
|
11593
|
+
* @remarks
|
|
11594
|
+
* An `agent` persona is a first-class actor: it participates in journeys
|
|
11595
|
+
* through the same persona machinery, and humans delegate to it via
|
|
11596
|
+
* `persona_delegates_to_persona`. Human-coverage and segmentation metrics
|
|
11597
|
+
* count `human` only, so agent and system personas are opt-in rather than
|
|
11598
|
+
* silently inflating a coverage number.
|
|
11468
11599
|
*/
|
|
11469
11600
|
actor_kind?: 'human' | 'agent' | 'system';
|
|
11470
11601
|
}
|
|
@@ -11711,15 +11842,17 @@ interface HypothesisEvidenceProperties {
|
|
|
11711
11842
|
*/
|
|
11712
11843
|
evidence_type?: 'experiment_run' | 'observation' | 'quote' | 'metric_change' | 'market_data' | 'interview';
|
|
11713
11844
|
/**
|
|
11714
|
-
* Direction relative to the parent claim
|
|
11715
|
-
*
|
|
11716
|
-
*
|
|
11717
|
-
* `refutes` = paired with the `refutes` edge.
|
|
11718
|
-
* `neutral` = data insufficient or noisy.
|
|
11845
|
+
* Direction relative to the parent claim: `supports` and `refutes` pair with
|
|
11846
|
+
* the edges of the same name, `neutral` means the data is insufficient or
|
|
11847
|
+
* noisy.
|
|
11719
11848
|
*
|
|
11720
|
-
* BREAKING in v0.4.0:
|
|
11721
|
-
*
|
|
11722
|
-
*
|
|
11849
|
+
* BREAKING in v0.4.0: `confirms`, `disconfirms` and `inconclusive` no longer
|
|
11850
|
+
* type-check. Migration is one-to-one: confirms to supports, disconfirms to
|
|
11851
|
+
* refutes, inconclusive to neutral.
|
|
11852
|
+
*
|
|
11853
|
+
* @remarks
|
|
11854
|
+
* Aligned to `Evidence.direction` so every direction-of-evidence property in
|
|
11855
|
+
* the spec shares one vocabulary.
|
|
11723
11856
|
*/
|
|
11724
11857
|
direction?: EvidenceDirection;
|
|
11725
11858
|
/** Strength of the evidence (UPGAssessment, scale `scale_5`). */
|
|
@@ -11828,6 +11961,20 @@ interface ExperimentPlanProperties {
|
|
|
11828
11961
|
* }
|
|
11829
11962
|
*/
|
|
11830
11963
|
interface ExperimentRunProperties {
|
|
11964
|
+
/**
|
|
11965
|
+
* What sort of experiment this run is: `ab_test` is a controlled split
|
|
11966
|
+
* between variants, `growth` an acquisition or activation experiment,
|
|
11967
|
+
* `pricing` a packaging or willingness-to-pay one. Distinct from
|
|
11968
|
+
* `disposition`, which is the outcome axis.
|
|
11969
|
+
*
|
|
11970
|
+
* @remarks
|
|
11971
|
+
* Three retired types (`ab_test`, `growth_experiment`, `pricing_experiment`)
|
|
11972
|
+
* collapsed into `experiment_run` precisely along this axis, and the
|
|
11973
|
+
* migration defaults stamp it so the distinction survives consolidation.
|
|
11974
|
+
*
|
|
11975
|
+
* Extensible: further kinds may be added in a minor release.
|
|
11976
|
+
*/
|
|
11977
|
+
experiment_type?: 'ab_test' | 'growth' | 'pricing';
|
|
11831
11978
|
/** ISO actual start date (may differ from the plan's `planned_start_date`) */
|
|
11832
11979
|
actual_start_date?: ISODate;
|
|
11833
11980
|
/** ISO actual end date */
|
|
@@ -12142,19 +12289,21 @@ interface CompetitiveAnalysisProperties {
|
|
|
12142
12289
|
*/
|
|
12143
12290
|
framework_id?: string;
|
|
12144
12291
|
/**
|
|
12145
|
-
* Empty cells in a
|
|
12146
|
-
*
|
|
12147
|
-
* valuable
|
|
12292
|
+
* Empty cells in a two-axis classification matrix that earn explicit
|
|
12293
|
+
* commentary, and only the strategically interesting ones. Opportunity-kind
|
|
12294
|
+
* cells are the most valuable: they identify unoccupied strategic space.
|
|
12148
12295
|
*
|
|
12149
|
-
*
|
|
12150
|
-
*
|
|
12151
|
-
*
|
|
12152
|
-
*
|
|
12296
|
+
* @remarks
|
|
12297
|
+
* Each entry references two `classification_value` nodes by id, one from each
|
|
12298
|
+
* `classification_axis` child of this `competitive_analysis`.
|
|
12299
|
+
* `validate_graph` enforces that the refs resolve to `classification_value`
|
|
12300
|
+
* nodes whose parents are distinct `classification_axis` instances, so a cell
|
|
12301
|
+
* cannot name two values from the same axis.
|
|
12153
12302
|
*
|
|
12154
12303
|
* See `ClassificationValueProperties.commitments` for the inverse
|
|
12155
12304
|
* "occupied cell" structural-definition shape.
|
|
12156
12305
|
*
|
|
12157
|
-
*
|
|
12306
|
+
* A worked pair, one of each rationale kind:
|
|
12158
12307
|
* [
|
|
12159
12308
|
* { axis_a_value_ref: 'val-git-based', axis_b_value_ref: 'val-structured-text',
|
|
12160
12309
|
* rationale_kind: 'opportunity',
|
|
@@ -12210,11 +12359,14 @@ interface CompetitorSignalProperties {
|
|
|
12210
12359
|
*/
|
|
12211
12360
|
observed_at?: ISODateTime;
|
|
12212
12361
|
/**
|
|
12213
|
-
* Kind of move
|
|
12214
|
-
*
|
|
12215
|
-
*
|
|
12216
|
-
*
|
|
12217
|
-
*
|
|
12362
|
+
* Kind of move: a shipped `feature_launch`, a `pricing_change`, the strategic
|
|
12363
|
+
* `acquisition` / `partnership` / `market_entry`, or a `reclassification`
|
|
12364
|
+
* when the competitor moves between classification cells on an axis.
|
|
12365
|
+
*
|
|
12366
|
+
* @remarks
|
|
12367
|
+
* `reclassification` is auto-emitted at the classify-write chokepoint rather
|
|
12368
|
+
* than authored, and carries `axis`, `from_value`, `to_value` and
|
|
12369
|
+
* `competitor` so the move is reconstructable without diffing two snapshots.
|
|
12218
12370
|
*/
|
|
12219
12371
|
signal_type?: 'feature_launch' | 'pricing_change' | 'acquisition' | 'partnership' | 'market_entry' | 'reclassification';
|
|
12220
12372
|
/** One-line factual summary of the move (what shipped, not marketing copy). */
|
|
@@ -12373,14 +12525,19 @@ interface ClassificationAxisProperties {
|
|
|
12373
12525
|
*/
|
|
12374
12526
|
axis_kind?: 'categorical' | 'ordinal' | 'continuous';
|
|
12375
12527
|
/**
|
|
12376
|
-
* How many values a subject may hold on this axis at once (
|
|
12377
|
-
*
|
|
12378
|
-
*
|
|
12379
|
-
*
|
|
12380
|
-
*
|
|
12381
|
-
*
|
|
12382
|
-
*
|
|
12383
|
-
*
|
|
12528
|
+
* How many values a subject may hold on this axis at once. `single` (the
|
|
12529
|
+
* default) means re-classifying SUPERSEDES the prior value; `multi` means it
|
|
12530
|
+
* ADDS one.
|
|
12531
|
+
*
|
|
12532
|
+
* @remarks
|
|
12533
|
+
* Under `single` the classify writer retires the old same-axis edge and
|
|
12534
|
+
* records the move in the reclassification history, so the change is
|
|
12535
|
+
* traceable rather than silent. `multi` suits an axis like "supported
|
|
12536
|
+
* frameworks", where holding several values at once is the truth.
|
|
12537
|
+
*
|
|
12538
|
+
* A separate axis from `axis_kind`: an axis can be `categorical` (unordered)
|
|
12539
|
+
* yet single-select, or `categorical` yet multi-select. The two answer
|
|
12540
|
+
* different questions and neither implies the other.
|
|
12384
12541
|
*/
|
|
12385
12542
|
cardinality?: 'single' | 'multi';
|
|
12386
12543
|
}
|
|
@@ -12417,13 +12574,16 @@ interface ClassificationValueProperties {
|
|
|
12417
12574
|
*/
|
|
12418
12575
|
exemplars?: string[];
|
|
12419
12576
|
/**
|
|
12420
|
-
* The
|
|
12421
|
-
* Each
|
|
12577
|
+
* The load-bearing commitments that define this category, typically two to
|
|
12578
|
+
* four. Each is a structural axis: removing it changes the category.
|
|
12422
12579
|
*
|
|
12423
|
-
*
|
|
12424
|
-
* capabilities
|
|
12580
|
+
* @remarks
|
|
12581
|
+
* Pairs with `capabilities`, and the distinction matters when deciding where
|
|
12582
|
+
* a bullet belongs: commitments are the load-bearing DEFINITION, capabilities
|
|
12583
|
+
* are the surface OFFERING. A capability can be dropped without the category
|
|
12584
|
+
* changing; a commitment cannot.
|
|
12425
12585
|
*
|
|
12426
|
-
*
|
|
12586
|
+
* A worked set:
|
|
12427
12587
|
* [
|
|
12428
12588
|
* { name: 'Typed content graph', description: 'Schemas in code; references as edges; content is structured data.' },
|
|
12429
12589
|
* { name: 'Real-time backend', description: 'Live queries, CRDT collaboration, sub-second propagation.' },
|
|
@@ -12432,11 +12592,14 @@ interface ClassificationValueProperties {
|
|
|
12432
12592
|
*/
|
|
12433
12593
|
commitments?: Array<ClassificationCommitment>;
|
|
12434
12594
|
/**
|
|
12435
|
-
* Structured capability bullets across the six canonical surfaces.
|
|
12436
|
-
*
|
|
12595
|
+
* Structured capability bullets across the six canonical surfaces. Each
|
|
12596
|
+
* surface appears at most once per `classification_value`.
|
|
12437
12597
|
*
|
|
12438
|
-
*
|
|
12439
|
-
* commitments
|
|
12598
|
+
* @remarks
|
|
12599
|
+
* Pairs with `commitments`, and the distinction decides where a bullet
|
|
12600
|
+
* belongs: capabilities describe what the category OFFERS, commitments
|
|
12601
|
+
* describe what DEFINES it. Dropping a capability leaves the category intact;
|
|
12602
|
+
* dropping a commitment does not.
|
|
12440
12603
|
*
|
|
12441
12604
|
* @example
|
|
12442
12605
|
* [
|
|
@@ -12598,6 +12761,19 @@ interface InsightProperties {
|
|
|
12598
12761
|
* @example "usability_study", "interview_series", "survey"
|
|
12599
12762
|
*/
|
|
12600
12763
|
source_method?: string;
|
|
12764
|
+
/**
|
|
12765
|
+
* Which discipline the insight came out of. The second provenance axis,
|
|
12766
|
+
* symmetrical with `source_method`: that one is HOW the insight was produced,
|
|
12767
|
+
* this one is WHICH PRACTICE produced it, and neither substitutes for the
|
|
12768
|
+
* other.
|
|
12769
|
+
*
|
|
12770
|
+
* @example "ux", "support", "sales", "data_science"
|
|
12771
|
+
*
|
|
12772
|
+
* @remarks
|
|
12773
|
+
* Declared in v0.26.0 so the retired `ux_insight` type's migration default
|
|
12774
|
+
* (`source_domain: 'ux'`) lands in a typed field rather than being lost.
|
|
12775
|
+
*/
|
|
12776
|
+
source_domain?: string;
|
|
12601
12777
|
/**
|
|
12602
12778
|
* Insight statement in plain language. Write as an active, present-tense assertion.
|
|
12603
12779
|
* @example "Users consistently skip the tutorial because they trust their ability to explore independently."
|
|
@@ -12959,6 +13135,20 @@ interface WireframeProperties {
|
|
|
12959
13135
|
* }
|
|
12960
13136
|
*/
|
|
12961
13137
|
interface UserFlowProperties {
|
|
13138
|
+
/**
|
|
13139
|
+
* What sort of flow this is. Free-form rather than a closed enum, because
|
|
13140
|
+
* flow kinds are product-specific and the spec has no complete vocabulary
|
|
13141
|
+
* for them.
|
|
13142
|
+
*
|
|
13143
|
+
* @example "onboarding", "checkout", "recovery", "upgrade"
|
|
13144
|
+
*
|
|
13145
|
+
* @remarks
|
|
13146
|
+
* `user_flow` otherwise carries only structure (`trigger`, `steps`,
|
|
13147
|
+
* `success_state`, `failure_state`) and no classification. The retired
|
|
13148
|
+
* `onboarding_flow` type collapsed into `user_flow` along this axis, and its
|
|
13149
|
+
* migration default stamps the value so the distinction survives.
|
|
13150
|
+
*/
|
|
13151
|
+
flow_type?: string;
|
|
12962
13152
|
/**
|
|
12963
13153
|
* Display order of this flow among sibling flows (0-indexed). The scalar
|
|
12964
13154
|
* ordering convention shared with `journey_step.step_order` and
|
|
@@ -13124,14 +13314,36 @@ type SurfaceCompositionMode = 'exclusive' | 'additive' | 'chained';
|
|
|
13124
13314
|
* mutually exclusive conditions). The most dangerous state, because it looks
|
|
13125
13315
|
* settled from the outside and breaks the first time an occupant is added.
|
|
13126
13316
|
* - `none` — nobody ever decided. Remediation is a design meeting.
|
|
13317
|
+
* - `no_contention_by_design` — there is no arbitration question to answer,
|
|
13318
|
+
* because the occupants never compete. The exact opposite of
|
|
13319
|
+
* `safe_by_coincidence`: designed absence of the question rather than
|
|
13320
|
+
* accidental absence of a collision.
|
|
13127
13321
|
*
|
|
13128
13322
|
* THIS IS NOT AN ESCAPE HATCH. Declaring `enforced_documented` does not by
|
|
13129
13323
|
* itself silence `contended-surface-without-arbitration`: the detector still
|
|
13130
13324
|
* requires a non-empty `arbitration_rule`, so claiming the rule is documented
|
|
13131
13325
|
* without documenting it changes nothing. `safe_by_coincidence` and `none`
|
|
13132
13326
|
* make the check fire whatever else is recorded, because both are admissions.
|
|
13133
|
-
|
|
13134
|
-
|
|
13327
|
+
* `no_contention_by_design` silences nothing that is not already silent: the
|
|
13328
|
+
* contention branch is a separate check that exempts only on
|
|
13329
|
+
* `composition_mode: 'chained'`, so a surface that claims this state while
|
|
13330
|
+
* genuinely over capacity, ruleless and not chained is still caught there.
|
|
13331
|
+
*
|
|
13332
|
+
* WHY ABSENCE COULD NOT CARRY THIS. An unset `arbitration_state` already means
|
|
13333
|
+
* "unassessed", and a surface whose occupants wrap rather than compete was
|
|
13334
|
+
* previously forced to use that same emptiness to say something quite
|
|
13335
|
+
* different. Certainty and ignorance became indistinguishable in one field.
|
|
13336
|
+
* `no_contention_by_design` makes a positive design claim, which is what makes
|
|
13337
|
+
* it declare-to-earn rather than an "I don't know". A generic `not_applicable`
|
|
13338
|
+
* was considered and rejected for exactly this reason: it reads as
|
|
13339
|
+
* "unassessed", collapses back into absence, and buys nothing.
|
|
13340
|
+
*
|
|
13341
|
+
* LEGALITY IS CONVENTION, NOT ENFORCEMENT. This value belongs on surfaces
|
|
13342
|
+
* whose `composition_mode` is `chained`, and nothing checks that pairing. UPG
|
|
13343
|
+
* has no cross-property conditional-enum mechanism, and a check must never
|
|
13344
|
+
* fire on legal modelling. Enforce only if field drift appears.
|
|
13345
|
+
*/
|
|
13346
|
+
type SurfaceArbitrationState = 'enforced_documented' | 'enforced_undocumented' | 'safe_by_coincidence' | 'none' | 'no_contention_by_design';
|
|
13135
13347
|
/** A place in the UI, its occupants, and the rule that arbitrates between them.
|
|
13136
13348
|
*
|
|
13137
13349
|
* `screen` answers *which route is this?*; `feature_area` answers *who owns
|
|
@@ -13185,37 +13397,35 @@ interface SurfaceProperties {
|
|
|
13185
13397
|
visibility_condition?: string;
|
|
13186
13398
|
/**
|
|
13187
13399
|
* How many occupants ONE INSTANCE of the surface holds at once, as a
|
|
13188
|
-
* non-negative count.
|
|
13400
|
+
* non-negative count. Absent means unbounded, `0` means a reserved place
|
|
13401
|
+
* nothing may occupy. Always the cap the design INTENDS, never what was
|
|
13402
|
+
* observed rendering. Count the instances themselves with `cardinality`.
|
|
13189
13403
|
*
|
|
13190
|
-
*
|
|
13191
|
-
*
|
|
13192
|
-
* even after someone finds it rendering four. Reality that has
|
|
13193
|
-
* the declared intent
|
|
13194
|
-
* `surface_deviates_via_technical_debt_item
|
|
13195
|
-
* number up to match the bug
|
|
13196
|
-
*
|
|
13404
|
+
* @remarks
|
|
13405
|
+
* Intent, not observation: a banner region declared `capacity: 1` keeps
|
|
13406
|
+
* saying 1 even after someone finds it rendering four. Reality that has
|
|
13407
|
+
* drifted from the declared intent belongs on
|
|
13408
|
+
* `surface_deviates_via_technical_debt_item` as a trackable, assignable debt
|
|
13409
|
+
* item. Editing this number up to match the bug would destroy the only record
|
|
13410
|
+
* that a gap exists.
|
|
13197
13411
|
*
|
|
13198
|
-
*
|
|
13199
|
-
*
|
|
13200
|
-
*
|
|
13201
|
-
*
|
|
13202
|
-
* that every consumer would have to special-case. `0` is a real cap meaning
|
|
13203
|
-
* "nothing may occupy this surface" (a reserved place), not "unbounded".
|
|
13412
|
+
* Why absence rather than a sentinel: UPG has no union-typed property
|
|
13413
|
+
* primitive, so `integer | unbounded` is expressed as an optional number
|
|
13414
|
+
* whose absence carries the "no cap" reading, instead of a magic value every
|
|
13415
|
+
* consumer would have to special-case.
|
|
13204
13416
|
*
|
|
13205
|
-
*
|
|
13206
|
-
*
|
|
13207
|
-
*
|
|
13208
|
-
*
|
|
13209
|
-
*
|
|
13210
|
-
*
|
|
13211
|
-
* property merge preserves anything you omit.
|
|
13417
|
+
* Three states, all different. ABSENT is unbounded, no cap stated. `0` is a
|
|
13418
|
+
* reserved place. `null` is neither, and nothing this field defines: it is
|
|
13419
|
+
* what an explicit null write leaves behind, and no consumer reads it as a
|
|
13420
|
+
* cap. To return the property to absent, remove the key with `update_node`'s
|
|
13421
|
+
* or `batch_update_nodes`' `unset_properties`, since a property merge
|
|
13422
|
+
* preserves anything omitted.
|
|
13212
13423
|
*
|
|
13213
|
-
*
|
|
13214
|
-
* an absent capacity as a threshold of 1,
|
|
13215
|
-
*
|
|
13216
|
-
*
|
|
13217
|
-
*
|
|
13218
|
-
* records something true.
|
|
13424
|
+
* Unbounded is not an exemption from scrutiny. The contention detector reads
|
|
13425
|
+
* an absent capacity as a threshold of 1, because a surface that states no
|
|
13426
|
+
* limit has stated no answer either, so several occupants is exactly the
|
|
13427
|
+
* unrecorded decision worth naming. Declaring a real capacity is the way to
|
|
13428
|
+
* quiet the check honestly, and the only way that also records something true.
|
|
13219
13429
|
*/
|
|
13220
13430
|
capacity?: number;
|
|
13221
13431
|
/**
|
|
@@ -13238,20 +13448,34 @@ interface SurfaceProperties {
|
|
|
13238
13448
|
composition_mode?: SurfaceCompositionMode;
|
|
13239
13449
|
/**
|
|
13240
13450
|
* Who wins when more occupants want the surface than `capacity` allows, and
|
|
13241
|
-
* why.
|
|
13451
|
+
* why. Absence is meaningful: on a contested surface it means nobody decided.
|
|
13242
13452
|
*
|
|
13243
|
-
* ABSENCE IS MEANINGFUL: a null or empty `arbitration_rule` on a contested
|
|
13244
|
-
* surface means nobody decided, which is exactly what the
|
|
13245
|
-
* `contended-surface-without-arbitration` anti-pattern detects. Do not fill
|
|
13246
|
-
* this in with a placeholder to silence the check.
|
|
13247
13453
|
* @example "Highest priority wins; ties break to the most recently updated."
|
|
13454
|
+
*
|
|
13455
|
+
* @remarks
|
|
13456
|
+
* An empty or absent rule on a contested surface is exactly what
|
|
13457
|
+
* `contended-surface-without-arbitration` detects. Do not fill it in with a
|
|
13458
|
+
* placeholder to silence the check: the check exists to find the unrecorded
|
|
13459
|
+
* decision, and a placeholder hides it without settling anything.
|
|
13460
|
+
*
|
|
13461
|
+
* The field is overloaded across composition modes, which is worth knowing
|
|
13462
|
+
* before writing one. On an `exclusive` surface it records DISPLACEMENT (who
|
|
13463
|
+
* is not rendered). On an `additive` surface everyone fits, so what it
|
|
13464
|
+
* records is ORDER. Only the displacement reading is what the contention
|
|
13465
|
+
* detector reads.
|
|
13248
13466
|
*/
|
|
13249
13467
|
arbitration_rule?: string;
|
|
13250
13468
|
/**
|
|
13251
|
-
* Whether the arbitration answer is enforced, written down, both, or
|
|
13252
|
-
*
|
|
13253
|
-
*
|
|
13254
|
-
*
|
|
13469
|
+
* Whether the arbitration answer is enforced, written down, both, neither, or
|
|
13470
|
+
* not owed at all. Leaving the field unset means unassessed, and always did.
|
|
13471
|
+
*
|
|
13472
|
+
* @remarks
|
|
13473
|
+
* The separations are the whole point of the field, because absence alone
|
|
13474
|
+
* conflates four situations with four different remediations: "enforced in
|
|
13475
|
+
* code but never transcribed" is ten minutes of typing, "never decided" is a
|
|
13476
|
+
* design meeting, "safe only because nothing has collided yet" is the
|
|
13477
|
+
* dangerous one, and "nothing to decide, the occupants never compete" is a
|
|
13478
|
+
* chained surface, which owes no arbitration rule at all.
|
|
13255
13479
|
*/
|
|
13256
13480
|
arbitration_state?: SurfaceArbitrationState;
|
|
13257
13481
|
/** Who may add occupants to the surface. */
|
|
@@ -13818,13 +14042,23 @@ interface FeatureProperties {
|
|
|
13818
14042
|
*
|
|
13819
14043
|
* @example
|
|
13820
14044
|
* const properties: EpicProperties = {
|
|
13821
|
-
*
|
|
14045
|
+
* effort: '3 person-weeks',
|
|
13822
14046
|
* priority: 'high',
|
|
13823
14047
|
* owner: 'sam.patel@arkheiev.com',
|
|
13824
14048
|
* }
|
|
13825
14049
|
*/
|
|
13826
14050
|
interface EpicProperties {
|
|
13827
|
-
/**
|
|
14051
|
+
/** Effort estimate (e.g. "2h", "1d", "3 points"). Use a consistent unit within your team. Canonical name for the work-item size family (`epic`, `user_story`, `task`). */
|
|
14052
|
+
effort?: string;
|
|
14053
|
+
/**
|
|
14054
|
+
* Rough size estimate (e.g. "3 sprints", "L", "13 points").
|
|
14055
|
+
* @deprecated STAGED, release number assigned at release prep (docket Track "Docket wave 2").
|
|
14056
|
+
* Use `effort`, the family-uniform name already carried by
|
|
14057
|
+
* `user_story` and `task`. `estimate` was epic's lone divergent spelling of the same
|
|
14058
|
+
* concept and it caused real misreads (the app read `estimate` on `user_story`, where
|
|
14059
|
+
* only `effort` is declared). Kept (not removed) for back-compat; removal is a later
|
|
14060
|
+
* major. Writers: emit `effort`. Readers: prefer `effort`, fall back to `estimate`.
|
|
14061
|
+
*/
|
|
13828
14062
|
estimate?: string;
|
|
13829
14063
|
/** Task-level priority */
|
|
13830
14064
|
priority?: Priority;
|
|
@@ -13903,8 +14137,23 @@ interface AcceptanceCriterionProperties {
|
|
|
13903
14137
|
condition: string;
|
|
13904
14138
|
/** Test mode */
|
|
13905
14139
|
test_type?: 'manual' | 'automated';
|
|
13906
|
-
/**
|
|
13907
|
-
|
|
14140
|
+
/**
|
|
14141
|
+
* Current verification state of this criterion. `untested` means never
|
|
14142
|
+
* attempted; `blocked` means attempted but not verifiable for an
|
|
14143
|
+
* environmental reason; `regressed` means previously passing, now failing.
|
|
14144
|
+
*
|
|
14145
|
+
* @remarks
|
|
14146
|
+
* `blocked` is a distinct state from `untested` (a missing credential or an
|
|
14147
|
+
* unreachable dependency is not the same as nobody having tried), which the
|
|
14148
|
+
* earlier three-value enum conflated into a silent gap.
|
|
14149
|
+
*
|
|
14150
|
+
* `regressed` is a criterion-level state and is NOT derivable here, because
|
|
14151
|
+
* `acceptance_criterion` stores current state only and keeps no result
|
|
14152
|
+
* history. The history lives on the `test_case` to `test_result` series,
|
|
14153
|
+
* where a single execution's outcome is `TestResultProperties.result_status`
|
|
14154
|
+
* and can never itself be "regressed".
|
|
14155
|
+
*/
|
|
14156
|
+
pass_status?: 'untested' | 'pass' | 'fail' | 'regressed' | 'blocked';
|
|
13908
14157
|
}
|
|
13909
14158
|
/** A shipped version or milestone of the product.
|
|
13910
14159
|
*
|
|
@@ -14145,27 +14394,30 @@ type ConfigurationAxisKind = 'feature_flag' | 'plan_tier' | 'permission_level' |
|
|
|
14145
14394
|
interface ConfigurationAxisProperties {
|
|
14146
14395
|
/**
|
|
14147
14396
|
* The closed set of values this axis can take. Required: an axis with no
|
|
14148
|
-
* values selects nothing and cannot be projected along.
|
|
14397
|
+
* values selects nothing and cannot be projected along. Every `present_under`
|
|
14398
|
+
* and `active_when.values` entry must name one of them.
|
|
14149
14399
|
*
|
|
14400
|
+
* @remarks
|
|
14150
14401
|
* Two values is the common case and three is not unusual (a plan ladder).
|
|
14151
|
-
* Order is not significant
|
|
14152
|
-
* ordering does matter (an entitlement ladder in which each tier includes
|
|
14153
|
-
*
|
|
14154
|
-
*
|
|
14402
|
+
* Order is not significant: the axis is categorical, not ordinal. Where the
|
|
14403
|
+
* ordering does matter (an entitlement ladder in which each tier includes the
|
|
14404
|
+
* one below), that is a classification question, and `classification_axis`
|
|
14405
|
+
* with `axis_kind: 'ordinal'` is the instrument for it.
|
|
14155
14406
|
*/
|
|
14156
14407
|
values: string[];
|
|
14157
14408
|
/**
|
|
14158
14409
|
* The value this axis is understood to sit at when nobody says otherwise.
|
|
14159
|
-
* Must be a member of `values`.
|
|
14410
|
+
* Must be a member of `values`. NOTHING APPLIES IT AUTOMATICALLY: an
|
|
14411
|
+
* unqualified read returns the union, not this projection.
|
|
14160
14412
|
*
|
|
14161
|
-
*
|
|
14162
|
-
*
|
|
14163
|
-
*
|
|
14164
|
-
*
|
|
14165
|
-
*
|
|
14166
|
-
*
|
|
14167
|
-
*
|
|
14168
|
-
*
|
|
14413
|
+
* @remarks
|
|
14414
|
+
* The union is the honest answer to an unqualified question, because it is
|
|
14415
|
+
* every configuration at once; silently substituting one of them would hide
|
|
14416
|
+
* the others from a reader who did not know to ask. What the field does carry
|
|
14417
|
+
* is the declaration convention for `surface_alternates_with_surface`
|
|
14418
|
+
* (declare the edge from the surface present under the default) and a
|
|
14419
|
+
* documented anchor for tools that later want to offer a starting
|
|
14420
|
+
* configuration.
|
|
14169
14421
|
*
|
|
14170
14422
|
* It is a claim about the model, not about deployment: it says which value
|
|
14171
14423
|
* most of the graph was written against, not which configuration most
|
|
@@ -14281,15 +14533,16 @@ interface MetricProperties {
|
|
|
14281
14533
|
/** Person or team responsible for tracking this metric. Promote to a `node_owned_by_person` edge if ownership must be queryable. */
|
|
14282
14534
|
owner?: string;
|
|
14283
14535
|
/**
|
|
14284
|
-
* Universal health rollup
|
|
14285
|
-
*
|
|
14286
|
-
*
|
|
14287
|
-
*
|
|
14288
|
-
* `unhealthy` = missed target or breached; action needed.
|
|
14289
|
-
* `unknown` = no current reading or not yet measured.
|
|
14536
|
+
* Universal health rollup, applying to every metric regardless of
|
|
14537
|
+
* `designation`: `healthy` is inside range, `at_risk` is drifting toward a
|
|
14538
|
+
* breach or shortfall, `unhealthy` has missed or breached, `unknown` has no
|
|
14539
|
+
* current reading.
|
|
14290
14540
|
*
|
|
14291
|
-
*
|
|
14292
|
-
*
|
|
14541
|
+
* @remarks
|
|
14542
|
+
* Orthogonal to lifecycle and to `guardrail_status`. For guardrails
|
|
14543
|
+
* specifically, `guardrail_status` remains the breach-specific signal
|
|
14544
|
+
* (`safe` / `warning` / `breached`), so a guardrail carries both: one says
|
|
14545
|
+
* how it is trending, the other says whether it has been crossed.
|
|
14293
14546
|
*/
|
|
14294
14547
|
metric_health?: MetricHealth;
|
|
14295
14548
|
/** Lower bound for guardrail safety (below this = breach) */
|
|
@@ -15323,10 +15576,14 @@ interface CiPipelineProperties {
|
|
|
15323
15576
|
interface ReleaseStrategyProperties {
|
|
15324
15577
|
/**
|
|
15325
15578
|
* How a new version reaches production.
|
|
15326
|
-
*
|
|
15327
|
-
* `canary` = gradual percentage rollout. `rolling` = replace instances incrementally.
|
|
15328
|
-
* `recreate` = take down old, bring up new. `feature_flag` = code ships, features gated.
|
|
15579
|
+
*
|
|
15329
15580
|
* @example "canary" for gradual rollout, "blue_green" for instant switch with instant rollback
|
|
15581
|
+
*
|
|
15582
|
+
* @remarks
|
|
15583
|
+
* `blue_green` switches instantly between two identical environments.
|
|
15584
|
+
* `canary` rolls out by percentage. `rolling` replaces instances
|
|
15585
|
+
* incrementally. `recreate` takes the old down before bringing the new up.
|
|
15586
|
+
* `feature_flag` ships the code with the features gated.
|
|
15330
15587
|
*/
|
|
15331
15588
|
strategy_type?: 'blue_green' | 'canary' | 'rolling' | 'recreate' | 'feature_flag';
|
|
15332
15589
|
/**
|
|
@@ -15471,8 +15728,18 @@ interface TestPlanProperties {
|
|
|
15471
15728
|
* }
|
|
15472
15729
|
*/
|
|
15473
15730
|
interface TestSuiteProperties {
|
|
15474
|
-
/**
|
|
15475
|
-
|
|
15731
|
+
/**
|
|
15732
|
+
* Category of test suite. The single canonical verification-method vocabulary
|
|
15733
|
+
* in the spec: do not mint a second one at criterion level.
|
|
15734
|
+
*
|
|
15735
|
+
* @remarks
|
|
15736
|
+
* `visual` covers visual-regression and screenshot-diff suites, whose
|
|
15737
|
+
* evidence is a rendered-output comparison rather than an assertion over
|
|
15738
|
+
* behaviour. Before it existed, producers mapped visual suites onto
|
|
15739
|
+
* `integration` as the least-wrong stock value, which made them
|
|
15740
|
+
* indistinguishable from genuine integration coverage.
|
|
15741
|
+
*/
|
|
15742
|
+
suite_type?: 'unit' | 'integration' | 'e2e' | 'performance' | 'security' | 'accessibility' | 'visual';
|
|
15476
15743
|
/** Number of tests in the suite */
|
|
15477
15744
|
test_count?: number;
|
|
15478
15745
|
/** Percentage of tests passing (0-100) */
|
|
@@ -15546,6 +15813,21 @@ interface QaSessionProperties {
|
|
|
15546
15813
|
duration_minutes?: number;
|
|
15547
15814
|
/** Number of bugs found during the session */
|
|
15548
15815
|
bugs_found?: number;
|
|
15816
|
+
/**
|
|
15817
|
+
* Environment the session was run against. Single-valued, unlike
|
|
15818
|
+
* `TestPlanProperties.environments` (a plan spans several); the enum is the
|
|
15819
|
+
* same one, mirroring `TestEnvironmentProperties.env_type`.
|
|
15820
|
+
*/
|
|
15821
|
+
environment?: 'local' | 'ci' | 'staging' | 'sandbox' | 'production_mirror';
|
|
15822
|
+
/**
|
|
15823
|
+
* Plain-English outcome of the session: what it established, not how many
|
|
15824
|
+
* bugs it counted (`bugs_found`). Named `outcome_summary`, matching
|
|
15825
|
+
* `ExperimentRunProperties.outcome_summary`, because a bare `outcome` would
|
|
15826
|
+
* collide with the `outcome` entity type.
|
|
15827
|
+
*/
|
|
15828
|
+
outcome_summary?: string;
|
|
15829
|
+
/** ISO timestamp of when the session was run. Mirrors `TestResultProperties.executed_at`. */
|
|
15830
|
+
executed_at?: ISODateTime;
|
|
15549
15831
|
}
|
|
15550
15832
|
/** Regression test.
|
|
15551
15833
|
*
|
|
@@ -15662,14 +15944,17 @@ interface TestResultProperties {
|
|
|
15662
15944
|
*/
|
|
15663
15945
|
interface ThreatModelProperties {
|
|
15664
15946
|
/**
|
|
15665
|
-
*
|
|
15666
|
-
*
|
|
15667
|
-
* Elevation of Privilege (OWASP standard).
|
|
15668
|
-
* `dread` = Damage, Reproducibility, Exploitability, Affected users,
|
|
15669
|
-
* Discoverability (numeric scoring).
|
|
15670
|
-
* `pasta` = Process for Attack Simulation and Threat Analysis (7-stage).
|
|
15671
|
-
* `attack_tree` = hierarchical tree of attack paths.
|
|
15947
|
+
* Threat-modelling methodology: `stride`, `dread`, `pasta`, or `attack_tree`.
|
|
15948
|
+
*
|
|
15672
15949
|
* @example "stride" is the most widely used methodology for web applications
|
|
15950
|
+
*
|
|
15951
|
+
* @remarks
|
|
15952
|
+
* `stride` is the OWASP standard (Spoofing, Tampering, Repudiation,
|
|
15953
|
+
* Information Disclosure, Denial of Service, Elevation of Privilege).
|
|
15954
|
+
* `dread` is numeric scoring (Damage, Reproducibility, Exploitability,
|
|
15955
|
+
* Affected users, Discoverability). `pasta` is the seven-stage Process for
|
|
15956
|
+
* Attack Simulation and Threat Analysis. `attack_tree` is a hierarchical tree
|
|
15957
|
+
* of attack paths.
|
|
15673
15958
|
*/
|
|
15674
15959
|
methodology?: 'stride' | 'dread' | 'pasta' | 'attack_tree' | 'other';
|
|
15675
15960
|
/**
|
|
@@ -15762,13 +16047,17 @@ interface VulnerabilityProperties {
|
|
|
15762
16047
|
*/
|
|
15763
16048
|
cvss_score?: number;
|
|
15764
16049
|
/**
|
|
15765
|
-
* Categorical severity derived from CVSS
|
|
15766
|
-
*
|
|
15767
|
-
*
|
|
15768
|
-
*
|
|
15769
|
-
* (UPG-579 Option C): map `critical` -> 5, `high` -> 4, `medium` -> 3,
|
|
15770
|
-
* `low` -> 2, `informational` -> 1; carry the old word in `label`.
|
|
16050
|
+
* Categorical severity derived from CVSS, as a UPGAssessment on the
|
|
16051
|
+
* `severity_5` scale. Score alone is insufficient for triage: severity is
|
|
16052
|
+
* what drives filtering and prioritisation.
|
|
16053
|
+
*
|
|
15771
16054
|
* @example value 5, label 'Critical', scale_id 'severity_5' (a remotely exploitable, no-auth vuln)
|
|
16055
|
+
*
|
|
16056
|
+
* @remarks
|
|
16057
|
+
* Migrated from the inline `critical|high|medium|low|informational` enum
|
|
16058
|
+
* (UPG-579 Option C): map `critical` to 5, `high` to 4, `medium` to 3, `low`
|
|
16059
|
+
* to 2, `informational` to 1, carrying the old word in `label` so the
|
|
16060
|
+
* original vocabulary survives the move.
|
|
15772
16061
|
*/
|
|
15773
16062
|
severity?: UPGAssessment;
|
|
15774
16063
|
/**
|
|
@@ -15860,6 +16149,8 @@ interface SecurityPolicyProperties {
|
|
|
15860
16149
|
policy_status?: 'draft' | 'active' | 'under_review' | 'retired';
|
|
15861
16150
|
/** Imperative force */
|
|
15862
16151
|
rule_strength?: RuleStrength;
|
|
16152
|
+
/** Owning person or team accountable for the policy. Promote to a `node_owned_by_team` edge if ownership must be queryable. */
|
|
16153
|
+
owner?: string;
|
|
15863
16154
|
}
|
|
15864
16155
|
/** Penetration test.
|
|
15865
16156
|
*
|
|
@@ -16359,6 +16650,8 @@ interface DataProductProperties {
|
|
|
16359
16650
|
data_product_type?: 'report' | 'dataset' | 'stream' | 'api' | 'ml_feature' | 'other';
|
|
16360
16651
|
/** Freshness SLA commitment (e.g. "< 1 hour") */
|
|
16361
16652
|
sla_freshness?: string;
|
|
16653
|
+
/** Owning person or team. Sibling of `data_domain.steward`: use `owner` for the accountable party of a single data product, `steward` for a whole domain. Promote to a `node_owned_by_team` edge if ownership must be queryable. */
|
|
16654
|
+
owner?: string;
|
|
16362
16655
|
}
|
|
16363
16656
|
/** DataPipeline entity.
|
|
16364
16657
|
*
|
|
@@ -16410,6 +16703,8 @@ interface GlossaryTermProperties {
|
|
|
16410
16703
|
term_definition?: string;
|
|
16411
16704
|
/** Alternative names or abbreviations for this term */
|
|
16412
16705
|
synonyms?: string[];
|
|
16706
|
+
/** Person or team accountable for keeping the definition current. Promote to a `node_owned_by_person` edge if ownership must be queryable. */
|
|
16707
|
+
owner?: string;
|
|
16413
16708
|
}
|
|
16414
16709
|
/** DataDomain. A coarse-grained grouping of related data assets (sources,
|
|
16415
16710
|
* pipelines, products, glossary terms) under a single stewardship boundary.
|
|
@@ -16508,6 +16803,14 @@ interface BrandAssetProperties {
|
|
|
16508
16803
|
usage_rights?: string;
|
|
16509
16804
|
}
|
|
16510
16805
|
/** Internal document.
|
|
16806
|
+
*
|
|
16807
|
+
* @deprecated since 0.2.0. Use `DocumentProperties` (`document` with an internal
|
|
16808
|
+
* audience). `internal_doc` is absent from the entity-catalog union, so no
|
|
16809
|
+
* conformant graph can hold a node of this type — these properties are
|
|
16810
|
+
* unreachable in practice. Migration is lossless: `doc_type` → `document_type`
|
|
16811
|
+
* (its enum already contains rfc/runbook/guide/spec/onboarding), `url` →
|
|
16812
|
+
* `source_url`. Retained only because this interface is part of the published
|
|
16813
|
+
* type surface; RETIREMENT SCHEDULED for the next MAJOR (docket wave 2, item 3).
|
|
16511
16814
|
*
|
|
16512
16815
|
* @example
|
|
16513
16816
|
* const properties: InternalDocProperties = {
|
|
@@ -16516,9 +16819,9 @@ interface BrandAssetProperties {
|
|
|
16516
16819
|
* }
|
|
16517
16820
|
*/
|
|
16518
16821
|
interface InternalDocProperties {
|
|
16519
|
-
/** Classification of the document */
|
|
16822
|
+
/** Classification of the document. @deprecated use `document.document_type` */
|
|
16520
16823
|
doc_type?: 'rfc' | 'runbook' | 'guide' | 'spec' | 'onboarding' | 'other';
|
|
16521
|
-
/** URL or path to the document */
|
|
16824
|
+
/** URL or path to the document. @deprecated use `document.source_url` */
|
|
16522
16825
|
url?: string;
|
|
16523
16826
|
}
|
|
16524
16827
|
/** Document. Provenance container linking to source files.
|
|
@@ -16763,6 +17066,8 @@ interface ComplianceRequirementProperties {
|
|
|
16763
17066
|
regulation?: 'gdpr' | 'ccpa' | 'hipaa' | 'soc2' | 'iso27001' | 'pci_dss' | 'other';
|
|
16764
17067
|
/** Current compliance posture */
|
|
16765
17068
|
compliance_status?: 'compliant' | 'non_compliant' | 'in_progress' | 'not_applicable';
|
|
17069
|
+
/** Accountable person or team. Promote to a `node_owned_by_person` edge if ownership must be queryable. */
|
|
17070
|
+
owner?: string;
|
|
16766
17071
|
}
|
|
16767
17072
|
/** Risk.
|
|
16768
17073
|
*
|
|
@@ -16774,8 +17079,15 @@ interface ComplianceRequirementProperties {
|
|
|
16774
17079
|
* }
|
|
16775
17080
|
*/
|
|
16776
17081
|
interface RiskProperties {
|
|
16777
|
-
/**
|
|
16778
|
-
|
|
17082
|
+
/**
|
|
17083
|
+
* Domain the risk belongs to. The single kind axis for `risk`: there is no
|
|
17084
|
+
* second classification vocabulary.
|
|
17085
|
+
*
|
|
17086
|
+
* `program` added in v0.26.0 so the retired `risk_item` (Program Management)
|
|
17087
|
+
* type has a home on the canonical `risk` after consolidation, rather than a
|
|
17088
|
+
* parallel `risk_domain` field free to drift from this one.
|
|
17089
|
+
*/
|
|
17090
|
+
risk_type?: 'technical' | 'business' | 'legal' | 'security' | 'operational' | 'program';
|
|
16779
17091
|
/** How likely this risk is to materialise (1 = unlikely, 5 = near certain) */
|
|
16780
17092
|
probability?: UPGAssessment;
|
|
16781
17093
|
/** Severity of consequences if the risk materialises (1 = negligible, 5 = catastrophic) */
|
|
@@ -16799,6 +17111,8 @@ interface DataContractProperties {
|
|
|
16799
17111
|
deletion_policy?: string;
|
|
16800
17112
|
/** Whether data is shared with third parties */
|
|
16801
17113
|
third_party_sharing?: boolean;
|
|
17114
|
+
/** Owning person or team accountable for the contract. Promote to a `node_owned_by_team` edge if ownership must be queryable. */
|
|
17115
|
+
owner?: string;
|
|
16802
17116
|
}
|
|
16803
17117
|
/** Audit log policy.
|
|
16804
17118
|
*
|
|
@@ -17128,10 +17442,17 @@ interface ProjectProperties {
|
|
|
17128
17442
|
*/
|
|
17129
17443
|
interface MilestoneProperties {
|
|
17130
17444
|
/**
|
|
17131
|
-
* Display order of this milestone within its parent
|
|
17132
|
-
*
|
|
17445
|
+
* Display order of this milestone within its parent (0-indexed). The scalar
|
|
17446
|
+
* ordering convention shared with `journey_step.step_order` and
|
|
17133
17447
|
* `journey_action.action_order` (UPG-663 / UPG-674). Orders the delivery
|
|
17134
|
-
* milestones a
|
|
17448
|
+
* milestones a parent moves through, independent of `due_date`.
|
|
17449
|
+
*
|
|
17450
|
+
* @remarks
|
|
17451
|
+
* The parent is whichever of the two milestone parents the graph actually
|
|
17452
|
+
* uses: a `project` via `project_targets_milestone`, or a `product` directly
|
|
17453
|
+
* via `product_targets_milestone` (Portfolio Phase 2, for milestones a
|
|
17454
|
+
* product owns outright with no program or project above them). The order is
|
|
17455
|
+
* scoped to that one parent, never global.
|
|
17135
17456
|
*/
|
|
17136
17457
|
milestone_order?: number;
|
|
17137
17458
|
/** Target due date (ISO format) */
|
|
@@ -17325,8 +17646,34 @@ interface PromptVersionProperties {
|
|
|
17325
17646
|
* }
|
|
17326
17647
|
*/
|
|
17327
17648
|
interface EvalBenchmarkProperties {
|
|
17328
|
-
/**
|
|
17329
|
-
|
|
17649
|
+
/**
|
|
17650
|
+
* Measured dimension.
|
|
17651
|
+
*
|
|
17652
|
+
* @remarks
|
|
17653
|
+
* Widened in 0.31.0 with the three dimensions an eval suite actually reports
|
|
17654
|
+
* and this set could not express: `precision_recall` (two numbers, not one
|
|
17655
|
+
* accuracy figure, and the pair is the point, because a detector that fires on
|
|
17656
|
+
* everything scores perfectly on recall alone), `task_success` (did the agent
|
|
17657
|
+
* achieve the goal), and `coherence` (rubric-graded, for multi-step runs).
|
|
17658
|
+
*
|
|
17659
|
+
* THIS ENUM IS A DIMENSION AXIS, AND IT SHOULD STAY ONE. An eval suite's
|
|
17660
|
+
* families are a SUBJECT axis (what is under test), and a dimension cannot
|
|
17661
|
+
* separate subjects, which is why several families legitimately share
|
|
17662
|
+
* `task_success`.
|
|
17663
|
+
*
|
|
17664
|
+
* The subject is expressed on the EDGE, not here: `eval_benchmark_measures_node`
|
|
17665
|
+
* names what a benchmark measures by pointing at it. So "which benchmarks cover
|
|
17666
|
+
* the importer" is a traversal, and this property stays a clean answer to a
|
|
17667
|
+
* different question, "what dimension does this benchmark report". The
|
|
17668
|
+
* commissioning brief hoped the enum would carry both; splitting them across the
|
|
17669
|
+
* enum and the edge is the better answer, and it needs no third mechanism.
|
|
17670
|
+
*
|
|
17671
|
+
* Corollary worth stating, since it is load-bearing: do NOT add subject-shaped
|
|
17672
|
+
* values here. `tool_use` or `documentation` would encode on this axis what the
|
|
17673
|
+
* edge already carries, and the two would drift the first time a benchmark
|
|
17674
|
+
* measured something its enum value did not admit.
|
|
17675
|
+
*/
|
|
17676
|
+
benchmark_type?: 'accuracy' | 'latency' | 'cost' | 'safety' | 'precision_recall' | 'task_success' | 'coherence' | 'custom';
|
|
17330
17677
|
/** Test cases in the suite */
|
|
17331
17678
|
test_case_count?: number;
|
|
17332
17679
|
/** Minimum passing score */
|
|
@@ -17334,6 +17681,47 @@ interface EvalBenchmarkProperties {
|
|
|
17334
17681
|
/** ISO date of the most recent run */
|
|
17335
17682
|
last_run?: ISODate;
|
|
17336
17683
|
}
|
|
17684
|
+
/** One metric's score inside `EvalRunProperties.metric_scores`.
|
|
17685
|
+
*
|
|
17686
|
+
* Every field is required, including `sample_size`. A score without its
|
|
17687
|
+
* denominator is not a smaller measurement, it is not a measurement, and an
|
|
17688
|
+
* optional denominator is how a run quietly stops reporting one.
|
|
17689
|
+
*
|
|
17690
|
+
* @example
|
|
17691
|
+
* const scores: MetricScore[] = [
|
|
17692
|
+
* { metric: 'precision', value: 0.94, sample_size: 250 },
|
|
17693
|
+
* { metric: 'recall', value: 0.71, sample_size: 250 },
|
|
17694
|
+
* ]
|
|
17695
|
+
*/
|
|
17696
|
+
interface MetricScore {
|
|
17697
|
+
/** What was measured, named as the metric names itself: `precision`, `recall`, `faithfulness`. */
|
|
17698
|
+
metric: string;
|
|
17699
|
+
/**
|
|
17700
|
+
* The score, normalized to 0 through 1, where 1 is the best result.
|
|
17701
|
+
*
|
|
17702
|
+
* @remarks
|
|
17703
|
+
* Normalization is the contract rather than a suggestion, because comparing
|
|
17704
|
+
* runs is the whole reason this array exists and two runs on different raw
|
|
17705
|
+
* scales do not compare. A rating collected on 1 through 5 is divided before
|
|
17706
|
+
* it lands here, and the raw scale belongs in the metric name if a reader
|
|
17707
|
+
* needs it (`faithfulness_of_5`).
|
|
17708
|
+
*
|
|
17709
|
+
* Measurements that are not rates do not belong here at all. Wall-clock time,
|
|
17710
|
+
* token counts, and cost already have typed fields on `eval_run`, so a metric
|
|
17711
|
+
* that cannot be expressed as a rate is a sign the value wanted one of those.
|
|
17712
|
+
*/
|
|
17713
|
+
value: number;
|
|
17714
|
+
/**
|
|
17715
|
+
* How many cases the score was computed over.
|
|
17716
|
+
*
|
|
17717
|
+
* @remarks
|
|
17718
|
+
* Required so a comparison across runs can never quietly compare different
|
|
17719
|
+
* sample sizes. It is the one field an author is most tempted to omit and the
|
|
17720
|
+
* one whose absence is least visible afterwards: a precision of 0.94 reads the
|
|
17721
|
+
* same whether it was measured over 250 cases or 4.
|
|
17722
|
+
*/
|
|
17723
|
+
sample_size: number;
|
|
17724
|
+
}
|
|
17337
17725
|
/** Evaluation run.
|
|
17338
17726
|
*
|
|
17339
17727
|
* @example
|
|
@@ -17364,6 +17752,32 @@ interface EvalRunProperties {
|
|
|
17364
17752
|
error_rate?: number;
|
|
17365
17753
|
/** Feedback score summary (human or automated) */
|
|
17366
17754
|
feedback_scores?: string;
|
|
17755
|
+
/**
|
|
17756
|
+
* Per-metric scores, one entry per measured metric.
|
|
17757
|
+
*
|
|
17758
|
+
* @remarks
|
|
17759
|
+
* Added in 0.31.0 because `score` is a single aggregate and the forcing case
|
|
17760
|
+
* needs two numbers: precision and recall, reported separately. An aggregate
|
|
17761
|
+
* hides the only interesting failure mode, which is a detector that catches
|
|
17762
|
+
* everything by firing on everything.
|
|
17763
|
+
*
|
|
17764
|
+
* `sample_size` is not optional decoration, and as of 0.31.0 the type says so:
|
|
17765
|
+
* it is a REQUIRED member of `MetricScore`. A sampled run reports its sample
|
|
17766
|
+
* size beside its score, always, so a comparison across runs can never quietly
|
|
17767
|
+
* compare different sample sizes. A number without its denominator is not a
|
|
17768
|
+
* smaller measurement, it is not a measurement, and a remark saying `always`
|
|
17769
|
+
* over a field typed optional is a contract only the careful reader honours.
|
|
17770
|
+
*
|
|
17771
|
+
* The entry shape is the exported `MetricScore` interface rather than an
|
|
17772
|
+
* anonymous literal, so a consumer can name the thing it is building. This is
|
|
17773
|
+
* one of two `object[]` properties in the spec; the other, `composition.members`,
|
|
17774
|
+
* already exports `CompositionMember`.
|
|
17775
|
+
*
|
|
17776
|
+
* The rejected alternative was two runs per benchmark, which needs no spec
|
|
17777
|
+
* change and makes every question about a benchmark's quality a join, encoding
|
|
17778
|
+
* a measurement artifact as graph structure.
|
|
17779
|
+
*/
|
|
17780
|
+
metric_scores?: MetricScore[];
|
|
17367
17781
|
}
|
|
17368
17782
|
/** AI cost tracker.
|
|
17369
17783
|
*
|
|
@@ -18674,12 +19088,18 @@ interface ContactProperties {
|
|
|
18674
19088
|
/** Whether this person has purchasing authority */
|
|
18675
19089
|
is_decision_maker?: boolean;
|
|
18676
19090
|
/**
|
|
18677
|
-
* Role this contact plays in the buying committee
|
|
19091
|
+
* Role this contact plays in the buying committee, the decision-making unit.
|
|
19092
|
+
*
|
|
19093
|
+
* @example 'economic_buyer'
|
|
19094
|
+
*
|
|
19095
|
+
* @remarks
|
|
18678
19096
|
* The substrate of enterprise multi-threading and of qualification frameworks
|
|
18679
|
-
*
|
|
18680
|
-
* single-threaded and at risk
|
|
19097
|
+
* such as MEDDICC and SPICED: a deal with no `champion` and no
|
|
19098
|
+
* `economic_buyer` mapped is single-threaded and at risk, which is a fact the
|
|
19099
|
+
* graph can answer rather than a judgement someone has to make.
|
|
19100
|
+
*
|
|
19101
|
+
* `is_decision_maker` becomes largely derivable from this
|
|
18681
19102
|
* (`buying_role = economic_buyer`) but is kept for back-compat.
|
|
18682
|
-
* @example 'economic_buyer'
|
|
18683
19103
|
*/
|
|
18684
19104
|
buying_role?: 'champion' | 'economic_buyer' | 'technical_evaluator' | 'end_user' | 'detractor' | 'influencer' | 'procurement' | 'legal' | 'security';
|
|
18685
19105
|
}
|
|
@@ -18718,13 +19138,16 @@ interface DealProperties {
|
|
|
18718
19138
|
/** Likelihood of closing (0-100%) */
|
|
18719
19139
|
probability?: number;
|
|
18720
19140
|
/**
|
|
18721
|
-
* Terminal result of the deal
|
|
18722
|
-
*
|
|
18723
|
-
* `deal_status` per the status-convention Rule 3. Lifecycle (open/won/lost as
|
|
18724
|
-
* phases) belongs on the base `status` slot; this records the win/loss verdict
|
|
18725
|
-
* a closed deal carries and gives `deal_lost_to_competitor` / win-loss study
|
|
18726
|
-
* derivations their anchor.
|
|
19141
|
+
* Terminal result of the deal: the win or loss verdict a closed deal carries.
|
|
19142
|
+
*
|
|
18727
19143
|
* @example 'won'
|
|
19144
|
+
*
|
|
19145
|
+
* @remarks
|
|
19146
|
+
* An Event-axis outcome (the verdict on a one-time event) and NOT a lifecycle
|
|
19147
|
+
* phase, so it is `deal_outcome` rather than `deal_status`, per
|
|
19148
|
+
* status-convention Rule 3. Lifecycle (open, won and lost as phases) belongs
|
|
19149
|
+
* on the base `status` slot. This field is what gives
|
|
19150
|
+
* `deal_lost_to_competitor` and win-loss study derivations their anchor.
|
|
18728
19151
|
*/
|
|
18729
19152
|
deal_outcome?: 'won' | 'lost' | 'no_decision';
|
|
18730
19153
|
/**
|
|
@@ -18756,6 +19179,8 @@ interface DealProperties {
|
|
|
18756
19179
|
* `qualification_framework`).
|
|
18757
19180
|
*/
|
|
18758
19181
|
qualification_score?: UPGAssessment;
|
|
19182
|
+
/** Accountable person or team carrying the deal. Promote to a `node_owned_by_person` edge if ownership must be queryable. */
|
|
19183
|
+
owner?: string;
|
|
18759
19184
|
}
|
|
18760
19185
|
/** Sales pipeline.
|
|
18761
19186
|
*
|
|
@@ -19698,7 +20123,16 @@ interface PartnerRevenueShareProperties {
|
|
|
19698
20123
|
* members: `team_works_in_workspace` / `persona_collaborates_in_workspace`
|
|
19699
20124
|
* (the `member_count` and `owner` properties are display-time aggregates;
|
|
19700
20125
|
* canonical membership is the edge set)
|
|
19701
|
-
* contained entities:
|
|
20126
|
+
* contained entities: `workspace_arranges_node`, whose edge `properties`
|
|
20127
|
+
* carry the spatial placement (`x`, `y`, `expanded`, `frame_id`)
|
|
20128
|
+
*
|
|
20129
|
+
* Two meanings of "workspace" travel together in shipped tools and are
|
|
20130
|
+
* unrelated. THIS is the CANVAS workspace: a thinking space, an entity in the
|
|
20131
|
+
* graph. The FILE workspace is a folder of `.upg` products, addressed by the
|
|
20132
|
+
* CLI and MCP surfaces (`init_workspace`, `switch_product`, `workspace.json`).
|
|
20133
|
+
* A third, `UPGSource.workspace_id`, is the source tool's own project id.
|
|
20134
|
+
* Neither is renamed: all three are entrenched, and the ambiguity is smaller
|
|
20135
|
+
* than the rename would be.
|
|
19702
20136
|
*
|
|
19703
20137
|
* @example
|
|
19704
20138
|
* const properties: WorkspaceProperties = {
|
|
@@ -19718,14 +20152,15 @@ interface WorkspaceProperties {
|
|
|
19718
20152
|
/** Free-text description. Pairs with the closed-enum `workspace_purpose`. */
|
|
19719
20153
|
purpose?: string;
|
|
19720
20154
|
/**
|
|
19721
|
-
*
|
|
19722
|
-
*
|
|
19723
|
-
*
|
|
19724
|
-
*
|
|
19725
|
-
*
|
|
19726
|
-
*
|
|
19727
|
-
*
|
|
19728
|
-
*
|
|
20155
|
+
* What the workspace is for. Drives template suggestions and surfaces in
|
|
20156
|
+
* workspace browsers.
|
|
20157
|
+
*
|
|
20158
|
+
* @remarks
|
|
20159
|
+
* `discovery` is persona, job and opportunity exploration. `planning` covers
|
|
20160
|
+
* roadmap and decision sessions. `retrospective` is reflection on shipped
|
|
20161
|
+
* work. `design` is experience or UI exploration. `research` organises study
|
|
20162
|
+
* data and synthesis. `strategy` is high-level direction setting. `general`
|
|
20163
|
+
* is the catch-all.
|
|
19729
20164
|
*/
|
|
19730
20165
|
workspace_purpose?: 'discovery' | 'planning' | 'retrospective' | 'design' | 'research' | 'strategy' | 'general';
|
|
19731
20166
|
/** Workspace owner (handle or email). Display label; canonical owner is `team_owns_workspace` or `persona_owns_workspace`. */
|
|
@@ -19738,6 +20173,256 @@ interface WorkspaceProperties {
|
|
|
19738
20173
|
archived_at?: ISODateTime;
|
|
19739
20174
|
/** Display icon (emoji or icon name) */
|
|
19740
20175
|
icon?: string;
|
|
20176
|
+
/**
|
|
20177
|
+
* Retention intent. Absent means `transient`.
|
|
20178
|
+
*
|
|
20179
|
+
* @remarks
|
|
20180
|
+
* A workspace is a free-form thinking space and is transient by default, so
|
|
20181
|
+
* the spec makes both intents EXPRESSIBLE and takes no position on which
|
|
20182
|
+
* reaches the file. Whether to write a transient canvas at all is a tool
|
|
20183
|
+
* decision, and the recommended posture is not to: a scratch canvas nobody
|
|
20184
|
+
* named has no business in a shared, git-tracked graph, where it lands in
|
|
20185
|
+
* everyone's diff. Writing only `durable` workspaces is what keeps a
|
|
20186
|
+
* canonical graph entity comfortable with a transient-by-default object.
|
|
20187
|
+
*/
|
|
20188
|
+
retention?: 'transient' | 'durable';
|
|
20189
|
+
/**
|
|
20190
|
+
* Opaque canvas furniture: the parts of a canvas with no graph referent.
|
|
20191
|
+
* Preserved verbatim on round-trip and never interpreted. Tool extension keys
|
|
20192
|
+
* are namespaced `<tool>:<key>` with a colon, and no consumer interprets a key
|
|
20193
|
+
* it does not own.
|
|
20194
|
+
*
|
|
20195
|
+
* @remarks
|
|
20196
|
+
* The cut here is UPG principle P14 applied literally. Anything that is a
|
|
20197
|
+
* REFERENCE TO A GRAPH NODE is an edge, which is why placed entities ride
|
|
20198
|
+
* `workspace_arranges_node` and not this bag: a node id held as a scalar
|
|
20199
|
+
* inside a blob is a foreign key in disguise, and a deleted node would leave
|
|
20200
|
+
* a stale reference nothing can detect. Anything that is pure UI chrome with
|
|
20201
|
+
* no graph referent stays here, because minting `annotation` and `frame`
|
|
20202
|
+
* entity types would add catalog surface that is meaningless to every
|
|
20203
|
+
* consumer outside the tool that drew it.
|
|
20204
|
+
*
|
|
20205
|
+
* WHY THE COLON, and why the rule is in the summary rather than buried here.
|
|
20206
|
+
* An underscore key is indistinguishable from an ordinary property name, so a
|
|
20207
|
+
* migration that targets namespaced keys cannot match it and no validator can
|
|
20208
|
+
* detect one that should have been namespaced. That undetectability is why
|
|
20209
|
+
* enforcement lives in the type and the documentation instead of in a check:
|
|
20210
|
+
* a check would report clean on a bag full of underscore keys, which is worse
|
|
20211
|
+
* than no check. Two conventions were already coexisting when this was ruled
|
|
20212
|
+
* (`entopo_views` in a live writer, `entopo:view_blocks` in the contract test
|
|
20213
|
+
* certifying preservation), which is how a cheap rule becomes a migration.
|
|
20214
|
+
*
|
|
20215
|
+
* PRESERVATION IS NOT PERMISSION TO RENDER. Preserving every byte says nothing
|
|
20216
|
+
* about meaning: a field-measured canvas carried `excluded: true` tombstones,
|
|
20217
|
+
* and a consumer that preserved them faithfully while rendering every entry
|
|
20218
|
+
* showed the user images they had deleted.
|
|
20219
|
+
*/
|
|
20220
|
+
canvas?: WorkspaceCanvas;
|
|
20221
|
+
}
|
|
20222
|
+
/** The opaque half of a canvas: furniture with no graph referent.
|
|
20223
|
+
*
|
|
20224
|
+
* Carried on `WorkspaceProperties.canvas`. A consumer MUST preserve this object
|
|
20225
|
+
* verbatim and MUST NOT act on it. That preservation is already guaranteed by
|
|
20226
|
+
* the canonical serialiser, which passes `properties` through as an open bag,
|
|
20227
|
+
* so honouring the rule costs nothing; it just needs saying.
|
|
20228
|
+
*
|
|
20229
|
+
* @example
|
|
20230
|
+
* const canvas: WorkspaceCanvas = {
|
|
20231
|
+
* canvas_version: 1,
|
|
20232
|
+
* viewport: { x: 0, y: 0, zoom: 1 },
|
|
20233
|
+
* }
|
|
20234
|
+
*/
|
|
20235
|
+
interface WorkspaceCanvas {
|
|
20236
|
+
/** Schema version of this bag, versioned by the tool that writes it and independent of the spec version. */
|
|
20237
|
+
canvas_version: number;
|
|
20238
|
+
/** Free-text note cards placed on the canvas. */
|
|
20239
|
+
annotations?: Array<{
|
|
20240
|
+
id: string;
|
|
20241
|
+
text: string;
|
|
20242
|
+
color?: string;
|
|
20243
|
+
x: number;
|
|
20244
|
+
y: number;
|
|
20245
|
+
}>;
|
|
20246
|
+
/** Visual grouping containers. `children` holds the ids of arranged nodes inside the frame. */
|
|
20247
|
+
frames?: Array<{
|
|
20248
|
+
id: string;
|
|
20249
|
+
label: string;
|
|
20250
|
+
x: number;
|
|
20251
|
+
y: number;
|
|
20252
|
+
width: number;
|
|
20253
|
+
height: number;
|
|
20254
|
+
children?: string[];
|
|
20255
|
+
}>;
|
|
20256
|
+
/**
|
|
20257
|
+
* Lightweight visual associations drawn between two cards.
|
|
20258
|
+
*
|
|
20259
|
+
* @remarks
|
|
20260
|
+
* Called RIDGES, not edges, and the rename is the point. Inside a `.upg` file
|
|
20261
|
+
* the word "edge" already means a graph edge, and a ridge is emphatically not
|
|
20262
|
+
* one: `promoted` exists precisely to mark the moment a ridge has BECOME a
|
|
20263
|
+
* real edge. Two different things under one word in the file format would be
|
|
20264
|
+
* a genuine ambiguity, and removing it costs nothing.
|
|
20265
|
+
*/
|
|
20266
|
+
ridges?: Array<{
|
|
20267
|
+
id: string;
|
|
20268
|
+
source: string;
|
|
20269
|
+
target: string;
|
|
20270
|
+
label?: string;
|
|
20271
|
+
promoted?: boolean;
|
|
20272
|
+
}>;
|
|
20273
|
+
/** Last camera position on the canvas. */
|
|
20274
|
+
viewport?: {
|
|
20275
|
+
x: number;
|
|
20276
|
+
y: number;
|
|
20277
|
+
zoom: number;
|
|
20278
|
+
};
|
|
20279
|
+
/**
|
|
20280
|
+
* Canvas cards that are not yet entities in the graph.
|
|
20281
|
+
*
|
|
20282
|
+
* @remarks
|
|
20283
|
+
* A draft stays here rather than being materialised as a `status: 'draft'`
|
|
20284
|
+
* node because a draft is BY DEFINITION not in the graph yet. That is what
|
|
20285
|
+
* committing means, and `workspace_produced_node` exists to record the moment
|
|
20286
|
+
* it enters. Auto-materialising would empty that edge of meaning and litter
|
|
20287
|
+
* graphs with abandoned drafts.
|
|
20288
|
+
*/
|
|
20289
|
+
drafts?: Array<{
|
|
20290
|
+
id: string;
|
|
20291
|
+
type: string;
|
|
20292
|
+
title: string;
|
|
20293
|
+
description?: string;
|
|
20294
|
+
x: number;
|
|
20295
|
+
y: number;
|
|
20296
|
+
}>;
|
|
20297
|
+
/** Seed provenance, when the canvas was opened from a gap prompt rather than blank. */
|
|
20298
|
+
gap_context?: {
|
|
20299
|
+
scope_label: string;
|
|
20300
|
+
region_slug?: string;
|
|
20301
|
+
note?: string;
|
|
20302
|
+
gaps: Array<{
|
|
20303
|
+
type: string;
|
|
20304
|
+
label: string;
|
|
20305
|
+
count?: number;
|
|
20306
|
+
detail?: string;
|
|
20307
|
+
}>;
|
|
20308
|
+
};
|
|
20309
|
+
/**
|
|
20310
|
+
* Tool-namespaced extension keys, written by a tool and preserved by everyone.
|
|
20311
|
+
*
|
|
20312
|
+
* The doc above has always promised an open bag; until 0.31.0 this interface
|
|
20313
|
+
* closed, so every doc-honouring consumer widened locally (`graph-service`
|
|
20314
|
+
* shipped `WorkspaceCanvas & Record<string, unknown>` as its boundary type). A
|
|
20315
|
+
* type that forces every conforming consumer to work around it is describing
|
|
20316
|
+
* the wrong thing, so the type now says what the doc always did.
|
|
20317
|
+
*
|
|
20318
|
+
* THE RULE FOR THESE KEYS (0.31.0):
|
|
20319
|
+
* - Syntax is `<tool>:<key>`, with a COLON. An underscore key is indistinguishable
|
|
20320
|
+
* from an ordinary property name, so it cannot be reliably matched, which is
|
|
20321
|
+
* exactly what makes a future migration miss half of what it targets.
|
|
20322
|
+
* - Every consumer PRESERVES unknown keys byte for byte.
|
|
20323
|
+
* - No consumer INTERPRETS a key it does not own. Preservation is a storage
|
|
20324
|
+
* guarantee that says nothing about meaning: a field-measured canvas carried
|
|
20325
|
+
* `excluded: true` tombstones, and a consumer that preserved every byte while
|
|
20326
|
+
* rendering every entry showed the user images they had deleted.
|
|
20327
|
+
* - The prefix is the owner. No registry at present scale.
|
|
20328
|
+
*
|
|
20329
|
+
* The declared members above keep their exact types, so the enumeration guard
|
|
20330
|
+
* is unaffected: adding a known layer still breaks exhaustive call sites at
|
|
20331
|
+
* compile time.
|
|
20332
|
+
*
|
|
20333
|
+
* THE COLON IS IN THE TYPE, and this is the only place the syntax rule is
|
|
20334
|
+
* enforceable at all. No runtime check can catch a key that should have been
|
|
20335
|
+
* namespaced and was not, because an underscore key is indistinguishable from
|
|
20336
|
+
* an ordinary property by construction, and a write-time rejection would
|
|
20337
|
+
* contradict the preservation guarantee the bag is built on. A bare
|
|
20338
|
+
* `[key: string]: unknown` would have accepted every form the rule forbids, so
|
|
20339
|
+
* the pattern index signature is what makes the rule cost anything.
|
|
20340
|
+
*
|
|
20341
|
+
* The declared members are exempt because none of them matches the pattern,
|
|
20342
|
+
* which is the mechanism working rather than a hole in it: they are the keys
|
|
20343
|
+
* the spec owns, and the pattern governs the keys it does not.
|
|
20344
|
+
*
|
|
20345
|
+
* The cost paid for the openness is narrower than the old closure but real: a
|
|
20346
|
+
* misspelled namespaced key resolves to `unknown` and surfaces at first use
|
|
20347
|
+
* rather than at the typo. A misspelled DECLARED member (`canvas.anotations`)
|
|
20348
|
+
* is still a compile error, because it does not match the pattern either.
|
|
20349
|
+
*/
|
|
20350
|
+
[namespacedKey: `${string}:${string}`]: unknown;
|
|
20351
|
+
}
|
|
20352
|
+
/** Composition: a named, published view assembled from a canvas.
|
|
20353
|
+
*
|
|
20354
|
+
* The durable counterpart to `workspace`. Where a workspace is a free-form
|
|
20355
|
+
* thinking space with an audience of one, a composition is a stable artifact
|
|
20356
|
+
* with a slug people link to, a publisher, and a revision history. Its node
|
|
20357
|
+
* `id` IS the slug: `.upg` ids are slugs by convention, and minting a separate
|
|
20358
|
+
* `slug` property would give one thing two identities.
|
|
20359
|
+
*
|
|
20360
|
+
* SCOPE OF THAT RULE, stated because assuming it generalised produced a
|
|
20361
|
+
* `not_found` refusal in the field (the invariant working, the documentation
|
|
20362
|
+
* failing): id-is-slug holds for `composition` and `workspace`. It does NOT hold
|
|
20363
|
+
* for `product`, which carries a uuid id and a separate slug. A rule whose scope
|
|
20364
|
+
* is undocumented gets over-generalised by the next reader.
|
|
20365
|
+
*
|
|
20366
|
+
* THE ARRANGEMENT IS FROZEN, THE CONTENT IS NOT. `members` captures layout and
|
|
20367
|
+
* pointers at publish time and never resolved data. Each member's `href` is
|
|
20368
|
+
* still a QUERY, re-resolved against current graph data at render, which is
|
|
20369
|
+
* what makes a composition a live UPG surface rather than a stale screenshot.
|
|
20370
|
+
* A consumer must not treat `members` as cached content.
|
|
20371
|
+
*
|
|
20372
|
+
* Provenance reuses `workspace_produced_node`: which canvas a composition was
|
|
20373
|
+
* published from is already expressible, so nothing new is minted for it. What
|
|
20374
|
+
* a composition SHOWS is `composition_focuses_node`, which is what makes
|
|
20375
|
+
* "which published views show this persona?" answerable to a tool that cannot
|
|
20376
|
+
* parse the publishing tool's URLs.
|
|
20377
|
+
*
|
|
20378
|
+
* @example
|
|
20379
|
+
* const properties: CompositionProperties = {
|
|
20380
|
+
* members: [
|
|
20381
|
+
* { id: 'blk_1', href: '/view/personas?segment=smb', title: 'SMB personas', x: 0, y: 0, width: 6, height: 4 },
|
|
20382
|
+
* ],
|
|
20383
|
+
* rev: 3,
|
|
20384
|
+
* published_at: '2026-08-17T09:00:00Z',
|
|
20385
|
+
* published_by: 'sam.patel@arkheiev.com',
|
|
20386
|
+
* }
|
|
20387
|
+
*/
|
|
20388
|
+
interface CompositionMember {
|
|
20389
|
+
/** Stable id of the block within this composition. */
|
|
20390
|
+
id: string;
|
|
20391
|
+
/** Tool-namespaced view reference, opaque to every other tool and preserved verbatim. */
|
|
20392
|
+
href: string;
|
|
20393
|
+
/** Display title captured at publish, used as a fallback while the target resolves. */
|
|
20394
|
+
title: string;
|
|
20395
|
+
/** Horizontal position of the block in the frozen arrangement. */
|
|
20396
|
+
x: number;
|
|
20397
|
+
/** Vertical position of the block in the frozen arrangement. */
|
|
20398
|
+
y: number;
|
|
20399
|
+
/** Width of the block in the frozen arrangement. */
|
|
20400
|
+
width: number;
|
|
20401
|
+
/** Height of the block in the frozen arrangement. */
|
|
20402
|
+
height: number;
|
|
20403
|
+
/** Whether the block is drawn collapsed. */
|
|
20404
|
+
collapsed?: boolean;
|
|
20405
|
+
}
|
|
20406
|
+
interface CompositionProperties {
|
|
20407
|
+
/**
|
|
20408
|
+
* The frozen member arrangement, captured at publish. Layout and pointers
|
|
20409
|
+
* only, never resolved content.
|
|
20410
|
+
*/
|
|
20411
|
+
members: CompositionMember[];
|
|
20412
|
+
/**
|
|
20413
|
+
* Monotonic revision, bumped on each republish of the same slug.
|
|
20414
|
+
*
|
|
20415
|
+
* @remarks
|
|
20416
|
+
* A published revision is a fact about the composition, user-visible as a new
|
|
20417
|
+
* print from the same plate, so it is serialised. Worth distinguishing from a
|
|
20418
|
+
* store's concurrency token, which shares the name in some backends but is a
|
|
20419
|
+
* fact about the table rather than about the thing, and is not spec data.
|
|
20420
|
+
*/
|
|
20421
|
+
rev: number;
|
|
20422
|
+
/** ISO timestamp of the most recent publish or republish. */
|
|
20423
|
+
published_at: ISODateTime;
|
|
20424
|
+
/** Publisher handle or email. Display scalar, same posture as `WorkspaceProperties.owner`. */
|
|
20425
|
+
published_by?: string;
|
|
19741
20426
|
}
|
|
19742
20427
|
/** Framework exercise: one run of a framework over a set of entities.
|
|
19743
20428
|
*
|
|
@@ -19768,6 +20453,29 @@ interface FrameworkExerciseProperties {
|
|
|
19768
20453
|
* later evolves (inputs added, removed, or rescaled).
|
|
19769
20454
|
*/
|
|
19770
20455
|
inputs_snapshot?: Record<string, unknown>;
|
|
20456
|
+
/**
|
|
20457
|
+
* Relative multiplier per framework input for this run, keyed by input id.
|
|
20458
|
+
*
|
|
20459
|
+
* @remarks
|
|
20460
|
+
* A weight belongs to the RUN, not to any entity it scores: one weight per
|
|
20461
|
+
* input, shared by every scored entity, which is why it sits here and not on
|
|
20462
|
+
* the `framework_exercise_includes_node` edge alongside the per-entity result.
|
|
20463
|
+
*
|
|
20464
|
+
* Named `input_weights` rather than a bare `weight` deliberately, and the
|
|
20465
|
+
* collision is live rather than hypothetical: `getPropertyDefaultScale` keys
|
|
20466
|
+
* on property NAME alone and ignores entity type, and `PROPERTY_SCALE_MAP`
|
|
20467
|
+
* already maps `weight` to the `importance_5` ordinal. A bare `weight` here
|
|
20468
|
+
* would silently resolve to a 1-5 assessment scale, which is the wrong type,
|
|
20469
|
+
* range and meaning for a multiplier. The plural also matches the spec's own
|
|
20470
|
+
* vocabulary: a framework declares *inputs*, not dimensions.
|
|
20471
|
+
*
|
|
20472
|
+
* @example
|
|
20473
|
+
* const properties: FrameworkExerciseProperties = {
|
|
20474
|
+
* framework_id: 'rice-scoring',
|
|
20475
|
+
* input_weights: { reach: 1, impact: 2, confidence: 1, effort: 1.5 },
|
|
20476
|
+
* }
|
|
20477
|
+
*/
|
|
20478
|
+
input_weights?: Record<string, number>;
|
|
19771
20479
|
}
|
|
19772
20480
|
|
|
19773
20481
|
/**
|
|
@@ -20418,6 +21126,8 @@ interface UPGPropertyMap {
|
|
|
20418
21126
|
workspace: WorkspaceProperties;
|
|
20419
21127
|
/** A framework exercise: one run of a framework over a set of entities */
|
|
20420
21128
|
framework_exercise: FrameworkExerciseProperties;
|
|
21129
|
+
/** A composition: a named, published view assembled from a canvas */
|
|
21130
|
+
composition: CompositionProperties;
|
|
20421
21131
|
/** An account: a company or organisation in the CRM */
|
|
20422
21132
|
account: AccountProperties;
|
|
20423
21133
|
/** A contact: an individual person at an account */
|
|
@@ -22974,6 +23684,74 @@ declare const UPG_STRUCTURE_PATTERNS: readonly StructurePattern[];
|
|
|
22974
23684
|
* https://unifiedproductgraph.org/spec | MIT
|
|
22975
23685
|
*/
|
|
22976
23686
|
|
|
23687
|
+
/**
|
|
23688
|
+
* One declared, deterministic test over a single property. Atoms combine into a
|
|
23689
|
+
* slot's membership rule; an atom is never a membership rule by itself.
|
|
23690
|
+
*
|
|
23691
|
+
* `scope` says whose property is read, reusing the discriminator that already
|
|
23692
|
+
* exists on `PropertyRequirementLike` rather than inventing a parallel axis:
|
|
23693
|
+
* `'entity'` reads a property of the entity itself (an assumption's
|
|
23694
|
+
* `risk_level`), `'framework'` reads a measured property held on the exercise
|
|
23695
|
+
* edge (Kano's `functional_response`).
|
|
23696
|
+
*
|
|
23697
|
+
* Semantics a consumer must honour — each exists because its violation is a way
|
|
23698
|
+
* a grid could silently lie:
|
|
23699
|
+
*
|
|
23700
|
+
* - **Pure and total.** A function of the entity's and the exercise edge's
|
|
23701
|
+
* properties, and nothing else. No clock, no random, no ambient read.
|
|
23702
|
+
* - **Mutually exclusive.** No entity may satisfy two sibling predicates.
|
|
23703
|
+
* Overlapping predicates make a framework invalid; that is an authoring bug to
|
|
23704
|
+
* reject, never a tie for the renderer to break by declaration order.
|
|
23705
|
+
* - **Not exhaustive.** The complement of the union is the legitimate, expected
|
|
23706
|
+
* set of unplaced entities. Do not add a catch-all.
|
|
23707
|
+
* - **Absence is not a value.** A missing property, a null, or an assessment
|
|
23708
|
+
* without a value fails every predicate. It never compares as zero and never
|
|
23709
|
+
* sorts into a corner cell.
|
|
23710
|
+
* - **Thresholds are declared, never inferred.** Every boundary is a literal
|
|
23711
|
+
* here; the renderer contributes no default of its own.
|
|
23712
|
+
*
|
|
23713
|
+
* Ruling and rationale (including Amendment 1, which set the arity):
|
|
23714
|
+
* the zone-predicate hook ruling (internal decision record, 2026-08-07)
|
|
23715
|
+
*/
|
|
23716
|
+
type FrameworkSlotPredicateAtom = {
|
|
23717
|
+
/** Whose property is being read: the entity's own, or the framework exercise's */
|
|
23718
|
+
scope: 'entity' | 'framework';
|
|
23719
|
+
/** The property name being tested */
|
|
23720
|
+
property: string;
|
|
23721
|
+
} & ({
|
|
23722
|
+
op: 'eq';
|
|
23723
|
+
value: string | number | boolean;
|
|
23724
|
+
} | {
|
|
23725
|
+
op: 'in';
|
|
23726
|
+
value: ReadonlyArray<string | number>;
|
|
23727
|
+
} | {
|
|
23728
|
+
op: 'gte';
|
|
23729
|
+
value: number;
|
|
23730
|
+
} | {
|
|
23731
|
+
op: 'lt';
|
|
23732
|
+
value: number;
|
|
23733
|
+
}
|
|
23734
|
+
/** Half-open interval `[min, max)` — min inclusive, max exclusive */
|
|
23735
|
+
| {
|
|
23736
|
+
op: 'band';
|
|
23737
|
+
value: readonly [number, number];
|
|
23738
|
+
});
|
|
23739
|
+
/**
|
|
23740
|
+
* A slot's membership rule: a conjunction. An entity belongs iff EVERY atom
|
|
23741
|
+
* holds; absence of any atom's property fails the whole conjunction.
|
|
23742
|
+
*
|
|
23743
|
+
* A list rather than a single atom because every real quadrant framework
|
|
23744
|
+
* partitions on two properties at once — an assumption map on risk AND
|
|
23745
|
+
* confidence, Kano on functional AND dysfunctional response. A one-atom rule
|
|
23746
|
+
* cannot tell "test first" from "monitor", and declaring both as "risk is high"
|
|
23747
|
+
* would make them overlap, which is invalid.
|
|
23748
|
+
*
|
|
23749
|
+
* Always a list, even for one atom, so consumers never branch on arity.
|
|
23750
|
+
* Conjunction only: express a disjunction as two slots, which gives each
|
|
23751
|
+
* disjunct its own visible cell. Empty is invalid — it would match everything,
|
|
23752
|
+
* which is a catch-all cell in disguise.
|
|
23753
|
+
*/
|
|
23754
|
+
type FrameworkSlotPredicate = readonly FrameworkSlotPredicateAtom[];
|
|
22977
23755
|
/** A named position within a framework's visual structure, populated by an entity type */
|
|
22978
23756
|
interface FrameworkSlot {
|
|
22979
23757
|
/** Display label for this slot (e.g. "Key Partners", "Problem", "Reach") */
|
|
@@ -22997,6 +23775,18 @@ interface FrameworkSlot {
|
|
|
22997
23775
|
* off `scope: 'framework'` properties, not roles.
|
|
22998
23776
|
*/
|
|
22999
23777
|
role?: string;
|
|
23778
|
+
/**
|
|
23779
|
+
* The membership rule for this slot, when membership is decided by a property
|
|
23780
|
+
* value rather than by entity type or framework role.
|
|
23781
|
+
*
|
|
23782
|
+
* Carrying it here — beside `role` — is what keeps the zone class computable
|
|
23783
|
+
* from the spec record alone: a slot with a `predicate` is a PREDICATE-zone.
|
|
23784
|
+
* The two are not alternatives. On a predicate zone, `role` stops being the
|
|
23785
|
+
* membership channel and becomes the manual-override channel.
|
|
23786
|
+
*
|
|
23787
|
+
* Additive and optional. A slot without one is unaffected.
|
|
23788
|
+
*/
|
|
23789
|
+
predicate?: FrameworkSlotPredicate;
|
|
23000
23790
|
/** Explanation of what this slot represents in the framework */
|
|
23001
23791
|
description?: string;
|
|
23002
23792
|
}
|
|
@@ -23355,6 +24145,165 @@ interface FrameworkPresentationSpec {
|
|
|
23355
24145
|
/** Custom colour map: keys are values of the colour_by dimension, values are CSS colours */
|
|
23356
24146
|
colour_map?: Record<string, string>;
|
|
23357
24147
|
}
|
|
24148
|
+
/**
|
|
24149
|
+
* One traversal step along a declared edge path.
|
|
24150
|
+
*
|
|
24151
|
+
* `direction` is EXPLICIT and never inferred. Inferring it from endpoint types
|
|
24152
|
+
* fails on self-edges — the experiment family has one
|
|
24153
|
+
* (`experiment_run_tested_via_experiment_run`), where source and target are the
|
|
24154
|
+
* same type and the endpoint types cannot disambiguate the reading.
|
|
24155
|
+
*
|
|
24156
|
+
* `forward` walks source → target as the catalog declares it; `reverse` walks
|
|
24157
|
+
* target → source.
|
|
24158
|
+
*/
|
|
24159
|
+
interface RelationalEdgeStep {
|
|
24160
|
+
/** Canonical edge type id from the UPG edge catalog */
|
|
24161
|
+
edge: string;
|
|
24162
|
+
/** Which way this step traverses the edge. Never inferred. */
|
|
24163
|
+
direction: 'forward' | 'reverse';
|
|
24164
|
+
}
|
|
24165
|
+
/**
|
|
24166
|
+
* A column rendering a property of the ROW entity itself.
|
|
24167
|
+
*
|
|
24168
|
+
* A field column declares NO entity type, deliberately. Its entity is the spine
|
|
24169
|
+
* by definition, and asking what type it "contains" is a category error. This is
|
|
24170
|
+
* the difference that dissolves the Status trap: under `slots`, a column showing
|
|
24171
|
+
* a property of the row had to name an `entityTypeId`, which made it look like a
|
|
24172
|
+
* second zone holding the same type as the first — something a partition forbids.
|
|
24173
|
+
* A field column has no such artefact to explain away.
|
|
24174
|
+
*/
|
|
24175
|
+
interface RelationalFieldColumn {
|
|
24176
|
+
kind: 'field';
|
|
24177
|
+
/** Stable machine-readable column id (snake_case), unique within the surface */
|
|
24178
|
+
id: string;
|
|
24179
|
+
/** Display header */
|
|
24180
|
+
label: string;
|
|
24181
|
+
/** Property key on the spine entity */
|
|
24182
|
+
property: string;
|
|
24183
|
+
/** Whether the column can be sorted */
|
|
24184
|
+
sortable?: boolean;
|
|
24185
|
+
}
|
|
24186
|
+
/**
|
|
24187
|
+
* A column rendering a declared expression over the ROW entity's own properties.
|
|
24188
|
+
*
|
|
24189
|
+
* Every operand must be a property the spine entity actually declares. An
|
|
24190
|
+
* expression reaching a property held by another entity on a path is INVALID —
|
|
24191
|
+
* it would evaluate to nothing for every row forever, which is a column that is
|
|
24192
|
+
* 100% honest gap, i.e. a lie about what the framework measures.
|
|
24193
|
+
*/
|
|
24194
|
+
interface RelationalComputedColumn {
|
|
24195
|
+
kind: 'computed';
|
|
24196
|
+
/** Stable machine-readable column id (snake_case), unique within the surface */
|
|
24197
|
+
id: string;
|
|
24198
|
+
/** Display header */
|
|
24199
|
+
label: string;
|
|
24200
|
+
/** Arithmetic expression over spine properties */
|
|
24201
|
+
expression: string;
|
|
24202
|
+
/** How to render the computed value */
|
|
24203
|
+
format?: 'number' | 'percentage' | 'currency' | 'duration';
|
|
24204
|
+
/** Whether the column can be sorted */
|
|
24205
|
+
sortable?: boolean;
|
|
24206
|
+
}
|
|
24207
|
+
/**
|
|
24208
|
+
* A column rendering the entities reached from the row along a declared edge path.
|
|
24209
|
+
*
|
|
24210
|
+
* A PROJECTION IS NOT A PARTITION, and the distinction is load-bearing rather
|
|
24211
|
+
* than stylistic. A partition claims exclusive membership and is a function of
|
|
24212
|
+
* the entity alone; a projection reports a relationship and is a function of the
|
|
24213
|
+
* (row, path) pair. The same entity legitimately appears in several columns, and
|
|
24214
|
+
* in the same column of several rows — that is the edge structure being reported
|
|
24215
|
+
* accurately, not the "rendering illusion" that property-partitioned frameworks
|
|
24216
|
+
* suffer from. Nothing lands in a projection cell by index, by order, or by
|
|
24217
|
+
* count: the edge exists in the graph or it does not.
|
|
24218
|
+
*
|
|
24219
|
+
* Consequently, and this is a rule rather than an observation: **sibling columns
|
|
24220
|
+
* are NOT required to be mutually exclusive, and must not be validated as if
|
|
24221
|
+
* they were.** Mutual exclusivity is a predicate-zone rule. Enforcing it on a
|
|
24222
|
+
* join would forbid the join.
|
|
24223
|
+
*
|
|
24224
|
+
* EVERY PROJECTION IS MANY-VALUED. The edge catalog declares no cardinality on
|
|
24225
|
+
* any edge, so a projection resolves to a set of size 0..n and must be rendered
|
|
24226
|
+
* as one. Taking the first member because "a run has one hypothesis" asserts a
|
|
24227
|
+
* cardinality the spec does not declare, and selecting from an unordered set by
|
|
24228
|
+
* position is the offset-windowing defect at a different arity.
|
|
24229
|
+
*
|
|
24230
|
+
* ABSENCE IS NOT A VALUE. An empty projection renders as a typed, labelled gap,
|
|
24231
|
+
* never as a blank cell — three states must stay distinguishable: no edge along
|
|
24232
|
+
* the path, an edge to an entity whose rendered field is empty, and not yet
|
|
24233
|
+
* loaded. A blank cell collapses all three into one shrug.
|
|
24234
|
+
*/
|
|
24235
|
+
interface RelationalProjectionColumn {
|
|
24236
|
+
kind: 'projection';
|
|
24237
|
+
/** Stable machine-readable column id (snake_case), unique within the surface */
|
|
24238
|
+
id: string;
|
|
24239
|
+
/** Display header */
|
|
24240
|
+
label: string;
|
|
24241
|
+
/**
|
|
24242
|
+
* The traversal from the spine to the projected entities. A LIST, not a single
|
|
24243
|
+
* edge.
|
|
24244
|
+
*
|
|
24245
|
+
* Multi-hop is required, not a generality. Reaching a `hypothesis` from an
|
|
24246
|
+
* `experiment_run` is a two-hop reverse traversal, and the spec has twice
|
|
24247
|
+
* REFUSED to mint the shortcut edge that would flatten it, because doing so
|
|
24248
|
+
* would dissolve the plan/run split made in ENTP-322/323. A single-hop-only
|
|
24249
|
+
* declaration would leave authors needing that column with no legal way to
|
|
24250
|
+
* declare it — and the illegal way is the edge the spec already rejected.
|
|
24251
|
+
*/
|
|
24252
|
+
path: RelationalEdgeStep[];
|
|
24253
|
+
/** Property keys to render for each projected entity */
|
|
24254
|
+
fields: string[];
|
|
24255
|
+
/**
|
|
24256
|
+
* Maximum entities to RENDER in a cell. A declared literal; the renderer
|
|
24257
|
+
* contributes no default. Truncates rendering only, never membership, and a
|
|
24258
|
+
* truncated cell must report the full count.
|
|
24259
|
+
*/
|
|
24260
|
+
limit?: number;
|
|
24261
|
+
/** Whether the column can be sorted */
|
|
24262
|
+
sortable?: boolean;
|
|
24263
|
+
}
|
|
24264
|
+
/** Any column on a relational surface */
|
|
24265
|
+
type RelationalColumn = RelationalFieldColumn | RelationalComputedColumn | RelationalProjectionColumn;
|
|
24266
|
+
/**
|
|
24267
|
+
* A relational / join surface: rows are the instances of one declared spine
|
|
24268
|
+
* type, columns are fields of the row or projections along declared edge paths.
|
|
24269
|
+
*
|
|
24270
|
+
* Additive and optional. A framework without this block is unaffected; a
|
|
24271
|
+
* consumer that does not understand it ignores it. It exists because the zoned
|
|
24272
|
+
* grid partitions ONE set into cells and cannot express a surface that JOINS
|
|
24273
|
+
* several sets along the relationships between them — the shape of the `table`
|
|
24274
|
+
* pattern, the second-largest structural family in this spec.
|
|
24275
|
+
*
|
|
24276
|
+
* Rules a consumer must honour, stated here because they are contract, not
|
|
24277
|
+
* rendering preference:
|
|
24278
|
+
*
|
|
24279
|
+
* 1. **The spine is the population.** Row count is the number of spine entities
|
|
24280
|
+
* in scope. No column may filter the row set; a column that removes rows is a
|
|
24281
|
+
* partition wearing a projection's clothes.
|
|
24282
|
+
* 2. **Counts are entity-distinct per column** — the number of DISTINCT entities
|
|
24283
|
+
* appearing anywhere in the column, never the sum of cell sizes. Where the two
|
|
24284
|
+
* differ, both may be shown only if labelled ("7 learnings across 9 rows").
|
|
24285
|
+
* Reporting the sum as a population is this surface's characteristic lie.
|
|
24286
|
+
* 3. **Unreferenced entities must be reported.** An entity of a type appearing in
|
|
24287
|
+
* any declared path — endpoint OR intermediate — that no row reaches is
|
|
24288
|
+
* invisible by construction. It must be surfaced, always, with a count and its
|
|
24289
|
+
* type, even at zero. Otherwise the surface silently under-reports the graph.
|
|
24290
|
+
* 4. **Determinism.** A projection is a function of the graph's edges and the
|
|
24291
|
+
* projected entities' properties, and nothing else. No clock, no random, no
|
|
24292
|
+
* ambient read. Same graph, same table, every machine.
|
|
24293
|
+
*/
|
|
24294
|
+
interface RelationalSurfaceSpec {
|
|
24295
|
+
/** The UPG entity type whose instances are the rows */
|
|
24296
|
+
spine: string;
|
|
24297
|
+
/** Ordered columns; at least one */
|
|
24298
|
+
columns: RelationalColumn[];
|
|
24299
|
+
/** Declared row order. Never inferred; the renderer contributes no default. */
|
|
24300
|
+
sort: {
|
|
24301
|
+
/** `id` of a column in `columns` */
|
|
24302
|
+
column: string;
|
|
24303
|
+
/** Sort direction */
|
|
24304
|
+
direction: 'asc' | 'desc';
|
|
24305
|
+
};
|
|
24306
|
+
}
|
|
23358
24307
|
/** One step in a guided walkthrough of how to use a framework */
|
|
23359
24308
|
interface FrameworkStep {
|
|
23360
24309
|
/** Step order (1-based) */
|
|
@@ -23458,6 +24407,18 @@ interface UPGFramework {
|
|
|
23458
24407
|
structure: FrameworkStructureSpec;
|
|
23459
24408
|
/** How the framework should be rendered */
|
|
23460
24409
|
presentation: FrameworkPresentationSpec;
|
|
24410
|
+
/**
|
|
24411
|
+
* A relational / join surface, for frameworks whose columns are projections
|
|
24412
|
+
* along edges rather than a partition of one set.
|
|
24413
|
+
*
|
|
24414
|
+
* Additive and optional. When present it is the authoritative column
|
|
24415
|
+
* declaration and `presentation.layout` describes only chrome — the two must
|
|
24416
|
+
* not be read as competing rosters. `slots` should be omitted on a framework
|
|
24417
|
+
* that declares this block: a slot cannot express an edge path, and forcing a
|
|
24418
|
+
* table into slots is what produced the duplicate-`entityTypeId` artefact this
|
|
24419
|
+
* block removes.
|
|
24420
|
+
*/
|
|
24421
|
+
relational?: RelationalSurfaceSpec;
|
|
23461
24422
|
/** Educational context and guided walkthrough */
|
|
23462
24423
|
education: FrameworkEducation;
|
|
23463
24424
|
/** IDs of other frameworks this one can be composed with */
|
|
@@ -23703,6 +24664,7 @@ declare const UPG_REGION_COUNT: number;
|
|
|
23703
24664
|
/**
|
|
23704
24665
|
* Framework validation: validates UPGFramework objects against the spec.
|
|
23705
24666
|
*/
|
|
24667
|
+
|
|
23706
24668
|
/** Result of validating a UPGFramework object */
|
|
23707
24669
|
interface FrameworkValidationResult {
|
|
23708
24670
|
/** Whether the framework passed all required checks */
|
|
@@ -23745,6 +24707,24 @@ interface FrameworkValidationResult {
|
|
|
23745
24707
|
* // result.errors === []
|
|
23746
24708
|
*/
|
|
23747
24709
|
declare function validateUPGFramework(framework: unknown): FrameworkValidationResult;
|
|
24710
|
+
/**
|
|
24711
|
+
* Whether two sibling predicates are PROVABLY disjoint — the test that decides
|
|
24712
|
+
* whether a framework's zones are mutually exclusive.
|
|
24713
|
+
*
|
|
24714
|
+
* Two conjunctions cannot both hold if they share a `(scope, property)` on
|
|
24715
|
+
* which their atoms cannot both hold: one such property is enough, because an
|
|
24716
|
+
* entity would have to satisfy both atoms on it simultaneously.
|
|
24717
|
+
*
|
|
24718
|
+
* Note the direction: this returns `true` only when disjointness is PROVED.
|
|
24719
|
+
* An unprovable pair is rejected by the validator, not accepted. Over-rejection
|
|
24720
|
+
* costs the author a loud error they fix by adding a discriminating atom;
|
|
24721
|
+
* accepted overlap costs a silent misclassification at render time. See
|
|
24722
|
+
* Amendment 1 §B of the zone-predicate-hook decision.
|
|
24723
|
+
*
|
|
24724
|
+
* Exported so the renderer resolves membership with the same rule the validator
|
|
24725
|
+
* enforced, rather than a second implementation that can drift from it.
|
|
24726
|
+
*/
|
|
24727
|
+
declare function predicatesProvablyDisjoint(a: FrameworkSlotPredicate, b: FrameworkSlotPredicate): boolean;
|
|
23748
24728
|
|
|
23749
24729
|
/**
|
|
23750
24730
|
* Canonical Framework Library: v1 public surface.
|
|
@@ -23767,6 +24747,66 @@ declare const UPG_FRAMEWORKS_BY_ID: Record<string, UPGFramework>;
|
|
|
23767
24747
|
/** Frameworks grouped by category */
|
|
23768
24748
|
declare const UPG_FRAMEWORKS_BY_CATEGORY: Record<string, UPGFramework[]>;
|
|
23769
24749
|
|
|
24750
|
+
/**
|
|
24751
|
+
* Relational path resolution: the shared type-composition logic for the
|
|
24752
|
+
* `relational` block's edge paths.
|
|
24753
|
+
*
|
|
24754
|
+
* One implementation, two consumers — the framework validator (which reports
|
|
24755
|
+
* malformed paths as authoring errors) and the shape audit (which checks that
|
|
24756
|
+
* every type a path reaches is declared in `data.entity_types`). They must agree
|
|
24757
|
+
* on what a path means, so they resolve it with the same function rather than
|
|
24758
|
+
* two that drift.
|
|
24759
|
+
*
|
|
24760
|
+
* https://unifiedproductgraph.org/spec | MIT
|
|
24761
|
+
*/
|
|
24762
|
+
|
|
24763
|
+
type EdgeCatalog = Record<string, {
|
|
24764
|
+
source_type: string;
|
|
24765
|
+
target_type: string;
|
|
24766
|
+
}>;
|
|
24767
|
+
/** One resolved hop: where the traversal was, and where the step lands it. */
|
|
24768
|
+
interface ResolvedStep {
|
|
24769
|
+
/** Entity type the traversal is at BEFORE this step */
|
|
24770
|
+
from: string;
|
|
24771
|
+
/** Entity type the traversal is at AFTER this step */
|
|
24772
|
+
to: string;
|
|
24773
|
+
}
|
|
24774
|
+
/** Why a path failed to resolve. `null` `reason` means it resolved cleanly. */
|
|
24775
|
+
interface PathResolution {
|
|
24776
|
+
/** The type each step lands on, in order */
|
|
24777
|
+
steps: ResolvedStep[];
|
|
24778
|
+
/** Entity type the whole path lands on, or `null` if it did not resolve */
|
|
24779
|
+
endpoint: string | null;
|
|
24780
|
+
/** Human-readable failure, or `null` on success */
|
|
24781
|
+
reason: string | null;
|
|
24782
|
+
/** Index of the step that failed, or `-1` */
|
|
24783
|
+
failedAt: number;
|
|
24784
|
+
}
|
|
24785
|
+
/**
|
|
24786
|
+
* Walk a declared path from a starting entity type.
|
|
24787
|
+
*
|
|
24788
|
+
* `direction` is read, never inferred: `forward` goes source → target as the
|
|
24789
|
+
* catalog declares the edge, `reverse` goes target → source. A step whose
|
|
24790
|
+
* starting type does not match the end it claims to enter is a TYPE-COMPOSITION
|
|
24791
|
+
* failure and is reported with both types named, because "invalid path" without
|
|
24792
|
+
* the mismatch is not actionable.
|
|
24793
|
+
*/
|
|
24794
|
+
declare function resolveRelationalPath(spine: string, path: RelationalEdgeStep[], catalog?: EdgeCatalog): PathResolution;
|
|
24795
|
+
/**
|
|
24796
|
+
* Every entity type a framework's relational block touches: the spine, plus each
|
|
24797
|
+
* type any path passes through or lands on.
|
|
24798
|
+
*
|
|
24799
|
+
* INTERMEDIATES COUNT. A type that a path merely passes through is still a type
|
|
24800
|
+
* the framework depends on, and an instance of it that no row reaches is exactly
|
|
24801
|
+
* as invisible as an unreferenced endpoint — an experiment plan with no runs is
|
|
24802
|
+
* the motivating case. Excluding intermediates would let a framework depend on a
|
|
24803
|
+
* type it never declares.
|
|
24804
|
+
*
|
|
24805
|
+
* Unresolvable paths contribute the types they reached before failing; the
|
|
24806
|
+
* validator reports the failure itself.
|
|
24807
|
+
*/
|
|
24808
|
+
declare function relationalCoveredEntityTypes(fw: UPGFramework): Set<string>;
|
|
24809
|
+
|
|
23770
24810
|
/**
|
|
23771
24811
|
* Canonical `.upg` serialisation, the `upg fmt` reference implementation.
|
|
23772
24812
|
*
|
|
@@ -23991,7 +25031,7 @@ declare function checkHeaderSealText(text: string): UPGHeaderSealReport;
|
|
|
23991
25031
|
* it stamps the `upg_version` field of every `.upg` file written by the SDK.
|
|
23992
25032
|
* The `check:version-lockstep` gate enforces this at release time.
|
|
23993
25033
|
*/
|
|
23994
|
-
declare const UPG_VERSION: "0.
|
|
25034
|
+
declare const UPG_VERSION: "0.31.0";
|
|
23995
25035
|
/**
|
|
23996
25036
|
* The `.upg` JSON document format version. Written to the `upg_version` field.
|
|
23997
25037
|
* Evolves independently from `UPG_VERSION` (the catalogue version).
|
|
@@ -24116,4 +25156,4 @@ declare const UPG_EDGE_COUNT: number;
|
|
|
24116
25156
|
*/
|
|
24117
25157
|
declare const UPG_META_COUNT: number;
|
|
24118
25158
|
|
|
24119
|
-
export { type A11yAnnotationProperties, type A11yAuditProperties, type A11yGuidelineProperties, type A11yIssueProperties, type A11yStandardProperties, ACTIVE_WHEN_PROPERTY, ANALYTICS_DATA_PLAYBOOK, type AcceptanceCriterionProperties, type AccessPolicyProperties, type AccountProperties, type AcquisitionChannelProperties, type AdCreativeProperties, type AffinityClusterProperties, type AgentDefinitionProperties, type AgentHookProperties, type AgentSessionProperties, type AgentSkillProperties, type AgentTaskProperties, type AggregateProperties, type AiCostTrackerProperties, type AiDatasetProperties, type AiExperimentProperties, type AiGuardrailProperties, type AiModelProperties, type AiTraceProperties, type AlertRuleProperties, type AnnotationProperties, type AntiPatternInputs, type AntiPatternViolation, type AnyUPGEntityType, type ApiContractProperties, type ApiEcosystemProperties, type ApiEndpointProperties, type ApproachBinding, type ApproachFilter, type ApproachRun, type ApproachRuntime, type ApprovalRecordProperties, type AssumptionProperties, type AttributionModelProperties, type AuditLogPolicyProperties, BUSINESS_GROWTH_METRIC_DRIVEN_PLAYBOOK, BUSINESS_GTM_GROWTH_PLAYBOOK, BUSINESS_MARKETING_AUDIENCE_FIRST_PLAYBOOK, type BehavioralSegmentProperties, type BenchmarkCheck, type BetaProgramProperties, type BoundedContextProperties, type BrandAssetProperties, type BrandColourProperties, type BrandIdentityProperties, type BrandImageryProperties, type BrandLogoProperties, type BrandTypographyProperties, type BrandVoiceProperties, type BugProperties, type BuildArtifactProperties, type BusinessModelProperties, CLASSIFICATION_EDGE_PROPERTY_SCHEMA, CONFIGURATION_QUALIFIER_EDGE_PROPERTY_SCHEMA, CONFIGURATION_VARIANCE_EDGE_PROPERTY_SCHEMA, CONTENT_DEPTH_WARNING_RULES, COVERAGE_ANTI_PATTERNS, type Cadence, type CapabilityProperties, type CapacityPlanProperties, type CauseConfidence, type CeremonyProperties, type CertificationProperties, type ChangeRequestProperties, type ChangelogProperties, type ChurnReasonProperties, type CiPipelineProperties, type ClassificationAxisProperties, type ClassificationCapability, type ClassificationCapabilitySurface, type ClassificationCommitment, type ClassificationValueProperties, type CodeRepositoryProperties, type CohortProperties, type ComfortLevel, type CommandProperties, type CommunityInitiativeProperties, type CompetitiveAnalysisProperties, type CompetitiveBattleCardProperties, type CompetitorFeatureProperties, type CompetitorProperties, type CompetitorSignalProperties, type ComplianceFrameworkProperties, type ComplianceRequirementProperties, type Confidence, type Configuration, type ConfigurationAxisKind, type ConfigurationAxisProperties, type ConfigurationDriftFinding, type ConfigurationDriftKind, type ConformanceLevel, type ConstraintKind, type ConstraintOrigin, type ConstraintProperties, type ConstraintStatus, type ContactProperties, type ContentCalendarProperties, type ContentPieceProperties, type ContentStrategyProperties, type ContentThemeProperties, type ContractClauseProperties, type ContractProperties, type CostStructureProperties, type CountBenchmark, type Cron, type CrossProductEligibleEdgeType, type CrossProductScope, type CulturalAdaptationProperties, type CustomerFeedbackProperties, type CustomerHealthScoreProperties, type CustomerJourneyStageProperties, type CustomerRelationshipProperties, DEFAULT_ENTITY_EMOJI, DEFERRED_PROPOSED_BY_CONTRACT, DEFER_EDGE_PROPERTY_SCHEMA, DISCOVERY_RESEARCH_VALIDATION_PLAYBOOK, type DashboardProperties, type DataClassificationProperties, type DataContractProperties, type DataDomainProperties, type DataFlowProperties, type DataLineageProperties, type DataModelProperties, type DataPipelineProperties, type DataProductProperties, type DataQualityRuleProperties, type DataSensitivity, type DataSourceProperties, type DatabaseSchemaProperties, type DealProperties, type DecisionProperties, type DeliberateOnlyEdgeType, type DeliverableProperties, type DemandGenProgramProperties, type DepartmentProperties, type DependencyProperties, type DeploymentProperties, type DeprecatedUPGEntityType, type DesignComponentProperties, type DesignConceptProperties, type DesignGuidelineProperties, type DesignPatternProperties, type DesignQuestionProperties, type DesignSprintProperties, type DesignSystemProperties, type DesignTokenProperties, type DesiredOutcomeProperties, type DeveloperPortalProperties, type DifficultyLevel, type DiscountStrategyProperties, type DistributionChannelProperties, type DocumentProperties, type DocumentationTemplateProperties, type DomainActivation, type DomainCountCheck, type DomainEntityProperties, type DomainEventProperties, type DomainGuideStep, type DomainPopulationCheck, type Duration, ENGINEERING_PLATFORM_PLAYBOOK, ENTITY_EMOJI, EXPERIENCE_DESIGN_BRAND_PLAYBOOK, type EdgeCountVsPropertyCheck, type EducationProgramProperties, type EmailSequenceProperties, type EmptyCell, type EmptyCellRationaleKind, type EntityCheck, type EntitySequenceStep, type EntityTypeMeta, type EntityTypeResolution, type EntryMode, type EpicProperties, type ErrorBudgetProperties, type EvalBenchmarkProperties, type EvalRunProperties, type EvaluateAntiPatternsOptions, type EventProperties, type EventSchemaProperties, type EvidenceDirection, type EvidenceProperties, type ExperimentPlanProperties, type ExperimentProperties, type ExperimentRunProperties, type ExternalApiProperties, FOUNDATIONS_PLAYBOOK, type FeasibilityStudyProperties, type FeatureAreaProperties, type FeatureFlagProperties, type FeatureProperties, type FeatureRequestProperties, type FeedbackProgramProperties, type FeedbackThemeProperties, type FeedbackVoteProperties, type FixProperties, type ForecastProperties, type FrameworkCategory, type FrameworkComputedProperty, type FrameworkConstant, type FrameworkDataSpec, type FrameworkEducation, type FrameworkEntityTypeSpec, type FrameworkExerciseProperties, type FrameworkInvocationStep, type FrameworkLayout, type FrameworkLevel, type FrameworkOrigin, type FrameworkPresentationSpec, type FrameworkPropertyRequirement, type FrameworkScoringMethod, type FrameworkSlot, type FrameworkStep, type FrameworkStructureSpec, type FrameworkValidationResult, type FrequencyRating, type FunnelProperties, type FunnelStage, type FunnelStepProperties, type GlossaryTermProperties, type GrowthCampaignProperties, type GrowthLoopProperties, type GtmStrategyProperties, type GuardrailStatus, type HallucinationReportProperties, type HealthStatus, type HelpVideoProperties, type HypothesisEvidenceProperties, type HypothesisProperties, type ISO4217, type ISODate, type ISODateTime, type IdealCustomerProfileProperties, type IncidentProperties, type IncidentSeverity, type InfrastructureComponentProperties, type InitiativeProperties, type InsightProperties, type IntegrationPartnerProperties, type IntegrationPatternProperties, type IntelligenceCondition, type InteractionSpecProperties, type InternalDocProperties, type InterviewGuideProperties, type InvestigationProperties, type InvoiceProperties, type IpAssetProperties, type JobProperties, type JobStepProperties, type JourneyActionProperties, type JourneyPhaseProperties, type JourneyStepProperties, type JourneyType, type KeyActivityProperties, type KeyResourceProperties, type KeyResultProperties, type KnowledgeBaseArticleProperties, LEGACY_PRODUCT_STAGES, type LaunchProperties, type LeadProperties, type LearningPathProperties, type LearningProperties, type LegalEntityProperties, type LibraryDependencyProperties, type LifecyclePhase, type LifecycleRenderShape, type LifecycleRenderState, type LifecycleRenderTransition, type LifecycleState, type LocaleConfigProperties, type LocaleProperties, type LogLevel, type LowMedHigh, MARKDOWN_FORMAT_VERSION, MARKET_COMPETITIVE_PLAYBOOK, type MarketSegmentProperties, type MarketTrendProperties, type MarketingCampaignPlanProperties, type MarketingChannelProperties, type MarketingPlatform, type MarketingStrategyProperties, type MarketplaceListingProperties, type MatrixSlot, type MaturityLevel, type MessagingProperties, type MetricCategory, type MetricDataPoint, type MetricDesignation, type MetricHealth, type MetricImpactLevel, type MetricIndicatorDirection, type MetricProperties, type MetricQualityAssessmentProperties, type MetricSegmentType, type MetricStatisticalFunction, type MilestoneProperties, type MissionProperties, type ModelComparisonProperties, type ModifiedProperty, type MonitorProperties, type NamedGroup, type NeedMaturity, type NeedProperties, type NeedValence, type NpsCampaignProperties, OPERATIONS_QUALITY_PLAYBOOK, type ObjectionProperties, type ObjectiveProperties, type ObservationProperties, type OnCallRotationProperties, type OperatingLifecycleProperties, type OperatingStageProperties, type OpportunityProperties, type OrganizationProperties, type OrphanCheck, type OutcomeProperties, PRESENT_UNDER_PROPERTY, PRODUCT_DELIVERY_PLAYBOOK, PROPERTY_MODIFIERS, PROPERTY_MODIFIER_SEMANTICS, PROPERTY_SCALE_MAP, type ParticipantProperties, type PartnerProgramProperties, type PartnerRevenueShareProperties, type PartnerTierProperties, type PartnershipProperties, type PaywallProperties, type PenetrationTestProperties, type PersonProperties, type PersonaProperties, type PipelineSalesProperties, type PipelineStageProperties, type PlanningCycleProperties, type PlaybookBinding, type PlaybookFilter, type PlaybookProperties, type PlaybookRun, type PlaybookRuntime, type PortfolioProperties, type PositioningProperties, type PostmortemProperties, type PressReleaseProperties, type PricingStrategyProperties, type PricingTierProperties, type PrimitiveProperties, type Priority, type PrivacyPolicyProperties, type ProductAreaProperties, type ProductProperties, type ProductStageCoercion, type ProgramProperties, type ProjectProperties, type ProjectableEdge, type ProjectableNode, type ProjectionResult, type PromptTemplateProperties, type PromptVersionProperties, type ProofPointProperties, type PropertyDefinition, type PropertyModifier, type PropertySchema, type Protocol, type PrototypeProperties, type ProxyConfidence, type ProxyReason, QUALIFIABLE_EDGE_TYPES, type QaSessionProperties, type QueueTopicProperties, type QuoteDocumentProperties, type QuoteProperties, RECORD_ENTITY_TYPES, REFLECT_MODES, REGISTRY_PRODUCT_ID, type RatioBenchmark, type ReadModelProperties, type RebuttalProperties, type ReflectMode, type RegionalPricingProperties, type RegressionTestProperties, type RelationshipBenchmark, type RelationshipCheck, type ReleaseProperties, type ReleaseStrategyProperties, type ReportProperties, type ResearchPlanProperties, type ResearchQuestionProperties, type ResearchStudyProperties, type ResourceAllocationProperties, type RetrospectiveProperties, type RevenueStreamProperties, type ReviewGateProperties, type RiskProperties, type RiskRegisterProperties, type RoadmapItemProperties, type RoadmapProperties, type RoadmapThemeProperties, type RoleProperties, type RootCauseProperties, type RuleStrength, type RunContext, type RunbookProperties, STRATEGY_OUTCOMES_PLAYBOOK, type SalesMotionProperties, type ScreenProperties, type ScreenStateProperties, type SecurityAuditProperties, type SecurityControlProperties, type SecurityPolicyProperties, type SecurityReviewProperties, type Semver, type SeoKeywordProperties, type SerializeOptions, type ServiceBlueprintProperties, type ServiceLevelAgreementProperties, type ServiceLevelIndicatorProperties, type ServiceLevelObjectiveProperties, type ServiceProperties, type SignalChannel, type SignalSentiment, type SignalUrgency, type SkillProperties, type SocialPostProperties, type SolutionProperties, type SpecificationProperties, type StageRange, type StakeholderProperties, type StatusCategory, type StatusReportProperties, type Step, type StepKind, type StepOutput, type StepOutputKind, type StoryTaskProperties, type StrategicPillarProperties, type StrategicQuestionProperties, type StrategicThemeProperties, type StructurePattern, type SubSequenceStep, type SubscriptionProperties, type SuccessMilestoneProperties, type SupportTicketProperties, type SurfaceArbitrationState, type SurfaceCardinality, type SurfaceCompositionMode, type SurfaceExtensibility, type SurfaceId, type SurfaceInstanceScope, type SurfaceKind, type SurfacePersistence, type SurfaceProperties, type SurveyResponseProperties, type SwitchingCostProperties, type SymptomProperties, THIN_GRAPH_THRESHOLD, type TableColumn, type TargetCustomerSegmentProperties, type TaskProperties, type TeamOkrProperties, type TeamProperties, type TechnicalDebtItemProperties, type TerritoryProperties, type TestCaseProperties, type TestCoverageReportProperties, type TestEnvironmentProperties, type TestPlanProperties, type TestResultProperties, type TestSuiteProperties, type ThreatModelProperties, type ThreatProperties, type Timeframe, type TotalEntityCountCheck, type TouchpointProperties, type TranslationBundleProperties, type TranslationKeyProperties, type TrialConfigProperties, type TutorialProperties, type UPGAnchorEntity, type UPGAntiPattern, type UPGAntiPatternConcern, type UPGAntiPatternSeverity, type UPGApproach, type UPGApproachEnvelope, type UPGApproachId, type UPGAreaTaxonomyEntry, type UPGAssessment, type UPGBaseNode, type UPGBenchmarkSource, type UPGBoundaryDirection, type UPGBoundaryEdge, type UPGCrossEdge, type UPGCrossEdgeType, type UPGCrossOnlyEdgeType, type UPGCuratedAntiPattern, type UPGDocument, type UPGDomain, type UPGDomainBridge, type UPGDomainId, type UPGDomainPattern, type UPGDomainRing, type UPGDomainUsageGuide, type UPGEdge, type UPGEdgeCountSpec, type UPGEdgeDefinition, type UPGEdgeMigration, type UPGEdgeMigrationEndpoints, type UPGEdgePickHint, type UPGEdgeType, type UPGEntityFilterSpec, type UPGEntityType, type UPGEntityTypeMaturity, type UPGEnumScaleDefinition, type UPGEnumScaleValue, type UPGFramework, type UPGFrameworkMeta, type UPGHeader, type UPGHeaderCountsMismatch, type UPGHeaderIntegrity, type UPGHeaderIntegrityMismatch, type UPGHeaderProvenance, type UPGHeaderSealReport, type UPGIntegrity, type UPGLens, type UPGLensIntelligencePrompt, type UPGLifecycle, type UPGMappingConfidence, type UPGMemberKindKey, type UPGNode, type UPGOrganization, type UPGPlaybook, type UPGPortfolio, type UPGPortfolioDocument, type UPGPortfolioKind, type UPGPresenceExceptSpec, type UPGProduct, type UPGProductArea, type UPGProductStage, type UPGPropertyMap, type UPGPropertyMigration, type UPGPropertyMigrationChange, type UPGRegion, type UPGRegionEntityMembership, type UPGRegionEntityRole, type UPGRegionId, type UPGRegionShape, type UPGRegistry, type UPGScalarToEdgeMigration, type UPGScaleDefinition, type UPGScalePoint, type UPGSource, type UPGSplitEdge, type UPGSplitMigration, type UPGSplitRoute, type UPGSplitRouteTarget, type UPGSplitTarget, type UPGTreeChild, type UPGTreeGapPolicy, type UPGTreePattern, type UPGTreePatternDetail, type UPGTreePatternEdge, type UPGTreePatternSummary, type UPGTypeLabel, type UPGTypeMigration, type UPGValidationError, type UPGValidationProfile, type UPGValidationResult, type UPGValidationWarning, type UPGWildcardEndpoint, UPG_ACTIVE_TYPES, UPG_ANTI_PATTERNS, UPG_ANTI_PATTERN_CONCERNS, UPG_APPROACHES, UPG_APPROACHES_BY_ID, UPG_AREA_TAXONOMY, UPG_AREA_TAXONOMY_BY_COVERAGE_KEY, UPG_CANONICAL_FORMAT_VERSION, UPG_CONTAINMENT_FREE_TYPES, UPG_COUNT_BENCHMARKS, UPG_CROSS_EDGE_TYPES, UPG_CROSS_ELIGIBLE_CATALOG_EDGE_TYPES, UPG_CROSS_ONLY_EDGE_TYPES, UPG_DELIBERATE_ONLY_EDGE_TYPES, UPG_DEPRECATED_TYPES, UPG_DOMAINS, UPG_DOMAIN_ACTIVATION, UPG_DOMAIN_COUNT, UPG_DOMAIN_GUIDES, UPG_DOMAIN_RINGS, UPG_EDGE_CATALOG, UPG_EDGE_COUNT, UPG_EDGE_COUNT_SPECS, UPG_EDGE_MIGRATIONS, UPG_EDGE_PAIR_MAP, UPG_EDGE_TYPES, UPG_ENTITY_COUNT, UPG_ENTITY_FILTER_SPECS, UPG_ENTITY_META, UPG_ENTITY_META_BY_ID, UPG_ENTITY_META_BY_NAME, UPG_ENTITY_TO_DOMAIN, UPG_ENUM_SCALES, UPG_FORMAT_VERSION, UPG_FRAMEWORKS, UPG_FRAMEWORKS_BY_CATEGORY, UPG_FRAMEWORKS_BY_ID, UPG_FRAMEWORK_CATEGORIES, UPG_LENSES, UPG_LIFECYCLES, UPG_LIFECYCLE_FREE_TYPES, UPG_LIFECYCLE_PLANNED_TYPES, UPG_META_COUNT, UPG_MIGRATIONS, UPG_PLAYBOOKS, UPG_POLYMORPHIC_EDGE_KEYS, UPG_PORTFOLIO_KINDS, UPG_PORTFOLIO_SHARED_TYPES, UPG_PRESENCE_EXCEPT_SPECS, UPG_PRODUCT_STAGES, UPG_PRODUCT_STAGE_COERCION_MAP, UPG_PROPERTY_MIGRATIONS, UPG_PROPERTY_SCHEMA, UPG_RATIO_BENCHMARKS, UPG_REGIONS, UPG_REGION_COUNT, UPG_REGION_MAP, UPG_RELATIONSHIP_BENCHMARKS, UPG_SCALAR_TO_EDGE_MIGRATIONS, UPG_SCALES, UPG_SPLIT_MIGRATIONS, UPG_STATUS_MIGRATIONS, UPG_STRUCTURE_PATTERNS, UPG_TREE_PATTERNS, UPG_TREE_PATTERNS_BY_ID, UPG_TYPES, UPG_TYPES_SET, UPG_TYPE_ALIASES, UPG_TYPE_LABELS, UPG_TYPE_LABELS_MAP, UPG_TYPE_NAMES, UPG_VALIDATION_PROFILES, UPG_VALID_CHILDREN, UPG_VERSION, UPG_WILDCARD_ENDPOINT, USERS_NEEDS_PLAYBOOK, type UnitEconomicsProperties, UnknownEntityTypeError, type UserAdvisoryBoardProperties, type UserFlowProperties, type UserJourneyProperties, type UserStoryProperties, VARIES_BY_EDGE, type ValueObjectProperties, type ValuePropositionProperties, type ValueStreamProperties, type VariantProperties, type VisionProperties, type VulnerabilityProperties, type WalkMigrationChainResult, type WalkthroughProperties, type WebinarProperties, type WireframeProperties, type WorkflowArtifactProperties, type WorkflowRunProperties, type WorkflowTemplateProperties, type WorkspaceProperties, backfillSlug, buildTypeAliases, canBeChildOf, checkConfigurationDrift, checkHeaderSeal, checkHeaderSealText, checkToEdgeCountSpec, classifyEntityFilter, coerceProductStage, collectSlugsForType, collectTargetEntities, compareVersions, computeBodyChecksum, concernEvaluatedFor, concernFor, concernGatesFor, crossProductScope, deriveCounts, derivePortfolioCounts, deriveSingleCounts, describeTreePattern, edgeCarriesProperties, edgeCountSpecKey, entityFilterKey, enumerateProjections, evaluateAntiPatterns, findInvalidStatusMigrationTargets, formatUpgText, friendlyToAssessment, generateSlug, getAnchorEntity, getAntiPatternById, getAntiPatterns, getAntiPatternsBySeverity, getAntiPatternsForStage, getAreaTaxonomyEntry, getBenchmark, getBenchmarksByDomain, getBusinessAreasForRegion, getCanonicalPlaybookForRegion, getCoverageKeysForRegion, getDefaultLens, getDeprecatedTypes, getDomainForType, getDomainIdForType, getDomainsInRing, getEdgePropertySchema, getEntityModifierSummary, getEnumScale, getEnumValueMeta, getGuideForDomain, getLens, getLensIds, getLensPlaybook, getLensesForDomain, getLifecycleForType, getLifecycleRenderShape, getMigrationMap, getPlaybookById, getPlaybooksForRegion, getPropertiesForScale, getPropertyDefaultScale, getPropertyMigrations, getPropertyModifier, getPropertySchema, getRegion, getRegionForEntityType, getReplacementType, getRingForDomain, getScalarToEdgeMigrations, getScale, getSplitMigrations, getTreePattern, getTypeId, getTypeName, getTypes, getUPGEdgeMigrations, getValidChildren, getVisibleTypes, hasStatusMigration, isAggregateShapedProperty, isCanonical, isCanonicalProductStage, isContainmentFreeType, isCrossCapable, isCrossProductEligible, isCuratedCrossEligible, isDeliberateOnlyEdge, isDeprecatedType, isDomainGuideStep, isEntitySequenceStep, isFrameworkInvocationStep, isLegacyProductStage, isLifecycleFreeType, isLifecyclePlannedType, isPolymorphicEdge, isPortfolio, isPortfolioSharedType, isRecordEntity, isRegisteredPolymorphicEdge, isRuntimeStateShapedProperty, isSubSequenceStep, isThinCoverageAdvisory, isUPGDocument, listPropertiesByModifier, listStatusMigrations, listTreePatternSummaries, migrateEdge, migrateNode, migrateNodeProperties, migrateProductStage, migrateStatusValue, normalizeDocument, parseUpg, pickCanonicalEdge, presenceExceptKey, projectGraph, readActiveWhen, readStringArray, resolveAllEdges, resolveContainmentEdge, resolveEntityType, resolveLabel, resolveSlugCollision, resolveTreePatternEdges, ringOrderedDomainIds, rotateSlug, serializeCanonical, validateEdgeProperties, validateProductStageStrict, validateUPGDocument, validateUPGFramework, validationProfileFor, walkMigrationChainToCanonical };
|
|
25159
|
+
export { type A11yAnnotationProperties, type A11yAuditProperties, type A11yGuidelineProperties, type A11yIssueProperties, type A11yStandardProperties, ACTIVE_WHEN_PROPERTY, ANALYTICS_DATA_PLAYBOOK, type AcceptanceCriterionProperties, type AccessPolicyProperties, type AccountProperties, type AcquisitionChannelProperties, type AdCreativeProperties, type AffinityClusterProperties, type AgentDefinitionProperties, type AgentHookProperties, type AgentSessionProperties, type AgentSkillProperties, type AgentTaskProperties, type AggregateProperties, type AiCostTrackerProperties, type AiDatasetProperties, type AiExperimentProperties, type AiGuardrailProperties, type AiModelProperties, type AiTraceProperties, type AlertRuleProperties, type AnnotationProperties, type AntiPatternInputs, type AntiPatternViolation, type AnyUPGEntityType, type ApiContractProperties, type ApiEcosystemProperties, type ApiEndpointProperties, type ApproachBinding, type ApproachFilter, type ApproachRun, type ApproachRuntime, type ApprovalRecordProperties, type AssumptionProperties, type AttributionModelProperties, type AuditLogPolicyProperties, BUSINESS_GROWTH_METRIC_DRIVEN_PLAYBOOK, BUSINESS_GTM_GROWTH_PLAYBOOK, BUSINESS_MARKETING_AUDIENCE_FIRST_PLAYBOOK, type BehavioralSegmentProperties, type BenchmarkCheck, type BetaProgramProperties, type BoundedContextProperties, type BrandAssetProperties, type BrandColourProperties, type BrandIdentityProperties, type BrandImageryProperties, type BrandLogoProperties, type BrandTypographyProperties, type BrandVoiceProperties, type BugProperties, type BuildArtifactProperties, type BusinessModelProperties, CLASSIFICATION_EDGE_PROPERTY_SCHEMA, CONFIGURATION_QUALIFIER_EDGE_PROPERTY_SCHEMA, CONFIGURATION_VARIANCE_EDGE_PROPERTY_SCHEMA, CONTENT_DEPTH_WARNING_RULES, COVERAGE_ANTI_PATTERNS, type Cadence, type CapabilityProperties, type CapacityPlanProperties, type CauseConfidence, type CeremonyProperties, type CertificationProperties, type ChangeRequestProperties, type ChangelogProperties, type ChurnReasonProperties, type CiPipelineProperties, type ClassificationAxisProperties, type ClassificationCapability, type ClassificationCapabilitySurface, type ClassificationCommitment, type ClassificationValueProperties, type CodeRepositoryProperties, type CohortProperties, type ComfortLevel, type CommandProperties, type CommunityInitiativeProperties, type CompetitiveAnalysisProperties, type CompetitiveBattleCardProperties, type CompetitorFeatureProperties, type CompetitorProperties, type CompetitorSignalProperties, type ComplianceFrameworkProperties, type ComplianceRequirementProperties, type CompositionMember, type CompositionProperties, type Confidence, type Configuration, type ConfigurationAxisKind, type ConfigurationAxisProperties, type ConfigurationDriftFinding, type ConfigurationDriftKind, type ConformanceLevel, type ConstraintKind, type ConstraintOrigin, type ConstraintProperties, type ConstraintStatus, type ContactProperties, type ContentCalendarProperties, type ContentPieceProperties, type ContentStrategyProperties, type ContentThemeProperties, type ContractClauseProperties, type ContractProperties, type CostStructureProperties, type CountBenchmark, type Cron, type CrossProductEligibleEdgeType, type CrossProductScope, type CulturalAdaptationProperties, type CustomerFeedbackProperties, type CustomerHealthScoreProperties, type CustomerJourneyStageProperties, type CustomerRelationshipProperties, DEFAULT_ENTITY_EMOJI, DEFERRED_PROPOSED_BY_CONTRACT, DEFER_EDGE_PROPERTY_SCHEMA, DISCOVERY_RESEARCH_VALIDATION_PLAYBOOK, type DashboardProperties, type DataClassificationProperties, type DataContractProperties, type DataDomainProperties, type DataFlowProperties, type DataLineageProperties, type DataModelProperties, type DataPipelineProperties, type DataProductProperties, type DataQualityRuleProperties, type DataSensitivity, type DataSourceProperties, type DatabaseSchemaProperties, type DealProperties, type DecisionProperties, type DeliberateOnlyEdgeType, type DeliverableProperties, type DemandGenProgramProperties, type DepartmentProperties, type DependencyProperties, type DeploymentProperties, type DeprecatedUPGEntityType, type DesignComponentProperties, type DesignConceptProperties, type DesignGuidelineProperties, type DesignPatternProperties, type DesignQuestionProperties, type DesignSprintProperties, type DesignSystemProperties, type DesignTokenProperties, type DesiredOutcomeProperties, type DeveloperPortalProperties, type DifficultyLevel, type DiscountStrategyProperties, type DistributionChannelProperties, type DocumentProperties, type DocumentationTemplateProperties, type DomainActivation, type DomainCountCheck, type DomainEntityProperties, type DomainEventProperties, type DomainGuideStep, type DomainPopulationCheck, type Duration, ENGINEERING_PLATFORM_PLAYBOOK, ENTITY_EMOJI, EXPERIENCE_DESIGN_BRAND_PLAYBOOK, type EdgeCountVsPropertyCheck, type EducationProgramProperties, type EmailSequenceProperties, type EmptyCell, type EmptyCellRationaleKind, type EntityCheck, type EntitySequenceStep, type EntityTypeMeta, type EntityTypeResolution, type EntryMode, type EpicProperties, type ErrorBudgetProperties, type EvalBenchmarkProperties, type EvalRunProperties, type EvaluateAntiPatternsOptions, type EventProperties, type EventSchemaProperties, type EvidenceDirection, type EvidenceProperties, type ExperimentPlanProperties, type ExperimentProperties, type ExperimentRunProperties, type ExternalApiProperties, FOUNDATIONS_PLAYBOOK, type FeasibilityStudyProperties, type FeatureAreaProperties, type FeatureFlagProperties, type FeatureProperties, type FeatureRequestProperties, type FeedbackProgramProperties, type FeedbackThemeProperties, type FeedbackVoteProperties, type FixProperties, type ForecastProperties, type FrameworkCategory, type FrameworkComputedProperty, type FrameworkConstant, type FrameworkDataSpec, type FrameworkEducation, type FrameworkEntityTypeSpec, type FrameworkExerciseProperties, type FrameworkInvocationStep, type FrameworkLayout, type FrameworkLevel, type FrameworkOrigin, type FrameworkPresentationSpec, type FrameworkPropertyRequirement, type FrameworkScoringMethod, type FrameworkSlot, type FrameworkSlotPredicate, type FrameworkSlotPredicateAtom, type FrameworkStep, type FrameworkStructureSpec, type FrameworkValidationResult, type FrequencyRating, type FunnelProperties, type FunnelStage, type FunnelStepProperties, type GlossaryTermProperties, type GrowthCampaignProperties, type GrowthLoopProperties, type GtmStrategyProperties, type GuardrailStatus, type HallucinationReportProperties, type HealthStatus, type HelpVideoProperties, type HypothesisEvidenceProperties, type HypothesisProperties, type ISO4217, type ISODate, type ISODateTime, type IdealCustomerProfileProperties, type IncidentProperties, type IncidentSeverity, type InfrastructureComponentProperties, type InitiativeProperties, type InsightProperties, type IntegrationPartnerProperties, type IntegrationPatternProperties, type IntelligenceCondition, type InteractionSpecProperties, type InternalDocProperties, type InterviewGuideProperties, type InvestigationProperties, type InvoiceProperties, type IpAssetProperties, type JobProperties, type JobStepProperties, type JourneyActionProperties, type JourneyPhaseProperties, type JourneyStepProperties, type JourneyType, type KeyActivityProperties, type KeyResourceProperties, type KeyResultProperties, type KnowledgeBaseArticleProperties, LEGACY_PRODUCT_STAGES, type LaunchProperties, type LeadProperties, type LearningPathProperties, type LearningProperties, type LegalEntityProperties, type LibraryDependencyProperties, type LifecyclePhase, type LifecycleRenderShape, type LifecycleRenderState, type LifecycleRenderTransition, type LifecycleState, type LocaleConfigProperties, type LocaleProperties, type LogLevel, type LowMedHigh, MARKDOWN_FORMAT_VERSION, MARKET_COMPETITIVE_PLAYBOOK, type MarketSegmentProperties, type MarketTrendProperties, type MarketingCampaignPlanProperties, type MarketingChannelProperties, type MarketingPlatform, type MarketingStrategyProperties, type MarketplaceListingProperties, type MatrixSlot, type MaturityLevel, type MessagingProperties, type MetricCategory, type MetricDataPoint, type MetricDesignation, type MetricHealth, type MetricImpactLevel, type MetricIndicatorDirection, type MetricProperties, type MetricQualityAssessmentProperties, type MetricScore, type MetricSegmentType, type MetricStatisticalFunction, type MilestoneProperties, type MissionProperties, type ModelComparisonProperties, type ModifiedProperty, type MonitorProperties, type NamedGroup, type NeedMaturity, type NeedProperties, type NeedValence, type NpsCampaignProperties, OPERATIONS_QUALITY_PLAYBOOK, type ObjectionProperties, type ObjectiveProperties, type ObservationProperties, type OnCallRotationProperties, type OperatingLifecycleProperties, type OperatingStageProperties, type OpportunityProperties, type OrganizationProperties, type OrphanCheck, type OutcomeProperties, PRESENT_UNDER_PROPERTY, PRODUCT_DELIVERY_PLAYBOOK, PROPERTY_MODIFIERS, PROPERTY_MODIFIER_SEMANTICS, PROPERTY_SCALE_MAP, type ParticipantProperties, type PartnerProgramProperties, type PartnerRevenueShareProperties, type PartnerTierProperties, type PartnershipProperties, type PathResolution, type PaywallProperties, type PenetrationTestProperties, type PersonProperties, type PersonaProperties, type PipelineSalesProperties, type PipelineStageProperties, type PlanningCycleProperties, type PlaybookBinding, type PlaybookFilter, type PlaybookProperties, type PlaybookRun, type PlaybookRuntime, type PortfolioProperties, type PositioningProperties, type PostmortemProperties, type PressReleaseProperties, type PricingStrategyProperties, type PricingTierProperties, type PrimitiveProperties, type Priority, type PrivacyPolicyProperties, type ProductAreaProperties, type ProductProperties, type ProductStageCoercion, type ProgramProperties, type ProjectProperties, type ProjectableEdge, type ProjectableNode, type ProjectionResult, type PromptTemplateProperties, type PromptVersionProperties, type ProofPointProperties, type PropertyDefinition, type PropertyModifier, type PropertySchema, type Protocol, type PrototypeProperties, type ProxyConfidence, type ProxyReason, QUALIFIABLE_EDGE_TYPES, type QaSessionProperties, type QueueTopicProperties, type QuoteDocumentProperties, type QuoteProperties, RECORD_ENTITY_TYPES, REFLECT_MODES, REGISTRY_PRODUCT_ID, type RatioBenchmark, type ReadModelProperties, type RebuttalProperties, type ReflectMode, type RegionalPricingProperties, type RegressionTestProperties, type RelationalColumn, type RelationalComputedColumn, type RelationalEdgeStep, type RelationalFieldColumn, type RelationalProjectionColumn, type RelationalSurfaceSpec, type RelationshipBenchmark, type RelationshipCheck, type ReleaseProperties, type ReleaseStrategyProperties, type ReportProperties, type ResearchPlanProperties, type ResearchQuestionProperties, type ResearchStudyProperties, type ResolvedStep, type ResourceAllocationProperties, type RetrospectiveProperties, type RevenueStreamProperties, type ReviewGateProperties, type RiskProperties, type RiskRegisterProperties, type RoadmapItemProperties, type RoadmapProperties, type RoadmapThemeProperties, type RoleProperties, type RootCauseProperties, type RuleStrength, type RunContext, type RunbookProperties, STRATEGY_OUTCOMES_PLAYBOOK, type SalesMotionProperties, type ScreenProperties, type ScreenStateProperties, type SecurityAuditProperties, type SecurityControlProperties, type SecurityPolicyProperties, type SecurityReviewProperties, type Semver, type SeoKeywordProperties, type SerializeOptions, type ServiceBlueprintProperties, type ServiceLevelAgreementProperties, type ServiceLevelIndicatorProperties, type ServiceLevelObjectiveProperties, type ServiceProperties, type SignalChannel, type SignalSentiment, type SignalUrgency, type SkillProperties, type SocialPostProperties, type SolutionProperties, type SpecificationProperties, type StageRange, type StakeholderProperties, type StatusCategory, type StatusReportProperties, type Step, type StepKind, type StepOutput, type StepOutputKind, type StoryTaskProperties, type StrategicPillarProperties, type StrategicQuestionProperties, type StrategicThemeProperties, type StructurePattern, type SubSequenceStep, type SubscriptionProperties, type SuccessMilestoneProperties, type SupportTicketProperties, type SurfaceArbitrationState, type SurfaceCardinality, type SurfaceCompositionMode, type SurfaceExtensibility, type SurfaceId, type SurfaceInstanceScope, type SurfaceKind, type SurfacePersistence, type SurfaceProperties, type SurveyResponseProperties, type SwitchingCostProperties, type SymptomProperties, THIN_GRAPH_THRESHOLD, type TableColumn, type TargetCustomerSegmentProperties, type TaskProperties, type TeamOkrProperties, type TeamProperties, type TechnicalDebtItemProperties, type TerritoryProperties, type TestCaseProperties, type TestCoverageReportProperties, type TestEnvironmentProperties, type TestPlanProperties, type TestResultProperties, type TestSuiteProperties, type ThreatModelProperties, type ThreatProperties, type Timeframe, type TotalEntityCountCheck, type TouchpointProperties, type TranslationBundleProperties, type TranslationKeyProperties, type TrialConfigProperties, type TutorialProperties, type UPGAnchorEntity, type UPGAntiPattern, type UPGAntiPatternConcern, type UPGAntiPatternSeverity, type UPGApproach, type UPGApproachEnvelope, type UPGApproachId, type UPGAreaTaxonomyEntry, type UPGAssessment, type UPGBaseNode, type UPGBenchmarkSource, type UPGBoundaryDirection, type UPGBoundaryEdge, type UPGCrossEdge, type UPGCrossEdgeType, type UPGCrossOnlyEdgeType, type UPGCuratedAntiPattern, type UPGDocument, type UPGDomain, type UPGDomainBridge, type UPGDomainId, type UPGDomainPattern, type UPGDomainRing, type UPGDomainUsageGuide, type UPGEdge, type UPGEdgeCountSpec, type UPGEdgeDefinition, type UPGEdgeMigration, type UPGEdgeMigrationEndpoints, type UPGEdgePickHint, type UPGEdgeType, type UPGEntityFilterSpec, type UPGEntityType, type UPGEntityTypeMaturity, type UPGEnumScaleDefinition, type UPGEnumScaleValue, type UPGFramework, type UPGFrameworkMeta, type UPGHeader, type UPGHeaderCountsMismatch, type UPGHeaderIntegrity, type UPGHeaderIntegrityMismatch, type UPGHeaderProvenance, type UPGHeaderSealReport, type UPGIntegrity, type UPGLens, type UPGLensIntelligencePrompt, type UPGLifecycle, type UPGMappingConfidence, type UPGMemberKindKey, type UPGNode, type UPGOrganization, type UPGPlaybook, type UPGPortfolio, type UPGPortfolioDocument, type UPGPortfolioKind, type UPGPresenceExceptSpec, type UPGProduct, type UPGProductArea, type UPGProductStage, type UPGPropertyMap, type UPGPropertyMigration, type UPGPropertyMigrationChange, type UPGRegion, type UPGRegionEntityMembership, type UPGRegionEntityRole, type UPGRegionId, type UPGRegionShape, type UPGRegistry, type UPGScalarToEdgeMigration, type UPGScaleDefinition, type UPGScalePoint, type UPGSource, type UPGSplitEdge, type UPGSplitMigration, type UPGSplitRoute, type UPGSplitRouteTarget, type UPGSplitTarget, type UPGTreeChild, type UPGTreeGapPolicy, type UPGTreePattern, type UPGTreePatternDetail, type UPGTreePatternEdge, type UPGTreePatternSummary, type UPGTypeLabel, type UPGTypeMigration, type UPGValidationError, type UPGValidationProfile, type UPGValidationResult, type UPGValidationWarning, type UPGWildcardEndpoint, UPG_ACTIVE_TYPES, UPG_ANTI_PATTERNS, UPG_ANTI_PATTERN_CONCERNS, UPG_APPROACHES, UPG_APPROACHES_BY_ID, UPG_AREA_TAXONOMY, UPG_AREA_TAXONOMY_BY_COVERAGE_KEY, UPG_CANONICAL_FORMAT_VERSION, UPG_CONTAINMENT_FREE_TYPES, UPG_COUNT_BENCHMARKS, UPG_CROSS_EDGE_TYPES, UPG_CROSS_ELIGIBLE_CATALOG_EDGE_TYPES, UPG_CROSS_ONLY_EDGE_TYPES, UPG_DELIBERATE_ONLY_EDGE_TYPES, UPG_DEPRECATED_TYPES, UPG_DOMAINS, UPG_DOMAIN_ACTIVATION, UPG_DOMAIN_COUNT, UPG_DOMAIN_GUIDES, UPG_DOMAIN_RINGS, UPG_EDGE_CATALOG, UPG_EDGE_COUNT, UPG_EDGE_COUNT_SPECS, UPG_EDGE_MIGRATIONS, UPG_EDGE_PAIR_MAP, UPG_EDGE_TYPES, UPG_ENTITY_COUNT, UPG_ENTITY_FILTER_SPECS, UPG_ENTITY_META, UPG_ENTITY_META_BY_ID, UPG_ENTITY_META_BY_NAME, UPG_ENTITY_TO_DOMAIN, UPG_ENUM_SCALES, UPG_FORMAT_VERSION, UPG_FRAMEWORKS, UPG_FRAMEWORKS_BY_CATEGORY, UPG_FRAMEWORKS_BY_ID, UPG_FRAMEWORK_CATEGORIES, UPG_LENSES, UPG_LIFECYCLES, UPG_LIFECYCLE_FREE_TYPES, UPG_LIFECYCLE_PLANNED_TYPES, UPG_META_COUNT, UPG_MIGRATIONS, UPG_PLAYBOOKS, UPG_POLYMORPHIC_EDGE_KEYS, UPG_PORTFOLIO_KINDS, UPG_PORTFOLIO_SHARED_TYPES, UPG_PRESENCE_EXCEPT_SPECS, UPG_PRODUCT_STAGES, UPG_PRODUCT_STAGE_COERCION_MAP, UPG_PROPERTY_MIGRATIONS, UPG_PROPERTY_SCHEMA, UPG_RATIO_BENCHMARKS, UPG_REGIONS, UPG_REGION_COUNT, UPG_REGION_MAP, UPG_RELATIONSHIP_BENCHMARKS, UPG_SCALAR_TO_EDGE_MIGRATIONS, UPG_SCALES, UPG_SPLIT_MIGRATIONS, UPG_STATUS_MIGRATIONS, UPG_STRUCTURE_PATTERNS, UPG_TREE_PATTERNS, UPG_TREE_PATTERNS_BY_ID, UPG_TYPES, UPG_TYPES_SET, UPG_TYPE_ALIASES, UPG_TYPE_LABELS, UPG_TYPE_LABELS_MAP, UPG_TYPE_NAMES, UPG_VALIDATION_PROFILES, UPG_VALID_CHILDREN, UPG_VERSION, UPG_WILDCARD_ENDPOINT, USERS_NEEDS_PLAYBOOK, type UnitEconomicsProperties, UnknownEntityTypeError, type UserAdvisoryBoardProperties, type UserFlowProperties, type UserJourneyProperties, type UserStoryProperties, VARIES_BY_EDGE, type ValueObjectProperties, type ValuePropositionProperties, type ValueStreamProperties, type VariantProperties, type VisionProperties, type VulnerabilityProperties, WORKSPACE_ARRANGEMENT_EDGE_PROPERTY_SCHEMA, type WalkMigrationChainResult, type WalkthroughProperties, type WebinarProperties, type WireframeProperties, type WorkflowArtifactProperties, type WorkflowRunProperties, type WorkflowTemplateProperties, type WorkspaceCanvas, type WorkspaceProperties, backfillSlug, buildTypeAliases, canBeChildOf, checkConfigurationDrift, checkHeaderSeal, checkHeaderSealText, checkToEdgeCountSpec, classifyEntityFilter, coerceProductStage, collectSlugsForType, collectTargetEntities, compareVersions, computeBodyChecksum, concernEvaluatedFor, concernFor, concernGatesFor, crossProductScope, deriveCounts, derivePortfolioCounts, deriveSingleCounts, describeTreePattern, edgeCarriesProperties, edgeCountSpecKey, entityFilterKey, enumerateProjections, evaluateAntiPatterns, findInvalidStatusMigrationTargets, formatUpgText, friendlyToAssessment, generateSlug, getAnchorEntity, getAntiPatternById, getAntiPatterns, getAntiPatternsBySeverity, getAntiPatternsForStage, getAreaTaxonomyEntry, getBenchmark, getBenchmarksByDomain, getBusinessAreasForRegion, getCanonicalPlaybookForRegion, getCoverageKeysForRegion, getDefaultLens, getDeprecatedTypes, getDomainForType, getDomainIdForType, getDomainsInRing, getEdgePropertySchema, getEntityModifierSummary, getEnumScale, getEnumValueMeta, getGuideForDomain, getLens, getLensIds, getLensPlaybook, getLensesForDomain, getLifecycleForType, getLifecycleRenderShape, getMigrationMap, getPlaybookById, getPlaybooksForRegion, getPropertiesForScale, getPropertyDefaultScale, getPropertyMigrations, getPropertyModifier, getPropertySchema, getRegion, getRegionForEntityType, getReplacementType, getRingForDomain, getScalarToEdgeMigrations, getScale, getSplitMigrations, getTreePattern, getTypeId, getTypeName, getTypes, getUPGEdgeMigrations, getValidChildren, getVisibleTypes, hasStatusMigration, isAggregateShapedProperty, isCanonical, isCanonicalProductStage, isContainmentFreeType, isCrossCapable, isCrossProductEligible, isCuratedCrossEligible, isDeliberateOnlyEdge, isDeprecatedType, isDomainGuideStep, isEntitySequenceStep, isFrameworkInvocationStep, isLegacyProductStage, isLifecycleFreeType, isLifecyclePlannedType, isPolymorphicEdge, isPortfolio, isPortfolioSharedType, isRecordEntity, isRegisteredPolymorphicEdge, isRuntimeStateShapedProperty, isSubSequenceStep, isThinCoverageAdvisory, isUPGDocument, listPropertiesByModifier, listStatusMigrations, listTreePatternSummaries, migrateEdge, migrateNode, migrateNodeProperties, migrateProductStage, migrateStatusValue, normalizeDocument, parseUpg, pickCanonicalEdge, predicatesProvablyDisjoint, presenceExceptKey, projectGraph, readActiveWhen, readStringArray, relationalCoveredEntityTypes, resolveAllEdges, resolveContainmentEdge, resolveEntityType, resolveLabel, resolveRelationalPath, resolveSlugCollision, resolveTreePatternEdges, ringOrderedDomainIds, rotateSlug, serializeCanonical, validateEdgeProperties, validateProductStageStrict, validateUPGDocument, validateUPGFramework, validationProfileFor, walkMigrationChainToCanonical };
|