@unified-product-graph/core 0.20.2 → 0.21.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/dist/index.cjs CHANGED
@@ -4352,37 +4352,6 @@ var PRODUCT_LIFECYCLE = {
4352
4352
  }
4353
4353
  ]
4354
4354
  };
4355
- var RESEARCH_STUDY_LIFECYCLE = {
4356
- entity_type: "research_study",
4357
- initial_phase: "planned",
4358
- terminal_phases: ["complete"],
4359
- phases: [
4360
- {
4361
- id: "planned",
4362
- label: "Planned",
4363
- description: "The study has been scoped and scheduled. Research questions are defined, method is chosen, participants have not yet been recruited or sessions started.",
4364
- transitions_to: ["in_progress"]
4365
- },
4366
- {
4367
- id: "in_progress",
4368
- label: "In Progress",
4369
- description: "Research sessions are actively running. Participants are being interviewed, observed, or surveyed. Data is being collected.",
4370
- transitions_to: ["analysing"]
4371
- },
4372
- {
4373
- id: "analysing",
4374
- label: "Analysing",
4375
- description: "Data collection is complete. The team is reviewing recordings, notes, and responses to identify patterns and insights.",
4376
- transitions_to: ["complete"]
4377
- },
4378
- {
4379
- id: "complete",
4380
- label: "Complete",
4381
- description: "Analysis is done. Insights have been captured and shared. The study is a historical record.",
4382
- transitions_to: []
4383
- }
4384
- ]
4385
- };
4386
4355
  var NEED_LIFECYCLE = {
4387
4356
  entity_type: "need",
4388
4357
  initial_phase: "raw",
@@ -4464,74 +4433,6 @@ var SOLUTION_LIFECYCLE = {
4464
4433
  }
4465
4434
  ]
4466
4435
  };
4467
- var HYPOTHESIS_CLAIM_LIFECYCLE = {
4468
- entity_type: "hypothesis",
4469
- initial_phase: "drafted",
4470
- terminal_phases: ["validated", "invalidated", "archived"],
4471
- phases: [
4472
- {
4473
- id: "drafted",
4474
- label: "Drafted",
4475
- description: "The claim is being written. We_believe / will_result_in / we_know_when may not yet be complete. Not yet committed for testing.",
4476
- transitions_to: ["active", "archived"]
4477
- },
4478
- {
4479
- id: "active",
4480
- label: "Active",
4481
- description: "The claim is committed and being tested. Experiments may be running; evidence may be accruing via supports/refutes edges. current_confidence updates as evidence weight shifts.",
4482
- transitions_to: ["validated", "invalidated", "archived"]
4483
- },
4484
- {
4485
- id: "validated",
4486
- label: "Validated",
4487
- description: "Evidence sufficiently supports the claim. The belief held. Reopens to `active` if new evidence materially changes the picture.",
4488
- transitions_to: ["active"]
4489
- },
4490
- {
4491
- id: "invalidated",
4492
- label: "Invalidated",
4493
- description: "Evidence sufficiently refutes the claim. The belief did not hold. Reopens to `active` if new evidence materially changes the picture.",
4494
- transitions_to: ["active"]
4495
- },
4496
- {
4497
- id: "archived",
4498
- label: "Archived",
4499
- description: "Set aside without resolution: superseded by a new claim, deprioritised, or no longer relevant. Reopens to `active` if revisited.",
4500
- transitions_to: ["active"]
4501
- }
4502
- ]
4503
- };
4504
- var EXPERIMENT_LIFECYCLE = {
4505
- entity_type: "experiment",
4506
- initial_phase: "planned",
4507
- terminal_phases: ["done"],
4508
- phases: [
4509
- {
4510
- id: "planned",
4511
- label: "Planned",
4512
- description: "The experiment has been designed. Method, sample size, success criteria, and timeline are defined. It has not started yet.",
4513
- transitions_to: ["running"]
4514
- },
4515
- {
4516
- id: "running",
4517
- label: "Running",
4518
- description: "The experiment is live and collecting data. Traffic is being split, interviews are being conducted, or surveys are being distributed.",
4519
- transitions_to: ["analysing"]
4520
- },
4521
- {
4522
- id: "analysing",
4523
- label: "Analysing",
4524
- description: "Data collection is complete. The team is reviewing results, running statistical analysis, and deriving conclusions.",
4525
- transitions_to: ["done"]
4526
- },
4527
- {
4528
- id: "done",
4529
- label: "Done",
4530
- description: "The experiment is concluded. Learnings have been captured. The experiment is a historical record.",
4531
- transitions_to: []
4532
- }
4533
- ]
4534
- };
4535
4436
  var EXPERIMENT_PLAN_LIFECYCLE = {
4536
4437
  entity_type: "experiment_plan",
4537
4438
  initial_phase: "drafted",
@@ -4563,31 +4464,6 @@ var EXPERIMENT_PLAN_LIFECYCLE = {
4563
4464
  }
4564
4465
  ]
4565
4466
  };
4566
- var EXPERIMENT_RUN_LIFECYCLE = {
4567
- entity_type: "experiment_run",
4568
- initial_phase: "in_progress",
4569
- terminal_phases: ["complete", "aborted"],
4570
- phases: [
4571
- {
4572
- id: "in_progress",
4573
- label: "In Progress",
4574
- description: "The run is actively collecting data. Traffic is being split, interviews are happening, or surveys are out. Outcome and disposition are not yet recorded.",
4575
- transitions_to: ["complete", "aborted"]
4576
- },
4577
- {
4578
- id: "complete",
4579
- label: "Complete",
4580
- description: "Data collection finished and a disposition was recorded (confirmed, disconfirmed, or inconclusive). Learnings captured; outcome edges (validates, produced_insight, informed_decision) wired to downstream entities.",
4581
- transitions_to: []
4582
- },
4583
- {
4584
- id: "aborted",
4585
- label: "Aborted",
4586
- description: "Terminated early without a valid finding: infrastructure failure, exposure threshold not met, or the underlying plan was withdrawn. No disposition recorded.",
4587
- transitions_to: []
4588
- }
4589
- ]
4590
- };
4591
4467
  var RESEARCH_PLAN_LIFECYCLE = {
4592
4468
  entity_type: "research_plan",
4593
4469
  initial_phase: "draft",
@@ -4755,31 +4631,6 @@ var USER_ADVISORY_BOARD_LIFECYCLE = {
4755
4631
  }
4756
4632
  ]
4757
4633
  };
4758
- var DESIGN_SPRINT_LIFECYCLE = {
4759
- entity_type: "design_sprint",
4760
- initial_phase: "planning",
4761
- terminal_phases: ["completed"],
4762
- phases: [
4763
- {
4764
- id: "planning",
4765
- label: "Planning",
4766
- description: "The sprint challenge has been defined. Participants are identified. Space and materials are being arranged.",
4767
- transitions_to: ["in_progress"]
4768
- },
4769
- {
4770
- id: "in_progress",
4771
- label: "In Progress",
4772
- description: "The sprint is running. The team is moving through understand, sketch, decide, prototype, and test phases.",
4773
- transitions_to: ["completed"]
4774
- },
4775
- {
4776
- id: "completed",
4777
- label: "Completed",
4778
- description: "The sprint has concluded. Decisions and prototypes have been captured. Learnings inform next steps.",
4779
- transitions_to: []
4780
- }
4781
- ]
4782
- };
4783
4634
  var OBJECTIVE_LIFECYCLE = {
4784
4635
  entity_type: "objective",
4785
4636
  initial_phase: "draft",
@@ -4929,37 +4780,6 @@ var STRATEGIC_PILLAR_LIFECYCLE = {
4929
4780
  }
4930
4781
  ]
4931
4782
  };
