@unified-product-graph/core 0.25.1 → 0.26.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
@@ -1164,7 +1164,12 @@ var UPG_ENTITY_META = [
1164
1164
  // ── Program Management ──
1165
1165
  { name: "program", type_id: "ent_262", maturity: "stable", since: "0.1.0" },
1166
1166
  { name: "project", type_id: "ent_263", maturity: "stable", since: "0.1.0" },
1167
- { name: "milestone", type_id: "ent_264", maturity: "stable", since: "0.1.0" },
1167
+ // `portfolio_shared` (0.25.1 feedback): a milestone is often a cross-team gate,
1168
+ // not one project's checkpoint — an org-wide "Open Beta" that several products'
1169
+ // projects must all satisfy. Shared tier lets `project_targets_milestone` (and
1170
+ // the other milestone edges) pass the cross-scope gate as `provisional`, same
1171
+ // as `project_implements_initiative`. Precedent: `planning_cycle` (0.20.0).
1172
+ { name: "milestone", type_id: "ent_264", maturity: "stable", since: "0.1.0", portfolio_shared: true },
1168
1173
  { name: "risk_register", type_id: "ent_265", maturity: "stable", since: "0.1.0" },
1169
1174
  { name: "risk_item", type_id: "ent_266", maturity: "deprecated", since: "0.1.0", deprecated_in: "0.1.0", replacement: "risk" },
1170
1175
  { name: "change_request", type_id: "ent_267", maturity: "stable", since: "0.1.0" },
@@ -4457,54 +4462,63 @@ var PRODUCT_LIFECYCLE = {
4457
4462
  phases: [
4458
4463
  {
4459
4464
  id: "concept",
4465
+ status_category: "triage",
4460
4466
  label: "Concept",
4461
4467
  description: "Napkin idea. Problem shape and solution sketch, pre-validation.",
4462
4468
  transitions_to: ["validation", "build", "beta", "launch", "growth", "mature", "sunset"]
4463
4469
  },
4464
4470
  {
4465
4471
  id: "validation",
4472
+ status_category: "started",
4466
4473
  label: "Validation",
4467
4474
  description: "Testing demand. User conversations and experiments pressure-test assumptions before build commits.",
4468
4475
  transitions_to: ["build", "beta", "launch", "growth", "mature", "sunset"]
4469
4476
  },
4470
4477
  {
4471
4478
  id: "build",
4479
+ status_category: "started",
4472
4480
  label: "Build",
4473
4481
  description: "Actively developing v1. Core functionality is being authored, pre-user.",
4474
4482
  transitions_to: ["beta", "launch", "growth", "mature", "sunset"]
4475
4483
  },
4476
4484
  {
4477
4485
  id: "beta",
4486
+ status_category: "started",
4478
4487
  label: "Beta",
4479
4488
  description: "Early users, iterating. Feature-complete enough to learn from, still changing weekly.",
4480
4489
  transitions_to: ["launch", "growth", "mature", "maintenance", "sunset"]
4481
4490
  },
4482
4491
  {
4483
4492
  id: "launch",
4493
+ status_category: "started",
4484
4494
  label: "Launch",
4485
4495
  description: "Generally available. Announced to the target audience, open past beta access.",
4486
4496
  transitions_to: ["growth", "mature", "maintenance", "sunset"]
4487
4497
  },
4488
4498
  {
4489
4499
  id: "growth",
4500
+ status_category: "started",
4490
4501
  label: "Growth",
4491
4502
  description: "Scaling users and revenue. Product fit validated; focus is acquisition, retention, expansion.",
4492
4503
  transitions_to: ["mature", "maintenance", "sunset"]
4493
4504
  },
4494
4505
  {
4495
4506
  id: "mature",
4507
+ status_category: "started",
4496
4508
  label: "Mature",
4497
4509
  description: "Stable. Growth levelled; investment weights toward optimisation, efficiency, and durability.",
4498
4510
  transitions_to: ["maintenance", "sunset"]
4499
4511
  },
4500
4512
  {
4501
4513
  id: "maintenance",
4514
+ status_category: "started",
4502
4515
  label: "Maintenance",
4503
4516
  description: "Sustaining. Minimal investment keeps the product running for existing users. Can transition back to `mature` on a strategic revival.",
4504
4517
  transitions_to: ["mature", "sunset"]
4505
4518
  },
4506
4519
  {
4507
4520
  id: "sunset",
4521
+ status_category: "completed",
4508
4522
  label: "Sunset",
4509
4523
  description: "Winding down or retired. Existing users are being migrated or offboarded.",
4510
4524
  transitions_to: []
@@ -4518,18 +4532,21 @@ var NEED_LIFECYCLE = {
4518
4532
  phases: [
4519
4533
  {
4520
4534
  id: "raw",
4535
+ status_category: "triage",
4521
4536
  label: "Raw",
4522
4537
  description: "Captured from an interview, observation, or support ticket. Articulation may be rough; may duplicate an existing need.",
4523
4538
  transitions_to: ["validated"]
4524
4539
  },
4525
4540
  {
4526
4541
  id: "validated",
4542
+ status_category: "started",
4527
4543
  label: "Validated",
4528
4544
  description: "Corroborated by multiple data points or targeted research. The team agrees it is a real, recurring need.",
4529
4545
  transitions_to: ["prioritized"]
4530
4546
  },
4531
4547
  {
4532
4548
  id: "prioritized",
4549
+ status_category: "completed",
4533
4550
  label: "Prioritized",
4534
4551
  description: "Ranked against other needs. Ready to inform opportunity definition and solution exploration.",
4535
4552
  transitions_to: []
@@ -4543,18 +4560,21 @@ var OPPORTUNITY_LIFECYCLE = {
4543
4560
  phases: [
4544
4561
  {
4545
4562
  id: "identified",
4563
+ status_category: "triage",
4546
4564
  label: "Identified",
4547
4565
  description: "A problem worth solving has been named. Sources include needs, insights, market trends, or competitive signals. Sizing and validation come next.",
4548
4566
  transitions_to: ["validated", "deferred"]
4549
4567
  },
4550
4568
  {
4551
4569
  id: "validated",
4570
+ status_category: "started",
4552
4571
  label: "Validated",
4553
4572
  description: "Research and evidence support pursuit. The problem is real, frequent, and painful enough to justify investment.",
4554
4573
  transitions_to: ["deferred"]
4555
4574
  },
4556
4575
  {
4557
4576
  id: "deferred",
4577
+ status_category: "backlog",
4558
4578
  label: "Deferred",
4559
4579
  description: "Acknowledged but parked. Capacity, priority, or strategic timing reasons. Can be reopened.",
4560
4580
  transitions_to: ["identified"]
@@ -4568,24 +4588,28 @@ var SOLUTION_LIFECYCLE = {
4568
4588
  phases: [
4569
4589
  {
4570
4590
  id: "proposed",
4591
+ status_category: "triage",
4571
4592
  label: "Proposed",
4572
4593
  description: "Identified as a possible response to an opportunity. Pre-commitment, pre-feasibility.",
4573
4594
  transitions_to: ["in_progress", "deferred"]
4574
4595
  },
4575
4596
  {
4576
4597
  id: "in_progress",
4598
+ status_category: "started",
4577
4599
  label: "In Progress",
4578
4600
  description: "A team is actively building, testing, or refining the solution.",
4579
4601
  transitions_to: ["shipped", "deferred"]
4580
4602
  },
4581
4603
  {
4582
4604
  id: "shipped",
4605
+ status_category: "completed",
4583
4606
  label: "Shipped",
4584
4607
  description: "Delivered to users. Live in the product.",
4585
4608
  transitions_to: ["deferred"]
4586
4609
  },
4587
4610
  {
4588
4611
  id: "deferred",
4612
+ status_category: "backlog",
4589
4613
  label: "Deferred",
4590
4614
  description: "Acknowledged but parked. Capacity, priority, or a change in direction. Can be reopened.",
4591
4615
  transitions_to: ["proposed"]
@@ -4599,24 +4623,28 @@ var EXPERIMENT_PLAN_LIFECYCLE = {
4599
4623
  phases: [
4600
4624
  {
4601
4625
  id: "drafted",
4626
+ status_category: "unstarted",
4602
4627
  label: "Drafted",
4603
4628
  description: "The plan is being written. Method, success criteria, target metric, projected reach/impact, ownership, and planned dates are being defined. Not yet approved.",
4604
4629
  transitions_to: ["scheduled", "cancelled"]
4605
4630
  },
4606
4631
  {
4607
4632
  id: "scheduled",
4633
+ status_category: "unstarted",
4608
4634
  label: "Scheduled",
4609
4635
  description: "The plan is approved and slotted for execution. Resources committed; awaiting start date.",
4610
4636
  transitions_to: ["approved", "cancelled"]
4611
4637
  },
4612
4638
  {
4613
4639
  id: "approved",
4640
+ status_category: "completed",
4614
4641
  label: "Approved",
4615
4642
  description: "Past scheduling: at least one run has started or completed against this plan. The plan is now a stable design artefact; future updates create a new plan.",
4616
4643
  transitions_to: []
4617
4644
  },
4618
4645
  {
4619
4646
  id: "cancelled",
4647
+ status_category: "cancelled",
4620
4648
  label: "Cancelled",
4621
4649
  description: "The plan was abandoned before any run started. Reason should be documented in description or via an attached decision.",
4622
4650
  transitions_to: []
@@ -4630,24 +4658,28 @@ var RESEARCH_PLAN_LIFECYCLE = {
4630
4658
  phases: [
4631
4659
  {
4632
4660
  id: "draft",
4661
+ status_category: "started",
4633
4662
  label: "Draft",
4634
4663
  description: "The plan is being written. Research question, suggested methods, and evidence threshold are being defined. Not yet approved for execution.",
4635
4664
  transitions_to: ["active"]
4636
4665
  },
4637
4666
  {
4638
4667
  id: "active",
4668
+ status_category: "started",
4639
4669
  label: "Active",
4640
4670
  description: "The plan has been approved and is being executed. Research sessions are underway or scheduled.",
4641
4671
  transitions_to: ["completed", "abandoned"]
4642
4672
  },
4643
4673
  {
4644
4674
  id: "completed",
4675
+ status_category: "completed",
4645
4676
  label: "Completed",
4646
4677
  description: "The planned research has been carried out and learnings have been captured. The plan is a historical record.",
4647
4678
  transitions_to: []
4648
4679
  },
4649
4680
  {
4650
4681
  id: "abandoned",
4682
+ status_category: "cancelled",
4651
4683
  label: "Abandoned",
4652
4684
  description: "Not executed: changing priorities, a decision no longer needing validation, or resource constraints.",
4653
4685
  transitions_to: []
@@ -4661,24 +4693,28 @@ var FEEDBACK_PROGRAM_LIFECYCLE = {
4661
4693
  phases: [
4662
4694
  {
4663
4695
  id: "planning",
4696
+ status_category: "unstarted",
4664
4697
  label: "Planning",
4665
4698
  description: "The program is being designed. Goals, audience, collection method, and cadence are being defined. No feedback is being collected yet.",
4666
4699
  transitions_to: ["active"]
4667
4700
  },
4668
4701
  {
4669
4702
  id: "active",
4703
+ status_category: "started",
4670
4704
  label: "Active",
4671
4705
  description: "The program is running. Feedback is being collected and processed on the defined cadence.",
4672
4706
  transitions_to: ["paused", "retired"]
4673
4707
  },
4674
4708
  {
4675
4709
  id: "paused",
4710
+ status_category: "backlog",
4676
4711
  label: "Paused",
4677
4712
  description: "Collection has been temporarily suspended. The program will resume.",
4678
4713
  transitions_to: ["active", "retired"]
4679
4714
  },
4680
4715
  {
4681
4716
  id: "retired",
4717
+ status_category: "completed",
4682
4718
  label: "Retired",
4683
4719
  description: "The program has ended. It is no longer collecting feedback. Historical data is preserved.",
4684
4720
  transitions_to: []
@@ -4692,36 +4728,42 @@ var FEATURE_REQUEST_LIFECYCLE = {
4692
4728
  phases: [
4693
4729
  {
4694
4730
  id: "new",
4731
+ status_category: "triage",
4695
4732
  label: "New",
4696
4733
  description: "The request has been submitted. It has not yet been reviewed by the product team.",
4697
4734
  transitions_to: ["under_review"]
4698
4735
  },
4699
4736
  {
4700
4737
  id: "under_review",
4738
+ status_category: "triage",
4701
4739
  label: "Under Review",
4702
4740
  description: "The request is being triaged. The product team is assessing feasibility, demand, and strategic fit.",
4703
4741
  transitions_to: ["planned", "wont_do"]
4704
4742
  },
4705
4743
  {
4706
4744
  id: "planned",
4745
+ status_category: "unstarted",
4707
4746
  label: "Planned",
4708
4747
  description: "The request has been accepted and is on the roadmap. It is scheduled for a future release cycle.",
4709
4748
  transitions_to: ["in_progress", "wont_do"]
4710
4749
  },
4711
4750
  {
4712
4751
  id: "in_progress",
4752
+ status_category: "started",
4713
4753
  label: "In Progress",
4714
4754
  description: "Work on fulfilling the request is actively underway.",
4715
4755
  transitions_to: ["shipped"]
4716
4756
  },
4717
4757
  {
4718
4758
  id: "shipped",
4759
+ status_category: "completed",
4719
4760
  label: "Shipped",
4720
4761
  description: "The requested capability has been delivered to users.",
4721
4762
  transitions_to: []
4722
4763
  },
4723
4764
  {
4724
4765
  id: "wont_do",
4766
+ status_category: "cancelled",
4725
4767
  label: "Won't Do",
4726
4768
  description: "Declined: strategic misalignment, infeasibility, or insufficient demand.",
4727
4769
  transitions_to: []
@@ -4735,24 +4777,28 @@ var BETA_PROGRAM_LIFECYCLE = {
4735
4777
  phases: [
4736
4778
  {
4737
4779
  id: "recruiting",
4780
+ status_category: "started",
4738
4781
  label: "Recruiting",
4739
4782
  description: "The program is accepting applications. Beta participants are being identified and onboarded.",
4740
4783
  transitions_to: ["active"]
4741
4784
  },
4742
4785
  {
4743
4786
  id: "active",
4787
+ status_category: "started",
4744
4788
  label: "Active",
4745
4789
  description: "Beta participants have access and are using the feature. Feedback is being collected.",
4746
4790
  transitions_to: ["graduated", "closed"]
4747
4791
  },
4748
4792
  {
4749
4793
  id: "graduated",
4794
+ status_category: "completed",
4750
4795
  label: "Graduated",
4751
4796
  description: "The beta was successful and the feature has progressed to general availability.",
4752
4797
  transitions_to: []
4753
4798
  },
4754
4799
  {
4755
4800
  id: "closed",
4801
+ status_category: "completed",
4756
4802
  label: "Closed",
4757
4803
  description: "The beta ended without graduating to GA. The feature was deprioritised, pivoted, or missed exit criteria.",
4758
4804
  transitions_to: []
@@ -4766,24 +4812,28 @@ var USER_ADVISORY_BOARD_LIFECYCLE = {
4766
4812
  phases: [
4767
4813
  {
4768
4814
  id: "recruiting",
4815
+ status_category: "started",
4769
4816
  label: "Recruiting",
4770
4817
  description: "Members are being identified and invited. The board is not yet convened.",
4771
4818
  transitions_to: ["active"]
4772
4819
  },
4773
4820
  {
4774
4821
  id: "active",
4822
+ status_category: "started",
4775
4823
  label: "Active",
4776
4824
  description: "The board is convened and meeting regularly. Members are providing strategic input.",
4777
4825
  transitions_to: ["paused", "retired"]
4778
4826
  },
4779
4827
  {
4780
4828
  id: "paused",
4829
+ status_category: "backlog",
4781
4830
  label: "Paused",
4782
4831
  description: "Board activities are temporarily suspended. Membership is retained and sessions will resume.",
4783
4832
  transitions_to: ["active", "retired"]
4784
4833
  },
4785
4834
  {
4786
4835
  id: "retired",
4836
+ status_category: "completed",
4787
4837
  label: "Retired",
4788
4838
  description: "The board has been disbanded. Members are no longer engaged in an advisory capacity.",
4789
4839
  transitions_to: []
@@ -4797,30 +4847,35 @@ var OBJECTIVE_LIFECYCLE = {
4797
4847
  phases: [
4798
4848
  {
4799
4849
  id: "draft",
4850
+ status_category: "started",
4800
4851
  label: "Draft",
4801
4852
  description: "The objective is being written. Key results have not yet been attached or approved.",
4802
4853
  transitions_to: ["active"]
4803
4854
  },
4804
4855
  {
4805
4856
  id: "active",
4857
+ status_category: "started",
4806
4858
  label: "Active",
4807
4859
  description: "The objective is in the current planning period. Key results are being measured and progress is tracked.",
4808
4860
  transitions_to: ["achieved", "missed", "deferred"]
4809
4861
  },
4810
4862
  {
4811
4863
  id: "achieved",
4864
+ status_category: "completed",
4812
4865
  label: "Achieved",
4813
4866
  description: "The objective was met or exceeded within the planning period.",
4814
4867
  transitions_to: []
4815
4868
  },
4816
4869
  {
4817
4870
  id: "missed",
4871
+ status_category: "completed",
4818
4872
  label: "Missed",
4819
4873
  description: "The planning period ended without achieving the objective. Learnings inform the next cycle.",
4820
4874
  transitions_to: []
4821
4875
  },
4822
4876
  {
4823
4877
  id: "deferred",
4878
+ status_category: "backlog",
4824
4879
  label: "Deferred",
4825
4880
  description: "The objective was not completed this period and is being carried forward. Can be reopened as active.",
4826
4881
  transitions_to: ["active"]
@@ -4834,24 +4889,28 @@ var KEY_RESULT_LIFECYCLE = {
4834
4889
  phases: [
4835
4890
  {
4836
4891
  id: "on_track",
4892
+ status_category: "started",
4837
4893
  label: "On Track",
4838
4894
  description: "Current measured value is progressing at a rate that should reach the target by the deadline.",
4839
4895
  transitions_to: ["at_risk", "behind", "achieved"]
4840
4896
  },
4841
4897
  {
4842
4898
  id: "at_risk",
4899
+ status_category: "started",
4843
4900
  label: "At Risk",
4844
4901
  description: "Progress is slowing. Without intervention, the target may not be reached by the deadline.",
4845
4902
  transitions_to: ["on_track", "behind", "achieved"]
4846
4903
  },
4847
4904
  {
4848
4905
  id: "behind",
4906
+ status_category: "started",
4849
4907
  label: "Behind",
4850
4908
  description: "Unlikely to reach the target at the current rate. The team needs to reassess strategy or accept a miss.",
4851
4909
  transitions_to: ["on_track", "at_risk", "achieved"]
4852
4910
  },
4853
4911
  {
4854
4912
  id: "achieved",
4913
+ status_category: "completed",
4855
4914
  label: "Achieved",
4856
4915
  description: "The target value has been reached or exceeded.",
4857
4916
  transitions_to: []
@@ -4865,18 +4924,21 @@ var STRATEGIC_THEME_LIFECYCLE = {
4865
4924
  phases: [
4866
4925
  {
4867
4926
  id: "active",
4927
+ status_category: "started",
4868
4928
  label: "Active",
4869
4929
  description: "The theme is a current organisational focus. Initiatives and objectives are being run under it.",
4870
4930
  transitions_to: ["completed", "paused"]
4871
4931
  },
4872
4932
  {
4873
4933
  id: "paused",
4934
+ status_category: "backlog",
4874
4935
  label: "Paused",
4875
4936
  description: "The theme is deprioritised for this period but is not being retired. It will resume.",
4876
4937
  transitions_to: ["active", "completed"]
4877
4938
  },
4878
4939
  {
4879
4940
  id: "completed",
4941
+ status_category: "completed",
4880
4942
  label: "Completed",
4881
4943
  description: "The theme has run its course. The focus area has been addressed or superseded by a new theme.",
4882
4944
  transitions_to: []
@@ -4890,24 +4952,28 @@ var INITIATIVE_LIFECYCLE = {
4890
4952
  phases: [
4891
4953
  {
4892
4954
  id: "proposed",
4955
+ status_category: "triage",
4893
4956
  label: "Proposed",
4894
4957
  description: "The initiative has been put forward but not yet approved for resourcing. Business case is being evaluated.",
4895
4958
  transitions_to: ["in_progress", "abandoned"]
4896
4959
  },
4897
4960
  {
4898
4961
  id: "in_progress",
4962
+ status_category: "started",
4899
4963
  label: "In Progress",
4900
4964
  description: "The initiative has been approved and work is underway. Teams are executing against it.",
4901
4965
  transitions_to: ["completed", "abandoned"]
4902
4966
  },
4903
4967
  {
4904
4968
  id: "completed",
4969
+ status_category: "completed",
4905
4970
  label: "Completed",
4906
4971
  description: "The initiative has achieved its goals and been formally closed.",
4907
4972
  transitions_to: []
4908
4973
  },
4909
4974
  {
4910
4975
  id: "abandoned",
4976
+ status_category: "cancelled",
4911
4977
  label: "Abandoned",
4912
4978
  description: "Stopped before completion: changing strategy, resource constraints, or learning that the goal is no longer relevant.",
4913
4979
  transitions_to: []
@@ -4921,18 +4987,21 @@ var STRATEGIC_PILLAR_LIFECYCLE = {
4921
4987
  phases: [
4922
4988
  {
4923
4989
  id: "proposed",
4990
+ status_category: "triage",
4924
4991
  label: "Proposed",
4925
4992
  description: "The pillar has been articulated but not yet ratified by leadership as a strategic commitment.",
4926
4993
  transitions_to: ["active"]
4927
4994
  },
4928
4995
  {
4929
4996
  id: "active",
4997
+ status_category: "started",
4930
4998
  label: "Active",
4931
4999
  description: "The pillar is a live strategic commitment. Decisions, themes, and initiatives are aligned to it.",
4932
5000
  transitions_to: ["sunset"]
4933
5001
  },
4934
5002
  {
4935
5003
  id: "sunset",
5004
+ status_category: "completed",
4936
5005
  label: "Sunset",
4937
5006
  description: "Retired: achieved, superseded by a new direction, or no longer reflects strategic reality.",
4938
5007
  transitions_to: []
@@ -4944,8 +5013,8 @@ var STRATEGIC_QUESTION_LIFECYCLE = {
4944
5013
  initial_phase: "open",
4945
5014
  terminal_phases: ["resolved"],
4946
5015
  phases: [
4947
- { id: "open", label: "Open", description: "The question has been raised but not yet answered. The plan is exposed to it.", transitions_to: ["resolved"] },
4948
- { id: "resolved", label: "Resolved", description: "The question has been answered; the resolution is captured. The plan is no longer exposed to it. May reopen if the answer unravels.", transitions_to: ["open"] }
5016
+ { id: "open", status_category: "triage", label: "Open", description: "The question has been raised but not yet answered. The plan is exposed to it.", transitions_to: ["resolved"] },
5017
+ { id: "resolved", status_category: "completed", label: "Resolved", description: "The question has been answered; the resolution is captured. The plan is no longer exposed to it. May reopen if the answer unravels.", transitions_to: ["open"] }
4949
5018
  ]
4950
5019
  };
4951
5020
  var OUTCOME_LIFECYCLE = {
@@ -4953,10 +5022,10 @@ var OUTCOME_LIFECYCLE = {
4953
5022
  initial_phase: "identified",
4954
5023
  terminal_phases: ["achieved", "abandoned"],
4955
5024
  phases: [
4956
- { id: "identified", label: "Identified", description: "The outcome has been named: the team agrees on what success looks like, but is not yet measuring it.", transitions_to: ["measuring", "abandoned"] },
4957
- { id: "measuring", label: "Measuring", description: "Instrumentation is live. Progress is being tracked against the outcome.", transitions_to: ["achieved", "abandoned"] },
4958
- { id: "achieved", label: "Achieved", description: "The outcome was reached. Captured for the record; no further pursuit required.", transitions_to: [] },
4959
- { id: "abandoned", label: "Abandoned", description: "Pursuit was stopped. Strategy shifted, the outcome lost relevance, or the cost outweighed value. May resume to `measuring` if the team revisits it.", transitions_to: ["measuring"] }
5025
+ { id: "identified", status_category: "triage", label: "Identified", description: "The outcome has been named: the team agrees on what success looks like, but is not yet measuring it.", transitions_to: ["measuring", "abandoned"] },
5026
+ { id: "measuring", status_category: "started", label: "Measuring", description: "Instrumentation is live. Progress is being tracked against the outcome.", transitions_to: ["achieved", "abandoned"] },
5027
+ { id: "achieved", status_category: "completed", label: "Achieved", description: "The outcome was reached. Captured for the record; no further pursuit required.", transitions_to: [] },
5028
+ { id: "abandoned", status_category: "cancelled", label: "Abandoned", description: "Pursuit was stopped. Strategy shifted, the outcome lost relevance, or the cost outweighed value. May resume to `measuring` if the team revisits it.", transitions_to: ["measuring"] }
4960
5029
  ]
4961
5030
  };
4962
5031
  var VISION_LIFECYCLE = {
@@ -4964,10 +5033,10 @@ var VISION_LIFECYCLE = {
4964
5033
  initial_phase: "drafting",
4965
5034
  terminal_phases: ["ratified", "revised", "archived"],
4966
5035
  phases: [
4967
- { id: "drafting", label: "Drafting", description: "Vision is being authored or rewritten. Not yet adopted.", transitions_to: ["ratified", "archived"] },
4968
- { id: "ratified", label: "Ratified", description: "The current, in-force vision. The team has aligned around it.", transitions_to: ["revised", "archived"] },
4969
- { id: "revised", label: "Revised", description: "Superseded by a newer vision but kept as a recorded milestone. May reopen to drafting if revisited.", transitions_to: ["drafting"] },
4970
- { id: "archived", label: "Archived", description: "No longer in force. Retained for historical reference.", transitions_to: ["drafting"] }
5036
+ { id: "drafting", status_category: "started", label: "Drafting", description: "Vision is being authored or rewritten. Not yet adopted.", transitions_to: ["ratified", "archived"] },
5037
+ { id: "ratified", status_category: "completed", label: "Ratified", description: "The current, in-force vision. The team has aligned around it.", transitions_to: ["revised", "archived"] },
5038
+ { id: "revised", status_category: "completed", label: "Revised", description: "Superseded by a newer vision but kept as a recorded milestone. May reopen to drafting if revisited.", transitions_to: ["drafting"] },
5039
+ { id: "archived", status_category: "completed", label: "Archived", description: "No longer in force. Retained for historical reference.", transitions_to: ["drafting"] }
4971
5040
  ]
4972
5041
  };
4973
5042
  var MISSION_LIFECYCLE = {
@@ -4975,9 +5044,9 @@ var MISSION_LIFECYCLE = {
4975
5044
  initial_phase: "drafting",
4976
5045
  terminal_phases: ["active", "archived"],
4977
5046
  phases: [
4978
- { id: "drafting", label: "Drafting", description: "Mission is being authored or rewritten. Not yet adopted.", transitions_to: ["active", "archived"] },
4979
- { id: "active", label: "Active", description: "The current, in-force mission. Guides product and organisational decisions.", transitions_to: ["archived"] },
4980
- { id: "archived", label: "Archived", description: "No longer in force. May reopen to drafting if the team revisits.", transitions_to: ["drafting"] }
5047
+ { id: "drafting", status_category: "started", label: "Drafting", description: "Mission is being authored or rewritten. Not yet adopted.", transitions_to: ["active", "archived"] },
5048
+ { id: "active", status_category: "started", label: "Active", description: "The current, in-force mission. Guides product and organisational decisions.", transitions_to: ["archived"] },
5049
+ { id: "archived", status_category: "completed", label: "Archived", description: "No longer in force. May reopen to drafting if the team revisits.", transitions_to: ["drafting"] }
4981
5050
  ]
4982
5051
  };
4983
5052
  var CAPABILITY_LIFECYCLE = {
@@ -4985,10 +5054,10 @@ var CAPABILITY_LIFECYCLE = {
4985
5054
  initial_phase: "planned",
4986
5055
  terminal_phases: ["operational", "retired"],
4987
5056
  phases: [
4988
- { id: "planned", label: "Planned", description: "Capability has been identified as needed but development has not started.", transitions_to: ["building", "retired"] },
4989
- { id: "building", label: "Building", description: "Active development: people, processes, or systems are being put in place.", transitions_to: ["operational", "retired"] },
4990
- { id: "operational", label: "Operational", description: "Capability is in place and functioning. The organisation can rely on it.", transitions_to: ["retired"] },
4991
- { id: "retired", label: "Retired", description: "No longer maintained. May reopen to building if the capability is reinvested in.", transitions_to: ["building"] }
5057
+ { id: "planned", status_category: "unstarted", label: "Planned", description: "Capability has been identified as needed but development has not started.", transitions_to: ["building", "retired"] },
5058
+ { id: "building", status_category: "started", label: "Building", description: "Active development: people, processes, or systems are being put in place.", transitions_to: ["operational", "retired"] },
5059
+ { id: "operational", status_category: "started", label: "Operational", description: "Capability is in place and functioning. The organisation can rely on it.", transitions_to: ["retired"] },
5060
+ { id: "retired", status_category: "completed", label: "Retired", description: "No longer maintained. May reopen to building if the capability is reinvested in.", transitions_to: ["building"] }
4992
5061
  ]
4993
5062
  };
4994
5063
  var FEATURE_AREA_LIFECYCLE = {
@@ -4998,18 +5067,21 @@ var FEATURE_AREA_LIFECYCLE = {
4998
5067
  phases: [
4999
5068
  {
5000
5069
  id: "planned",
5070
+ status_category: "unstarted",
5001
5071
  label: "Planned",
5002
5072
  description: "The feature area has been defined as an organising concept but no features have been built under it yet.",
5003
5073
  transitions_to: ["active"]
5004
5074
  },
5005
5075
  {
5006
5076
  id: "active",
5077
+ status_category: "started",
5007
5078
  label: "Active",
5008
5079
  description: "The feature area contains live features and is actively being developed.",
5009
5080
  transitions_to: ["deprecated"]
5010
5081
  },
5011
5082
  {
5012
5083
  id: "deprecated",
5084
+ status_category: "completed",
5013
5085
  label: "Deprecated",
5014
5086
  description: "The feature area is no longer being developed. It may still exist in the product but no new features are being added.",
5015
5087
  transitions_to: []
@@ -5023,24 +5095,28 @@ var FEATURE_LIFECYCLE = {
5023
5095
  phases: [
5024
5096
  {
5025
5097
  id: "proposed",
5098
+ status_category: "triage",
5026
5099
  label: "Proposed",
5027
5100
  description: "The feature has been suggested and is under consideration. It is not yet on the roadmap.",
5028
5101
  transitions_to: ["in_progress", "archived"]
5029
5102
  },
5030
5103
  {
5031
5104
  id: "in_progress",
5105
+ status_category: "started",
5032
5106
  label: "In Progress",
5033
5107
  description: "The feature is actively being designed and built.",
5034
5108
  transitions_to: ["shipped"]
5035
5109
  },
5036
5110
  {
5037
5111
  id: "shipped",
5112
+ status_category: "completed",
5038
5113
  label: "Shipped",
5039
5114
  description: "The feature is live in the product and available to users.",
5040
5115
  transitions_to: ["archived"]
5041
5116
  },
5042
5117
  {
5043
5118
  id: "archived",
5119
+ status_category: "completed",
5044
5120
  label: "Archived",
5045
5121
  description: "The feature has been removed from the product or superseded. It is retained as a historical record.",
5046
5122
  transitions_to: []
@@ -5054,18 +5130,21 @@ var RELEASE_LIFECYCLE = {
5054
5130
  phases: [
5055
5131
  {
5056
5132
  id: "planned",
5133
+ status_category: "unstarted",
5057
5134
  label: "Planned",
5058
5135
  description: "The release is defined and scheduled. Features are scoped but not all completed.",
5059
5136
  transitions_to: ["in_progress"]
5060
5137
  },
5061
5138
  {
5062
5139
  id: "in_progress",
5140
+ status_category: "started",
5063
5141
  label: "In Progress",
5064
5142
  description: "Features are being built. The release is open for development.",
5065
5143
  transitions_to: ["shipped"]
5066
5144
  },
5067
5145
  {
5068
5146
  id: "shipped",
5147
+ status_category: "completed",
5069
5148
  label: "Shipped",
5070
5149
  description: "The release has been deployed to production and is available to users.",
5071
5150
  transitions_to: []
@@ -5079,24 +5158,28 @@ var ROADMAP_ITEM_LIFECYCLE = {
5079
5158
  phases: [
5080
5159
  {
5081
5160
  id: "planned",
5161
+ status_category: "unstarted",
5082
5162
  label: "Planned",
5083
5163
  description: "The item is on the roadmap and scheduled for a future period.",
5084
5164
  transitions_to: ["in_progress", "deferred"]
5085
5165
  },
5086
5166
  {
5087
5167
  id: "in_progress",
5168
+ status_category: "started",
5088
5169
  label: "In Progress",
5089
5170
  description: "Work on this roadmap item is underway.",
5090
5171
  transitions_to: ["shipped", "deferred"]
5091
5172
  },
5092
5173
  {
5093
5174
  id: "shipped",
5175
+ status_category: "completed",
5094
5176
  label: "Shipped",
5095
5177
  description: "The roadmap item has been delivered.",
5096
5178
  transitions_to: []
5097
5179
  },
5098
5180
  {
5099
5181
  id: "deferred",
5182
+ status_category: "backlog",
5100
5183
  label: "Deferred",
5101
5184
  description: "The item has been pushed to a later period. It remains on the roadmap.",
5102
5185
  transitions_to: ["planned"]
@@ -5110,30 +5193,35 @@ var IP_ASSET_LIFECYCLE = {
5110
5193
  phases: [
5111
5194
  {
5112
5195
  id: "filed",
5196
+ status_category: "started",
5113
5197
  label: "Filed",
5114
5198
  description: "The IP application has been submitted to the relevant authority. Acknowledgement of filing is pending.",
5115
5199
  transitions_to: ["pending", "abandoned"]
5116
5200
  },
5117
5201
  {
5118
5202
  id: "pending",
5203
+ status_category: "started",
5119
5204
  label: "Pending",
5120
5205
  description: "The application has been acknowledged and is under examination by the relevant authority.",
5121
5206
  transitions_to: ["granted", "abandoned"]
5122
5207
  },
5123
5208
  {
5124
5209
  id: "granted",
5210
+ status_category: "completed",
5125
5211
  label: "Granted",
5126
5212
  description: "The IP right has been formally granted. Protection is in force.",
5127
5213
  transitions_to: ["expired", "abandoned"]
5128
5214
  },
5129
5215
  {
5130
5216
  id: "expired",
5217
+ status_category: "completed",
5131
5218
  label: "Expired",
5132
5219
  description: "The IP protection period has ended naturally.",
5133
5220
  transitions_to: []
5134
5221
  },
5135
5222
  {
5136
5223
  id: "abandoned",
5224
+ status_category: "cancelled",
5137
5225
  label: "Abandoned",
5138
5226
  description: "Abandoned: non-payment of renewal fees, withdrawal of the application, or a decision to stop defending it.",
5139
5227
  transitions_to: []
@@ -5147,36 +5235,42 @@ var CONTRACT_LIFECYCLE = {
5147
5235
  phases: [
5148
5236
  {
5149
5237
  id: "draft",
5238
+ status_category: "started",
5150
5239
  label: "Draft",
5151
5240
  description: "The contract is being written. Terms are not yet agreed by all parties.",
5152
5241
  transitions_to: ["in_review"]
5153
5242
  },
5154
5243
  {
5155
5244
  id: "in_review",
5245
+ status_category: "started",
5156
5246
  label: "In Review",
5157
5247
  description: "The draft is under review by legal counsel or the counterparty. Negotiations may be ongoing.",
5158
5248
  transitions_to: ["signed", "draft"]
5159
5249
  },
5160
5250
  {
5161
5251
  id: "signed",
5252
+ status_category: "completed",
5162
5253
  label: "Signed",
5163
5254
  description: "All parties have signed. The contract is executed and legally binding, but the effective period may not have started yet.",
5164
5255
  transitions_to: ["active"]
5165
5256
  },
5166
5257
  {
5167
5258
  id: "active",
5259
+ status_category: "started",
5168
5260
  label: "Active",
5169
5261
  description: "The contract is in its effective period. Obligations are in force.",
5170
5262
  transitions_to: ["expired", "terminated"]
5171
5263
  },
5172
5264
  {
5173
5265
  id: "expired",
5266
+ status_category: "completed",
5174
5267
  label: "Expired",
5175
5268
  description: "The contract has reached its end date naturally.",
5176
5269
  transitions_to: []
5177
5270
  },
5178
5271
  {
5179
5272
  id: "terminated",
5273
+ status_category: "cancelled",
5180
5274
  label: "Terminated",
5181
5275
  description: "Ended before natural expiry: mutual agreement, breach, or exercise of a termination clause.",
5182
5276
  transitions_to: []
@@ -5190,24 +5284,28 @@ var DESIGN_CONCEPT_LIFECYCLE = {
5190
5284
  phases: [
5191
5285
  {
5192
5286
  id: "sketched",
5287
+ status_category: "started",
5193
5288
  label: "Sketched",
5194
5289
  description: "The concept has been captured in early, rough form. It is an idea worth exploring but has not been refined or evaluated.",
5195
5290
  transitions_to: ["refined", "selected", "rejected"]
5196
5291
  },
5197
5292
  {
5198
5293
  id: "refined",
5294
+ status_category: "started",
5199
5295
  label: "Refined",
5200
5296
  description: "The concept has been developed with more detail. It is being compared to other concepts in the selection process.",
5201
5297
  transitions_to: ["selected", "rejected"]
5202
5298
  },
5203
5299
  {
5204
5300
  id: "selected",
5301
+ status_category: "completed",
5205
5302
  label: "Selected",
5206
5303
  description: "This concept has been chosen to move forward into prototyping or implementation.",
5207
5304
  transitions_to: []
5208
5305
  },
5209
5306
  {
5210
5307
  id: "rejected",
5308
+ status_category: "cancelled",
5211
5309
  label: "Rejected",
5212
5310
  description: "This concept was evaluated and not selected. It is retained as a record of design exploration.",
5213
5311
  transitions_to: []
@@ -5221,18 +5319,21 @@ var BRAND_IDENTITY_LIFECYCLE = {
5221
5319
  phases: [
5222
5320
  {
5223
5321
  id: "exploratory",
5322
+ status_category: "started",
5224
5323
  label: "Exploratory",
5225
5324
  description: "The brand is in early formation. Names, values, visual directions, and positioning are being explored without commitment.",
5226
5325
  transitions_to: ["defined"]
5227
5326
  },
5228
5327
  {
5229
5328
  id: "defined",
5329
+ status_category: "started",
5230
5330
  label: "Defined",
5231
5331
  description: "Core brand elements have been decided. Name, values, visual identity, and voice are articulated. The brand is being applied but may still be evolving.",
5232
5332
  transitions_to: ["mature"]
5233
5333
  },
5234
5334
  {
5235
5335
  id: "mature",
5336
+ status_category: "completed",
5236
5337
  label: "Mature",
5237
5338
  description: "The brand identity is fully articulated and consistently applied. Guidelines are documented and followed across all touchpoints.",
5238
5339
  transitions_to: []
@@ -5246,30 +5347,35 @@ var SCREEN_LIFECYCLE = {
5246
5347
  phases: [
5247
5348
  {
5248
5349
  id: "draft",
5350
+ status_category: "started",
5249
5351
  label: "Draft",
5250
5352
  description: "The screen is a rough idea: named and scoped, but not yet worked in a design tool.",
5251
5353
  transitions_to: ["in_design"]
5252
5354
  },
5253
5355
  {
5254
5356
  id: "in_design",
5357
+ status_category: "started",
5255
5358
  label: "In Design",
5256
5359
  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.",
5257
5360
  transitions_to: ["built", "draft"]
5258
5361
  },
5259
5362
  {
5260
5363
  id: "built",
5364
+ status_category: "started",
5261
5365
  label: "Built",
5262
5366
  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.",
5263
5367
  transitions_to: ["shipped", "in_design"]
5264
5368
  },
5265
5369
  {
5266
5370
  id: "shipped",
5371
+ status_category: "completed",
5267
5372
  label: "Shipped",
5268
5373
  description: "The screen is live in production and reachable by users.",
5269
5374
  transitions_to: ["deprecated"]
5270
5375
  },
5271
5376
  {
5272
5377
  id: "deprecated",
5378
+ status_category: "completed",
5273
5379
  label: "Deprecated",
5274
5380
  description: "The screen has been retired. It is no longer reachable, or is being phased out in favour of a replacement.",
5275
5381
  transitions_to: []
@@ -5283,24 +5389,28 @@ var SERVICE_LIFECYCLE = {
5283
5389
  phases: [
5284
5390
  {
5285
5391
  id: "development",
5392
+ status_category: "started",
5286
5393
  label: "Development",
5287
5394
  description: "The service is being built. It is not available in any shared environment.",
5288
5395
  transitions_to: ["staging"]
5289
5396
  },
5290
5397
  {
5291
5398
  id: "staging",
5399
+ status_category: "started",
5292
5400
  label: "Staging",
5293
5401
  description: "The service is deployed to a staging environment for integration testing and pre-release validation.",
5294
5402
  transitions_to: ["production", "development"]
5295
5403
  },
5296
5404
  {
5297
5405
  id: "production",
5406
+ status_category: "started",
5298
5407
  label: "Production",
5299
5408
  description: "The service is live and serving real users.",
5300
5409
  transitions_to: ["deprecated"]
5301
5410
  },
5302
5411
  {
5303
5412
  id: "deprecated",
5413
+ status_category: "completed",
5304
5414
  label: "Deprecated",
5305
5415
  description: "The service is being phased out. A successor service is in place or the capability is no longer needed.",
5306
5416
  transitions_to: []
@@ -5314,18 +5424,21 @@ var DEPLOYMENT_LIFECYCLE = {
5314
5424
  phases: [
5315
5425
  {
5316
5426
  id: "rolling",
5427
+ status_category: "started",
5317
5428
  label: "Rolling",
5318
5429
  description: "The deployment is in progress. Instances are being updated. Not all traffic has shifted yet.",
5319
5430
  transitions_to: ["success", "failure"]
5320
5431
  },
5321
5432
  {
5322
5433
  id: "success",
5434
+ status_category: "completed",
5323
5435
  label: "Success",
5324
5436
  description: "The deployment completed successfully. All instances are running the new version.",
5325
5437
  transitions_to: []
5326
5438
  },
5327
5439
  {
5328
5440
  id: "failure",
5441
+ status_category: "completed",
5329
5442
  label: "Failure",
5330
5443
  description: "The deployment failed or was rolled back. The previous version is restored.",
5331
5444
  transitions_to: []
@@ -5339,18 +5452,21 @@ var FEATURE_FLAG_LIFECYCLE = {
5339
5452
  phases: [
5340
5453
  {
5341
5454
  id: "off",
5455
+ status_category: "backlog",
5342
5456
  label: "Off",
5343
5457
  description: "The flag is disabled. The associated feature or code path is not active for any users.",
5344
5458
  transitions_to: ["rollout", "on"]
5345
5459
  },
5346
5460
  {
5347
5461
  id: "rollout",
5462
+ status_category: "started",
5348
5463
  label: "Rollout",
5349
5464
  description: "The flag is partially enabled. A percentage of users or a target segment has access.",
5350
5465
  transitions_to: ["on", "off"]
5351
5466
  },
5352
5467
  {
5353
5468
  id: "on",
5469
+ status_category: "completed",
5354
5470
  label: "On",
5355
5471
  description: "The flag is fully enabled for all users. The feature is live. The flag can be cleaned up.",
5356
5472
  transitions_to: []
@@ -5364,30 +5480,35 @@ var INVESTIGATION_LIFECYCLE = {
5364
5480
  phases: [
5365
5481
  {
5366
5482
  id: "open",
5483
+ status_category: "triage",
5367
5484
  label: "Open",
5368
5485
  description: "The investigation has been opened. A problem has been identified but not yet actively worked.",
5369
5486
  transitions_to: ["active"]
5370
5487
  },
5371
5488
  {
5372
5489
  id: "active",
5490
+ status_category: "started",
5373
5491
  label: "Active",
5374
5492
  description: "The investigation is being actively worked. Evidence is being gathered and hypotheses are being tested.",
5375
5493
  transitions_to: ["paused", "resolved", "abandoned"]
5376
5494
  },
5377
5495
  {
5378
5496
  id: "paused",
5497
+ status_category: "backlog",
5379
5498
  label: "Paused",
5380
5499
  description: "On hold: awaiting additional data, unblocking conditions, or reprioritisation.",
5381
5500
  transitions_to: ["active", "abandoned"]
5382
5501
  },
5383
5502
  {
5384
5503
  id: "resolved",
5504
+ status_category: "completed",
5385
5505
  label: "Resolved",
5386
5506
  description: "Root cause has been identified and documented. The investigation is closed.",
5387
5507
  transitions_to: []
5388
5508
  },
5389
5509
  {
5390
5510
  id: "abandoned",
5511
+ status_category: "cancelled",
5391
5512
  label: "Abandoned",
5392
5513
  description: "Closed without resolution: the problem could not be reproduced, was deemed not worth pursuing, or became moot.",
5393
5514
  transitions_to: []
@@ -5401,24 +5522,28 @@ var EXTERNAL_API_LIFECYCLE = {
5401
5522
  phases: [
5402
5523
  {
5403
5524
  id: "beta",
5525
+ status_category: "started",
5404
5526
  label: "Beta",
5405
5527
  description: "The API is available for early access or testing. It may be unstable and subject to breaking changes.",
5406
5528
  transitions_to: ["active"]
5407
5529
  },
5408
5530
  {
5409
5531
  id: "active",
5532
+ status_category: "started",
5410
5533
  label: "Active",
5411
5534
  description: "The API is stable and in production use. The provider guarantees availability per their SLA.",
5412
5535
  transitions_to: ["deprecated", "unavailable"]
5413
5536
  },
5414
5537
  {
5415
5538
  id: "deprecated",
5539
+ status_category: "started",
5416
5540
  label: "Deprecated",
5417
5541
  description: "The provider has announced end-of-life. The API still works but a migration to a successor is required.",
5418
5542
  transitions_to: ["unavailable"]
5419
5543
  },
5420
5544
  {
5421
5545
  id: "unavailable",
5546
+ status_category: "completed",
5422
5547
  label: "Unavailable",
5423
5548
  description: "The API is no longer accessible. Any dependent service is broken until migrated.",
5424
5549
  transitions_to: []
@@ -5432,18 +5557,21 @@ var DATABASE_SCHEMA_LIFECYCLE = {
5432
5557
  phases: [
5433
5558
  {
5434
5559
  id: "current",
5560
+ status_category: "started",
5435
5561
  label: "Current",
5436
5562
  description: "The schema is up to date with the applied migrations. No pending changes.",
5437
5563
  transitions_to: ["pending"]
5438
5564
  },
5439
5565
  {
5440
5566
  id: "pending",
5567
+ status_category: "unstarted",
5441
5568
  label: "Pending",
5442
5569
  description: "A migration is queued and ready to run. The schema will change when it is applied.",
5443
5570
  transitions_to: ["current", "failed"]
5444
5571
  },
5445
5572
  {
5446
5573
  id: "failed",
5574
+ status_category: "completed",
5447
5575
  label: "Failed",
5448
5576
  description: "A migration failed during application. The schema is in an inconsistent state and requires remediation before further changes can be applied.",
5449
5577
  transitions_to: ["pending"]
@@ -5457,30 +5585,35 @@ var INCIDENT_LIFECYCLE = {
5457
5585
  phases: [
5458
5586
  {
5459
5587
  id: "detected",
5588
+ status_category: "triage",
5460
5589
  label: "Detected",
5461
5590
  description: "Identified by an alert, a user report, or direct observation. Response has not yet started.",
5462
5591
  transitions_to: ["triaged"]
5463
5592
  },
5464
5593
  {
5465
5594
  id: "triaged",
5595
+ status_category: "triage",
5466
5596
  label: "Triaged",
5467
5597
  description: "The incident has been assessed for severity and impact. An on-call responder is assigned and is actively working it.",
5468
5598
  transitions_to: ["contained"]
5469
5599
  },
5470
5600
  {
5471
5601
  id: "contained",
5602
+ status_category: "started",
5472
5603
  label: "Contained",
5473
5604
  description: "Immediate user impact stopped via rollback, circuit breaker, or another emergency measure. Root cause fix is still pending.",
5474
5605
  transitions_to: ["resolved", "mitigated"]
5475
5606
  },
5476
5607
  {
5477
5608
  id: "resolved",
5609
+ status_category: "completed",
5478
5610
  label: "Resolved",
5479
5611
  description: "Root cause has been identified and fixed. The system is back to normal. A postmortem is recommended.",
5480
5612
  transitions_to: []
5481
5613
  },
5482
5614
  {
5483
5615
  id: "mitigated",
5616
+ status_category: "completed",
5484
5617
  label: "Mitigated",
5485
5618
  description: "A compensating control is in place and user impact is stopped, but the root cause remains unfixed. A follow-up investigation or fix is required.",
5486
5619
  transitions_to: []
@@ -5494,24 +5627,28 @@ var SECURITY_CONTROL_LIFECYCLE = {
5494
5627
  phases: [
5495
5628
  {
5496
5629
  id: "planned",
5630
+ status_category: "unstarted",
5497
5631
  label: "Planned",
5498
5632
  description: "The control has been identified as required but implementation has not started.",
5499
5633
  transitions_to: ["in_progress"]
5500
5634
  },
5501
5635
  {
5502
5636
  id: "in_progress",
5637
+ status_category: "started",
5503
5638
  label: "In Progress",
5504
5639
  description: "The control is being implemented.",
5505
5640
  transitions_to: ["implemented"]
5506
5641
  },
5507
5642
  {
5508
5643
  id: "implemented",
5644
+ status_category: "started",
5509
5645
  label: "Implemented",
5510
5646
  description: "The control is in place. It has not yet been independently tested or verified.",
5511
5647
  transitions_to: ["verified", "in_progress"]
5512
5648
  },
5513
5649
  {
5514
5650
  id: "verified",
5651
+ status_category: "completed",
5515
5652
  label: "Verified",
5516
5653
  description: "The control has been tested and confirmed effective. It provides the intended security assurance.",
5517
5654
  transitions_to: []
@@ -5525,30 +5662,35 @@ var DATA_PIPELINE_LIFECYCLE = {
5525
5662
  phases: [
5526
5663
  {
5527
5664
  id: "building",
5665
+ status_category: "started",
5528
5666
  label: "Building",
5529
5667
  description: "The pipeline is under construction. It is not yet processing real data.",
5530
5668
  transitions_to: ["active"]
5531
5669
  },
5532
5670
  {
5533
5671
  id: "active",
5672
+ status_category: "started",
5534
5673
  label: "Active",
5535
5674
  description: "The pipeline is running and processing data on its defined schedule.",
5536
5675
  transitions_to: ["paused", "failed", "deprecated"]
5537
5676
  },
5538
5677
  {
5539
5678
  id: "paused",
5679
+ status_category: "backlog",
5540
5680
  label: "Paused",
5541
5681
  description: "Deliberately suspended: maintenance, cost control, or upstream data unavailability.",
5542
5682
  transitions_to: ["active", "deprecated"]
5543
5683
  },
5544
5684
  {
5545
5685
  id: "failed",
5686
+ status_category: "started",
5546
5687
  label: "Failed",
5547
5688
  description: "The pipeline has errored and is not processing data. Intervention is required to restore it.",
5548
5689
  transitions_to: ["active"]
5549
5690
  },
5550
5691
  {
5551
5692
  id: "deprecated",
5693
+ status_category: "completed",
5552
5694
  label: "Deprecated",
5553
5695
  description: "The pipeline is being retired. It is no longer maintained and will be shut down.",
5554
5696
  transitions_to: []
@@ -5562,30 +5704,35 @@ var AI_MODEL_LIFECYCLE = {
5562
5704
  phases: [
5563
5705
  {
5564
5706
  id: "evaluating",
5707
+ status_category: "started",
5565
5708
  label: "Evaluating",
5566
5709
  description: "The model is being assessed for quality, cost, safety, and fit. Eval runs are being analysed. No production traffic.",
5567
5710
  transitions_to: ["staging", "retired"]
5568
5711
  },
5569
5712
  {
5570
5713
  id: "staging",
5714
+ status_category: "started",
5571
5715
  label: "Staging",
5572
5716
  description: "The model has passed evaluation and is deployed to a staging environment for integration testing.",
5573
5717
  transitions_to: ["production", "evaluating", "retired"]
5574
5718
  },
5575
5719
  {
5576
5720
  id: "production",
5721
+ status_category: "started",
5577
5722
  label: "Production",
5578
5723
  description: "The model is serving live product traffic.",
5579
5724
  transitions_to: ["deprecated", "retired"]
5580
5725
  },
5581
5726
  {
5582
5727
  id: "deprecated",
5728
+ status_category: "started",
5583
5729
  label: "Deprecated",
5584
5730
  description: "A successor model is in production. This model is being phased out. Traffic is being migrated.",
5585
5731
  transitions_to: ["retired"]
5586
5732
  },
5587
5733
  {
5588
5734
  id: "retired",
5735
+ status_category: "completed",
5589
5736
  label: "Retired",
5590
5737
  description: "The model is fully decommissioned. No traffic. Historical records are preserved.",
5591
5738
  transitions_to: []
@@ -5599,36 +5746,42 @@ var WORKFLOW_RUN_LIFECYCLE = {
5599
5746
  phases: [
5600
5747
  {
5601
5748
  id: "pending",
5749
+ status_category: "unstarted",
5602
5750
  label: "Pending",
5603
5751
  description: "The run has been queued and is awaiting execution. Resources or dependencies are being provisioned.",
5604
5752
  transitions_to: ["running", "cancelled"]
5605
5753
  },
5606
5754
  {
5607
5755
  id: "running",
5756
+ status_category: "started",
5608
5757
  label: "Running",
5609
5758
  description: "The workflow is actively executing its steps.",
5610
5759
  transitions_to: ["blocked", "completed", "failed", "cancelled"]
5611
5760
  },
5612
5761
  {
5613
5762
  id: "blocked",
5763
+ status_category: "started",
5614
5764
  label: "Blocked",
5615
5765
  description: "Execution is paused at a review_gate awaiting human or automated approval before proceeding.",
5616
5766
  transitions_to: ["running", "cancelled"]
5617
5767
  },
5618
5768
  {
5619
5769
  id: "completed",
5770
+ status_category: "completed",
5620
5771
  label: "Completed",
5621
5772
  description: "All steps executed successfully. Outputs are available.",
5622
5773
  transitions_to: []
5623
5774
  },
5624
5775
  {
5625
5776
  id: "failed",
5777
+ status_category: "completed",
5626
5778
  label: "Failed",
5627
5779
  description: "The run encountered an unrecoverable error and stopped. Partial outputs may be available.",
5628
5780
  transitions_to: []
5629
5781
  },
5630
5782
  {
5631
5783
  id: "cancelled",
5784
+ status_category: "cancelled",
5632
5785
  label: "Cancelled",
5633
5786
  description: "The run was deliberately stopped before completion.",
5634
5787
  transitions_to: []
@@ -5642,30 +5795,35 @@ var AGENT_DEFINITION_LIFECYCLE = {
5642
5795
  phases: [
5643
5796
  {
5644
5797
  id: "testing",
5798
+ status_category: "started",
5645
5799
  label: "Testing",
5646
5800
  description: "The agent is being validated in a controlled environment. Sessions are not running against real product data.",
5647
5801
  transitions_to: ["active", "disabled"]
5648
5802
  },
5649
5803
  {
5650
5804
  id: "active",
5805
+ status_category: "started",
5651
5806
  label: "Active",
5652
5807
  description: "The agent is operational and creating sessions on demand.",
5653
5808
  transitions_to: ["paused", "disabled", "retired"]
5654
5809
  },
5655
5810
  {
5656
5811
  id: "paused",
5812
+ status_category: "backlog",
5657
5813
  label: "Paused",
5658
5814
  description: "The agent is temporarily suspended. It is not creating new sessions but its configuration is preserved.",
5659
5815
  transitions_to: ["active", "retired"]
5660
5816
  },
5661
5817
  {
5662
5818
  id: "disabled",
5819
+ status_category: "backlog",
5663
5820
  label: "Disabled",
5664
5821
  description: "Turned off: bug, policy change, or safety concern. Can be re-enabled after remediation.",
5665
5822
  transitions_to: ["testing", "active", "retired"]
5666
5823
  },
5667
5824
  {
5668
5825
  id: "retired",
5826
+ status_category: "completed",
5669
5827
  label: "Retired",
5670
5828
  description: "The agent has been permanently decommissioned. Sessions are no longer created from this definition.",
5671
5829
  transitions_to: []
@@ -5679,24 +5837,28 @@ var AGENT_SESSION_LIFECYCLE = {
5679
5837
  phases: [
5680
5838
  {
5681
5839
  id: "active",
5840
+ status_category: "started",
5682
5841
  label: "Active",
5683
5842
  description: "The session is running. The agent is processing input and producing output.",
5684
5843
  transitions_to: ["completed", "crashed", "timed_out"]
5685
5844
  },
5686
5845
  {
5687
5846
  id: "completed",
5847
+ status_category: "completed",
5688
5848
  label: "Completed",
5689
5849
  description: "The session ended normally. The task was completed or the conversation was concluded.",
5690
5850
  transitions_to: []
5691
5851
  },
5692
5852
  {
5693
5853
  id: "crashed",
5854
+ status_category: "completed",
5694
5855
  label: "Crashed",
5695
5856
  description: "The session terminated unexpectedly due to an unhandled error or infrastructure failure.",
5696
5857
  transitions_to: []
5697
5858
  },
5698
5859
  {
5699
5860
  id: "timed_out",
5861
+ status_category: "completed",
5700
5862
  label: "Timed Out",
5701
5863
  description: "The session exceeded its maximum allowed duration and was automatically terminated.",
5702
5864
  transitions_to: []
@@ -5710,24 +5872,28 @@ var REVIEW_GATE_LIFECYCLE = {
5710
5872
  phases: [
5711
5873
  {
5712
5874
  id: "pending",
5875
+ status_category: "unstarted",
5713
5876
  label: "Pending",
5714
5877
  description: "The gate is awaiting review. The workflow is blocked until a decision is made.",
5715
5878
  transitions_to: ["approved", "rejected", "bypassed"]
5716
5879
  },
5717
5880
  {
5718
5881
  id: "approved",
5882
+ status_category: "completed",
5719
5883
  label: "Approved",
5720
5884
  description: "The gate has been passed. The workflow continues.",
5721
5885
  transitions_to: []
5722
5886
  },
5723
5887
  {
5724
5888
  id: "rejected",
5889
+ status_category: "cancelled",
5725
5890
  label: "Rejected",
5726
5891
  description: "The gate was not passed. The workflow is blocked and the submitter must address the feedback before re-submitting.",
5727
5892
  transitions_to: ["pending"]
5728
5893
  },
5729
5894
  {
5730
5895
  id: "bypassed",
5896
+ status_category: "cancelled",
5731
5897
  label: "Bypassed",
5732
5898
  description: "Deliberately overridden without normal review by an authorised person in an emergency. Create an audit trail entry.",
5733
5899
  transitions_to: []
@@ -5741,18 +5907,21 @@ var TEST_SUITE_LIFECYCLE = {
5741
5907
  phases: [
5742
5908
  {
5743
5909
  id: "draft",
5910
+ status_category: "started",
5744
5911
  label: "Draft",
5745
5912
  description: "The test suite is being authored. It is not yet part of any CI or QA process.",
5746
5913
  transitions_to: ["active"]
5747
5914
  },
5748
5915
  {
5749
5916
  id: "active",
5917
+ status_category: "started",
5750
5918
  label: "Active",
5751
5919
  description: "The suite is running in CI or scheduled QA processes.",
5752
5920
  transitions_to: ["deprecated"]
5753
5921
  },
5754
5922
  {
5755
5923
  id: "deprecated",
5924
+ status_category: "completed",
5756
5925
  label: "Deprecated",
5757
5926
  description: "The suite is no longer being run. It may be superseded by a newer suite or the tested functionality may have been removed.",
5758
5927
  transitions_to: []
@@ -5766,18 +5935,21 @@ var TEST_CASE_LIFECYCLE = {
5766
5935
  phases: [
5767
5936
  {
5768
5937
  id: "draft",
5938
+ status_category: "started",
5769
5939
  label: "Draft",
5770
5940
  description: "The test case is being written. Preconditions, steps, and expected results are being defined.",
5771
5941
  transitions_to: ["active"]
5772
5942
  },
5773
5943
  {
5774
5944
  id: "active",
5945
+ status_category: "started",
5775
5946
  label: "Active",
5776
5947
  description: "The test case is included in one or more test suites and is being executed.",
5777
5948
  transitions_to: ["deprecated"]
5778
5949
  },
5779
5950
  {
5780
5951
  id: "deprecated",
5952
+ status_category: "completed",
5781
5953
  label: "Deprecated",
5782
5954
  description: "The test case is no longer executed. The feature it covered may have changed or been removed.",
5783
5955
  transitions_to: []
@@ -5789,10 +5961,10 @@ var INSIGHT_LIFECYCLE = {
5789
5961
  initial_phase: "proposed",
5790
5962
  terminal_phases: ["applied", "retired"],
5791
5963
  phases: [
5792
- { id: "proposed", label: "Proposed", description: "A pattern has been synthesised from observations. Not yet cross-checked.", transitions_to: ["validated", "retired"] },
5793
- { id: "validated", label: "Validated", description: "The insight has been cross-checked against additional evidence. Believed reliable.", transitions_to: ["applied", "retired"] },
5794
- { id: "applied", label: "Applied", description: "The insight drove a product decision. Captured for the record.", transitions_to: ["retired"] },
5795
- { id: "retired", label: "Retired", description: "Superseded by newer insight, or no longer relevant. May reopen to proposed if revisited.", transitions_to: ["proposed"] }
5964
+ { id: "proposed", status_category: "triage", label: "Proposed", description: "A pattern has been synthesised from observations. Not yet cross-checked.", transitions_to: ["validated", "retired"] },
5965
+ { id: "validated", status_category: "started", label: "Validated", description: "The insight has been cross-checked against additional evidence. Believed reliable.", transitions_to: ["applied", "retired"] },
5966
+ { id: "applied", status_category: "completed", label: "Applied", description: "The insight drove a product decision. Captured for the record.", transitions_to: ["retired"] },
5967
+ { id: "retired", status_category: "completed", label: "Retired", description: "Superseded by newer insight, or no longer relevant. May reopen to proposed if revisited.", transitions_to: ["proposed"] }
5796
5968
  ]
5797
5969
  };
5798
5970
  var RESEARCH_QUESTION_LIFECYCLE = {
@@ -5800,10 +5972,10 @@ var RESEARCH_QUESTION_LIFECYCLE = {
5800
5972
  initial_phase: "open",
5801
5973
  terminal_phases: ["answered", "parked"],
5802
5974
  phases: [
5803
- { id: "open", label: "Open", description: "Question has been articulated. Research has not started.", transitions_to: ["researching", "parked"] },
5804
- { id: "researching", label: "Researching", description: "Active investigation. Methods are being run, evidence is being gathered.", transitions_to: ["answered", "parked"] },
5805
- { id: "answered", label: "Answered", description: "Question has been resolved. Findings captured in linked insights.", transitions_to: [] },
5806
- { id: "parked", label: "Parked", description: "Set aside due to capacity, priority, or dependency. May reopen to researching.", transitions_to: ["researching"] }
5975
+ { id: "open", status_category: "triage", label: "Open", description: "Question has been articulated. Research has not started.", transitions_to: ["researching", "parked"] },
5976
+ { id: "researching", status_category: "started", label: "Researching", description: "Active investigation. Methods are being run, evidence is being gathered.", transitions_to: ["answered", "parked"] },
5977
+ { id: "answered", status_category: "completed", label: "Answered", description: "Question has been resolved. Findings captured in linked insights.", transitions_to: [] },
5978
+ { id: "parked", status_category: "backlog", label: "Parked", description: "Set aside due to capacity, priority, or dependency. May reopen to researching.", transitions_to: ["researching"] }
5807
5979
  ]
5808
5980
  };
5809
5981
  var INTERVIEW_GUIDE_LIFECYCLE = {
@@ -5811,10 +5983,10 @@ var INTERVIEW_GUIDE_LIFECYCLE = {
5811
5983
  initial_phase: "drafting",
5812
5984
  terminal_phases: ["archived"],
5813
5985
  phases: [
5814
- { id: "drafting", label: "Drafting", description: "Guide is being authored or revised. Not yet ready for use.", transitions_to: ["ready"] },
5815
- { id: "ready", label: "Ready", description: "Guide is approved for use. May be picked up by a study.", transitions_to: ["in_use", "drafting"] },
5816
- { id: "in_use", label: "In Use", description: "Currently being run in one or more research_study entities.", transitions_to: ["ready", "archived"] },
5817
- { id: "archived", label: "Archived", description: "Retired from active use. May reopen to drafting if revived.", transitions_to: ["drafting"] }
5986
+ { id: "drafting", status_category: "started", label: "Drafting", description: "Guide is being authored or revised. Not yet ready for use.", transitions_to: ["ready"] },
5987
+ { id: "ready", status_category: "unstarted", label: "Ready", description: "Guide is approved for use. May be picked up by a study.", transitions_to: ["in_use", "drafting"] },
5988
+ { id: "in_use", status_category: "started", label: "In Use", description: "Currently being run in one or more research_study entities.", transitions_to: ["ready", "archived"] },
5989
+ { id: "archived", status_category: "completed", label: "Archived", description: "Retired from active use. May reopen to drafting if revived.", transitions_to: ["drafting"] }
5818
5990
  ]
5819
5991
  };
5820
5992
  var TEST_PLAN_LIFECYCLE = {
@@ -5822,10 +5994,10 @@ var TEST_PLAN_LIFECYCLE = {
5822
5994
  initial_phase: "drafted",
5823
5995
  terminal_phases: ["completed", "cancelled"],
5824
5996
  phases: [
5825
- { id: "drafted", label: "Drafted", description: "Plan has been authored. Not yet started.", transitions_to: ["executing", "cancelled"] },
5826
- { id: "executing", label: "Executing", description: "Tests are running according to the plan.", transitions_to: ["completed", "cancelled"] },
5827
- { id: "completed", label: "Completed", description: "All tests in the plan have run. Outcomes captured in linked test_result entities.", transitions_to: ["executing"] },
5828
- { id: "cancelled", label: "Cancelled", description: "Plan was abandoned mid-flight: assumption changed, priorities shifted, or the underlying code went away.", transitions_to: [] }
5997
+ { id: "drafted", status_category: "unstarted", label: "Drafted", description: "Plan has been authored. Not yet started.", transitions_to: ["executing", "cancelled"] },
5998
+ { id: "executing", status_category: "started", label: "Executing", description: "Tests are running according to the plan.", transitions_to: ["completed", "cancelled"] },
5999
+ { id: "completed", status_category: "completed", label: "Completed", description: "All tests in the plan have run. Outcomes captured in linked test_result entities.", transitions_to: ["executing"] },
6000
+ { id: "cancelled", status_category: "cancelled", label: "Cancelled", description: "Plan was abandoned mid-flight: assumption changed, priorities shifted, or the underlying code went away.", transitions_to: [] }
5829
6001
  ]
5830
6002
  };
5831
6003
  var AI_DATASET_LIFECYCLE = {
@@ -5833,10 +6005,10 @@ var AI_DATASET_LIFECYCLE = {
5833
6005
  initial_phase: "collecting",
5834
6006
  terminal_phases: ["versioned", "archived"],
5835
6007
  phases: [
5836
- { id: "collecting", label: "Collecting", description: "Examples are being gathered. Schema and labelling rules may still be in flux.", transitions_to: ["curated", "archived"] },
5837
- { id: "curated", label: "Curated", description: "Examples have been cleaned, deduped, and labelled. Ready for versioning.", transitions_to: ["versioned", "collecting"] },
5838
- { id: "versioned", label: "Versioned", description: "A specific cut has been pinned and is citable. New collection continues in a successor version.", transitions_to: ["archived"] },
5839
- { id: "archived", label: "Archived", description: "No longer in active use. May reopen to collecting if revived.", transitions_to: ["collecting"] }
6008
+ { id: "collecting", status_category: "started", label: "Collecting", description: "Examples are being gathered. Schema and labelling rules may still be in flux.", transitions_to: ["curated", "archived"] },
6009
+ { id: "curated", status_category: "started", label: "Curated", description: "Examples have been cleaned, deduped, and labelled. Ready for versioning.", transitions_to: ["versioned", "collecting"] },
6010
+ { id: "versioned", status_category: "completed", label: "Versioned", description: "A specific cut has been pinned and is citable. New collection continues in a successor version.", transitions_to: ["archived"] },
6011
+ { id: "archived", status_category: "completed", label: "Archived", description: "No longer in active use. May reopen to collecting if revived.", transitions_to: ["collecting"] }
5840
6012
  ]
5841
6013
  };
5842
6014
  var AI_GUARDRAIL_LIFECYCLE = {
@@ -5844,10 +6016,10 @@ var AI_GUARDRAIL_LIFECYCLE = {
5844
6016
  initial_phase: "proposed",
5845
6017
  terminal_phases: ["active", "relaxed", "removed"],
5846
6018
  phases: [
5847
- { id: "proposed", label: "Proposed", description: "Guardrail has been suggested. Not yet enforced.", transitions_to: ["active", "removed"] },
5848
- { id: "active", label: "Active", description: "Guardrail is enforced as designed. Currently the steady state.", transitions_to: ["relaxed", "removed"] },
5849
- { id: "relaxed", label: "Relaxed", description: "Guardrail is enforced more loosely than originally specified. Captured separately because the looser form has different implications.", transitions_to: ["active", "removed"] },
5850
- { id: "removed", label: "Removed", description: "Guardrail is no longer enforced. May reopen to active if reinstated.", transitions_to: ["active"] }
6019
+ { id: "proposed", status_category: "triage", label: "Proposed", description: "Guardrail has been suggested. Not yet enforced.", transitions_to: ["active", "removed"] },
6020
+ { id: "active", status_category: "started", label: "Active", description: "Guardrail is enforced as designed. Currently the steady state.", transitions_to: ["relaxed", "removed"] },
6021
+ { id: "relaxed", status_category: "started", label: "Relaxed", description: "Guardrail is enforced more loosely than originally specified. Captured separately because the looser form has different implications.", transitions_to: ["active", "removed"] },
6022
+ { id: "removed", status_category: "cancelled", label: "Removed", description: "Guardrail is no longer enforced. May reopen to active if reinstated.", transitions_to: ["active"] }
5851
6023
  ]
5852
6024
  };
5853
6025
  var MODEL_COMPARISON_LIFECYCLE = {
@@ -5855,10 +6027,10 @@ var MODEL_COMPARISON_LIFECYCLE = {
5855
6027
  initial_phase: "planned",
5856
6028
  terminal_phases: ["published", "archived"],
5857
6029
  phases: [
5858
- { id: "planned", label: "Planned", description: "Comparison has been scoped: models, criteria, and methodology are agreed.", transitions_to: ["running", "archived"] },
5859
- { id: "running", label: "Running", description: "Models are being evaluated against the chosen criteria.", transitions_to: ["published", "archived"] },
5860
- { id: "published", label: "Published", description: "Results are written up and citable. Drives downstream model selection.", transitions_to: ["archived", "planned"] },
5861
- { id: "archived", label: "Archived", description: "Superseded by newer comparison. May reopen to planned if re-run.", transitions_to: ["planned"] }
6030
+ { id: "planned", status_category: "unstarted", label: "Planned", description: "Comparison has been scoped: models, criteria, and methodology are agreed.", transitions_to: ["running", "archived"] },
6031
+ { id: "running", status_category: "started", label: "Running", description: "Models are being evaluated against the chosen criteria.", transitions_to: ["published", "archived"] },
6032
+ { id: "published", status_category: "completed", label: "Published", description: "Results are written up and citable. Drives downstream model selection.", transitions_to: ["archived", "planned"] },
6033
+ { id: "archived", status_category: "completed", label: "Archived", description: "Superseded by newer comparison. May reopen to planned if re-run.", transitions_to: ["planned"] }
5862
6034
  ]
5863
6035
  };
5864
6036
  var PROMPT_VERSION_LIFECYCLE = {
@@ -5866,10 +6038,10 @@ var PROMPT_VERSION_LIFECYCLE = {
5866
6038
  initial_phase: "drafted",
5867
6039
  terminal_phases: ["active", "deprecated"],
5868
6040
  phases: [
5869
- { id: "drafted", label: "Drafted", description: "Prompt has been authored. Not yet evaluated.", transitions_to: ["testing", "deprecated"] },
5870
- { id: "testing", label: "Testing", description: "Running through eval benchmarks. Results inform whether to promote.", transitions_to: ["active", "drafted", "deprecated"] },
5871
- { id: "active", label: "Active", description: "In production use.", transitions_to: ["deprecated"] },
5872
- { id: "deprecated", label: "Deprecated", description: "Superseded by a successor version. Still available for backwards-compat. May reopen to testing if reinstated.", transitions_to: ["testing"] }
6041
+ { id: "drafted", status_category: "unstarted", label: "Drafted", description: "Prompt has been authored. Not yet evaluated.", transitions_to: ["testing", "deprecated"] },
6042
+ { id: "testing", status_category: "started", label: "Testing", description: "Running through eval benchmarks. Results inform whether to promote.", transitions_to: ["active", "drafted", "deprecated"] },
6043
+ { id: "active", status_category: "started", label: "Active", description: "In production use.", transitions_to: ["deprecated"] },
6044
+ { id: "deprecated", status_category: "completed", label: "Deprecated", description: "Superseded by a successor version. Still available for backwards-compat. May reopen to testing if reinstated.", transitions_to: ["testing"] }
5873
6045
  ]
5874
6046
  };
5875
6047
  var EVAL_BENCHMARK_LIFECYCLE = {
@@ -5877,10 +6049,10 @@ var EVAL_BENCHMARK_LIFECYCLE = {
5877
6049
  initial_phase: "drafted",
5878
6050
  terminal_phases: ["published", "deprecated"],
5879
6051
  phases: [
5880
- { id: "drafted", label: "Drafted", description: "Benchmark questions and scoring rubric are being designed.", transitions_to: ["running", "deprecated"] },
5881
- { id: "running", label: "Running", description: "Benchmark is being executed against models or prompt versions.", transitions_to: ["published", "deprecated"] },
5882
- { id: "published", label: "Published", description: "Results are citable. Benchmark is part of the standard eval rotation.", transitions_to: ["deprecated", "running"] },
5883
- { id: "deprecated", label: "Deprecated", description: "Benchmark no longer reflects what the team measures. May reopen to drafted if revisited.", transitions_to: ["drafted"] }
6052
+ { id: "drafted", status_category: "unstarted", label: "Drafted", description: "Benchmark questions and scoring rubric are being designed.", transitions_to: ["running", "deprecated"] },
6053
+ { id: "running", status_category: "started", label: "Running", description: "Benchmark is being executed against models or prompt versions.", transitions_to: ["published", "deprecated"] },
6054
+ { id: "published", status_category: "completed", label: "Published", description: "Results are citable. Benchmark is part of the standard eval rotation.", transitions_to: ["deprecated", "running"] },
6055
+ { id: "deprecated", status_category: "completed", label: "Deprecated", description: "Benchmark no longer reflects what the team measures. May reopen to drafted if revisited.", transitions_to: ["drafted"] }
5884
6056
  ]
5885
6057
  };
5886
6058
  var BUSINESS_MODEL_LIFECYCLE = {
@@ -5888,11 +6060,11 @@ var BUSINESS_MODEL_LIFECYCLE = {
5888
6060
  initial_phase: "drafted",
5889
6061
  terminal_phases: ["validated", "invalidated", "pivoted"],
5890
6062
  phases: [
5891
- { id: "drafted", label: "Drafted", description: "Model has been articulated. Not yet tested in market.", transitions_to: ["testing", "invalidated"] },
5892
- { id: "testing", label: "Testing", description: "Model is being tested against real customers and revenue. Evidence is accumulating.", transitions_to: ["validated", "invalidated", "pivoted"] },
5893
- { id: "validated", label: "Validated", description: "Model holds up under real customer behaviour. Forms the operating basis.", transitions_to: ["testing", "pivoted"] },
5894
- { id: "invalidated", label: "Invalidated", description: "Model failed to hold up. May reopen to drafted for a new attempt.", transitions_to: ["drafted"] },
5895
- { id: "pivoted", label: "Pivoted", description: "Model became something structurally different. Captured as a milestone before the new model takes over.", transitions_to: [] }
6063
+ { id: "drafted", status_category: "unstarted", label: "Drafted", description: "Model has been articulated. Not yet tested in market.", transitions_to: ["testing", "invalidated"] },
6064
+ { id: "testing", status_category: "started", label: "Testing", description: "Model is being tested against real customers and revenue. Evidence is accumulating.", transitions_to: ["validated", "invalidated", "pivoted"] },
6065
+ { id: "validated", status_category: "completed", label: "Validated", description: "Model holds up under real customer behaviour. Forms the operating basis.", transitions_to: ["testing", "pivoted"] },
6066
+ { id: "invalidated", status_category: "completed", label: "Invalidated", description: "Model failed to hold up. May reopen to drafted for a new attempt.", transitions_to: ["drafted"] },
6067
+ { id: "pivoted", status_category: "cancelled", label: "Pivoted", description: "Model became something structurally different. Captured as a milestone before the new model takes over.", transitions_to: [] }
5896
6068
  ]
5897
6069
  };
5898
6070
  var REVENUE_STREAM_LIFECYCLE = {
@@ -5900,10 +6072,10 @@ var REVENUE_STREAM_LIFECYCLE = {
5900
6072
  initial_phase: "proposed",
5901
6073
  terminal_phases: ["live", "sunset"],
5902
6074
  phases: [
5903
- { id: "proposed", label: "Proposed", description: "Stream has been hypothesised. Not yet built or sold.", transitions_to: ["piloting", "sunset"] },
5904
- { id: "piloting", label: "Piloting", description: "Stream is being trialled with a limited audience. Pricing and packaging may still be in flux.", transitions_to: ["live", "sunset"] },
5905
- { id: "live", label: "Live", description: "Stream is generally available and generating revenue.", transitions_to: ["sunset"] },
5906
- { id: "sunset", label: "Sunset", description: "Stream is being wound down. May reopen to piloting if revived.", transitions_to: ["piloting"] }
6075
+ { id: "proposed", status_category: "triage", label: "Proposed", description: "Stream has been hypothesised. Not yet built or sold.", transitions_to: ["piloting", "sunset"] },
6076
+ { id: "piloting", status_category: "started", label: "Piloting", description: "Stream is being trialled with a limited audience. Pricing and packaging may still be in flux.", transitions_to: ["live", "sunset"] },
6077
+ { id: "live", status_category: "started", label: "Live", description: "Stream is generally available and generating revenue.", transitions_to: ["sunset"] },
6078
+ { id: "sunset", status_category: "completed", label: "Sunset", description: "Stream is being wound down. May reopen to piloting if revived.", transitions_to: ["piloting"] }
5907
6079
  ]
5908
6080
  };
5909
6081
  var CUSTOMER_HEALTH_SCORE_LIFECYCLE = {
@@ -5911,11 +6083,11 @@ var CUSTOMER_HEALTH_SCORE_LIFECYCLE = {
5911
6083
  initial_phase: "monitoring",
5912
6084
  terminal_phases: ["recovered", "churned"],
5913
6085
  phases: [
5914
- { id: "monitoring", label: "Monitoring", description: "Customer is healthy. Score is being tracked passively.", transitions_to: ["at_risk", "churned", "recovered"] },
5915
- { id: "at_risk", label: "At Risk", description: "Signals indicate trouble. Customer Success has flagged the account for attention.", transitions_to: ["monitoring", "critical", "churned", "recovered"] },
5916
- { id: "critical", label: "Critical", description: "Customer is on the verge of churning. Active intervention is underway.", transitions_to: ["at_risk", "recovered", "churned"] },
5917
- { id: "recovered", label: "Recovered", description: "Customer health has returned to monitoring. Captured as a milestone. May reopen to monitoring naturally.", transitions_to: ["monitoring"] },
5918
- { id: "churned", label: "Churned", description: "Customer left. Captured for analysis; reopen would mean a new customer relationship.", transitions_to: [] }
6086
+ { id: "monitoring", status_category: "started", label: "Monitoring", description: "Customer is healthy. Score is being tracked passively.", transitions_to: ["at_risk", "churned", "recovered"] },
6087
+ { id: "at_risk", status_category: "started", label: "At Risk", description: "Signals indicate trouble. Customer Success has flagged the account for attention.", transitions_to: ["monitoring", "critical", "churned", "recovered"] },
6088
+ { id: "critical", status_category: "started", label: "Critical", description: "Customer is on the verge of churning. Active intervention is underway.", transitions_to: ["at_risk", "recovered", "churned"] },
6089
+ { id: "recovered", status_category: "completed", label: "Recovered", description: "Customer health has returned to monitoring. Captured as a milestone. May reopen to monitoring naturally.", transitions_to: ["monitoring"] },
6090
+ { id: "churned", status_category: "cancelled", label: "Churned", description: "Customer left. Captured for analysis; reopen would mean a new customer relationship.", transitions_to: [] }
5919
6091
  ]
5920
6092
  };
5921
6093
  var PLAYBOOK_LIFECYCLE = {
@@ -5923,10 +6095,10 @@ var PLAYBOOK_LIFECYCLE = {
5923
6095
  initial_phase: "drafted",
5924
6096
  terminal_phases: ["live", "retired"],
5925
6097
  phases: [
5926
- { id: "drafted", label: "Drafted", description: "Playbook is being authored. Not yet tested with customers.", transitions_to: ["tested", "retired"] },
5927
- { id: "tested", label: "Tested", description: "Playbook has been run through pilot customers. Adjustments may follow.", transitions_to: ["live", "drafted"] },
5928
- { id: "live", label: "Live", description: "Playbook is in active use across the customer success team.", transitions_to: ["retired", "tested"] },
5929
- { id: "retired", label: "Retired", description: "Playbook no longer in use. May reopen to drafted if revived.", transitions_to: ["drafted"] }
6098
+ { id: "drafted", status_category: "unstarted", label: "Drafted", description: "Playbook is being authored. Not yet tested with customers.", transitions_to: ["tested", "retired"] },
6099
+ { id: "tested", status_category: "started", label: "Tested", description: "Playbook has been run through pilot customers. Adjustments may follow.", transitions_to: ["live", "drafted"] },
6100
+ { id: "live", status_category: "started", label: "Live", description: "Playbook is in active use across the customer success team.", transitions_to: ["retired", "tested"] },
6101
+ { id: "retired", status_category: "completed", label: "Retired", description: "Playbook no longer in use. May reopen to drafted if revived.", transitions_to: ["drafted"] }
5930
6102
  ]
5931
6103
  };
5932
6104
  var TEAM_OKR_LIFECYCLE = {
@@ -5934,11 +6106,11 @@ var TEAM_OKR_LIFECYCLE = {
5934
6106
  initial_phase: "drafted",
5935
6107
  terminal_phases: ["completed", "missed"],
5936
6108
  phases: [
5937
- { id: "drafted", label: "Drafted", description: "OKR is being authored. Not yet committed to.", transitions_to: ["committed"] },
5938
- { id: "committed", label: "Committed", description: "Team has agreed to pursue the OKR. Cycle has not yet started.", transitions_to: ["in_progress", "drafted"] },
5939
- { id: "in_progress", label: "In Progress", description: "Cycle is underway. Progress is being tracked.", transitions_to: ["completed", "missed"] },
5940
- { id: "completed", label: "Completed", description: "OKR was achieved within the cycle.", transitions_to: [] },
5941
- { id: "missed", label: "Missed", description: "OKR was not achieved. May reopen to in_progress if carried forward.", transitions_to: ["in_progress"] }
6109
+ { id: "drafted", status_category: "unstarted", label: "Drafted", description: "OKR is being authored. Not yet committed to.", transitions_to: ["committed"] },
6110
+ { id: "committed", status_category: "unstarted", label: "Committed", description: "Team has agreed to pursue the OKR. Cycle has not yet started.", transitions_to: ["in_progress", "drafted"] },
6111
+ { id: "in_progress", status_category: "started", label: "In Progress", description: "Cycle is underway. Progress is being tracked.", transitions_to: ["completed", "missed"] },
6112
+ { id: "completed", status_category: "completed", label: "Completed", description: "OKR was achieved within the cycle.", transitions_to: [] },
6113
+ { id: "missed", status_category: "completed", label: "Missed", description: "OKR was not achieved. May reopen to in_progress if carried forward.", transitions_to: ["in_progress"] }
5942
6114
  ]
5943
6115
  };
5944
6116
  var RETROSPECTIVE_LIFECYCLE = {
@@ -5946,10 +6118,10 @@ var RETROSPECTIVE_LIFECYCLE = {
5946
6118
  initial_phase: "scheduled",
5947
6119
  terminal_phases: ["completed", "actions_tracked"],
5948
6120
  phases: [
5949
- { id: "scheduled", label: "Scheduled", description: "Retro is on the calendar. Not yet held.", transitions_to: ["in_progress", "completed"] },
5950
- { id: "in_progress", label: "In Progress", description: "Retro is being held.", transitions_to: ["completed"] },
5951
- { id: "completed", label: "Completed", description: "Meeting is done. Action items captured but not yet tracked to closure.", transitions_to: ["actions_tracked"] },
5952
- { id: "actions_tracked", label: "Actions Tracked", description: "Retro action items have been completed or explicitly dropped. Full loop closed.", transitions_to: [] }
6121
+ { id: "scheduled", status_category: "unstarted", label: "Scheduled", description: "Retro is on the calendar. Not yet held.", transitions_to: ["in_progress", "completed"] },
6122
+ { id: "in_progress", status_category: "started", label: "In Progress", description: "Retro is being held.", transitions_to: ["completed"] },
6123
+ { id: "completed", status_category: "completed", label: "Completed", description: "Meeting is done. Action items captured but not yet tracked to closure.", transitions_to: ["actions_tracked"] },
6124
+ { id: "actions_tracked", status_category: "completed", label: "Actions Tracked", description: "Retro action items have been completed or explicitly dropped. Full loop closed.", transitions_to: [] }
5953
6125
  ]
5954
6126
  };
5955
6127
  var DEPENDENCY_LIFECYCLE = {
@@ -5957,10 +6129,10 @@ var DEPENDENCY_LIFECYCLE = {
5957
6129
  initial_phase: "identified",
5958
6130
  terminal_phases: ["resolved"],
5959
6131
  phases: [
5960
- { id: "identified", label: "Identified", description: "Dependency has been named. Not yet evaluated for impact.", transitions_to: ["blocked", "in_progress", "resolved"] },
5961
- { id: "blocked", label: "Blocked", description: "Dependency is currently blocking work. Awaiting upstream action.", transitions_to: ["in_progress", "resolved"] },
5962
- { id: "in_progress", label: "In Progress", description: "Active work is happening to resolve the dependency.", transitions_to: ["blocked", "resolved"] },
5963
- { id: "resolved", label: "Resolved", description: "Dependency is no longer blocking. May reopen to blocked if regression.", transitions_to: ["blocked"] }
6132
+ { id: "identified", status_category: "triage", label: "Identified", description: "Dependency has been named. Not yet evaluated for impact.", transitions_to: ["blocked", "in_progress", "resolved"] },
6133
+ { id: "blocked", status_category: "started", label: "Blocked", description: "Dependency is currently blocking work. Awaiting upstream action.", transitions_to: ["in_progress", "resolved"] },
6134
+ { id: "in_progress", status_category: "started", label: "In Progress", description: "Active work is happening to resolve the dependency.", transitions_to: ["blocked", "resolved"] },
6135
+ { id: "resolved", status_category: "completed", label: "Resolved", description: "Dependency is no longer blocking. May reopen to blocked if regression.", transitions_to: ["blocked"] }
5964
6136
  ]
5965
6137
  };
5966
6138
  var ROLE_LIFECYCLE = {
@@ -5968,10 +6140,10 @@ var ROLE_LIFECYCLE = {
5968
6140
  initial_phase: "proposed",
5969
6141
  terminal_phases: ["filled", "vacant"],
5970
6142
  phases: [
5971
- { id: "proposed", label: "Proposed", description: "Role has been described but not yet posted or staffed.", transitions_to: ["open", "vacant"] },
5972
- { id: "open", label: "Open", description: "Role is actively being recruited for.", transitions_to: ["filled", "vacant"] },
5973
- { id: "filled", label: "Filled", description: "Role is staffed. May reopen to open if the position becomes vacant again.", transitions_to: ["vacant"] },
5974
- { id: "vacant", label: "Vacant", description: "Role exists but is unfilled. May reopen to open to start recruiting.", transitions_to: ["open"] }
6143
+ { id: "proposed", status_category: "triage", label: "Proposed", description: "Role has been described but not yet posted or staffed.", transitions_to: ["open", "vacant"] },
6144
+ { id: "open", status_category: "started", label: "Open", description: "Role is actively being recruited for.", transitions_to: ["filled", "vacant"] },
6145
+ { id: "filled", status_category: "completed", label: "Filled", description: "Role is staffed. May reopen to open if the position becomes vacant again.", transitions_to: ["vacant"] },
6146
+ { id: "vacant", status_category: "backlog", label: "Vacant", description: "Role exists but is unfilled. May reopen to open to start recruiting.", transitions_to: ["open"] }
5975
6147
  ]
5976
6148
  };
5977
6149
  var CAPACITY_PLAN_LIFECYCLE = {
@@ -5979,11 +6151,11 @@ var CAPACITY_PLAN_LIFECYCLE = {
5979
6151
  initial_phase: "drafted",
5980
6152
  terminal_phases: ["completed", "revised"],
5981
6153
  phases: [
5982
- { id: "drafted", label: "Drafted", description: "Plan is being authored. Not yet agreed.", transitions_to: ["committed", "revised"] },
5983
- { id: "committed", label: "Committed", description: "Plan has been agreed by stakeholders. Cycle has not yet started.", transitions_to: ["in_flight", "revised"] },
5984
- { id: "in_flight", label: "In Flight", description: "Cycle is underway. Capacity is being consumed.", transitions_to: ["completed", "revised"] },
5985
- { id: "completed", label: "Completed", description: "Cycle is done. Plan executed as agreed.", transitions_to: [] },
5986
- { id: "revised", label: "Revised", description: "Plan was changed mid-flight. May reopen to drafted for the next iteration.", transitions_to: ["drafted"] }
6154
+ { id: "drafted", status_category: "unstarted", label: "Drafted", description: "Plan is being authored. Not yet agreed.", transitions_to: ["committed", "revised"] },
6155
+ { id: "committed", status_category: "unstarted", label: "Committed", description: "Plan has been agreed by stakeholders. Cycle has not yet started.", transitions_to: ["in_flight", "revised"] },
6156
+ { id: "in_flight", status_category: "started", label: "In Flight", description: "Cycle is underway. Capacity is being consumed.", transitions_to: ["completed", "revised"] },
6157
+ { id: "completed", status_category: "completed", label: "Completed", description: "Cycle is done. Plan executed as agreed.", transitions_to: [] },
6158
+ { id: "revised", status_category: "completed", label: "Revised", description: "Plan was changed mid-flight. May reopen to drafted for the next iteration.", transitions_to: ["drafted"] }
5987
6159
  ]
5988
6160
  };
5989
6161
  var VARIANT_LIFECYCLE = {
@@ -5991,11 +6163,11 @@ var VARIANT_LIFECYCLE = {
5991
6163
  initial_phase: "proposed",
5992
6164
  terminal_phases: ["winning", "losing", "retired"],
5993
6165
  phases: [
5994
- { id: "proposed", label: "Proposed", description: "Variant has been designed. Not yet running.", transitions_to: ["live", "retired"] },
5995
- { id: "live", label: "Live", description: "Variant is being shown to users as part of an active test.", transitions_to: ["winning", "losing", "retired"] },
5996
- { id: "winning", label: "Winning", description: "Variant beat the control. Captured for the record before rollout.", transitions_to: ["retired"] },
5997
- { id: "losing", label: "Losing", description: "Variant did not beat the control. Captured for the record.", transitions_to: ["retired"] },
5998
- { id: "retired", label: "Retired", description: "Variant is no longer running. May reopen to proposed if revisited in a future test.", transitions_to: ["proposed"] }
6166
+ { id: "proposed", status_category: "triage", label: "Proposed", description: "Variant has been designed. Not yet running.", transitions_to: ["live", "retired"] },
6167
+ { id: "live", status_category: "started", label: "Live", description: "Variant is being shown to users as part of an active test.", transitions_to: ["winning", "losing", "retired"] },
6168
+ { id: "winning", status_category: "completed", label: "Winning", description: "Variant beat the control. Captured for the record before rollout.", transitions_to: ["retired"] },
6169
+ { id: "losing", status_category: "completed", label: "Losing", description: "Variant did not beat the control. Captured for the record.", transitions_to: ["retired"] },
6170
+ { id: "retired", status_category: "completed", label: "Retired", description: "Variant is no longer running. May reopen to proposed if revisited in a future test.", transitions_to: ["proposed"] }
5999
6171
  ]
6000
6172
  };
6001
6173
  var GROWTH_CAMPAIGN_LIFECYCLE = {
@@ -6003,11 +6175,11 @@ var GROWTH_CAMPAIGN_LIFECYCLE = {
6003
6175
  initial_phase: "drafted",
6004
6176
  terminal_phases: ["completed", "paused"],
6005
6177
  phases: [
6006
- { id: "drafted", label: "Drafted", description: "Campaign concept exists. Not yet planned for launch.", transitions_to: ["planning", "paused"] },
6007
- { id: "planning", label: "Planning", description: "Campaign creative, channels, and timing are being finalised.", transitions_to: ["live", "paused"] },
6008
- { id: "live", label: "Live", description: "Campaign is running across channels.", transitions_to: ["completed", "paused"] },
6009
- { id: "completed", label: "Completed", description: "Campaign ran to completion. Outcomes captured.", transitions_to: [] },
6010
- { id: "paused", label: "Paused", description: "Campaign was halted before completion. May reopen to live if resumed.", transitions_to: ["live"] }
6178
+ { id: "drafted", status_category: "unstarted", label: "Drafted", description: "Campaign concept exists. Not yet planned for launch.", transitions_to: ["planning", "paused"] },
6179
+ { id: "planning", status_category: "unstarted", label: "Planning", description: "Campaign creative, channels, and timing are being finalised.", transitions_to: ["live", "paused"] },
6180
+ { id: "live", status_category: "started", label: "Live", description: "Campaign is running across channels.", transitions_to: ["completed", "paused"] },
6181
+ { id: "completed", status_category: "completed", label: "Completed", description: "Campaign ran to completion. Outcomes captured.", transitions_to: [] },
6182
+ { id: "paused", status_category: "backlog", label: "Paused", description: "Campaign was halted before completion. May reopen to live if resumed.", transitions_to: ["live"] }
6011
6183
  ]
6012
6184
  };
6013
6185
  function fromTemplate(entityType, template) {
@@ -6018,10 +6190,10 @@ var PUBLISHING_TEMPLATE = {
6018
6190
  initial_phase: "draft",
6019
6191
  terminal_phases: ["archived"],
6020
6192
  phases: [
6021
- { id: "draft", label: "Draft", description: "Being authored or revised. Not visible externally.", transitions_to: ["review"] },
6022
- { id: "review", label: "In Review", description: "Under editorial or stakeholder review before publishing.", transitions_to: ["draft", "published"] },
6023
- { id: "published", label: "Published", description: "Live and visible to the intended audience.", transitions_to: ["archived", "draft"] },
6024
- { id: "archived", label: "Archived", description: "No longer current. Retained for historical reference.", transitions_to: ["draft"] }
6193
+ { id: "draft", status_category: "started", label: "Draft", description: "Being authored or revised. Not visible externally.", transitions_to: ["review"] },
6194
+ { id: "review", status_category: "started", label: "In Review", description: "Under editorial or stakeholder review before publishing.", transitions_to: ["draft", "published"] },
6195
+ { id: "published", status_category: "completed", label: "Published", description: "Live and visible to the intended audience.", transitions_to: ["archived", "draft"] },
6196
+ { id: "archived", status_category: "completed", label: "Archived", description: "No longer current. Retained for historical reference.", transitions_to: ["draft"] }
6025
6197
  ]
6026
6198
  };
6027
6199
  var OPERATIONAL_TEMPLATE = {
@@ -6029,11 +6201,11 @@ var OPERATIONAL_TEMPLATE = {
6029
6201
  initial_phase: "planning",
6030
6202
  terminal_phases: ["completed", "sunset"],
6031
6203
  phases: [
6032
- { id: "planning", label: "Planning", description: "Being designed or scoped. Not yet started.", transitions_to: ["active"] },
6033
- { id: "active", label: "Active", description: "Currently running or in operation.", transitions_to: ["paused", "completed", "sunset"] },
6034
- { id: "paused", label: "Paused", description: "Temporarily halted. Can be resumed.", transitions_to: ["active", "sunset"] },
6035
- { id: "completed", label: "Completed", description: "Finished successfully. Outcomes captured.", transitions_to: [] },
6036
- { id: "sunset", label: "Sunset", description: "Winding down or discontinued.", transitions_to: [] }
6204
+ { id: "planning", status_category: "unstarted", label: "Planning", description: "Being designed or scoped. Not yet started.", transitions_to: ["active"] },
6205
+ { id: "active", status_category: "started", label: "Active", description: "Currently running or in operation.", transitions_to: ["paused", "completed", "sunset"] },
6206
+ { id: "paused", status_category: "backlog", label: "Paused", description: "Temporarily halted. Can be resumed.", transitions_to: ["active", "sunset"] },
6207
+ { id: "completed", status_category: "completed", label: "Completed", description: "Finished successfully. Outcomes captured.", transitions_to: [] },
6208
+ { id: "sunset", status_category: "completed", label: "Sunset", description: "Winding down or discontinued.", transitions_to: [] }
6037
6209
  ]
6038
6210
  };
6039
6211
  var APPROVAL_TEMPLATE = {
@@ -6045,22 +6217,23 @@ var APPROVAL_TEMPLATE = {
6045
6217
  // UPGLifecycle.terminal_phases contract.
6046
6218
  terminal_phases: ["approved", "rejected", "deprecated"],
6047
6219
  phases: [
6048
- { id: "proposed", label: "Proposed", description: "Submitted for consideration. Awaiting review.", transitions_to: ["reviewing"] },
6049
- { id: "reviewing", label: "Reviewing", description: "Under active review by approvers.", transitions_to: ["approved", "rejected", "proposed"] },
6050
- { id: "approved", label: "Approved", description: "Accepted and ready for implementation.", transitions_to: ["deprecated"] },
6051
- { id: "rejected", label: "Rejected", description: "Not accepted. Reasons should be documented.", transitions_to: ["proposed"] },
6052
- { id: "deprecated", label: "Deprecated", description: "Previously approved but no longer current.", transitions_to: [] }
6220
+ { id: "proposed", status_category: "triage", label: "Proposed", description: "Submitted for consideration. Awaiting review.", transitions_to: ["reviewing"] },
6221
+ { id: "reviewing", status_category: "started", label: "Reviewing", description: "Under active review by approvers.", transitions_to: ["approved", "rejected", "proposed"] },
6222
+ { id: "approved", status_category: "completed", label: "Approved", description: "Accepted and ready for implementation.", transitions_to: ["deprecated"] },
6223
+ { id: "rejected", status_category: "cancelled", label: "Rejected", description: "Not accepted. Reasons should be documented.", transitions_to: ["proposed"] },
6224
+ { id: "deprecated", status_category: "completed", label: "Deprecated", description: "Previously approved but no longer current.", transitions_to: [] }
6053
6225
  ]
6054
6226
  };
6055
6227
  var WORK_ITEM_TEMPLATE = {
6056
6228
  template_id: "WORK_ITEM",
6057
6229
  initial_phase: "todo",
6058
- terminal_phases: ["done"],
6230
+ terminal_phases: ["done", "cancelled"],
6059
6231
  phases: [
6060
- { id: "todo", label: "To Do", description: "Identified but not yet started.", transitions_to: ["in_progress"] },
6061
- { id: "in_progress", label: "In Progress", description: "Actively being worked on.", transitions_to: ["in_review", "todo"] },
6062
- { id: "in_review", label: "In Review", description: "Work completed, awaiting review or acceptance.", transitions_to: ["done", "in_progress"] },
6063
- { id: "done", label: "Done", description: "Completed and accepted.", transitions_to: [] }
6232
+ { id: "todo", status_category: "unstarted", label: "To Do", description: "Identified but not yet started.", transitions_to: ["in_progress", "cancelled"] },
6233
+ { id: "in_progress", status_category: "started", label: "In Progress", description: "Actively being worked on.", transitions_to: ["in_review", "todo", "cancelled"] },
6234
+ { id: "in_review", status_category: "started", label: "In Review", description: "Work completed, awaiting review or acceptance.", transitions_to: ["done", "in_progress", "cancelled"] },
6235
+ { id: "done", status_category: "completed", label: "Done", description: "Completed and accepted.", transitions_to: [] },
6236
+ { id: "cancelled", status_category: "cancelled", label: "Cancelled", description: "Deliberately closed without completion: won't-do, duplicate, or obsolete. May reopen to `todo` if circumstances change.", transitions_to: ["todo"] }
6064
6237
  ]
6065
6238
  };
6066
6239
  var DISCOVERY_TEMPLATE = {
@@ -6068,10 +6241,10 @@ var DISCOVERY_TEMPLATE = {
6068
6241
  initial_phase: "open",
6069
6242
  terminal_phases: ["resolved", "parked"],
6070
6243
  phases: [
6071
- { id: "open", label: "Open", description: "Identified as worth exploring. No work started yet.", transitions_to: ["exploring"] },
6072
- { id: "exploring", label: "Exploring", description: "Actively being investigated or researched.", transitions_to: ["resolved", "parked", "open"] },
6073
- { id: "resolved", label: "Resolved", description: "Answered or addressed. Findings captured.", transitions_to: [] },
6074
- { id: "parked", label: "Parked", description: "Set aside for now. May revisit later.", transitions_to: ["open"] }
6244
+ { id: "open", status_category: "triage", label: "Open", description: "Identified as worth exploring. No work started yet.", transitions_to: ["exploring"] },
6245
+ { id: "exploring", status_category: "started", label: "Exploring", description: "Actively being investigated or researched.", transitions_to: ["resolved", "parked", "open"] },
6246
+ { id: "resolved", status_category: "completed", label: "Resolved", description: "Answered or addressed. Findings captured.", transitions_to: [] },
6247
+ { id: "parked", status_category: "backlog", label: "Parked", description: "Set aside for now. May revisit later.", transitions_to: ["open"] }
6075
6248
  ]
6076
6249
  };
6077
6250
  var MATURITY_TEMPLATE = {
@@ -6079,10 +6252,10 @@ var MATURITY_TEMPLATE = {
6079
6252
  initial_phase: "alpha",
6080
6253
  terminal_phases: ["deprecated"],
6081
6254
  phases: [
6082
- { id: "alpha", label: "Alpha", description: "Early stage, internal use only. Expect breaking changes.", transitions_to: ["beta"] },
6083
- { id: "beta", label: "Beta", description: "Feature complete but may have rough edges. Limited external use.", transitions_to: ["ga", "alpha"] },
6084
- { id: "ga", label: "Generally Available", description: "Stable, production-ready. Widely available.", transitions_to: ["deprecated"] },
6085
- { id: "deprecated", label: "Deprecated", description: "Scheduled for removal. Migration path should be documented.", transitions_to: [] }
6255
+ { id: "alpha", status_category: "started", label: "Alpha", description: "Early stage, internal use only. Expect breaking changes.", transitions_to: ["beta"] },
6256
+ { id: "beta", status_category: "started", label: "Beta", description: "Feature complete but may have rough edges. Limited external use.", transitions_to: ["ga", "alpha"] },
6257
+ { id: "ga", status_category: "completed", label: "Generally Available", description: "Stable, production-ready. Widely available.", transitions_to: ["deprecated"] },
6258
+ { id: "deprecated", status_category: "completed", label: "Deprecated", description: "Scheduled for removal. Migration path should be documented.", transitions_to: [] }
6086
6259
  ]
6087
6260
  };
6088
6261
  var RISK_ITEM_TEMPLATE = {
@@ -6090,11 +6263,11 @@ var RISK_ITEM_TEMPLATE = {
6090
6263
  initial_phase: "identified",
6091
6264
  terminal_phases: ["mitigated", "accepted", "closed"],
6092
6265
  phases: [
6093
- { id: "identified", label: "Identified", description: "Risk has been recognised and named. Not yet assessed for likelihood or impact.", transitions_to: ["assessed"] },
6094
- { id: "assessed", label: "Assessed", description: "Likelihood and impact have been evaluated. Outcome is one of mitigated, accepted, or closed.", transitions_to: ["mitigated", "accepted", "closed"] },
6095
- { id: "mitigated", label: "Mitigated", description: "Action has been taken to reduce likelihood or impact. The risk is no longer active.", transitions_to: [] },
6096
- { id: "accepted", label: "Accepted", description: "Risk is acknowledged. Cost of mitigation outweighs exposure; the team chooses to live with it.", transitions_to: [] },
6097
- { id: "closed", label: "Closed", description: "Risk became irrelevant without action; underlying conditions changed. May reopen to `assessed` if conditions change again.", transitions_to: ["assessed"] }
6266
+ { id: "identified", status_category: "triage", label: "Identified", description: "Risk has been recognised and named. Not yet assessed for likelihood or impact.", transitions_to: ["assessed"] },
6267
+ { id: "assessed", status_category: "started", label: "Assessed", description: "Likelihood and impact have been evaluated. Outcome is one of mitigated, accepted, or closed.", transitions_to: ["mitigated", "accepted", "closed"] },
6268
+ { id: "mitigated", status_category: "completed", label: "Mitigated", description: "Action has been taken to reduce likelihood or impact. The risk is no longer active.", transitions_to: [] },
6269
+ { id: "accepted", status_category: "completed", label: "Accepted", description: "Risk is acknowledged. Cost of mitigation outweighs exposure; the team chooses to live with it.", transitions_to: [] },
6270
+ { id: "closed", status_category: "completed", label: "Closed", description: "Risk became irrelevant without action; underlying conditions changed. May reopen to `assessed` if conditions change again.", transitions_to: ["assessed"] }
6098
6271
  ]
6099
6272
  };
6100
6273
  var SALES_DEAL_TEMPLATE = {
@@ -6102,11 +6275,11 @@ var SALES_DEAL_TEMPLATE = {
6102
6275
  initial_phase: "qualified",
6103
6276
  terminal_phases: ["closed_won", "closed_lost"],
6104
6277
  phases: [
6105
- { id: "qualified", label: "Qualified", description: "Lead has been qualified: there's a real budget, need, and decision-maker. Not yet pitched.", transitions_to: ["proposal"] },
6106
- { id: "proposal", label: "Proposal", description: "A proposal has been delivered. Pricing and scope are on the table.", transitions_to: ["negotiation", "closed_lost"] },
6107
- { id: "negotiation", label: "Negotiation", description: "Terms are being finalised. Both sides are working toward agreement.", transitions_to: ["closed_won", "closed_lost"] },
6108
- { id: "closed_won", label: "Closed Won", description: "Deal signed. Customer is now active.", transitions_to: [] },
6109
- { 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: [] }
6278
+ { id: "qualified", status_category: "triage", label: "Qualified", description: "Lead has been qualified: there's a real budget, need, and decision-maker. Not yet pitched.", transitions_to: ["proposal"] },
6279
+ { id: "proposal", status_category: "started", label: "Proposal", description: "A proposal has been delivered. Pricing and scope are on the table.", transitions_to: ["negotiation", "closed_lost"] },
6280
+ { id: "negotiation", status_category: "started", label: "Negotiation", description: "Terms are being finalised. Both sides are working toward agreement.", transitions_to: ["closed_won", "closed_lost"] },
6281
+ { id: "closed_won", status_category: "completed", label: "Closed Won", description: "Deal signed. Customer is now active.", transitions_to: [] },
6282
+ { id: "closed_lost", status_category: "completed", label: "Closed Lost", description: "Deal did not close. A re-engaged prospect becomes a new `deal` rather than reviving this one.", transitions_to: [] }
6110
6283
  ]
6111
6284
  };
6112
6285
  var VALIDATION_TEMPLATE = {
@@ -6114,11 +6287,11 @@ var VALIDATION_TEMPLATE = {
6114
6287
  initial_phase: "untested",
6115
6288
  terminal_phases: ["validated", "invalidated", "archived"],
6116
6289
  phases: [
6117
- { id: "untested", label: "Untested", description: "Articulated but not yet examined against evidence.", transitions_to: ["testing"] },
6118
- { id: "testing", label: "Testing", description: "Actively gathering evidence for or against the claim.", transitions_to: ["validated", "invalidated"] },
6119
- { id: "validated", label: "Validated", description: "Evidence supports the claim. Treated as true until contradicted.", transitions_to: ["archived"] },
6120
- { id: "invalidated", label: "Invalidated", description: "Evidence contradicts the claim. May re-test if new evidence appears.", transitions_to: ["archived", "testing"] },
6121
- { id: "archived", label: "Archived", description: "Settled and retained for provenance. No longer active.", transitions_to: [] }
6290
+ { id: "untested", status_category: "triage", label: "Untested", description: "Articulated but not yet examined against evidence.", transitions_to: ["testing"] },
6291
+ { id: "testing", status_category: "started", label: "Testing", description: "Actively gathering evidence for or against the claim.", transitions_to: ["validated", "invalidated"] },
6292
+ { id: "validated", status_category: "completed", label: "Validated", description: "Evidence supports the claim. Treated as true until contradicted.", transitions_to: ["archived"] },
6293
+ { id: "invalidated", status_category: "completed", label: "Invalidated", description: "Evidence contradicts the claim. May re-test if new evidence appears.", transitions_to: ["archived", "testing"] },
6294
+ { id: "archived", status_category: "completed", label: "Archived", description: "Settled and retained for provenance. No longer active.", transitions_to: [] }
6122
6295
  ]
6123
6296
  };
6124
6297
  var INCIDENT_TEMPLATE = {
@@ -6126,12 +6299,12 @@ var INCIDENT_TEMPLATE = {
6126
6299
  initial_phase: "open",
6127
6300
  terminal_phases: ["resolved", "closed", "wont_fix"],
6128
6301
  phases: [
6129
- { id: "open", label: "Open", description: "Surfaced and logged. Not yet triaged.", transitions_to: ["triaged"] },
6130
- { id: "triaged", label: "Triaged", description: "Assessed for severity and ownership. Routed for work or dispositioned.", transitions_to: ["in_progress", "resolved", "wont_fix"] },
6131
- { id: "in_progress", label: "In Progress", description: "Actively being worked toward a fix.", transitions_to: ["resolved", "wont_fix"] },
6132
- { id: "resolved", label: "Resolved", description: "Addressed and verified. May reopen to `triaged` on regression.", transitions_to: ["closed", "triaged"] },
6133
- { id: "closed", label: "Closed", description: "Administratively closed (duplicate, withdrawn, or no longer relevant).", transitions_to: [] },
6134
- { id: "wont_fix", label: "Won't Fix", description: "Triaged as not to be actioned. Reason should be documented.", transitions_to: [] }
6302
+ { id: "open", status_category: "triage", label: "Open", description: "Surfaced and logged. Not yet triaged.", transitions_to: ["triaged"] },
6303
+ { id: "triaged", status_category: "triage", label: "Triaged", description: "Assessed for severity and ownership. Routed for work or dispositioned.", transitions_to: ["in_progress", "resolved", "wont_fix"] },
6304
+ { id: "in_progress", status_category: "started", label: "In Progress", description: "Actively being worked toward a fix.", transitions_to: ["resolved", "wont_fix"] },
6305
+ { id: "resolved", status_category: "completed", label: "Resolved", description: "Addressed and verified. May reopen to `triaged` on regression.", transitions_to: ["closed", "triaged"] },
6306
+ { id: "closed", status_category: "cancelled", label: "Closed", description: "Administratively closed (duplicate, withdrawn, or no longer relevant).", transitions_to: [] },
6307
+ { id: "wont_fix", status_category: "cancelled", label: "Won't Fix", description: "Triaged as not to be actioned. Reason should be documented.", transitions_to: [] }
6135
6308
  ]
6136
6309
  };
6137
6310
  var STUDY_TEMPLATE = {
@@ -6139,11 +6312,11 @@ var STUDY_TEMPLATE = {
6139
6312
  initial_phase: "planned",
6140
6313
  terminal_phases: ["complete", "abandoned"],
6141
6314
  phases: [
6142
- { id: "planned", label: "Planned", description: "Scoped and scheduled. Not yet started.", transitions_to: ["running"] },
6143
- { id: "running", label: "Running", description: "Actively executing: collecting data or running the protocol.", transitions_to: ["analysing", "abandoned"] },
6144
- { id: "analysing", label: "Analysing", description: "Execution done; results are being analysed and written up.", transitions_to: ["complete", "abandoned"] },
6145
- { id: "complete", label: "Complete", description: "Analysed and concluded. Findings captured.", transitions_to: [] },
6146
- { id: "abandoned", label: "Abandoned", description: "Stopped before completion (killed, timed out, or superseded).", transitions_to: [] }
6315
+ { id: "planned", status_category: "unstarted", label: "Planned", description: "Scoped and scheduled. Not yet started.", transitions_to: ["running"] },
6316
+ { id: "running", status_category: "started", label: "Running", description: "Actively executing: collecting data or running the protocol.", transitions_to: ["analysing", "abandoned"] },
6317
+ { id: "analysing", status_category: "started", label: "Analysing", description: "Execution done; results are being analysed and written up.", transitions_to: ["complete", "abandoned"] },
6318
+ { id: "complete", status_category: "completed", label: "Complete", description: "Analysed and concluded. Findings captured.", transitions_to: [] },
6319
+ { id: "abandoned", status_category: "cancelled", label: "Abandoned", description: "Stopped before completion (killed, timed out, or superseded).", transitions_to: [] }
6147
6320
  ]
6148
6321
  };
6149
6322
  var TEMPLATE_LIFECYCLES = [
@@ -6305,18 +6478,21 @@ var FRAMEWORK_EXERCISE_LIFECYCLE = {
6305
6478
  phases: [
6306
6479
  {
6307
6480
  id: "draft",
6481
+ status_category: "started",
6308
6482
  label: "Draft",
6309
6483
  description: "The exercise has been created and entities pulled into scope, but the framework's inputs have not all been filled in yet.",
6310
6484
  transitions_to: ["active", "archived"]
6311
6485
  },
6312
6486
  {
6313
6487
  id: "active",
6488
+ status_category: "started",
6314
6489
  label: "Active",
6315
6490
  description: "The current, authoritative run of its framework. Its include edges carry the live results consumers read, rank, and render by.",
6316
6491
  transitions_to: ["archived"]
6317
6492
  },
6318
6493
  {
6319
6494
  id: "archived",
6495
+ status_category: "completed",
6320
6496
  label: "Archived",
6321
6497
  description: "A past run, retained for provenance. Still queryable but superseded by a newer exercise and hidden from default views. Can be revived to active.",
6322
6498
  transitions_to: ["active"]
@@ -6330,24 +6506,28 @@ var SPECIFICATION_LIFECYCLE = {
6330
6506
  phases: [
6331
6507
  {
6332
6508
  id: "draft",
6509
+ status_category: "started",
6333
6510
  label: "Draft",
6334
6511
  description: "Being authored. Not yet adopted as the canonical specification.",
6335
6512
  transitions_to: ["active", "superseded"]
6336
6513
  },
6337
6514
  {
6338
6515
  id: "active",
6516
+ status_category: "started",
6339
6517
  label: "Active",
6340
6518
  description: "In force. The current authoritative version products implement and conform to.",
6341
6519
  transitions_to: ["deprecated", "superseded"]
6342
6520
  },
6343
6521
  {
6344
6522
  id: "deprecated",
6523
+ status_category: "started",
6345
6524
  label: "Deprecated",
6346
6525
  description: "Still valid but no longer recommended; a successor exists or is imminent.",
6347
6526
  transitions_to: ["superseded"]
6348
6527
  },
6349
6528
  {
6350
6529
  id: "superseded",
6530
+ status_category: "completed",
6351
6531
  label: "Superseded",
6352
6532
  description: "Replaced by a newer specification. Retained for historical reference.",
6353
6533
  transitions_to: []
@@ -6359,9 +6539,9 @@ var PLANNING_CYCLE_LIFECYCLE = {
6359
6539
  initial_phase: "planned",
6360
6540
  terminal_phases: ["closed"],
6361
6541
  phases: [
6362
- { id: "planned", label: "Planned", description: "The cycle is being shaped: dates set, goal written, work scheduled into it. It has not started yet.", transitions_to: ["active"] },
6363
- { id: "active", label: "Active", description: "The team is inside the interval; work is flowing through it.", transitions_to: ["closed"] },
6364
- { id: "closed", label: "Closed", description: "The interval has ended. Scheduled work has shipped, carried over, or been dropped. May reopen if the team extends or reruns it.", transitions_to: ["active"] }
6542
+ { id: "planned", status_category: "unstarted", label: "Planned", description: "The cycle is being shaped: dates set, goal written, work scheduled into it. It has not started yet.", transitions_to: ["active"] },
6543
+ { id: "active", status_category: "started", label: "Active", description: "The team is inside the interval; work is flowing through it.", transitions_to: ["closed"] },
6544
+ { id: "closed", status_category: "completed", label: "Closed", description: "The interval has ended. Scheduled work has shipped, carried over, or been dropped. May reopen if the team extends or reruns it.", transitions_to: ["active"] }
6365
6545
  ]
6366
6546
  };
6367
6547
  var UPG_LIFECYCLES = [
@@ -30125,7 +30305,7 @@ function isCanonical(text) {
30125
30305
  }
30126
30306
 
30127
30307
  // src/index.ts
30128
- var UPG_VERSION = "0.25.1";
30308
+ var UPG_VERSION = "0.26.0";
30129
30309
  var UPG_FORMAT_VERSION = "0.4.0";
30130
30310
  var MARKDOWN_FORMAT_VERSION = "0.1";
30131
30311
  var UPG_TYPES = getTypes();