4932
- var ASSUMPTION_LIFECYCLE = {
4933
- entity_type: "assumption",
4934
- initial_phase: "untested",
4935
- terminal_phases: ["validated", "invalidated"],
4936
- phases: [
4937
- {
4938
- id: "untested",
4939
- label: "Untested",
4940
- description: "Stated and acknowledged, awaiting systematic test. Some strategic assumptions stay untested by design.",
4941
- transitions_to: ["testing"]
4942
- },
4943
- {
4944
- id: "testing",
4945
- label: "Testing",
4946
- description: "An experiment or research activity is underway to test this assumption. Evidence is being gathered.",
4947
- transitions_to: ["validated", "invalidated"]
4948
- },
4949
- {
4950
- id: "validated",
4951
- label: "Validated",
4952
- description: "Evidence supports the assumption. The belief has been confirmed. Decisions resting on it are on firmer ground.",
4953
- transitions_to: []
4954
- },
4955
- {
4956
- id: "invalidated",
4957
- label: "Invalidated",
4958
- description: "Evidence contradicts the assumption. Decisions or plans that rested on it should be revisited.",
4959
- transitions_to: []
4960
- }
4961
- ]
4962
- };
4963
4783
  var STRATEGIC_QUESTION_LIFECYCLE = {
4964
4784
  entity_type: "strategic_question",
4965
4785
  initial_phase: "open",
@@ -5068,31 +4888,6 @@ var FEATURE_LIFECYCLE = {
5068
4888
  }
5069
4889
  ]
5070
4890
  };
5071
- var EPIC_LIFECYCLE = {
5072
- entity_type: "epic",
5073
- initial_phase: "todo",
5074
- terminal_phases: ["done"],
5075
- phases: [
5076
- {
5077
- id: "todo",
5078
- label: "To Do",
5079
- description: "The epic has been defined and scoped but work has not started. It is in the backlog.",
5080
- transitions_to: ["in_progress"]
5081
- },
5082
- {
5083
- id: "in_progress",
5084
- label: "In Progress",
5085
- description: "Work on the epic is underway. Stories are being pulled into sprints.",
5086
- transitions_to: ["done"]
5087
- },
5088
- {
5089
- id: "done",
5090
- label: "Done",
5091
- description: "All stories in the epic have been completed and the epic goal has been achieved.",
5092
- transitions_to: []
5093
- }
5094
- ]
5095
- };
5096
4891
  var RELEASE_LIFECYCLE = {
5097
4892
  entity_type: "release",
5098
4893
  initial_phase: "planned",
@@ -5118,74 +4913,6 @@ var RELEASE_LIFECYCLE = {
5118
4913
  }
5119
4914
  ]
5120
4915
  };
5121
- var TASK_LIFECYCLE = {
5122
- entity_type: "task",
5123
- initial_phase: "todo",
5124
- terminal_phases: ["done"],
5125
- phases: [
5126
- {
5127
- id: "todo",
5128
- label: "To Do",
5129
- description: "The task is defined and ready to be picked up.",
5130
- transitions_to: ["in_progress"]
5131
- },
5132
- {
5133
- id: "in_progress",
5134
- label: "In Progress",
5135
- description: "A team member is actively working on this task.",
5136
- transitions_to: ["in_review", "done"]
5137
- },
5138
- {
5139
- id: "in_review",
5140
- label: "In Review",
5141
- description: "Work is complete and awaiting review, approval, or verification.",
5142
- transitions_to: ["in_progress", "done"]
5143
- },
5144
- {
5145
- id: "done",
5146
- label: "Done",
5147
- description: "The task is complete and verified.",
5148
- transitions_to: []
5149
- }
5150
- ]
5151
- };
5152
- var BUG_LIFECYCLE = {
5153
- entity_type: "bug",
5154
- initial_phase: "open",
5155
- terminal_phases: ["verified", "wont_fix"],
5156
- phases: [
5157
- {
5158
- id: "open",
5159
- label: "Open",
5160
- description: "The bug has been reported but not yet triaged or assigned.",
5161
- transitions_to: ["in_progress", "wont_fix"]
5162
- },
5163
- {
5164
- id: "in_progress",
5165
- label: "In Progress",
5166
- description: "A developer is investigating and/or fixing the bug.",
5167
- transitions_to: ["fixed", "wont_fix"]
5168
- },
5169
- {
5170
- id: "fixed",
5171
- label: "Fixed",
5172
- description: "A fix has been implemented and merged. Awaiting verification in the target environment.",
5173
- transitions_to: ["verified", "open"]
5174
- },
5175
- {
5176
- id: "verified",
5177
- label: "Verified",
5178
- description: "The fix has been confirmed to resolve the bug in the target environment.",
5179
- transitions_to: []
5180
- },
5181
- {
5182
- id: "wont_fix",
5183
- label: "Won't Fix",
5184
- description: "Declined: by design, too costly relative to impact, or superseded by other work.",
5185
- transitions_to: []
5186
- }
5187
- ]
5188
- };
5189
4916
  var ROADMAP_ITEM_LIFECYCLE = {
5190
4917
  entity_type: "roadmap_item",
5191
4918
  initial_phase: "planned",
@@ -5328,37 +5055,6 @@ var DESIGN_CONCEPT_LIFECYCLE = {
5328
5055
  }
5329
5056
  ]
5330
5057
  };
5331
- var PROTOTYPE_LIFECYCLE = {
5332
- entity_type: "prototype",
5333
- initial_phase: "untested",
5334
- terminal_phases: ["passed", "failed"],
5335
- phases: [
5336
- {
5337
- id: "untested",
5338
- label: "Untested",
5339
- description: "The prototype has been built but has not yet been put in front of users.",
5340
- transitions_to: ["testing"]
5341
- },
5342
- {
5343
- id: "testing",
5344
- label: "Testing",
5345
- description: "The prototype is being tested with users. Sessions are underway.",
5346
- transitions_to: ["passed", "failed"]
5347
- },
5348
- {
5349
- id: "passed",
5350
- label: "Passed",
5351
- description: "Testing confirmed the design concept works for users. It is ready to inform detailed design or development.",
5352
- transitions_to: []
5353
- },
5354
- {
5355
- id: "failed",
5356
- label: "Failed",
5357
- description: "Testing revealed significant usability or concept problems. Learnings will inform a new design direction.",
5358
- transitions_to: []
5359
- }
5360
- ]
5361
- };
5362
5058
  var BRAND_IDENTITY_LIFECYCLE = {
5363
5059
  entity_type: "brand_identity",
5364
5060
  initial_phase: "exploratory",
@@ -5384,6 +5080,43 @@ var BRAND_IDENTITY_LIFECYCLE = {
5384
5080
  }
5385
5081
  ]
5386
5082
  };
5083
+ var SCREEN_LIFECYCLE = {
5084
+ entity_type: "screen",
5085
+ initial_phase: "draft",
5086
+ terminal_phases: ["deprecated"],
5087
+ phases: [
5088
+ {
5089
+ id: "draft",
5090
+ label: "Draft",
5091
+ description: "The screen is a rough idea: named and scoped, but not yet worked in a design tool.",
5092
+ transitions_to: ["in_design"]
5093
+ },
5094
+ {
5095
+ id: "in_design",
5096
+ label: "In Design",
5097
+ description: "The screen is being designed: wireframes, mockups, or prototypes are in progress. May fall back to `draft` if the approach is rethought from scratch.",
5098
+ transitions_to: ["built", "draft"]
5099
+ },
5100
+ {
5101
+ id: "built",
5102
+ label: "Built",
5103
+ description: "The screen has been implemented in code. It exists in a build but is not yet live for users. May return to `in_design` if implementation surfaces a design gap.",
5104
+ transitions_to: ["shipped", "in_design"]
5105
+ },
5106
+ {
5107
+ id: "shipped",
5108
+ label: "Shipped",
5109
+ description: "The screen is live in production and reachable by users.",
5110
+ transitions_to: ["deprecated"]
5111
+ },
5112
+ {
5113
+ id: "deprecated",
5114
+ label: "Deprecated",
5115
+ description: "The screen has been retired. It is no longer reachable, or is being phased out in favour of a replacement.",
5116
+ transitions_to: []
5117
+ }
5118
+ ]
5119
+ };
5387
5120
  var SERVICE_LIFECYCLE = {
5388
5121
  entity_type: "service",
5389
5122
  initial_phase: "development",
@@ -5465,43 +5198,6 @@ var FEATURE_FLAG_LIFECYCLE = {
5465
5198
  }
5466
5199
  ]
5467
5200
  };
5468
- var TECHNICAL_DEBT_ITEM_LIFECYCLE = {
5469
- entity_type: "technical_debt_item",
5470
- initial_phase: "identified",
5471
- terminal_phases: ["resolved", "accepted"],
5472
- phases: [
5473
- {
5474
- id: "identified",
5475
- label: "Identified",
5476
- description: "The debt has been recognised and documented. It has not yet been triaged for action.",
5477
- transitions_to: ["acknowledged", "accepted"]
5478
- },
5479
- {
5480
- id: "acknowledged",
5481
- label: "Acknowledged",
5482
- description: "The team agrees the debt exists and has assessed its severity. A decision on when to address it is pending.",
5483
- transitions_to: ["in_progress", "accepted"]
5484
- },
5485
- {
5486
- id: "in_progress",
5487
- label: "In Progress",
5488
- description: "Work is underway to address and remediate the debt.",
5489
- transitions_to: ["resolved"]
5490
- },
5491
- {
5492
- id: "resolved",
5493
- label: "Resolved",
5494
- description: "The debt has been addressed. The code or system has been improved.",
5495
- transitions_to: []
5496
- },
5497
- {
5498
- id: "accepted",
5499
- label: "Accepted",
5500
- description: "A conscious decision to live with the debt. Remediation cost outweighs current value.",
5501
- transitions_to: []
5502
- }
5503
- ]
5504
- };
5505
5201
  var INVESTIGATION_LIFECYCLE = {
5506
5202
  entity_type: "investigation",
5507
5203
  initial_phase: "open",
@@ -5632,49 +5328,6 @@ var INCIDENT_LIFECYCLE = {
5632
5328
  }
5633
5329
  ]
5634
5330
  };
5635
- var VULNERABILITY_LIFECYCLE = {
5636
- entity_type: "vulnerability",
5637
- initial_phase: "open",
5638
- terminal_phases: ["resolved", "accepted"],
5639
- phases: [
5640
- {
5641
- id: "open",
5642
- label: "Open",
5643
- description: "The vulnerability has been identified. It has not yet been assessed for severity or assigned for remediation.",
5644
- transitions_to: ["triaged"]
5645
- },
5646
- {
5647
- id: "triaged",
5648
- label: "Triaged",
5649
- description: "The vulnerability has been assessed. CVSS score assigned. Priority and ownership determined.",
5650
- transitions_to: ["in_progress", "accepted"]
5651
- },
5652
- {
5653
- id: "in_progress",
5654
- label: "In Progress",
5655
- description: "Remediation work is actively underway. A fix is being developed or a compensating control is being implemented.",
5656
- transitions_to: ["mitigated", "resolved"]
5657
- },
5658
- {
5659
- id: "mitigated",
5660
- label: "Mitigated",
5661
- description: "A compensating control is in place. Immediate risk is reduced but the root vulnerability has not been patched.",
5662
- transitions_to: ["resolved", "accepted"]
5663
- },
5664
- {
5665
- id: "resolved",
5666
- label: "Resolved",
5667
- description: "The vulnerability has been fully remediated. The underlying issue is patched or eliminated.",
5668
- transitions_to: []
5669
- },
5670
- {
5671
- id: "accepted",
5672
- label: "Accepted",
5673
- description: "Formally acknowledged by the security team. Remediation is parked: low severity, compensating controls, or cost/benefit analysis.",
5674
- transitions_to: []
5675
- }
5676
- ]
5677
- };
5678
5331
  var SECURITY_CONTROL_LIFECYCLE = {
5679
5332
  entity_type: "security_control",
5680
5333
  initial_phase: "planned",
@@ -5706,49 +5359,6 @@ var SECURITY_CONTROL_LIFECYCLE = {
5706
5359
  }
5707
5360
  ]
5708
5361
  };
5709
- var A11Y_ISSUE_LIFECYCLE = {
5710
- entity_type: "a11y_issue",
5711
- initial_phase: "open",
5712
- terminal_phases: ["verified", "accepted"],
5713
- phases: [
5714
- {
5715
- id: "open",
5716
- label: "Open",
5717
- description: "The accessibility issue has been identified. It has not yet been triaged for severity or assigned for remediation.",
5718
- transitions_to: ["triaged"]
5719
- },
5720
- {
5721
- id: "triaged",
5722
- label: "Triaged",
5723
- description: "The issue has been assessed for severity and mapped to the affected WCAG criterion. Priority has been assigned.",
5724
- transitions_to: ["in_progress", "accepted"]
5725
- },
5726
- {
5727
- id: "in_progress",
5728
- label: "In Progress",
5729
- description: "A developer or designer is actively working to fix the accessibility issue.",
5730
- transitions_to: ["fixed"]
5731
- },
5732
- {
5733
- id: "fixed",
5734
- label: "Fixed",
5735
- description: "The fix has been implemented. Awaiting verification with assistive technology.",
5736
- transitions_to: ["verified", "in_progress"]
5737
- },
5738
- {
5739
- id: "verified",
5740
- label: "Verified",
5741
- description: "The fix has been confirmed to resolve the accessibility barrier using appropriate assistive technology.",
5742
- transitions_to: []
5743
- },
5744
- {
5745
- id: "accepted",
5746
- label: "Accepted",
5747
- description: "The team has formally acknowledged this issue and made a documented decision not to fix it at this time.",
5748
- transitions_to: []
5749
- }
5750
- ]
5751
- };
5752
5362
  var DATA_PIPELINE_LIFECYCLE = {
5753
5363
  entity_type: "data_pipeline",
5754
5364
  initial_phase: "building",
@@ -5823,37 +5433,6 @@ var AI_MODEL_LIFECYCLE = {
5823
5433
  }
5824
5434
  ]
5825
5435
  };
5826
- var EVAL_RUN_LIFECYCLE = {
5827
- entity_type: "eval_run",
5828
- initial_phase: "planned",
5829
- terminal_phases: ["complete", "failed"],
5830
- phases: [
5831
- {
5832
- id: "planned",
5833
- label: "Planned",
5834
- description: "The run has been queued. It has not yet started executing.",
5835
- transitions_to: ["running"]
5836
- },
5837
- {
5838
- id: "running",
5839
- label: "Running",
5840
- description: "Actively executing. Prompts are being sent and responses scored.",
5841
- transitions_to: ["complete", "failed"]
5842
- },
5843
- {
5844
- id: "complete",
5845
- label: "Complete",
5846
- description: "The run finished successfully. Scores and results are available.",
5847
- transitions_to: []
5848
- },
5849
- {
5850
- id: "failed",
5851
- label: "Failed",
5852
- description: "Failed to complete: API error, timeout, or infrastructure failure. Create a new run to retry.",
5853
- transitions_to: []
5854
- }
5855
- ]
5856
- };
5857
5436
  var WORKFLOW_RUN_LIFECYCLE = {
5858
5437
  entity_type: "workflow_run",
5859
5438
  initial_phase: "pending",
@@ -6090,29 +5669,6 @@ var TEST_PLAN_LIFECYCLE = {
6090
5669
  { id: "cancelled", label: "Cancelled", description: "Plan was abandoned mid-flight: assumption changed, priorities shifted, or the underlying code went away.", transitions_to: [] }
6091
5670
  ]
6092
5671
  };
6093
- var FEASIBILITY_STUDY_LIFECYCLE = {
6094
- entity_type: "feasibility_study",
6095
- initial_phase: "scoped",
6096
- terminal_phases: ["concluded", "abandoned"],
6097
- phases: [
6098
- { id: "scoped", label: "Scoped", description: "Study has been framed: questions, methods, and budget are agreed.", transitions_to: ["analysing", "abandoned"] },
6099
- { id: "analysing", label: "Analysing", description: "Active analysis. Data is being gathered and synthesised.", transitions_to: ["concluded", "abandoned"] },
6100
- { id: "concluded", label: "Concluded", description: "Study reached a conclusion. Findings inform a go/no-go decision.", transitions_to: [] },
6101
- { id: "abandoned", label: "Abandoned", description: "Study was stopped before reaching a conclusion. Captured for the record.", transitions_to: [] }
6102
- ]
6103
- };
6104
- var AI_EXPERIMENT_LIFECYCLE = {
6105
- entity_type: "ai_experiment",
6106
- initial_phase: "planned",
6107
- terminal_phases: ["completed", "abandoned"],
6108
- phases: [
6109
- { id: "planned", label: "Planned", description: "Experiment has been designed but is not yet running.", transitions_to: ["running", "abandoned"] },
6110
- { id: "running", label: "Running", description: "Experiment is actively executing: model is being trained, evaluated, or compared.", transitions_to: ["analysed", "abandoned"] },
6111
- { id: "analysed", label: "Analysed", description: "Run is finished and results are being reviewed.", transitions_to: ["completed", "abandoned"] },
6112
- { id: "completed", label: "Completed", description: "Findings captured. Linked learnings drive downstream decisions.", transitions_to: [] },
6113
- { id: "abandoned", label: "Abandoned", description: "Experiment was stopped before producing usable findings.", transitions_to: [] }
6114
- ]
6115
- };
6116
5672
  var AI_DATASET_LIFECYCLE = {
6117
5673
  entity_type: "ai_dataset",
6118
5674
  initial_phase: "collecting",
@@ -6135,17 +5691,6 @@ var AI_GUARDRAIL_LIFECYCLE = {
6135
5691
  { id: "removed", label: "Removed", description: "Guardrail is no longer enforced. May reopen to active if reinstated.", transitions_to: ["active"] }
6136
5692
  ]
6137
5693
  };
6138
- var HALLUCINATION_REPORT_LIFECYCLE = {
6139
- entity_type: "hallucination_report",
6140
- initial_phase: "reported",
6141
- terminal_phases: ["resolved", "accepted"],
6142
- phases: [
6143
- { id: "reported", label: "Reported", description: "A hallucination has been observed and logged. Not yet investigated.", transitions_to: ["investigating"] },
6144
- { id: "investigating", label: "Investigating", description: "Active investigation: root cause analysis, reproduction, scope.", transitions_to: ["resolved", "accepted"] },
6145
- { id: "resolved", label: "Resolved", description: "A fix has shipped. Future occurrences should not happen.", transitions_to: ["investigating"] },
6146
- { id: "accepted", label: "Accepted", description: "Known limitation that will not be fixed in this iteration. Documented for users.", transitions_to: ["investigating"] }
6147
- ]
6148
- };
6149
5694
  var MODEL_COMPARISON_LIFECYCLE = {
6150
5695
  entity_type: "model_comparison",
6151
5696
  initial_phase: "planned",
@@ -6191,17 +5736,6 @@ var BUSINESS_MODEL_LIFECYCLE = {
6191
5736
  { id: "pivoted", label: "Pivoted", description: "Model became something structurally different. Captured as a milestone before the new model takes over.", transitions_to: [] }
6192
5737
  ]
6193
5738
  };
6194
- var VALUE_PROPOSITION_LIFECYCLE = {
6195
- entity_type: "value_proposition",
6196
- initial_phase: "drafted",
6197
- terminal_phases: ["validated", "invalidated"],
6198
- phases: [
6199
- { id: "drafted", label: "Drafted", description: "Statement of value has been articulated. Not yet tested.", transitions_to: ["testing", "invalidated"] },
6200
- { id: "testing", label: "Testing", description: "Statement is being tested against the target audience.", transitions_to: ["validated", "invalidated"] },
6201
- { id: "validated", label: "Validated", description: "Audience response confirms the value resonates. Forms the messaging foundation.", transitions_to: ["testing"] },
6202
- { id: "invalidated", label: "Invalidated", description: "Statement did not resonate. May reopen to drafted for a rewrite.", transitions_to: ["drafted"] }
6203
- ]
6204
- };
6205
5739
  var REVENUE_STREAM_LIFECYCLE = {
6206
5740
  entity_type: "revenue_stream",
6207
5741
  initial_phase: "proposed",
@@ -6213,29 +5747,6 @@ var REVENUE_STREAM_LIFECYCLE = {
6213
5747
  { id: "sunset", label: "Sunset", description: "Stream is being wound down. May reopen to piloting if revived.", transitions_to: ["piloting"] }
6214
5748
  ]
6215
5749
  };
6216
- var SUPPORT_TICKET_LIFECYCLE = {
6217
- entity_type: "support_ticket",
6218
- initial_phase: "opened",
6219
- terminal_phases: ["resolved", "closed"],
6220
- phases: [
6221
- { id: "opened", label: "Opened", description: "Ticket has been filed. Not yet looked at.", transitions_to: ["triaged"] },
6222
- { id: "triaged", label: "Triaged", description: "Ticket has been categorised, prioritised, and assigned. Ready for work.", transitions_to: ["in_progress"] },
6223
- { id: "in_progress", label: "In Progress", description: "Support is actively working on the ticket.", transitions_to: ["resolved", "triaged"] },
6224
- { id: "resolved", label: "Resolved", description: "Support believes the issue is fixed. Awaiting customer confirmation.", transitions_to: ["in_progress", "closed"] },
6225
- { id: "closed", label: "Closed", description: "Customer has confirmed. Ticket is fully done.", transitions_to: [] }
6226
- ]
6227
- };
6228
- var CUSTOMER_FEEDBACK_LIFECYCLE = {
6229
- entity_type: "customer_feedback",
6230
- initial_phase: "received",
6231
- terminal_phases: ["actioned", "acknowledged"],
6232
- phases: [
6233
- { id: "received", label: "Received", description: "Feedback has been captured. Not yet processed.", transitions_to: ["triaged"] },
6234
- { id: "triaged", label: "Triaged", description: "Feedback has been categorised and routed. Decision on action is pending.", transitions_to: ["actioned", "acknowledged"] },
6235
- { id: "actioned", label: "Actioned", description: "Feedback drove a change (a feature, a process, a doc update). Captured for the record.", transitions_to: [] },
6236
- { id: "acknowledged", label: "Acknowledged", description: "Feedback was read and considered but will not drive a change. Customer has been thanked.", transitions_to: [] }
6237
- ]
6238
- };
6239
5750
  var CUSTOMER_HEALTH_SCORE_LIFECYCLE = {
6240
5751
  entity_type: "customer_health_score",
6241
5752
  initial_phase: "monitoring",
@@ -6439,6 +5950,43 @@ var SALES_DEAL_TEMPLATE = {
6439
5950
  { id: "closed_lost", label: "Closed Lost", description: "Deal did not close. A re-engaged prospect becomes a new `deal` rather than reviving this one.", transitions_to: [] }
6440
5951
  ]
6441
5952
  };
5953
+ var VALIDATION_TEMPLATE = {
5954
+ template_id: "VALIDATION",
5955
+ initial_phase: "untested",
5956
+ terminal_phases: ["validated", "invalidated", "archived"],
5957
+ phases: [
5958
+ { id: "untested", label: "Untested", description: "Articulated but not yet examined against evidence.", transitions_to: ["testing"] },
5959
+ { id: "testing", label: "Testing", description: "Actively gathering evidence for or against the claim.", transitions_to: ["validated", "invalidated"] },
5960
+ { id: "validated", label: "Validated", description: "Evidence supports the claim. Treated as true until contradicted.", transitions_to: ["archived"] },
5961
+ { id: "invalidated", label: "Invalidated", description: "Evidence contradicts the claim. May re-test if new evidence appears.", transitions_to: ["archived", "testing"] },
5962
+ { id: "archived", label: "Archived", description: "Settled and retained for provenance. No longer active.", transitions_to: [] }
5963
+ ]
5964
+ };
5965
+ var INCIDENT_TEMPLATE = {
5966
+ template_id: "INCIDENT",
5967
+ initial_phase: "open",
5968
+ terminal_phases: ["resolved", "closed", "wont_fix"],
5969
+ phases: [
5970
+ { id: "open", label: "Open", description: "Surfaced and logged. Not yet triaged.", transitions_to: ["triaged"] },
5971
+ { id: "triaged", label: "Triaged", description: "Assessed for severity and ownership. Routed for work or dispositioned.", transitions_to: ["in_progress", "resolved", "wont_fix"] },
5972
+ { id: "in_progress", label: "In Progress", description: "Actively being worked toward a fix.", transitions_to: ["resolved", "wont_fix"] },
5973
+ { id: "resolved", label: "Resolved", description: "Addressed and verified. May reopen to `triaged` on regression.", transitions_to: ["closed", "triaged"] },
5974
+ { id: "closed", label: "Closed", description: "Administratively closed (duplicate, withdrawn, or no longer relevant).", transitions_to: [] },
5975
+ { id: "wont_fix", label: "Won't Fix", description: "Triaged as not to be actioned. Reason should be documented.", transitions_to: [] }
5976
+ ]
5977
+ };
5978
+ var STUDY_TEMPLATE = {
5979
+ template_id: "STUDY",
5980
+ initial_phase: "planned",
5981
+ terminal_phases: ["complete", "abandoned"],
5982
+ phases: [
5983
+ { id: "planned", label: "Planned", description: "Scoped and scheduled. Not yet started.", transitions_to: ["running"] },
5984
+ { id: "running", label: "Running", description: "Actively executing: collecting data or running the protocol.", transitions_to: ["analysing", "abandoned"] },
5985
+ { id: "analysing", label: "Analysing", description: "Execution done; results are being analysed and written up.", transitions_to: ["complete", "abandoned"] },
5986
+ { id: "complete", label: "Complete", description: "Analysed and concluded. Findings captured.", transitions_to: [] },
5987
+ { id: "abandoned", label: "Abandoned", description: "Stopped before completion (killed, timed out, or superseded).", transitions_to: [] }
5988
+ ]
5989
+ };
6442
5990
  var TEMPLATE_LIFECYCLES = [
6443
5991
  // Publishing lifecycle
6444
5992
  fromTemplate("content_piece", PUBLISHING_TEMPLATE),
@@ -6538,10 +6086,11 @@ var TEMPLATE_LIFECYCLES = [
6538
6086
  fromTemplate("access_policy", APPROVAL_TEMPLATE),
6539
6087
  fromTemplate("privacy_policy", APPROVAL_TEMPLATE),
6540
6088
  // ── Phase C: MATURITY (alpha / beta / ga / deprecated) ──────────────────────
6089
+ // screen removed (UPG-690 Q3, 0.21.0): hand-authored SCREEN_LIFECYCLE below —
6090
+ // the build-pipeline IS the real lifecycle, MATURITY was the mis-fit.
6541
6091
  fromTemplate("design_system", MATURITY_TEMPLATE),
6542
6092
  fromTemplate("design_component", MATURITY_TEMPLATE),
6543
6093
  fromTemplate("design_pattern", MATURITY_TEMPLATE),
6544
- fromTemplate("screen", MATURITY_TEMPLATE),
6545
6094
  fromTemplate("brand_logo", MATURITY_TEMPLATE),
6546
6095
  fromTemplate("certification", MATURITY_TEMPLATE),
6547
6096
  fromTemplate("data_source", MATURITY_TEMPLATE),
@@ -6551,12 +6100,44 @@ var TEMPLATE_LIFECYCLES = [
6551
6100
  fromTemplate("agent_task", WORK_ITEM_TEMPLATE),
6552
6101
  fromTemplate("agent_skill", WORK_ITEM_TEMPLATE),
6553
6102
  fromTemplate("agent_hook", WORK_ITEM_TEMPLATE),
6103
+ // UPG-690 (0.21.0): task (exact match) + epic (todo→in_progress→done ⊆ WORK_ITEM,
6104
+ // in_review becomes available — non-breaking widening) folded off hand-authored.
6105
+ fromTemplate("task", WORK_ITEM_TEMPLATE),
6106
+ fromTemplate("epic", WORK_ITEM_TEMPLATE),
6554
6107
  // ── Phase B: RISK_ITEM (identified → assessed → mitigated/accepted/closed) ──
6555
6108
  fromTemplate("threat", RISK_ITEM_TEMPLATE),
6556
6109
  fromTemplate("risk", RISK_ITEM_TEMPLATE),
6557
6110
  fromTemplate("compliance_requirement", RISK_ITEM_TEMPLATE),
6558
6111
  // ── Phase B: SALES_DEAL (qualified → proposal → negotiation → won/lost) ─────
6559
- fromTemplate("deal", SALES_DEAL_TEMPLATE)
6112
+ fromTemplate("deal", SALES_DEAL_TEMPLATE),
6113
+ // ── STUDY (planned → running → analysing → complete / abandoned) ───────────
6114
+ // UPG-690 (0.21.0): time-boxed investigations folded off bespoke singletons.
6115
+ // `model_comparison` stays bespoke — its publish/archive tail is a weak fit.
6116
+ fromTemplate("experiment", STUDY_TEMPLATE),
6117
+ fromTemplate("experiment_run", STUDY_TEMPLATE),
6118
+ fromTemplate("research_study", STUDY_TEMPLATE),
6119
+ fromTemplate("design_sprint", STUDY_TEMPLATE),
6120
+ fromTemplate("feasibility_study", STUDY_TEMPLATE),
6121
+ fromTemplate("ai_experiment", STUDY_TEMPLATE),
6122
+ fromTemplate("eval_run", STUDY_TEMPLATE),
6123
+ // ── VALIDATION (untested → testing → validated / invalidated → archived) ───
6124
+ // UPG-690 (0.21.0): claims-tested-to-a-verdict folded off bespoke singletons.
6125
+ // `business_model` stays bespoke — its `pivoted` terminal is a strategic
6126
+ // outcome, not a verdict.
6127
+ fromTemplate("assumption", VALIDATION_TEMPLATE),
6128
+ fromTemplate("prototype", VALIDATION_TEMPLATE),
6129
+ fromTemplate("value_proposition", VALIDATION_TEMPLATE),
6130
+ fromTemplate("hypothesis", VALIDATION_TEMPLATE),
6131
+ // ── INCIDENT (open → triaged → in_progress → resolved / closed / wont_fix) ─
6132
+ // UPG-690 (0.21.0): triage-to-resolution defect/ticket family folded off
6133
+ // bespoke singletons. `incident` stays bespoke (richer SRE flow).
6134
+ fromTemplate("support_ticket", INCIDENT_TEMPLATE),
6135
+ fromTemplate("bug", INCIDENT_TEMPLATE),
6136
+ fromTemplate("a11y_issue", INCIDENT_TEMPLATE),
6137
+ fromTemplate("vulnerability", INCIDENT_TEMPLATE),
6138
+ fromTemplate("hallucination_report", INCIDENT_TEMPLATE),
6139
+ fromTemplate("technical_debt_item", INCIDENT_TEMPLATE),
6140
+ fromTemplate("customer_feedback", INCIDENT_TEMPLATE)
6560
6141
  ];
6561
6142
  var FRAMEWORK_EXERCISE_LIFECYCLE = {
6562
6143
  entity_type: "framework_exercise",
@@ -6630,21 +6211,15 @@ var UPG_LIFECYCLES = [
6630
6211
  // Foundations (0.9.12)
6631
6212
  SPECIFICATION_LIFECYCLE,
6632
6213
  // Discovery & Validation
6633
- RESEARCH_STUDY_LIFECYCLE,
6634
6214
  NEED_LIFECYCLE,
6635
6215
  OPPORTUNITY_LIFECYCLE,
6636
6216
  SOLUTION_LIFECYCLE,
6637
- HYPOTHESIS_CLAIM_LIFECYCLE,
6638
- // canonical 'hypothesis' lifecycle. The pre-v0.2.8 legacy binding (untested → testing → resolved) was removed in 0.13.0 Wave 1 (UPG-685 T0.3): it was a dead second binding for the same entity_type, always shadowed by this one, and the legacy-status remap lives in UPG_*_MIGRATIONS, not a live lifecycle.
6639
- EXPERIMENT_LIFECYCLE,
6640
6217
  EXPERIMENT_PLAN_LIFECYCLE,
6641
- EXPERIMENT_RUN_LIFECYCLE,
6642
6218
  RESEARCH_PLAN_LIFECYCLE,
6643
6219
  FEEDBACK_PROGRAM_LIFECYCLE,
6644
6220
  FEATURE_REQUEST_LIFECYCLE,
6645
6221
  BETA_PROGRAM_LIFECYCLE,
6646
6222
  USER_ADVISORY_BOARD_LIFECYCLE,
6647
- DESIGN_SPRINT_LIFECYCLE,
6648
6223
  // Strategy & Product Specification
6649
6224
  OUTCOME_LIFECYCLE,
6650
6225
  VISION_LIFECYCLE,
@@ -6655,39 +6230,31 @@ var UPG_LIFECYCLES = [
6655
6230
  STRATEGIC_THEME_LIFECYCLE,
6656
6231
  INITIATIVE_LIFECYCLE,
6657
6232
  STRATEGIC_PILLAR_LIFECYCLE,
6658
- ASSUMPTION_LIFECYCLE,
6659
6233
  STRATEGIC_QUESTION_LIFECYCLE,
6660
6234
  FEATURE_AREA_LIFECYCLE,
6661
6235
  FEATURE_LIFECYCLE,
6662
- EPIC_LIFECYCLE,
6663
6236
  // user_story is lifecycle-free (declared in UPG_LIFECYCLE_FREE_TYPES below).
6664
- // story_task lifecycle removed v0.4.0; collapsed into task (TASK_LIFECYCLE,
6665
- // WORK_ITEM_TEMPLATE).
6237
+ // story_task lifecycle removed v0.4.0; collapsed into task. task + epic are
6238
+ // now WORK_ITEM-template-derived (UPG-690, 0.21.0) — see TEMPLATE_LIFECYCLES.
6666
6239
  RELEASE_LIFECYCLE,
6667
- TASK_LIFECYCLE,
6668
- BUG_LIFECYCLE,
6669
6240
  ROADMAP_ITEM_LIFECYCLE,
6670
6241
  PLANNING_CYCLE_LIFECYCLE,
6671
6242
  IP_ASSET_LIFECYCLE,
6672
6243
  CONTRACT_LIFECYCLE,
6673
6244
  DESIGN_CONCEPT_LIFECYCLE,
6674
- PROTOTYPE_LIFECYCLE,
6675
6245
  BRAND_IDENTITY_LIFECYCLE,
6246
+ SCREEN_LIFECYCLE,
6676
6247
  // Engineering & Operations
6677
6248
  SERVICE_LIFECYCLE,
6678
6249
  DEPLOYMENT_LIFECYCLE,
6679
6250
  FEATURE_FLAG_LIFECYCLE,
6680
- TECHNICAL_DEBT_ITEM_LIFECYCLE,
6681
6251
  INVESTIGATION_LIFECYCLE,
6682
6252
  EXTERNAL_API_LIFECYCLE,
6683
6253
  DATABASE_SCHEMA_LIFECYCLE,
6684
6254
  INCIDENT_LIFECYCLE,
6685
- VULNERABILITY_LIFECYCLE,
6686
6255
  SECURITY_CONTROL_LIFECYCLE,
6687
- A11Y_ISSUE_LIFECYCLE,
6688
6256
  DATA_PIPELINE_LIFECYCLE,
6689
6257
  AI_MODEL_LIFECYCLE,
6690
- EVAL_RUN_LIFECYCLE,
6691
6258
  WORKFLOW_RUN_LIFECYCLE,
6692
6259
  AGENT_DEFINITION_LIFECYCLE,
6693
6260
  AGENT_SESSION_LIFECYCLE,
@@ -6700,22 +6267,16 @@ var UPG_LIFECYCLES = [
6700
6267
  RESEARCH_QUESTION_LIFECYCLE,
6701
6268
  INTERVIEW_GUIDE_LIFECYCLE,
6702
6269
  TEST_PLAN_LIFECYCLE,
6703
- FEASIBILITY_STUDY_LIFECYCLE,
6704
6270
  // AI workflow
6705
- AI_EXPERIMENT_LIFECYCLE,
6706
6271
  AI_DATASET_LIFECYCLE,
6707
6272
  AI_GUARDRAIL_LIFECYCLE,
6708
- HALLUCINATION_REPORT_LIFECYCLE,
6709
6273
  MODEL_COMPARISON_LIFECYCLE,
6710
6274
  PROMPT_VERSION_LIFECYCLE,
6711
6275
  EVAL_BENCHMARK_LIFECYCLE,
6712
6276
  // Business Model
6713
6277
  BUSINESS_MODEL_LIFECYCLE,
6714
- VALUE_PROPOSITION_LIFECYCLE,
6715
6278
  REVENUE_STREAM_LIFECYCLE,
6716
6279
  // Customer Success
6717
- SUPPORT_TICKET_LIFECYCLE,
6718
- CUSTOMER_FEEDBACK_LIFECYCLE,
6719
6280
  CUSTOMER_HEALTH_SCORE_LIFECYCLE,
6720
6281
  PLAYBOOK_LIFECYCLE,
6721
6282
  // Team & Organisation
@@ -7829,6 +7390,64 @@ function getDeprecatedTypes() {
7829
7390
  return deprecated;
7830
7391
  }
7831
7392
  var UPG_PROPERTY_MIGRATIONS = {
7393
+ // ── v0.21.0: UPG-690 D.1 — collapse residual *_status shadows into status ────
7394
+ //
7395
+ // Six `*_status` enum properties that re-encode their entity's own lifecycle
7396
+ // phases (the residual Pattern-D shadows not caught by the 0.15.0 sweep, now
7397
+ // that the entities sit on shared templates). Each is removed; the authored
7398
+ // value LIFTS to UPGBaseNode.status, remapping where the property vocabulary
7399
+ // diverged from the (template) lifecycle. `security_policy.policy_status` was
7400
+ // deliberately EXCLUDED (Captain 2026-07-04): its active/under_review/retired
7401
+ // values are an operational-status axis distinct from its APPROVAL lifecycle
7402
+ // (active != approved) — a distinct-axis keeper, not a shadow.
7403
+ "0.21.0": [
7404
+ {
7405
+ kind: "lift_property_to_top_level",
7406
+ type: "brand_identity",
7407
+ from_property: "brand_stage",
7408
+ to: "status",
7409
+ reason: "UPG-690 D.1: brand_stage (exploratory/defined/mature) is an exact shadow of the brand_identity lifecycle. Removed in 0.21.0; lifts to status verbatim."
7410
+ },
7411
+ {
7412
+ kind: "lift_property_to_top_level",
7413
+ type: "deliverable",
7414
+ from_property: "deliverable_status",
7415
+ to: "status",
7416
+ value_map: { not_started: "todo", accepted: "done", rejected: "done" },
7417
+ reason: "UPG-690 D.1: deliverable_status re-encoded the deliverable WORK_ITEM lifecycle. Removed in 0.21.0; lifts to status with not_started -> todo, accepted/rejected -> done."
7418
+ },
7419
+ {
7420
+ kind: "lift_property_to_top_level",
7421
+ type: "press_release",
7422
+ from_property: "pr_status",
7423
+ to: "status",
7424
+ value_map: { in_review: "review", distributed: "published" },
7425
+ reason: "UPG-690 D.1: pr_status re-encoded the press_release PUBLISHING lifecycle. Removed in 0.21.0; lifts to status with in_review -> review, distributed -> published."
7426
+ },
7427
+ {
7428
+ kind: "lift_property_to_top_level",
7429
+ type: "program",
7430
+ from_property: "program_status",
7431
+ to: "status",
7432
+ value_map: { on_hold: "paused", cancelled: "sunset" },
7433
+ reason: "UPG-690 D.1: program_status re-encoded the program OPERATIONAL lifecycle. Removed in 0.21.0; lifts to status with on_hold -> paused, cancelled -> sunset."
7434
+ },
7435
+ {
7436
+ kind: "lift_property_to_top_level",
7437
+ type: "project",
7438
+ from_property: "project_status",
7439
+ to: "status",
7440
+ value_map: { on_hold: "paused", cancelled: "sunset" },
7441
+ reason: "UPG-690 D.1: project_status re-encoded the project OPERATIONAL lifecycle. Removed in 0.21.0; lifts to status with on_hold -> paused, cancelled -> sunset."
7442
+ },
7443
+ {
7444
+ kind: "lift_property_to_top_level",
7445
+ type: "screen",
7446
+ from_property: "screen_status",
7447
+ to: "status",
7448
+ reason: "UPG-690 D.3/Q3: screen flips from MATURITY to a hand-authored build-pipeline lifecycle (draft/in_design/built/shipped/deprecated); screen_status already carried those exact values. Removed in 0.21.0; lifts to status verbatim."
7449
+ }
7450
+ ],
7832
7451
  // ── v0.16.0: Pattern G — open-standard data boundary (UPG-691) ───────────────
7833
7452
  //
7834
7453
  // The portable graph holds modeling knowledge, not PII, registry filings,
@@ -10253,19 +9872,7 @@ var UPG_STATUS_MIGRATIONS = {
10253
9872
  retired: "deprecated"
10254
9873
  },
10255
9874
  // ── Discovery & Validation ───────────────────────────────────────────────
10256
- hypothesis: {
10257
- // Lifecycle: [drafted, active, validated, invalidated, archived]
10258
- // Legacy pre-v0.2.8 vocabulary mapped via UPG_PROPERTY_MIGRATIONS for
10259
- // property→top-level lifts, but raw top-level legacy values surface
10260
- // when authors set `status: untested` directly without going through
10261
- // the property bag.
10262
- untested: "drafted",
10263
- testing: "active",
10264
- proposed: "drafted",
10265
- deferred: "archived",
10266
- resolved: "active"
10267
- // ambiguous: prefer active until evidence settles
10268
- },
9875
+ // (hypothesis moved to the VALIDATION template fold section below, 0.21.0)
10269
9876
  opportunity: {
10270
9877
  // Lifecycle: [identified, validated, deferred] (no terminal phases)
10271
9878
  // Common authoring leftovers from pre-canonical Lean Canvas
@@ -10317,7 +9924,118 @@ var UPG_STATUS_MIGRATIONS = {
10317
9924
  archived: "sunset",
10318
9925
  retired: "sunset"
10319
9926
  },
10320
- // ── DevOps: incident ─────────────────────────────────────────────────────
9927
+ // ── VALIDATION template fold (UPG-690, 0.21.0) ───────────────────────────
9928
+ // Bespoke claim vocabularies remapped onto VALIDATION
9929
+ // [untested, testing, validated, invalidated, archived].
9930
+ // `assumption` already matches (untested, testing, validated, invalidated) —
9931
+ // no migration entry needed.
9932
+ prototype: {
9933
+ // was [untested, testing, passed, failed]
9934
+ passed: "validated",
9935
+ failed: "invalidated"
9936
+ },
9937
+ value_proposition: {
9938
+ // was [drafted, testing, validated, invalidated]
9939
+ drafted: "untested"
9940
+ },
9941
+ hypothesis: {
9942
+ // was [drafted, active, validated, invalidated, archived] (HYPOTHESIS_CLAIM
9943
+ // const, re-homed to entity_type 'hypothesis' at v0.4.0). The legacy
9944
+ // pre-v0.2.8 [untested, testing, resolved] mapping already lived here; it is
9945
+ // now consistent with the VALIDATION spine.
9946
+ drafted: "untested",
9947
+ active: "testing",
9948
+ // pre-v0.2.8 legacy values (kept from the prior hypothesis migration):
9949
+ proposed: "untested",
9950
+ deferred: "archived",
9951
+ resolved: "validated"
9952
+ // ambiguous historically; prefer validated on resolve
9953
+ },
9954
+ // ── STUDY template fold (UPG-690, 0.21.0) ────────────────────────────────
9955
+ // Bespoke run/study vocabularies remapped onto STUDY
9956
+ // [planned, running, analysing, complete, abandoned].
9957
+ experiment: {
9958
+ // was [planned, running, analysing, done]
9959
+ done: "complete"
9960
+ },
9961
+ experiment_run: {
9962
+ // was [in_progress, complete, aborted]
9963
+ in_progress: "running",
9964
+ aborted: "abandoned"
9965
+ },
9966
+ research_study: {
9967
+ // was [planned, in_progress, analysing, complete]
9968
+ in_progress: "running"
9969
+ },
9970
+ design_sprint: {
9971
+ // was [planning, in_progress, completed]
9972
+ planning: "planned",
9973
+ in_progress: "running",
9974
+ completed: "complete"
9975
+ },
9976
+ feasibility_study: {
9977
+ // was [scoped, analysing, concluded, abandoned]
9978
+ scoped: "planned",
9979
+ concluded: "complete"
9980
+ },
9981
+ ai_experiment: {
9982
+ // was [planned, running, analysed, completed, abandoned]
9983
+ analysed: "analysing",
9984
+ completed: "complete"
9985
+ },
9986
+ eval_run: {
9987
+ // was [planned, running, complete, failed]. `failed` = the run did not
9988
+ // finish cleanly (errored / killed) → abandoned. A completed run whose
9989
+ // result was negative stays `complete` (the verdict lives elsewhere).
9990
+ failed: "abandoned"
9991
+ },
9992
+ // ── INCIDENT template fold (UPG-690, 0.21.0) ─────────────────────────────
9993
+ // Bespoke triage vocabularies remapped onto INCIDENT
9994
+ // [open, triaged, in_progress, resolved, closed, wont_fix]. `incident` itself
9995
+ // is NOT folded (stays bespoke; see the DevOps entry below).
9996
+ support_ticket: {
9997
+ // was [opened, triaged, in_progress, resolved, closed]
9998
+ opened: "open"
9999
+ },
10000
+ bug: {
10001
+ // was [open, in_progress, fixed, verified, wont_fix]
10002
+ fixed: "in_progress",
10003
+ // fixed-but-not-verified is still work in progress
10004
+ verified: "resolved"
10005
+ },
10006
+ a11y_issue: {
10007
+ // was [open, triaged, in_progress, fixed, verified, accepted]
10008
+ fixed: "in_progress",
10009
+ verified: "resolved",
10010
+ accepted: "resolved"
10011
+ // verified-and-accepted == resolved
10012
+ },
10013
+ vulnerability: {
10014
+ // was [open, triaged, in_progress, mitigated, resolved, accepted]
10015
+ mitigated: "in_progress",
10016
+ // mitigation applied, not yet fully resolved
10017
+ accepted: "resolved"
10018
+ },
10019
+ hallucination_report: {
10020
+ // was [reported, investigating, resolved, accepted]
10021
+ reported: "open",
10022
+ investigating: "in_progress",
10023
+ accepted: "resolved"
10024
+ },
10025
+ technical_debt_item: {
10026
+ // was [identified, acknowledged, in_progress, resolved, accepted]
10027
+ identified: "open",
10028
+ acknowledged: "triaged",
10029
+ accepted: "resolved"
10030
+ },
10031
+ customer_feedback: {
10032
+ // was [received, triaged, actioned, acknowledged]
10033
+ received: "open",
10034
+ actioned: "resolved",
10035
+ acknowledged: "closed"
10036
+ // noted with no action == administratively closed
10037
+ },
10038
+ // ── DevOps: incident (stays bespoke — richer SRE flow, not folded) ────────
10321
10039
  incident: {
10322
10040
  // Lifecycle: [detected, triaged, contained, resolved, mitigated]
10323
10041
  open: "detected",
@@ -10326,6 +10044,16 @@ var UPG_STATUS_MIGRATIONS = {
10326
10044
  in_progress: "triaged",
10327
10045
  closed: "resolved",
10328
10046
  fixed: "resolved"
10047
+ },
10048
+ // ── UX/Design: screen (UPG-690 Q3/D.3, 0.21.0) — MATURITY → build-pipeline
10049
+ // flip. Old lifecycle [alpha, beta, ga, deprecated]; new SCREEN_LIFECYCLE
10050
+ // [draft, in_design, built, shipped, deprecated]. `deprecated` IS canonical
10051
+ // in both (no rewrite needed); omitted per the no-identity-entries doctrine
10052
+ // (see status-migrations.test.ts).
10053
+ screen: {
10054
+ alpha: "built",
10055
+ beta: "shipped",
10056
+ ga: "shipped"
10329
10057
  }
10330
10058
  };
10331
10059
  function migrateStatusValue(entityType, currentStatus) {
@@ -10785,7 +10513,6 @@ var UPG_PROPERTY_SCHEMA = {
10785
10513
  personality_traits: { type: "string[]", description: 'Core personality traits of the brand (e.g. "bold", "approachable", "innovative")' },
10786
10514
  tagline: { type: "string", description: 'Brand tagline or slogan (e.g. "Just Do It", "Think Different")' },
10787
10515
  mission_statement: { type: "string", description: "Mission statement: what the brand exists to do." },
10788
- brand_stage: { type: "string", enum: ["exploratory", "defined", "mature"], description: "Current lifecycle stage of the brand" },
10789
10516
  brand_values: { type: "string[]", description: 'Core brand values. The principles the brand stands for. @example ["innovation", "transparency", "sustainability"]' },
10790
10517
  brand_story: { type: "string", description: "Brand origin story or narrative. Free-form text, may be multiple paragraphs." },
10791
10518
  target_audience_description: { type: "string", description: 'Target audience description. Who the brand speaks to. @example "Solo founders and small product teams building their first product."' },
@@ -11306,7 +11033,6 @@ var UPG_PROPERTY_SCHEMA = {
11306
11033
  deliverable: {
11307
11034
  deliverable_type: { type: "string", enum: ["document", "prototype", "release", "design", "report", "other"], description: "Kind of deliverable (UPG-579 Option B)." },
11308
11035
  due_date: { type: "string", description: "Due date for the deliverable (ISO format)" },
11309
- deliverable_status: { type: "string", enum: ["not_started", "in_progress", "in_review", "accepted", "rejected"], description: "Current progress status" },
11310
11036
  acceptance_criteria: { type: "string", description: "Criteria that must be met for the deliverable to be accepted" }
11311
11037
  },
11312
11038
  // DemandGenProgramProperties: DemandGenProgram entity.
@@ -12647,8 +12373,7 @@ var UPG_PROPERTY_SCHEMA = {
12647
12373
  press_release: {
12648
12374
  pr_type: { type: "string", enum: ["product_launch", "partnership", "funding", "milestone", "other"], description: "Category of the press release" },
12649
12375
  publish_date: { type: "string", description: "Date the release was or will be published (ISO format)" },
12650
- outlets: { type: "string[]", description: "Media outlets targeted for distribution" },
12651
- pr_status: { type: "string", enum: ["draft", "in_review", "distributed", "published"], description: "Current status of the press release" }
12376
+ outlets: { type: "string[]", description: "Media outlets targeted for distribution" }
12652
12377
  },
12653
12378
  // PricingStrategyProperties: Pricing strategy.
12654
12379
  pricing_strategy: {
@@ -12693,14 +12418,12 @@ var UPG_PROPERTY_SCHEMA = {
12693
12418
  },
12694
12419
  // ProgramProperties: Program.
12695
12420
  program: {
12696
- program_status: { type: "string", enum: ["planning", "active", "on_hold", "completed", "cancelled"], description: "Current status of the program" },
12697
12421
  start_date: { type: "string", description: "Program start date (ISO format)" },
12698
12422
  end_date: { type: "string", description: "Program end date (ISO format)" },
12699
12423
  budget: { type: "number", description: "Total budget allocated to the program" }
12700
12424
  },
12701
12425
  // ProjectProperties: Project.
12702
12426
  project: {
12703
- project_status: { type: "string", enum: ["planning", "active", "on_hold", "completed", "cancelled"], description: "Current status of the project" },
12704
12427
  start_date: { type: "string", description: "Project start date (ISO format)" },
12705
12428
  end_date: { type: "string", description: "Project end date (ISO format)" },
12706
12429
  methodology: { type: "string", enum: ["agile", "waterfall", "kanban", "hybrid"], description: "Development methodology used" }
@@ -12970,7 +12693,6 @@ var UPG_PROPERTY_SCHEMA = {
12970
12693
  route: { type: "string", description: 'Application route. @example "/dashboard", "/settings/billing"' },
12971
12694
  viewport: { type: "string", enum: ["mobile", "tablet", "desktop", "tv", "watch", "responsive"], description: "Primary target viewport" },
12972
12695
  access_level: { type: "string", enum: ["public", "authenticated", "admin", "internal"], description: "Reach" },
12973
- screen_status: { type: "string", enum: ["draft", "in_design", "built", "shipped", "deprecated"], description: "Build pipeline stage" },
12974
12696
  purpose: { type: "string", description: "One-line purpose" }
12975
12697
  },
12976
12698
  // ScreenStateProperties: Specific state of a screen.
@@ -30174,7 +29896,7 @@ function isCanonical(text) {
30174
29896
  }
30175
29897
 
30176
29898
  // src/index.ts
30177
- var UPG_VERSION = "0.20.2";
29899
+ var UPG_VERSION = "0.21.0";
30178
29900
  var UPG_FORMAT_VERSION = "0.4.0";
30179
29901
  var MARKDOWN_FORMAT_VERSION = "0.1";
30180
29902
  var UPG_TYPES = getTypes();