@unified-product-graph/core 0.25.1 → 0.26.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +427 -176
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +113 -2
- package/dist/index.d.ts +113 -2
- package/dist/index.js +422 -176
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -909,7 +909,12 @@ var UPG_ENTITY_META = [
|
|
|
909
909
|
// ── Program Management ──
|
|
910
910
|
{ name: "program", type_id: "ent_262", maturity: "stable", since: "0.1.0" },
|
|
911
911
|
{ name: "project", type_id: "ent_263", maturity: "stable", since: "0.1.0" },
|
|
912
|
-
|
|
912
|
+
// `portfolio_shared` (0.25.1 feedback): a milestone is often a cross-team gate,
|
|
913
|
+
// not one project's checkpoint — an org-wide "Open Beta" that several products'
|
|
914
|
+
// projects must all satisfy. Shared tier lets `project_targets_milestone` (and
|
|
915
|
+
// the other milestone edges) pass the cross-scope gate as `provisional`, same
|
|
916
|
+
// as `project_implements_initiative`. Precedent: `planning_cycle` (0.20.0).
|
|
917
|
+
{ name: "milestone", type_id: "ent_264", maturity: "stable", since: "0.1.0", portfolio_shared: true },
|
|
913
918
|
{ name: "risk_register", type_id: "ent_265", maturity: "stable", since: "0.1.0" },
|
|
914
919
|
{ name: "risk_item", type_id: "ent_266", maturity: "deprecated", since: "0.1.0", deprecated_in: "0.1.0", replacement: "risk" },
|
|
915
920
|
{ name: "change_request", type_id: "ent_267", maturity: "stable", since: "0.1.0" },
|
|
@@ -4202,54 +4207,63 @@ var PRODUCT_LIFECYCLE = {
|
|
|
4202
4207
|
phases: [
|
|
4203
4208
|
{
|
|
4204
4209
|
id: "concept",
|
|
4210
|
+
status_category: "triage",
|
|
4205
4211
|
label: "Concept",
|
|
4206
4212
|
description: "Napkin idea. Problem shape and solution sketch, pre-validation.",
|
|
4207
4213
|
transitions_to: ["validation", "build", "beta", "launch", "growth", "mature", "sunset"]
|
|
4208
4214
|
},
|
|
4209
4215
|
{
|
|
4210
4216
|
id: "validation",
|
|
4217
|
+
status_category: "started",
|
|
4211
4218
|
label: "Validation",
|
|
4212
4219
|
description: "Testing demand. User conversations and experiments pressure-test assumptions before build commits.",
|
|
4213
4220
|
transitions_to: ["build", "beta", "launch", "growth", "mature", "sunset"]
|
|
4214
4221
|
},
|
|
4215
4222
|
{
|
|
4216
4223
|
id: "build",
|
|
4224
|
+
status_category: "started",
|
|
4217
4225
|
label: "Build",
|
|
4218
4226
|
description: "Actively developing v1. Core functionality is being authored, pre-user.",
|
|
4219
4227
|
transitions_to: ["beta", "launch", "growth", "mature", "sunset"]
|
|
4220
4228
|
},
|
|
4221
4229
|
{
|
|
4222
4230
|
id: "beta",
|
|
4231
|
+
status_category: "started",
|
|
4223
4232
|
label: "Beta",
|
|
4224
4233
|
description: "Early users, iterating. Feature-complete enough to learn from, still changing weekly.",
|
|
4225
4234
|
transitions_to: ["launch", "growth", "mature", "maintenance", "sunset"]
|
|
4226
4235
|
},
|
|
4227
4236
|
{
|
|
4228
4237
|
id: "launch",
|
|
4238
|
+
status_category: "started",
|
|
4229
4239
|
label: "Launch",
|
|
4230
4240
|
description: "Generally available. Announced to the target audience, open past beta access.",
|
|
4231
4241
|
transitions_to: ["growth", "mature", "maintenance", "sunset"]
|
|
4232
4242
|
},
|
|
4233
4243
|
{
|
|
4234
4244
|
id: "growth",
|
|
4245
|
+
status_category: "started",
|
|
4235
4246
|
label: "Growth",
|
|
4236
4247
|
description: "Scaling users and revenue. Product fit validated; focus is acquisition, retention, expansion.",
|
|
4237
4248
|
transitions_to: ["mature", "maintenance", "sunset"]
|
|
4238
4249
|
},
|
|
4239
4250
|
{
|
|
4240
4251
|
id: "mature",
|
|
4252
|
+
status_category: "started",
|
|
4241
4253
|
label: "Mature",
|
|
4242
4254
|
description: "Stable. Growth levelled; investment weights toward optimisation, efficiency, and durability.",
|
|
4243
4255
|
transitions_to: ["maintenance", "sunset"]
|
|
4244
4256
|
},
|
|
4245
4257
|
{
|
|
4246
4258
|
id: "maintenance",
|
|
4259
|
+
status_category: "started",
|
|
4247
4260
|
label: "Maintenance",
|
|
4248
4261
|
description: "Sustaining. Minimal investment keeps the product running for existing users. Can transition back to `mature` on a strategic revival.",
|
|
4249
4262
|
transitions_to: ["mature", "sunset"]
|
|
4250
4263
|
},
|
|
4251
4264
|
{
|
|
4252
4265
|
id: "sunset",
|
|
4266
|
+
status_category: "completed",
|
|
4253
4267
|
label: "Sunset",
|
|
4254
4268
|
description: "Winding down or retired. Existing users are being migrated or offboarded.",
|
|
4255
4269
|
transitions_to: []
|
|
@@ -4263,18 +4277,21 @@ var NEED_LIFECYCLE = {
|
|
|
4263
4277
|
phases: [
|
|
4264
4278
|
{
|
|
4265
4279
|
id: "raw",
|
|
4280
|
+
status_category: "triage",
|
|
4266
4281
|
label: "Raw",
|
|
4267
4282
|
description: "Captured from an interview, observation, or support ticket. Articulation may be rough; may duplicate an existing need.",
|
|
4268
4283
|
transitions_to: ["validated"]
|
|
4269
4284
|
},
|
|
4270
4285
|
{
|
|
4271
4286
|
id: "validated",
|
|
4287
|
+
status_category: "started",
|
|
4272
4288
|
label: "Validated",
|
|
4273
4289
|
description: "Corroborated by multiple data points or targeted research. The team agrees it is a real, recurring need.",
|
|
4274
4290
|
transitions_to: ["prioritized"]
|
|
4275
4291
|
},
|
|
4276
4292
|
{
|
|
4277
4293
|
id: "prioritized",
|
|
4294
|
+
status_category: "completed",
|
|
4278
4295
|
label: "Prioritized",
|
|
4279
4296
|
description: "Ranked against other needs. Ready to inform opportunity definition and solution exploration.",
|
|
4280
4297
|
transitions_to: []
|
|
@@ -4288,18 +4305,21 @@ var OPPORTUNITY_LIFECYCLE = {
|
|
|
4288
4305
|
phases: [
|
|
4289
4306
|
{
|
|
4290
4307
|
id: "identified",
|
|
4308
|
+
status_category: "triage",
|
|
4291
4309
|
label: "Identified",
|
|
4292
4310
|
description: "A problem worth solving has been named. Sources include needs, insights, market trends, or competitive signals. Sizing and validation come next.",
|
|
4293
4311
|
transitions_to: ["validated", "deferred"]
|
|
4294
4312
|
},
|
|
4295
4313
|
{
|
|
4296
4314
|
id: "validated",
|
|
4315
|
+
status_category: "started",
|
|
4297
4316
|
label: "Validated",
|
|
4298
4317
|
description: "Research and evidence support pursuit. The problem is real, frequent, and painful enough to justify investment.",
|
|
4299
4318
|
transitions_to: ["deferred"]
|
|
4300
4319
|
},
|
|
4301
4320
|
{
|
|
4302
4321
|
id: "deferred",
|
|
4322
|
+
status_category: "backlog",
|
|
4303
4323
|
label: "Deferred",
|
|
4304
4324
|
description: "Acknowledged but parked. Capacity, priority, or strategic timing reasons. Can be reopened.",
|
|
4305
4325
|
transitions_to: ["identified"]
|
|
@@ -4313,24 +4333,28 @@ var SOLUTION_LIFECYCLE = {
|
|
|
4313
4333
|
phases: [
|
|
4314
4334
|
{
|
|
4315
4335
|
id: "proposed",
|
|
4336
|
+
status_category: "triage",
|
|
4316
4337
|
label: "Proposed",
|
|
4317
4338
|
description: "Identified as a possible response to an opportunity. Pre-commitment, pre-feasibility.",
|
|
4318
4339
|
transitions_to: ["in_progress", "deferred"]
|
|
4319
4340
|
},
|
|
4320
4341
|
{
|
|
4321
4342
|
id: "in_progress",
|
|
4343
|
+
status_category: "started",
|
|
4322
4344
|
label: "In Progress",
|
|
4323
4345
|
description: "A team is actively building, testing, or refining the solution.",
|
|
4324
4346
|
transitions_to: ["shipped", "deferred"]
|
|
4325
4347
|
},
|
|
4326
4348
|
{
|
|
4327
4349
|
id: "shipped",
|
|
4350
|
+
status_category: "completed",
|
|
4328
4351
|
label: "Shipped",
|
|
4329
4352
|
description: "Delivered to users. Live in the product.",
|
|
4330
4353
|
transitions_to: ["deferred"]
|
|
4331
4354
|
},
|
|
4332
4355
|
{
|
|
4333
4356
|
id: "deferred",
|
|
4357
|
+
status_category: "backlog",
|
|
4334
4358
|
label: "Deferred",
|
|
4335
4359
|
description: "Acknowledged but parked. Capacity, priority, or a change in direction. Can be reopened.",
|
|
4336
4360
|
transitions_to: ["proposed"]
|
|
@@ -4344,24 +4368,28 @@ var EXPERIMENT_PLAN_LIFECYCLE = {
|
|
|
4344
4368
|
phases: [
|
|
4345
4369
|
{
|
|
4346
4370
|
id: "drafted",
|
|
4371
|
+
status_category: "unstarted",
|
|
4347
4372
|
label: "Drafted",
|
|
4348
4373
|
description: "The plan is being written. Method, success criteria, target metric, projected reach/impact, ownership, and planned dates are being defined. Not yet approved.",
|
|
4349
4374
|
transitions_to: ["scheduled", "cancelled"]
|
|
4350
4375
|
},
|
|
4351
4376
|
{
|
|
4352
4377
|
id: "scheduled",
|
|
4378
|
+
status_category: "unstarted",
|
|
4353
4379
|
label: "Scheduled",
|
|
4354
4380
|
description: "The plan is approved and slotted for execution. Resources committed; awaiting start date.",
|
|
4355
4381
|
transitions_to: ["approved", "cancelled"]
|
|
4356
4382
|
},
|
|
4357
4383
|
{
|
|
4358
4384
|
id: "approved",
|
|
4385
|
+
status_category: "completed",
|
|
4359
4386
|
label: "Approved",
|
|
4360
4387
|
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.",
|
|
4361
4388
|
transitions_to: []
|
|
4362
4389
|
},
|
|
4363
4390
|
{
|
|
4364
4391
|
id: "cancelled",
|
|
4392
|
+
status_category: "cancelled",
|
|
4365
4393
|
label: "Cancelled",
|
|
4366
4394
|
description: "The plan was abandoned before any run started. Reason should be documented in description or via an attached decision.",
|
|
4367
4395
|
transitions_to: []
|
|
@@ -4375,24 +4403,28 @@ var RESEARCH_PLAN_LIFECYCLE = {
|
|
|
4375
4403
|
phases: [
|
|
4376
4404
|
{
|
|
4377
4405
|
id: "draft",
|
|
4406
|
+
status_category: "started",
|
|
4378
4407
|
label: "Draft",
|
|
4379
4408
|
description: "The plan is being written. Research question, suggested methods, and evidence threshold are being defined. Not yet approved for execution.",
|
|
4380
4409
|
transitions_to: ["active"]
|
|
4381
4410
|
},
|
|
4382
4411
|
{
|
|
4383
4412
|
id: "active",
|
|
4413
|
+
status_category: "started",
|
|
4384
4414
|
label: "Active",
|
|
4385
4415
|
description: "The plan has been approved and is being executed. Research sessions are underway or scheduled.",
|
|
4386
4416
|
transitions_to: ["completed", "abandoned"]
|
|
4387
4417
|
},
|
|
4388
4418
|
{
|
|
4389
4419
|
id: "completed",
|
|
4420
|
+
status_category: "completed",
|
|
4390
4421
|
label: "Completed",
|
|
4391
4422
|
description: "The planned research has been carried out and learnings have been captured. The plan is a historical record.",
|
|
4392
4423
|
transitions_to: []
|
|
4393
4424
|
},
|
|
4394
4425
|
{
|
|
4395
4426
|
id: "abandoned",
|
|
4427
|
+
status_category: "cancelled",
|
|
4396
4428
|
label: "Abandoned",
|
|
4397
4429
|
description: "Not executed: changing priorities, a decision no longer needing validation, or resource constraints.",
|
|
4398
4430
|
transitions_to: []
|
|
@@ -4406,24 +4438,28 @@ var FEEDBACK_PROGRAM_LIFECYCLE = {
|
|
|
4406
4438
|
phases: [
|
|
4407
4439
|
{
|
|
4408
4440
|
id: "planning",
|
|
4441
|
+
status_category: "unstarted",
|
|
4409
4442
|
label: "Planning",
|
|
4410
4443
|
description: "The program is being designed. Goals, audience, collection method, and cadence are being defined. No feedback is being collected yet.",
|
|
4411
4444
|
transitions_to: ["active"]
|
|
4412
4445
|
},
|
|
4413
4446
|
{
|
|
4414
4447
|
id: "active",
|
|
4448
|
+
status_category: "started",
|
|
4415
4449
|
label: "Active",
|
|
4416
4450
|
description: "The program is running. Feedback is being collected and processed on the defined cadence.",
|
|
4417
4451
|
transitions_to: ["paused", "retired"]
|
|
4418
4452
|
},
|
|
4419
4453
|
{
|
|
4420
4454
|
id: "paused",
|
|
4455
|
+
status_category: "backlog",
|
|
4421
4456
|
label: "Paused",
|
|
4422
4457
|
description: "Collection has been temporarily suspended. The program will resume.",
|
|
4423
4458
|
transitions_to: ["active", "retired"]
|
|
4424
4459
|
},
|
|
4425
4460
|
{
|
|
4426
4461
|
id: "retired",
|
|
4462
|
+
status_category: "completed",
|
|
4427
4463
|
label: "Retired",
|
|
4428
4464
|
description: "The program has ended. It is no longer collecting feedback. Historical data is preserved.",
|
|
4429
4465
|
transitions_to: []
|
|
@@ -4437,36 +4473,42 @@ var FEATURE_REQUEST_LIFECYCLE = {
|
|
|
4437
4473
|
phases: [
|
|
4438
4474
|
{
|
|
4439
4475
|
id: "new",
|
|
4476
|
+
status_category: "triage",
|
|
4440
4477
|
label: "New",
|
|
4441
4478
|
description: "The request has been submitted. It has not yet been reviewed by the product team.",
|
|
4442
4479
|
transitions_to: ["under_review"]
|
|
4443
4480
|
},
|
|
4444
4481
|
{
|
|
4445
4482
|
id: "under_review",
|
|
4483
|
+
status_category: "triage",
|
|
4446
4484
|
label: "Under Review",
|
|
4447
4485
|
description: "The request is being triaged. The product team is assessing feasibility, demand, and strategic fit.",
|
|
4448
4486
|
transitions_to: ["planned", "wont_do"]
|
|
4449
4487
|
},
|
|
4450
4488
|
{
|
|
4451
4489
|
id: "planned",
|
|
4490
|
+
status_category: "unstarted",
|
|
4452
4491
|
label: "Planned",
|
|
4453
4492
|
description: "The request has been accepted and is on the roadmap. It is scheduled for a future release cycle.",
|
|
4454
4493
|
transitions_to: ["in_progress", "wont_do"]
|
|
4455
4494
|
},
|
|
4456
4495
|
{
|
|
4457
4496
|
id: "in_progress",
|
|
4497
|
+
status_category: "started",
|
|
4458
4498
|
label: "In Progress",
|
|
4459
4499
|
description: "Work on fulfilling the request is actively underway.",
|
|
4460
4500
|
transitions_to: ["shipped"]
|
|
4461
4501
|
},
|
|
4462
4502
|
{
|
|
4463
4503
|
id: "shipped",
|
|
4504
|
+
status_category: "completed",
|
|
4464
4505
|
label: "Shipped",
|
|
4465
4506
|
description: "The requested capability has been delivered to users.",
|
|
4466
4507
|
transitions_to: []
|
|
4467
4508
|
},
|
|
4468
4509
|
{
|
|
4469
4510
|
id: "wont_do",
|
|
4511
|
+
status_category: "cancelled",
|
|
4470
4512
|
label: "Won't Do",
|
|
4471
4513
|
description: "Declined: strategic misalignment, infeasibility, or insufficient demand.",
|
|
4472
4514
|
transitions_to: []
|
|
@@ -4480,24 +4522,28 @@ var BETA_PROGRAM_LIFECYCLE = {
|
|
|
4480
4522
|
phases: [
|
|
4481
4523
|
{
|
|
4482
4524
|
id: "recruiting",
|
|
4525
|
+
status_category: "started",
|
|
4483
4526
|
label: "Recruiting",
|
|
4484
4527
|
description: "The program is accepting applications. Beta participants are being identified and onboarded.",
|
|
4485
4528
|
transitions_to: ["active"]
|
|
4486
4529
|
},
|
|
4487
4530
|
{
|
|
4488
4531
|
id: "active",
|
|
4532
|
+
status_category: "started",
|
|
4489
4533
|
label: "Active",
|
|
4490
4534
|
description: "Beta participants have access and are using the feature. Feedback is being collected.",
|
|
4491
4535
|
transitions_to: ["graduated", "closed"]
|
|
4492
4536
|
},
|
|
4493
4537
|
{
|
|
4494
4538
|
id: "graduated",
|
|
4539
|
+
status_category: "completed",
|
|
4495
4540
|
label: "Graduated",
|
|
4496
4541
|
description: "The beta was successful and the feature has progressed to general availability.",
|
|
4497
4542
|
transitions_to: []
|
|
4498
4543
|
},
|
|
4499
4544
|
{
|
|
4500
4545
|
id: "closed",
|
|
4546
|
+
status_category: "completed",
|
|
4501
4547
|
label: "Closed",
|
|
4502
4548
|
description: "The beta ended without graduating to GA. The feature was deprioritised, pivoted, or missed exit criteria.",
|
|
4503
4549
|
transitions_to: []
|
|
@@ -4511,24 +4557,28 @@ var USER_ADVISORY_BOARD_LIFECYCLE = {
|
|
|
4511
4557
|
phases: [
|
|
4512
4558
|
{
|
|
4513
4559
|
id: "recruiting",
|
|
4560
|
+
status_category: "started",
|
|
4514
4561
|
label: "Recruiting",
|
|
4515
4562
|
description: "Members are being identified and invited. The board is not yet convened.",
|
|
4516
4563
|
transitions_to: ["active"]
|
|
4517
4564
|
},
|
|
4518
4565
|
{
|
|
4519
4566
|
id: "active",
|
|
4567
|
+
status_category: "started",
|
|
4520
4568
|
label: "Active",
|
|
4521
4569
|
description: "The board is convened and meeting regularly. Members are providing strategic input.",
|
|
4522
4570
|
transitions_to: ["paused", "retired"]
|
|
4523
4571
|
},
|
|
4524
4572
|
{
|
|
4525
4573
|
id: "paused",
|
|
4574
|
+
status_category: "backlog",
|
|
4526
4575
|
label: "Paused",
|
|
4527
4576
|
description: "Board activities are temporarily suspended. Membership is retained and sessions will resume.",
|
|
4528
4577
|
transitions_to: ["active", "retired"]
|
|
4529
4578
|
},
|
|
4530
4579
|
{
|
|
4531
4580
|
id: "retired",
|
|
4581
|
+
status_category: "completed",
|
|
4532
4582
|
label: "Retired",
|
|
4533
4583
|
description: "The board has been disbanded. Members are no longer engaged in an advisory capacity.",
|
|
4534
4584
|
transitions_to: []
|
|
@@ -4542,30 +4592,35 @@ var OBJECTIVE_LIFECYCLE = {
|
|
|
4542
4592
|
phases: [
|
|
4543
4593
|
{
|
|
4544
4594
|
id: "draft",
|
|
4595
|
+
status_category: "started",
|
|
4545
4596
|
label: "Draft",
|
|
4546
4597
|
description: "The objective is being written. Key results have not yet been attached or approved.",
|
|
4547
4598
|
transitions_to: ["active"]
|
|
4548
4599
|
},
|
|
4549
4600
|
{
|
|
4550
4601
|
id: "active",
|
|
4602
|
+
status_category: "started",
|
|
4551
4603
|
label: "Active",
|
|
4552
4604
|
description: "The objective is in the current planning period. Key results are being measured and progress is tracked.",
|
|
4553
4605
|
transitions_to: ["achieved", "missed", "deferred"]
|
|
4554
4606
|
},
|
|
4555
4607
|
{
|
|
4556
4608
|
id: "achieved",
|
|
4609
|
+
status_category: "completed",
|
|
4557
4610
|
label: "Achieved",
|
|
4558
4611
|
description: "The objective was met or exceeded within the planning period.",
|
|
4559
4612
|
transitions_to: []
|
|
4560
4613
|
},
|
|
4561
4614
|
{
|
|
4562
4615
|
id: "missed",
|
|
4616
|
+
status_category: "completed",
|
|
4563
4617
|
label: "Missed",
|
|
4564
4618
|
description: "The planning period ended without achieving the objective. Learnings inform the next cycle.",
|
|
4565
4619
|
transitions_to: []
|
|
4566
4620
|
},
|
|
4567
4621
|
{
|
|
4568
4622
|
id: "deferred",
|
|
4623
|
+
status_category: "backlog",
|
|
4569
4624
|
label: "Deferred",
|
|
4570
4625
|
description: "The objective was not completed this period and is being carried forward. Can be reopened as active.",
|
|
4571
4626
|
transitions_to: ["active"]
|
|
@@ -4579,24 +4634,28 @@ var KEY_RESULT_LIFECYCLE = {
|
|
|
4579
4634
|
phases: [
|
|
4580
4635
|
{
|
|
4581
4636
|
id: "on_track",
|
|
4637
|
+
status_category: "started",
|
|
4582
4638
|
label: "On Track",
|
|
4583
4639
|
description: "Current measured value is progressing at a rate that should reach the target by the deadline.",
|
|
4584
4640
|
transitions_to: ["at_risk", "behind", "achieved"]
|
|
4585
4641
|
},
|
|
4586
4642
|
{
|
|
4587
4643
|
id: "at_risk",
|
|
4644
|
+
status_category: "started",
|
|
4588
4645
|
label: "At Risk",
|
|
4589
4646
|
description: "Progress is slowing. Without intervention, the target may not be reached by the deadline.",
|
|
4590
4647
|
transitions_to: ["on_track", "behind", "achieved"]
|
|
4591
4648
|
},
|
|
4592
4649
|
{
|
|
4593
4650
|
id: "behind",
|
|
4651
|
+
status_category: "started",
|
|
4594
4652
|
label: "Behind",
|
|
4595
4653
|
description: "Unlikely to reach the target at the current rate. The team needs to reassess strategy or accept a miss.",
|
|
4596
4654
|
transitions_to: ["on_track", "at_risk", "achieved"]
|
|
4597
4655
|
},
|
|
4598
4656
|
{
|
|
4599
4657
|
id: "achieved",
|
|
4658
|
+
status_category: "completed",
|
|
4600
4659
|
label: "Achieved",
|
|
4601
4660
|
description: "The target value has been reached or exceeded.",
|
|
4602
4661
|
transitions_to: []
|
|
@@ -4610,18 +4669,21 @@ var STRATEGIC_THEME_LIFECYCLE = {
|
|
|
4610
4669
|
phases: [
|
|
4611
4670
|
{
|
|
4612
4671
|
id: "active",
|
|
4672
|
+
status_category: "started",
|
|
4613
4673
|
label: "Active",
|
|
4614
4674
|
description: "The theme is a current organisational focus. Initiatives and objectives are being run under it.",
|
|
4615
4675
|
transitions_to: ["completed", "paused"]
|
|
4616
4676
|
},
|
|
4617
4677
|
{
|
|
4618
4678
|
id: "paused",
|
|
4679
|
+
status_category: "backlog",
|
|
4619
4680
|
label: "Paused",
|
|
4620
4681
|
description: "The theme is deprioritised for this period but is not being retired. It will resume.",
|
|
4621
4682
|
transitions_to: ["active", "completed"]
|
|
4622
4683
|
},
|
|
4623
4684
|
{
|
|
4624
4685
|
id: "completed",
|
|
4686
|
+
status_category: "completed",
|
|
4625
4687
|
label: "Completed",
|
|
4626
4688
|
description: "The theme has run its course. The focus area has been addressed or superseded by a new theme.",
|
|
4627
4689
|
transitions_to: []
|
|
@@ -4635,24 +4697,28 @@ var INITIATIVE_LIFECYCLE = {
|
|
|
4635
4697
|
phases: [
|
|
4636
4698
|
{
|
|
4637
4699
|
id: "proposed",
|
|
4700
|
+
status_category: "triage",
|
|
4638
4701
|
label: "Proposed",
|
|
4639
4702
|
description: "The initiative has been put forward but not yet approved for resourcing. Business case is being evaluated.",
|
|
4640
4703
|
transitions_to: ["in_progress", "abandoned"]
|
|
4641
4704
|
},
|
|
4642
4705
|
{
|
|
4643
4706
|
id: "in_progress",
|
|
4707
|
+
status_category: "started",
|
|
4644
4708
|
label: "In Progress",
|
|
4645
4709
|
description: "The initiative has been approved and work is underway. Teams are executing against it.",
|
|
4646
4710
|
transitions_to: ["completed", "abandoned"]
|
|
4647
4711
|
},
|
|
4648
4712
|
{
|
|
4649
4713
|
id: "completed",
|
|
4714
|
+
status_category: "completed",
|
|
4650
4715
|
label: "Completed",
|
|
4651
4716
|
description: "The initiative has achieved its goals and been formally closed.",
|
|
4652
4717
|
transitions_to: []
|
|
4653
4718
|
},
|
|
4654
4719
|
{
|
|
4655
4720
|
id: "abandoned",
|
|
4721
|
+
status_category: "cancelled",
|
|
4656
4722
|
label: "Abandoned",
|
|
4657
4723
|
description: "Stopped before completion: changing strategy, resource constraints, or learning that the goal is no longer relevant.",
|
|
4658
4724
|
transitions_to: []
|
|
@@ -4666,18 +4732,21 @@ var STRATEGIC_PILLAR_LIFECYCLE = {
|
|
|
4666
4732
|
phases: [
|
|
4667
4733
|
{
|
|
4668
4734
|
id: "proposed",
|
|
4735
|
+
status_category: "triage",
|
|
4669
4736
|
label: "Proposed",
|
|
4670
4737
|
description: "The pillar has been articulated but not yet ratified by leadership as a strategic commitment.",
|
|
4671
4738
|
transitions_to: ["active"]
|
|
4672
4739
|
},
|
|
4673
4740
|
{
|
|
4674
4741
|
id: "active",
|
|
4742
|
+
status_category: "started",
|
|
4675
4743
|
label: "Active",
|
|
4676
4744
|
description: "The pillar is a live strategic commitment. Decisions, themes, and initiatives are aligned to it.",
|
|
4677
4745
|
transitions_to: ["sunset"]
|
|
4678
4746
|
},
|
|
4679
4747
|
{
|
|
4680
4748
|
id: "sunset",
|
|
4749
|
+
status_category: "completed",
|
|
4681
4750
|
label: "Sunset",
|
|
4682
4751
|
description: "Retired: achieved, superseded by a new direction, or no longer reflects strategic reality.",
|
|
4683
4752
|
transitions_to: []
|
|
@@ -4689,8 +4758,8 @@ var STRATEGIC_QUESTION_LIFECYCLE = {
|
|
|
4689
4758
|
initial_phase: "open",
|
|
4690
4759
|
terminal_phases: ["resolved"],
|
|
4691
4760
|
phases: [
|
|
4692
|
-
{ id: "open", label: "Open", description: "The question has been raised but not yet answered. The plan is exposed to it.", transitions_to: ["resolved"] },
|
|
4693
|
-
{ 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"] }
|
|
4761
|
+
{ 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"] },
|
|
4762
|
+
{ 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"] }
|
|
4694
4763
|
]
|
|
4695
4764
|
};
|
|
4696
4765
|
var OUTCOME_LIFECYCLE = {
|
|
@@ -4698,10 +4767,10 @@ var OUTCOME_LIFECYCLE = {
|
|
|
4698
4767
|
initial_phase: "identified",
|
|
4699
4768
|
terminal_phases: ["achieved", "abandoned"],
|
|
4700
4769
|
phases: [
|
|
4701
|
-
{ 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"] },
|
|
4702
|
-
{ id: "measuring", label: "Measuring", description: "Instrumentation is live. Progress is being tracked against the outcome.", transitions_to: ["achieved", "abandoned"] },
|
|
4703
|
-
{ id: "achieved", label: "Achieved", description: "The outcome was reached. Captured for the record; no further pursuit required.", transitions_to: [] },
|
|
4704
|
-
{ 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"] }
|
|
4770
|
+
{ 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"] },
|
|
4771
|
+
{ id: "measuring", status_category: "started", label: "Measuring", description: "Instrumentation is live. Progress is being tracked against the outcome.", transitions_to: ["achieved", "abandoned"] },
|
|
4772
|
+
{ id: "achieved", status_category: "completed", label: "Achieved", description: "The outcome was reached. Captured for the record; no further pursuit required.", transitions_to: [] },
|
|
4773
|
+
{ 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"] }
|
|
4705
4774
|
]
|
|
4706
4775
|
};
|
|
4707
4776
|
var VISION_LIFECYCLE = {
|
|
@@ -4709,10 +4778,10 @@ var VISION_LIFECYCLE = {
|
|
|
4709
4778
|
initial_phase: "drafting",
|
|
4710
4779
|
terminal_phases: ["ratified", "revised", "archived"],
|
|
4711
4780
|
phases: [
|
|
4712
|
-
{ id: "drafting", label: "Drafting", description: "Vision is being authored or rewritten. Not yet adopted.", transitions_to: ["ratified", "archived"] },
|
|
4713
|
-
{ id: "ratified", label: "Ratified", description: "The current, in-force vision. The team has aligned around it.", transitions_to: ["revised", "archived"] },
|
|
4714
|
-
{ 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"] },
|
|
4715
|
-
{ id: "archived", label: "Archived", description: "No longer in force. Retained for historical reference.", transitions_to: ["drafting"] }
|
|
4781
|
+
{ id: "drafting", status_category: "started", label: "Drafting", description: "Vision is being authored or rewritten. Not yet adopted.", transitions_to: ["ratified", "archived"] },
|
|
4782
|
+
{ id: "ratified", status_category: "completed", label: "Ratified", description: "The current, in-force vision. The team has aligned around it.", transitions_to: ["revised", "archived"] },
|
|
4783
|
+
{ 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"] },
|
|
4784
|
+
{ id: "archived", status_category: "completed", label: "Archived", description: "No longer in force. Retained for historical reference.", transitions_to: ["drafting"] }
|
|
4716
4785
|
]
|
|
4717
4786
|
};
|
|
4718
4787
|
var MISSION_LIFECYCLE = {
|
|
@@ -4720,9 +4789,9 @@ var MISSION_LIFECYCLE = {
|
|
|
4720
4789
|
initial_phase: "drafting",
|
|
4721
4790
|
terminal_phases: ["active", "archived"],
|
|
4722
4791
|
phases: [
|
|
4723
|
-
{ id: "drafting", label: "Drafting", description: "Mission is being authored or rewritten. Not yet adopted.", transitions_to: ["active", "archived"] },
|
|
4724
|
-
{ id: "active", label: "Active", description: "The current, in-force mission. Guides product and organisational decisions.", transitions_to: ["archived"] },
|
|
4725
|
-
{ id: "archived", label: "Archived", description: "No longer in force. May reopen to drafting if the team revisits.", transitions_to: ["drafting"] }
|
|
4792
|
+
{ id: "drafting", status_category: "started", label: "Drafting", description: "Mission is being authored or rewritten. Not yet adopted.", transitions_to: ["active", "archived"] },
|
|
4793
|
+
{ id: "active", status_category: "started", label: "Active", description: "The current, in-force mission. Guides product and organisational decisions.", transitions_to: ["archived"] },
|
|
4794
|
+
{ id: "archived", status_category: "completed", label: "Archived", description: "No longer in force. May reopen to drafting if the team revisits.", transitions_to: ["drafting"] }
|
|
4726
4795
|
]
|
|
4727
4796
|
};
|
|
4728
4797
|
var CAPABILITY_LIFECYCLE = {
|
|
@@ -4730,10 +4799,10 @@ var CAPABILITY_LIFECYCLE = {
|
|
|
4730
4799
|
initial_phase: "planned",
|
|
4731
4800
|
terminal_phases: ["operational", "retired"],
|
|
4732
4801
|
phases: [
|
|
4733
|
-
{ id: "planned", label: "Planned", description: "Capability has been identified as needed but development has not started.", transitions_to: ["building", "retired"] },
|
|
4734
|
-
{ id: "building", label: "Building", description: "Active development: people, processes, or systems are being put in place.", transitions_to: ["operational", "retired"] },
|
|
4735
|
-
{ id: "operational", label: "Operational", description: "Capability is in place and functioning. The organisation can rely on it.", transitions_to: ["retired"] },
|
|
4736
|
-
{ id: "retired", label: "Retired", description: "No longer maintained. May reopen to building if the capability is reinvested in.", transitions_to: ["building"] }
|
|
4802
|
+
{ id: "planned", status_category: "unstarted", label: "Planned", description: "Capability has been identified as needed but development has not started.", transitions_to: ["building", "retired"] },
|
|
4803
|
+
{ id: "building", status_category: "started", label: "Building", description: "Active development: people, processes, or systems are being put in place.", transitions_to: ["operational", "retired"] },
|
|
4804
|
+
{ id: "operational", status_category: "started", label: "Operational", description: "Capability is in place and functioning. The organisation can rely on it.", transitions_to: ["retired"] },
|
|
4805
|
+
{ id: "retired", status_category: "completed", label: "Retired", description: "No longer maintained. May reopen to building if the capability is reinvested in.", transitions_to: ["building"] }
|
|
4737
4806
|
]
|
|
4738
4807
|
};
|
|
4739
4808
|
var FEATURE_AREA_LIFECYCLE = {
|
|
@@ -4743,18 +4812,21 @@ var FEATURE_AREA_LIFECYCLE = {
|
|
|
4743
4812
|
phases: [
|
|
4744
4813
|
{
|
|
4745
4814
|
id: "planned",
|
|
4815
|
+
status_category: "unstarted",
|
|
4746
4816
|
label: "Planned",
|
|
4747
4817
|
description: "The feature area has been defined as an organising concept but no features have been built under it yet.",
|
|
4748
4818
|
transitions_to: ["active"]
|
|
4749
4819
|
},
|
|
4750
4820
|
{
|
|
4751
4821
|
id: "active",
|
|
4822
|
+
status_category: "started",
|
|
4752
4823
|
label: "Active",
|
|
4753
4824
|
description: "The feature area contains live features and is actively being developed.",
|
|
4754
4825
|
transitions_to: ["deprecated"]
|
|
4755
4826
|
},
|
|
4756
4827
|
{
|
|
4757
4828
|
id: "deprecated",
|
|
4829
|
+
status_category: "completed",
|
|
4758
4830
|
label: "Deprecated",
|
|
4759
4831
|
description: "The feature area is no longer being developed. It may still exist in the product but no new features are being added.",
|
|
4760
4832
|
transitions_to: []
|
|
@@ -4768,24 +4840,28 @@ var FEATURE_LIFECYCLE = {
|
|
|
4768
4840
|
phases: [
|
|
4769
4841
|
{
|
|
4770
4842
|
id: "proposed",
|
|
4843
|
+
status_category: "triage",
|
|
4771
4844
|
label: "Proposed",
|
|
4772
4845
|
description: "The feature has been suggested and is under consideration. It is not yet on the roadmap.",
|
|
4773
4846
|
transitions_to: ["in_progress", "archived"]
|
|
4774
4847
|
},
|
|
4775
4848
|
{
|
|
4776
4849
|
id: "in_progress",
|
|
4850
|
+
status_category: "started",
|
|
4777
4851
|
label: "In Progress",
|
|
4778
4852
|
description: "The feature is actively being designed and built.",
|
|
4779
4853
|
transitions_to: ["shipped"]
|
|
4780
4854
|
},
|
|
4781
4855
|
{
|
|
4782
4856
|
id: "shipped",
|
|
4857
|
+
status_category: "completed",
|
|
4783
4858
|
label: "Shipped",
|
|
4784
4859
|
description: "The feature is live in the product and available to users.",
|
|
4785
4860
|
transitions_to: ["archived"]
|
|
4786
4861
|
},
|
|
4787
4862
|
{
|
|
4788
4863
|
id: "archived",
|
|
4864
|
+
status_category: "completed",
|
|
4789
4865
|
label: "Archived",
|
|
4790
4866
|
description: "The feature has been removed from the product or superseded. It is retained as a historical record.",
|
|
4791
4867
|
transitions_to: []
|
|
@@ -4799,18 +4875,21 @@ var RELEASE_LIFECYCLE = {
|
|
|
4799
4875
|
phases: [
|
|
4800
4876
|
{
|
|
4801
4877
|
id: "planned",
|
|
4878
|
+
status_category: "unstarted",
|
|
4802
4879
|
label: "Planned",
|
|
4803
4880
|
description: "The release is defined and scheduled. Features are scoped but not all completed.",
|
|
4804
4881
|
transitions_to: ["in_progress"]
|
|
4805
4882
|
},
|
|
4806
4883
|
{
|
|
4807
4884
|
id: "in_progress",
|
|
4885
|
+
status_category: "started",
|
|
4808
4886
|
label: "In Progress",
|
|
4809
4887
|
description: "Features are being built. The release is open for development.",
|
|
4810
4888
|
transitions_to: ["shipped"]
|
|
4811
4889
|
},
|
|
4812
4890
|
{
|
|
4813
4891
|
id: "shipped",
|
|
4892
|
+
status_category: "completed",
|
|
4814
4893
|
label: "Shipped",
|
|
4815
4894
|
description: "The release has been deployed to production and is available to users.",
|
|
4816
4895
|
transitions_to: []
|
|
@@ -4824,24 +4903,28 @@ var ROADMAP_ITEM_LIFECYCLE = {
|
|
|
4824
4903
|
phases: [
|
|
4825
4904
|
{
|
|
4826
4905
|
id: "planned",
|
|
4906
|
+
status_category: "unstarted",
|
|
4827
4907
|
label: "Planned",
|
|
4828
4908
|
description: "The item is on the roadmap and scheduled for a future period.",
|
|
4829
4909
|
transitions_to: ["in_progress", "deferred"]
|
|
4830
4910
|
},
|
|
4831
4911
|
{
|
|
4832
4912
|
id: "in_progress",
|
|
4913
|
+
status_category: "started",
|
|
4833
4914
|
label: "In Progress",
|
|
4834
4915
|
description: "Work on this roadmap item is underway.",
|
|
4835
4916
|
transitions_to: ["shipped", "deferred"]
|
|
4836
4917
|
},
|
|
4837
4918
|
{
|
|
4838
4919
|
id: "shipped",
|
|
4920
|
+
status_category: "completed",
|
|
4839
4921
|
label: "Shipped",
|
|
4840
4922
|
description: "The roadmap item has been delivered.",
|
|
4841
4923
|
transitions_to: []
|
|
4842
4924
|
},
|
|
4843
4925
|
{
|
|
4844
4926
|
id: "deferred",
|
|
4927
|
+
status_category: "backlog",
|
|
4845
4928
|
label: "Deferred",
|
|
4846
4929
|
description: "The item has been pushed to a later period. It remains on the roadmap.",
|
|
4847
4930
|
transitions_to: ["planned"]
|
|
@@ -4855,30 +4938,35 @@ var IP_ASSET_LIFECYCLE = {
|
|
|
4855
4938
|
phases: [
|
|
4856
4939
|
{
|
|
4857
4940
|
id: "filed",
|
|
4941
|
+
status_category: "started",
|
|
4858
4942
|
label: "Filed",
|
|
4859
4943
|
description: "The IP application has been submitted to the relevant authority. Acknowledgement of filing is pending.",
|
|
4860
4944
|
transitions_to: ["pending", "abandoned"]
|
|
4861
4945
|
},
|
|
4862
4946
|
{
|
|
4863
4947
|
id: "pending",
|
|
4948
|
+
status_category: "started",
|
|
4864
4949
|
label: "Pending",
|
|
4865
4950
|
description: "The application has been acknowledged and is under examination by the relevant authority.",
|
|
4866
4951
|
transitions_to: ["granted", "abandoned"]
|
|
4867
4952
|
},
|
|
4868
4953
|
{
|
|
4869
4954
|
id: "granted",
|
|
4955
|
+
status_category: "completed",
|
|
4870
4956
|
label: "Granted",
|
|
4871
4957
|
description: "The IP right has been formally granted. Protection is in force.",
|
|
4872
4958
|
transitions_to: ["expired", "abandoned"]
|
|
4873
4959
|
},
|
|
4874
4960
|
{
|
|
4875
4961
|
id: "expired",
|
|
4962
|
+
status_category: "completed",
|
|
4876
4963
|
label: "Expired",
|
|
4877
4964
|
description: "The IP protection period has ended naturally.",
|
|
4878
4965
|
transitions_to: []
|
|
4879
4966
|
},
|
|
4880
4967
|
{
|
|
4881
4968
|
id: "abandoned",
|
|
4969
|
+
status_category: "cancelled",
|
|
4882
4970
|
label: "Abandoned",
|
|
4883
4971
|
description: "Abandoned: non-payment of renewal fees, withdrawal of the application, or a decision to stop defending it.",
|
|
4884
4972
|
transitions_to: []
|
|
@@ -4892,36 +4980,42 @@ var CONTRACT_LIFECYCLE = {
|
|
|
4892
4980
|
phases: [
|
|
4893
4981
|
{
|
|
4894
4982
|
id: "draft",
|
|
4983
|
+
status_category: "started",
|
|
4895
4984
|
label: "Draft",
|
|
4896
4985
|
description: "The contract is being written. Terms are not yet agreed by all parties.",
|
|
4897
4986
|
transitions_to: ["in_review"]
|
|
4898
4987
|
},
|
|
4899
4988
|
{
|
|
4900
4989
|
id: "in_review",
|
|
4990
|
+
status_category: "started",
|
|
4901
4991
|
label: "In Review",
|
|
4902
4992
|
description: "The draft is under review by legal counsel or the counterparty. Negotiations may be ongoing.",
|
|
4903
4993
|
transitions_to: ["signed", "draft"]
|
|
4904
4994
|
},
|
|
4905
4995
|
{
|
|
4906
4996
|
id: "signed",
|
|
4997
|
+
status_category: "completed",
|
|
4907
4998
|
label: "Signed",
|
|
4908
4999
|
description: "All parties have signed. The contract is executed and legally binding, but the effective period may not have started yet.",
|
|
4909
5000
|
transitions_to: ["active"]
|
|
4910
5001
|
},
|
|
4911
5002
|
{
|
|
4912
5003
|
id: "active",
|
|
5004
|
+
status_category: "started",
|
|
4913
5005
|
label: "Active",
|
|
4914
5006
|
description: "The contract is in its effective period. Obligations are in force.",
|
|
4915
5007
|
transitions_to: ["expired", "terminated"]
|
|
4916
5008
|
},
|
|
4917
5009
|
{
|
|
4918
5010
|
id: "expired",
|
|
5011
|
+
status_category: "completed",
|
|
4919
5012
|
label: "Expired",
|
|
4920
5013
|
description: "The contract has reached its end date naturally.",
|
|
4921
5014
|
transitions_to: []
|
|
4922
5015
|
},
|
|
4923
5016
|
{
|
|
4924
5017
|
id: "terminated",
|
|
5018
|
+
status_category: "cancelled",
|
|
4925
5019
|
label: "Terminated",
|
|
4926
5020
|
description: "Ended before natural expiry: mutual agreement, breach, or exercise of a termination clause.",
|
|
4927
5021
|
transitions_to: []
|
|
@@ -4935,24 +5029,28 @@ var DESIGN_CONCEPT_LIFECYCLE = {
|
|
|
4935
5029
|
phases: [
|
|
4936
5030
|
{
|
|
4937
5031
|
id: "sketched",
|
|
5032
|
+
status_category: "started",
|
|
4938
5033
|
label: "Sketched",
|
|
4939
5034
|
description: "The concept has been captured in early, rough form. It is an idea worth exploring but has not been refined or evaluated.",
|
|
4940
5035
|
transitions_to: ["refined", "selected", "rejected"]
|
|
4941
5036
|
},
|
|
4942
5037
|
{
|
|
4943
5038
|
id: "refined",
|
|
5039
|
+
status_category: "started",
|
|
4944
5040
|
label: "Refined",
|
|
4945
5041
|
description: "The concept has been developed with more detail. It is being compared to other concepts in the selection process.",
|
|
4946
5042
|
transitions_to: ["selected", "rejected"]
|
|
4947
5043
|
},
|
|
4948
5044
|
{
|
|
4949
5045
|
id: "selected",
|
|
5046
|
+
status_category: "completed",
|
|
4950
5047
|
label: "Selected",
|
|
4951
5048
|
description: "This concept has been chosen to move forward into prototyping or implementation.",
|
|
4952
5049
|
transitions_to: []
|
|
4953
5050
|
},
|
|
4954
5051
|
{
|
|
4955
5052
|
id: "rejected",
|
|
5053
|
+
status_category: "cancelled",
|
|
4956
5054
|
label: "Rejected",
|
|
4957
5055
|
description: "This concept was evaluated and not selected. It is retained as a record of design exploration.",
|
|
4958
5056
|
transitions_to: []
|
|
@@ -4966,18 +5064,21 @@ var BRAND_IDENTITY_LIFECYCLE = {
|
|
|
4966
5064
|
phases: [
|
|
4967
5065
|
{
|
|
4968
5066
|
id: "exploratory",
|
|
5067
|
+
status_category: "started",
|
|
4969
5068
|
label: "Exploratory",
|
|
4970
5069
|
description: "The brand is in early formation. Names, values, visual directions, and positioning are being explored without commitment.",
|
|
4971
5070
|
transitions_to: ["defined"]
|
|
4972
5071
|
},
|
|
4973
5072
|
{
|
|
4974
5073
|
id: "defined",
|
|
5074
|
+
status_category: "started",
|
|
4975
5075
|
label: "Defined",
|
|
4976
5076
|
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.",
|
|
4977
5077
|
transitions_to: ["mature"]
|
|
4978
5078
|
},
|
|
4979
5079
|
{
|
|
4980
5080
|
id: "mature",
|
|
5081
|
+
status_category: "completed",
|
|
4981
5082
|
label: "Mature",
|
|
4982
5083
|
description: "The brand identity is fully articulated and consistently applied. Guidelines are documented and followed across all touchpoints.",
|
|
4983
5084
|
transitions_to: []
|
|
@@ -4991,30 +5092,35 @@ var SCREEN_LIFECYCLE = {
|
|
|
4991
5092
|
phases: [
|
|
4992
5093
|
{
|
|
4993
5094
|
id: "draft",
|
|
5095
|
+
status_category: "started",
|
|
4994
5096
|
label: "Draft",
|
|
4995
5097
|
description: "The screen is a rough idea: named and scoped, but not yet worked in a design tool.",
|
|
4996
5098
|
transitions_to: ["in_design"]
|
|
4997
5099
|
},
|
|
4998
5100
|
{
|
|
4999
5101
|
id: "in_design",
|
|
5102
|
+
status_category: "started",
|
|
5000
5103
|
label: "In Design",
|
|
5001
5104
|
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.",
|
|
5002
5105
|
transitions_to: ["built", "draft"]
|
|
5003
5106
|
},
|
|
5004
5107
|
{
|
|
5005
5108
|
id: "built",
|
|
5109
|
+
status_category: "started",
|
|
5006
5110
|
label: "Built",
|
|
5007
5111
|
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.",
|
|
5008
5112
|
transitions_to: ["shipped", "in_design"]
|
|
5009
5113
|
},
|
|
5010
5114
|
{
|
|
5011
5115
|
id: "shipped",
|
|
5116
|
+
status_category: "completed",
|
|
5012
5117
|
label: "Shipped",
|
|
5013
5118
|
description: "The screen is live in production and reachable by users.",
|
|
5014
5119
|
transitions_to: ["deprecated"]
|
|
5015
5120
|
},
|
|
5016
5121
|
{
|
|
5017
5122
|
id: "deprecated",
|
|
5123
|
+
status_category: "completed",
|
|
5018
5124
|
label: "Deprecated",
|
|
5019
5125
|
description: "The screen has been retired. It is no longer reachable, or is being phased out in favour of a replacement.",
|
|
5020
5126
|
transitions_to: []
|
|
@@ -5028,24 +5134,28 @@ var SERVICE_LIFECYCLE = {
|
|
|
5028
5134
|
phases: [
|
|
5029
5135
|
{
|
|
5030
5136
|
id: "development",
|
|
5137
|
+
status_category: "started",
|
|
5031
5138
|
label: "Development",
|
|
5032
5139
|
description: "The service is being built. It is not available in any shared environment.",
|
|
5033
5140
|
transitions_to: ["staging"]
|
|
5034
5141
|
},
|
|
5035
5142
|
{
|
|
5036
5143
|
id: "staging",
|
|
5144
|
+
status_category: "started",
|
|
5037
5145
|
label: "Staging",
|
|
5038
5146
|
description: "The service is deployed to a staging environment for integration testing and pre-release validation.",
|
|
5039
5147
|
transitions_to: ["production", "development"]
|
|
5040
5148
|
},
|
|
5041
5149
|
{
|
|
5042
5150
|
id: "production",
|
|
5151
|
+
status_category: "started",
|
|
5043
5152
|
label: "Production",
|
|
5044
5153
|
description: "The service is live and serving real users.",
|
|
5045
5154
|
transitions_to: ["deprecated"]
|
|
5046
5155
|
},
|
|
5047
5156
|
{
|
|
5048
5157
|
id: "deprecated",
|
|
5158
|
+
status_category: "completed",
|
|
5049
5159
|
label: "Deprecated",
|
|
5050
5160
|
description: "The service is being phased out. A successor service is in place or the capability is no longer needed.",
|
|
5051
5161
|
transitions_to: []
|
|
@@ -5059,18 +5169,21 @@ var DEPLOYMENT_LIFECYCLE = {
|
|
|
5059
5169
|
phases: [
|
|
5060
5170
|
{
|
|
5061
5171
|
id: "rolling",
|
|
5172
|
+
status_category: "started",
|
|
5062
5173
|
label: "Rolling",
|
|
5063
5174
|
description: "The deployment is in progress. Instances are being updated. Not all traffic has shifted yet.",
|
|
5064
5175
|
transitions_to: ["success", "failure"]
|
|
5065
5176
|
},
|
|
5066
5177
|
{
|
|
5067
5178
|
id: "success",
|
|
5179
|
+
status_category: "completed",
|
|
5068
5180
|
label: "Success",
|
|
5069
5181
|
description: "The deployment completed successfully. All instances are running the new version.",
|
|
5070
5182
|
transitions_to: []
|
|
5071
5183
|
},
|
|
5072
5184
|
{
|
|
5073
5185
|
id: "failure",
|
|
5186
|
+
status_category: "completed",
|
|
5074
5187
|
label: "Failure",
|
|
5075
5188
|
description: "The deployment failed or was rolled back. The previous version is restored.",
|
|
5076
5189
|
transitions_to: []
|
|
@@ -5084,18 +5197,21 @@ var FEATURE_FLAG_LIFECYCLE = {
|
|
|
5084
5197
|
phases: [
|
|
5085
5198
|
{
|
|
5086
5199
|
id: "off",
|
|
5200
|
+
status_category: "backlog",
|
|
5087
5201
|
label: "Off",
|
|
5088
5202
|
description: "The flag is disabled. The associated feature or code path is not active for any users.",
|
|
5089
5203
|
transitions_to: ["rollout", "on"]
|
|
5090
5204
|
},
|
|
5091
5205
|
{
|
|
5092
5206
|
id: "rollout",
|
|
5207
|
+
status_category: "started",
|
|
5093
5208
|
label: "Rollout",
|
|
5094
5209
|
description: "The flag is partially enabled. A percentage of users or a target segment has access.",
|
|
5095
5210
|
transitions_to: ["on", "off"]
|
|
5096
5211
|
},
|
|
5097
5212
|
{
|
|
5098
5213
|
id: "on",
|
|
5214
|
+
status_category: "completed",
|
|
5099
5215
|
label: "On",
|
|
5100
5216
|
description: "The flag is fully enabled for all users. The feature is live. The flag can be cleaned up.",
|
|
5101
5217
|
transitions_to: []
|
|
@@ -5109,30 +5225,35 @@ var INVESTIGATION_LIFECYCLE = {
|
|
|
5109
5225
|
phases: [
|
|
5110
5226
|
{
|
|
5111
5227
|
id: "open",
|
|
5228
|
+
status_category: "triage",
|
|
5112
5229
|
label: "Open",
|
|
5113
5230
|
description: "The investigation has been opened. A problem has been identified but not yet actively worked.",
|
|
5114
5231
|
transitions_to: ["active"]
|
|
5115
5232
|
},
|
|
5116
5233
|
{
|
|
5117
5234
|
id: "active",
|
|
5235
|
+
status_category: "started",
|
|
5118
5236
|
label: "Active",
|
|
5119
5237
|
description: "The investigation is being actively worked. Evidence is being gathered and hypotheses are being tested.",
|
|
5120
5238
|
transitions_to: ["paused", "resolved", "abandoned"]
|
|
5121
5239
|
},
|
|
5122
5240
|
{
|
|
5123
5241
|
id: "paused",
|
|
5242
|
+
status_category: "backlog",
|
|
5124
5243
|
label: "Paused",
|
|
5125
5244
|
description: "On hold: awaiting additional data, unblocking conditions, or reprioritisation.",
|
|
5126
5245
|
transitions_to: ["active", "abandoned"]
|
|
5127
5246
|
},
|
|
5128
5247
|
{
|
|
5129
5248
|
id: "resolved",
|
|
5249
|
+
status_category: "completed",
|
|
5130
5250
|
label: "Resolved",
|
|
5131
5251
|
description: "Root cause has been identified and documented. The investigation is closed.",
|
|
5132
5252
|
transitions_to: []
|
|
5133
5253
|
},
|
|
5134
5254
|
{
|
|
5135
5255
|
id: "abandoned",
|
|
5256
|
+
status_category: "cancelled",
|
|
5136
5257
|
label: "Abandoned",
|
|
5137
5258
|
description: "Closed without resolution: the problem could not be reproduced, was deemed not worth pursuing, or became moot.",
|
|
5138
5259
|
transitions_to: []
|
|
@@ -5146,24 +5267,28 @@ var EXTERNAL_API_LIFECYCLE = {
|
|
|
5146
5267
|
phases: [
|
|
5147
5268
|
{
|
|
5148
5269
|
id: "beta",
|
|
5270
|
+
status_category: "started",
|
|
5149
5271
|
label: "Beta",
|
|
5150
5272
|
description: "The API is available for early access or testing. It may be unstable and subject to breaking changes.",
|
|
5151
5273
|
transitions_to: ["active"]
|
|
5152
5274
|
},
|
|
5153
5275
|
{
|
|
5154
5276
|
id: "active",
|
|
5277
|
+
status_category: "started",
|
|
5155
5278
|
label: "Active",
|
|
5156
5279
|
description: "The API is stable and in production use. The provider guarantees availability per their SLA.",
|
|
5157
5280
|
transitions_to: ["deprecated", "unavailable"]
|
|
5158
5281
|
},
|
|
5159
5282
|
{
|
|
5160
5283
|
id: "deprecated",
|
|
5284
|
+
status_category: "started",
|
|
5161
5285
|
label: "Deprecated",
|
|
5162
5286
|
description: "The provider has announced end-of-life. The API still works but a migration to a successor is required.",
|
|
5163
5287
|
transitions_to: ["unavailable"]
|
|
5164
5288
|
},
|
|
5165
5289
|
{
|
|
5166
5290
|
id: "unavailable",
|
|
5291
|
+
status_category: "completed",
|
|
5167
5292
|
label: "Unavailable",
|
|
5168
5293
|
description: "The API is no longer accessible. Any dependent service is broken until migrated.",
|
|
5169
5294
|
transitions_to: []
|
|
@@ -5177,18 +5302,21 @@ var DATABASE_SCHEMA_LIFECYCLE = {
|
|
|
5177
5302
|
phases: [
|
|
5178
5303
|
{
|
|
5179
5304
|
id: "current",
|
|
5305
|
+
status_category: "started",
|
|
5180
5306
|
label: "Current",
|
|
5181
5307
|
description: "The schema is up to date with the applied migrations. No pending changes.",
|
|
5182
5308
|
transitions_to: ["pending"]
|
|
5183
5309
|
},
|
|
5184
5310
|
{
|
|
5185
5311
|
id: "pending",
|
|
5312
|
+
status_category: "unstarted",
|
|
5186
5313
|
label: "Pending",
|
|
5187
5314
|
description: "A migration is queued and ready to run. The schema will change when it is applied.",
|
|
5188
5315
|
transitions_to: ["current", "failed"]
|
|
5189
5316
|
},
|
|
5190
5317
|
{
|
|
5191
5318
|
id: "failed",
|
|
5319
|
+
status_category: "completed",
|
|
5192
5320
|
label: "Failed",
|
|
5193
5321
|
description: "A migration failed during application. The schema is in an inconsistent state and requires remediation before further changes can be applied.",
|
|
5194
5322
|
transitions_to: ["pending"]
|
|
@@ -5202,30 +5330,35 @@ var INCIDENT_LIFECYCLE = {
|
|
|
5202
5330
|
phases: [
|
|
5203
5331
|
{
|
|
5204
5332
|
id: "detected",
|
|
5333
|
+
status_category: "triage",
|
|
5205
5334
|
label: "Detected",
|
|
5206
5335
|
description: "Identified by an alert, a user report, or direct observation. Response has not yet started.",
|
|
5207
5336
|
transitions_to: ["triaged"]
|
|
5208
5337
|
},
|
|
5209
5338
|
{
|
|
5210
5339
|
id: "triaged",
|
|
5340
|
+
status_category: "triage",
|
|
5211
5341
|
label: "Triaged",
|
|
5212
5342
|
description: "The incident has been assessed for severity and impact. An on-call responder is assigned and is actively working it.",
|
|
5213
5343
|
transitions_to: ["contained"]
|
|
5214
5344
|
},
|
|
5215
5345
|
{
|
|
5216
5346
|
id: "contained",
|
|
5347
|
+
status_category: "started",
|
|
5217
5348
|
label: "Contained",
|
|
5218
5349
|
description: "Immediate user impact stopped via rollback, circuit breaker, or another emergency measure. Root cause fix is still pending.",
|
|
5219
5350
|
transitions_to: ["resolved", "mitigated"]
|
|
5220
5351
|
},
|
|
5221
5352
|
{
|
|
5222
5353
|
id: "resolved",
|
|
5354
|
+
status_category: "completed",
|
|
5223
5355
|
label: "Resolved",
|
|
5224
5356
|
description: "Root cause has been identified and fixed. The system is back to normal. A postmortem is recommended.",
|
|
5225
5357
|
transitions_to: []
|
|
5226
5358
|
},
|
|
5227
5359
|
{
|
|
5228
5360
|
id: "mitigated",
|
|
5361
|
+
status_category: "completed",
|
|
5229
5362
|
label: "Mitigated",
|
|
5230
5363
|
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.",
|
|
5231
5364
|
transitions_to: []
|
|
@@ -5239,24 +5372,28 @@ var SECURITY_CONTROL_LIFECYCLE = {
|
|
|
5239
5372
|
phases: [
|
|
5240
5373
|
{
|
|
5241
5374
|
id: "planned",
|
|
5375
|
+
status_category: "unstarted",
|
|
5242
5376
|
label: "Planned",
|
|
5243
5377
|
description: "The control has been identified as required but implementation has not started.",
|
|
5244
5378
|
transitions_to: ["in_progress"]
|
|
5245
5379
|
},
|
|
5246
5380
|
{
|
|
5247
5381
|
id: "in_progress",
|
|
5382
|
+
status_category: "started",
|
|
5248
5383
|
label: "In Progress",
|
|
5249
5384
|
description: "The control is being implemented.",
|
|
5250
5385
|
transitions_to: ["implemented"]
|
|
5251
5386
|
},
|
|
5252
5387
|
{
|
|
5253
5388
|
id: "implemented",
|
|
5389
|
+
status_category: "started",
|
|
5254
5390
|
label: "Implemented",
|
|
5255
5391
|
description: "The control is in place. It has not yet been independently tested or verified.",
|
|
5256
5392
|
transitions_to: ["verified", "in_progress"]
|
|
5257
5393
|
},
|
|
5258
5394
|
{
|
|
5259
5395
|
id: "verified",
|
|
5396
|
+
status_category: "completed",
|
|
5260
5397
|
label: "Verified",
|
|
5261
5398
|
description: "The control has been tested and confirmed effective. It provides the intended security assurance.",
|
|
5262
5399
|
transitions_to: []
|
|
@@ -5270,30 +5407,35 @@ var DATA_PIPELINE_LIFECYCLE = {
|
|
|
5270
5407
|
phases: [
|
|
5271
5408
|
{
|
|
5272
5409
|
id: "building",
|
|
5410
|
+
status_category: "started",
|
|
5273
5411
|
label: "Building",
|
|
5274
5412
|
description: "The pipeline is under construction. It is not yet processing real data.",
|
|
5275
5413
|
transitions_to: ["active"]
|
|
5276
5414
|
},
|
|
5277
5415
|
{
|
|
5278
5416
|
id: "active",
|
|
5417
|
+
status_category: "started",
|
|
5279
5418
|
label: "Active",
|
|
5280
5419
|
description: "The pipeline is running and processing data on its defined schedule.",
|
|
5281
5420
|
transitions_to: ["paused", "failed", "deprecated"]
|
|
5282
5421
|
},
|
|
5283
5422
|
{
|
|
5284
5423
|
id: "paused",
|
|
5424
|
+
status_category: "backlog",
|
|
5285
5425
|
label: "Paused",
|
|
5286
5426
|
description: "Deliberately suspended: maintenance, cost control, or upstream data unavailability.",
|
|
5287
5427
|
transitions_to: ["active", "deprecated"]
|
|
5288
5428
|
},
|
|
5289
5429
|
{
|
|
5290
5430
|
id: "failed",
|
|
5431
|
+
status_category: "started",
|
|
5291
5432
|
label: "Failed",
|
|
5292
5433
|
description: "The pipeline has errored and is not processing data. Intervention is required to restore it.",
|
|
5293
5434
|
transitions_to: ["active"]
|
|
5294
5435
|
},
|
|
5295
5436
|
{
|
|
5296
5437
|
id: "deprecated",
|
|
5438
|
+
status_category: "completed",
|
|
5297
5439
|
label: "Deprecated",
|
|
5298
5440
|
description: "The pipeline is being retired. It is no longer maintained and will be shut down.",
|
|
5299
5441
|
transitions_to: []
|
|
@@ -5307,30 +5449,35 @@ var AI_MODEL_LIFECYCLE = {
|
|
|
5307
5449
|
phases: [
|
|
5308
5450
|
{
|
|
5309
5451
|
id: "evaluating",
|
|
5452
|
+
status_category: "started",
|
|
5310
5453
|
label: "Evaluating",
|
|
5311
5454
|
description: "The model is being assessed for quality, cost, safety, and fit. Eval runs are being analysed. No production traffic.",
|
|
5312
5455
|
transitions_to: ["staging", "retired"]
|
|
5313
5456
|
},
|
|
5314
5457
|
{
|
|
5315
5458
|
id: "staging",
|
|
5459
|
+
status_category: "started",
|
|
5316
5460
|
label: "Staging",
|
|
5317
5461
|
description: "The model has passed evaluation and is deployed to a staging environment for integration testing.",
|
|
5318
5462
|
transitions_to: ["production", "evaluating", "retired"]
|
|
5319
5463
|
},
|
|
5320
5464
|
{
|
|
5321
5465
|
id: "production",
|
|
5466
|
+
status_category: "started",
|
|
5322
5467
|
label: "Production",
|
|
5323
5468
|
description: "The model is serving live product traffic.",
|
|
5324
5469
|
transitions_to: ["deprecated", "retired"]
|
|
5325
5470
|
},
|
|
5326
5471
|
{
|
|
5327
5472
|
id: "deprecated",
|
|
5473
|
+
status_category: "started",
|
|
5328
5474
|
label: "Deprecated",
|
|
5329
5475
|
description: "A successor model is in production. This model is being phased out. Traffic is being migrated.",
|
|
5330
5476
|
transitions_to: ["retired"]
|
|
5331
5477
|
},
|
|
5332
5478
|
{
|
|
5333
5479
|
id: "retired",
|
|
5480
|
+
status_category: "completed",
|
|
5334
5481
|
label: "Retired",
|
|
5335
5482
|
description: "The model is fully decommissioned. No traffic. Historical records are preserved.",
|
|
5336
5483
|
transitions_to: []
|
|
@@ -5344,36 +5491,42 @@ var WORKFLOW_RUN_LIFECYCLE = {
|
|
|
5344
5491
|
phases: [
|
|
5345
5492
|
{
|
|
5346
5493
|
id: "pending",
|
|
5494
|
+
status_category: "unstarted",
|
|
5347
5495
|
label: "Pending",
|
|
5348
5496
|
description: "The run has been queued and is awaiting execution. Resources or dependencies are being provisioned.",
|
|
5349
5497
|
transitions_to: ["running", "cancelled"]
|
|
5350
5498
|
},
|
|
5351
5499
|
{
|
|
5352
5500
|
id: "running",
|
|
5501
|
+
status_category: "started",
|
|
5353
5502
|
label: "Running",
|
|
5354
5503
|
description: "The workflow is actively executing its steps.",
|
|
5355
5504
|
transitions_to: ["blocked", "completed", "failed", "cancelled"]
|
|
5356
5505
|
},
|
|
5357
5506
|
{
|
|
5358
5507
|
id: "blocked",
|
|
5508
|
+
status_category: "started",
|
|
5359
5509
|
label: "Blocked",
|
|
5360
5510
|
description: "Execution is paused at a review_gate awaiting human or automated approval before proceeding.",
|
|
5361
5511
|
transitions_to: ["running", "cancelled"]
|
|
5362
5512
|
},
|
|
5363
5513
|
{
|
|
5364
5514
|
id: "completed",
|
|
5515
|
+
status_category: "completed",
|
|
5365
5516
|
label: "Completed",
|
|
5366
5517
|
description: "All steps executed successfully. Outputs are available.",
|
|
5367
5518
|
transitions_to: []
|
|
5368
5519
|
},
|
|
5369
5520
|
{
|
|
5370
5521
|
id: "failed",
|
|
5522
|
+
status_category: "completed",
|
|
5371
5523
|
label: "Failed",
|
|
5372
5524
|
description: "The run encountered an unrecoverable error and stopped. Partial outputs may be available.",
|
|
5373
5525
|
transitions_to: []
|
|
5374
5526
|
},
|
|
5375
5527
|
{
|
|
5376
5528
|
id: "cancelled",
|
|
5529
|
+
status_category: "cancelled",
|
|
5377
5530
|
label: "Cancelled",
|
|
5378
5531
|
description: "The run was deliberately stopped before completion.",
|
|
5379
5532
|
transitions_to: []
|
|
@@ -5387,30 +5540,35 @@ var AGENT_DEFINITION_LIFECYCLE = {
|
|
|
5387
5540
|
phases: [
|
|
5388
5541
|
{
|
|
5389
5542
|
id: "testing",
|
|
5543
|
+
status_category: "started",
|
|
5390
5544
|
label: "Testing",
|
|
5391
5545
|
description: "The agent is being validated in a controlled environment. Sessions are not running against real product data.",
|
|
5392
5546
|
transitions_to: ["active", "disabled"]
|
|
5393
5547
|
},
|
|
5394
5548
|
{
|
|
5395
5549
|
id: "active",
|
|
5550
|
+
status_category: "started",
|
|
5396
5551
|
label: "Active",
|
|
5397
5552
|
description: "The agent is operational and creating sessions on demand.",
|
|
5398
5553
|
transitions_to: ["paused", "disabled", "retired"]
|
|
5399
5554
|
},
|
|
5400
5555
|
{
|
|
5401
5556
|
id: "paused",
|
|
5557
|
+
status_category: "backlog",
|
|
5402
5558
|
label: "Paused",
|
|
5403
5559
|
description: "The agent is temporarily suspended. It is not creating new sessions but its configuration is preserved.",
|
|
5404
5560
|
transitions_to: ["active", "retired"]
|
|
5405
5561
|
},
|
|
5406
5562
|
{
|
|
5407
5563
|
id: "disabled",
|
|
5564
|
+
status_category: "backlog",
|
|
5408
5565
|
label: "Disabled",
|
|
5409
5566
|
description: "Turned off: bug, policy change, or safety concern. Can be re-enabled after remediation.",
|
|
5410
5567
|
transitions_to: ["testing", "active", "retired"]
|
|
5411
5568
|
},
|
|
5412
5569
|
{
|
|
5413
5570
|
id: "retired",
|
|
5571
|
+
status_category: "completed",
|
|
5414
5572
|
label: "Retired",
|
|
5415
5573
|
description: "The agent has been permanently decommissioned. Sessions are no longer created from this definition.",
|
|
5416
5574
|
transitions_to: []
|
|
@@ -5424,24 +5582,28 @@ var AGENT_SESSION_LIFECYCLE = {
|
|
|
5424
5582
|
phases: [
|
|
5425
5583
|
{
|
|
5426
5584
|
id: "active",
|
|
5585
|
+
status_category: "started",
|
|
5427
5586
|
label: "Active",
|
|
5428
5587
|
description: "The session is running. The agent is processing input and producing output.",
|
|
5429
5588
|
transitions_to: ["completed", "crashed", "timed_out"]
|
|
5430
5589
|
},
|
|
5431
5590
|
{
|
|
5432
5591
|
id: "completed",
|
|
5592
|
+
status_category: "completed",
|
|
5433
5593
|
label: "Completed",
|
|
5434
5594
|
description: "The session ended normally. The task was completed or the conversation was concluded.",
|
|
5435
5595
|
transitions_to: []
|
|
5436
5596
|
},
|
|
5437
5597
|
{
|
|
5438
5598
|
id: "crashed",
|
|
5599
|
+
status_category: "completed",
|
|
5439
5600
|
label: "Crashed",
|
|
5440
5601
|
description: "The session terminated unexpectedly due to an unhandled error or infrastructure failure.",
|
|
5441
5602
|
transitions_to: []
|
|
5442
5603
|
},
|
|
5443
5604
|
{
|
|
5444
5605
|
id: "timed_out",
|
|
5606
|
+
status_category: "completed",
|
|
5445
5607
|
label: "Timed Out",
|
|
5446
5608
|
description: "The session exceeded its maximum allowed duration and was automatically terminated.",
|
|
5447
5609
|
transitions_to: []
|
|
@@ -5455,24 +5617,28 @@ var REVIEW_GATE_LIFECYCLE = {
|
|
|
5455
5617
|
phases: [
|
|
5456
5618
|
{
|
|
5457
5619
|
id: "pending",
|
|
5620
|
+
status_category: "unstarted",
|
|
5458
5621
|
label: "Pending",
|
|
5459
5622
|
description: "The gate is awaiting review. The workflow is blocked until a decision is made.",
|
|
5460
5623
|
transitions_to: ["approved", "rejected", "bypassed"]
|
|
5461
5624
|
},
|
|
5462
5625
|
{
|
|
5463
5626
|
id: "approved",
|
|
5627
|
+
status_category: "completed",
|
|
5464
5628
|
label: "Approved",
|
|
5465
5629
|
description: "The gate has been passed. The workflow continues.",
|
|
5466
5630
|
transitions_to: []
|
|
5467
5631
|
},
|
|
5468
5632
|
{
|
|
5469
5633
|
id: "rejected",
|
|
5634
|
+
status_category: "cancelled",
|
|
5470
5635
|
label: "Rejected",
|
|
5471
5636
|
description: "The gate was not passed. The workflow is blocked and the submitter must address the feedback before re-submitting.",
|
|
5472
5637
|
transitions_to: ["pending"]
|
|
5473
5638
|
},
|
|
5474
5639
|
{
|
|
5475
5640
|
id: "bypassed",
|
|
5641
|
+
status_category: "cancelled",
|
|
5476
5642
|
label: "Bypassed",
|
|
5477
5643
|
description: "Deliberately overridden without normal review by an authorised person in an emergency. Create an audit trail entry.",
|
|
5478
5644
|
transitions_to: []
|
|
@@ -5486,18 +5652,21 @@ var TEST_SUITE_LIFECYCLE = {
|
|
|
5486
5652
|
phases: [
|
|
5487
5653
|
{
|
|
5488
5654
|
id: "draft",
|
|
5655
|
+
status_category: "started",
|
|
5489
5656
|
label: "Draft",
|
|
5490
5657
|
description: "The test suite is being authored. It is not yet part of any CI or QA process.",
|
|
5491
5658
|
transitions_to: ["active"]
|
|
5492
5659
|
},
|
|
5493
5660
|
{
|
|
5494
5661
|
id: "active",
|
|
5662
|
+
status_category: "started",
|
|
5495
5663
|
label: "Active",
|
|
5496
5664
|
description: "The suite is running in CI or scheduled QA processes.",
|
|
5497
5665
|
transitions_to: ["deprecated"]
|
|
5498
5666
|
},
|
|
5499
5667
|
{
|
|
5500
5668
|
id: "deprecated",
|
|
5669
|
+
status_category: "completed",
|
|
5501
5670
|
label: "Deprecated",
|
|
5502
5671
|
description: "The suite is no longer being run. It may be superseded by a newer suite or the tested functionality may have been removed.",
|
|
5503
5672
|
transitions_to: []
|
|
@@ -5511,18 +5680,21 @@ var TEST_CASE_LIFECYCLE = {
|
|
|
5511
5680
|
phases: [
|
|
5512
5681
|
{
|
|
5513
5682
|
id: "draft",
|
|
5683
|
+
status_category: "started",
|
|
5514
5684
|
label: "Draft",
|
|
5515
5685
|
description: "The test case is being written. Preconditions, steps, and expected results are being defined.",
|
|
5516
5686
|
transitions_to: ["active"]
|
|
5517
5687
|
},
|
|
5518
5688
|
{
|
|
5519
5689
|
id: "active",
|
|
5690
|
+
status_category: "started",
|
|
5520
5691
|
label: "Active",
|
|
5521
5692
|
description: "The test case is included in one or more test suites and is being executed.",
|
|
5522
5693
|
transitions_to: ["deprecated"]
|
|
5523
5694
|
},
|
|
5524
5695
|
{
|
|
5525
5696
|
id: "deprecated",
|
|
5697
|
+
status_category: "completed",
|
|
5526
5698
|
label: "Deprecated",
|
|
5527
5699
|
description: "The test case is no longer executed. The feature it covered may have changed or been removed.",
|
|
5528
5700
|
transitions_to: []
|
|
@@ -5534,10 +5706,10 @@ var INSIGHT_LIFECYCLE = {
|
|
|
5534
5706
|
initial_phase: "proposed",
|
|
5535
5707
|
terminal_phases: ["applied", "retired"],
|
|
5536
5708
|
phases: [
|
|
5537
|
-
{ id: "proposed", label: "Proposed", description: "A pattern has been synthesised from observations. Not yet cross-checked.", transitions_to: ["validated", "retired"] },
|
|
5538
|
-
{ id: "validated", label: "Validated", description: "The insight has been cross-checked against additional evidence. Believed reliable.", transitions_to: ["applied", "retired"] },
|
|
5539
|
-
{ id: "applied", label: "Applied", description: "The insight drove a product decision. Captured for the record.", transitions_to: ["retired"] },
|
|
5540
|
-
{ id: "retired", label: "Retired", description: "Superseded by newer insight, or no longer relevant. May reopen to proposed if revisited.", transitions_to: ["proposed"] }
|
|
5709
|
+
{ id: "proposed", status_category: "triage", label: "Proposed", description: "A pattern has been synthesised from observations. Not yet cross-checked.", transitions_to: ["validated", "retired"] },
|
|
5710
|
+
{ id: "validated", status_category: "started", label: "Validated", description: "The insight has been cross-checked against additional evidence. Believed reliable.", transitions_to: ["applied", "retired"] },
|
|
5711
|
+
{ id: "applied", status_category: "completed", label: "Applied", description: "The insight drove a product decision. Captured for the record.", transitions_to: ["retired"] },
|
|
5712
|
+
{ 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"] }
|
|
5541
5713
|
]
|
|
5542
5714
|
};
|
|
5543
5715
|
var RESEARCH_QUESTION_LIFECYCLE = {
|
|
@@ -5545,10 +5717,10 @@ var RESEARCH_QUESTION_LIFECYCLE = {
|
|
|
5545
5717
|
initial_phase: "open",
|
|
5546
5718
|
terminal_phases: ["answered", "parked"],
|
|
5547
5719
|
phases: [
|
|
5548
|
-
{ id: "open", label: "Open", description: "Question has been articulated. Research has not started.", transitions_to: ["researching", "parked"] },
|
|
5549
|
-
{ id: "researching", label: "Researching", description: "Active investigation. Methods are being run, evidence is being gathered.", transitions_to: ["answered", "parked"] },
|
|
5550
|
-
{ id: "answered", label: "Answered", description: "Question has been resolved. Findings captured in linked insights.", transitions_to: [] },
|
|
5551
|
-
{ id: "parked", label: "Parked", description: "Set aside due to capacity, priority, or dependency. May reopen to researching.", transitions_to: ["researching"] }
|
|
5720
|
+
{ id: "open", status_category: "triage", label: "Open", description: "Question has been articulated. Research has not started.", transitions_to: ["researching", "parked"] },
|
|
5721
|
+
{ id: "researching", status_category: "started", label: "Researching", description: "Active investigation. Methods are being run, evidence is being gathered.", transitions_to: ["answered", "parked"] },
|
|
5722
|
+
{ id: "answered", status_category: "completed", label: "Answered", description: "Question has been resolved. Findings captured in linked insights.", transitions_to: [] },
|
|
5723
|
+
{ id: "parked", status_category: "backlog", label: "Parked", description: "Set aside due to capacity, priority, or dependency. May reopen to researching.", transitions_to: ["researching"] }
|
|
5552
5724
|
]
|
|
5553
5725
|
};
|
|
5554
5726
|
var INTERVIEW_GUIDE_LIFECYCLE = {
|
|
@@ -5556,10 +5728,10 @@ var INTERVIEW_GUIDE_LIFECYCLE = {
|
|
|
5556
5728
|
initial_phase: "drafting",
|
|
5557
5729
|
terminal_phases: ["archived"],
|
|
5558
5730
|
phases: [
|
|
5559
|
-
{ id: "drafting", label: "Drafting", description: "Guide is being authored or revised. Not yet ready for use.", transitions_to: ["ready"] },
|
|
5560
|
-
{ id: "ready", label: "Ready", description: "Guide is approved for use. May be picked up by a study.", transitions_to: ["in_use", "drafting"] },
|
|
5561
|
-
{ id: "in_use", label: "In Use", description: "Currently being run in one or more research_study entities.", transitions_to: ["ready", "archived"] },
|
|
5562
|
-
{ id: "archived", label: "Archived", description: "Retired from active use. May reopen to drafting if revived.", transitions_to: ["drafting"] }
|
|
5731
|
+
{ id: "drafting", status_category: "started", label: "Drafting", description: "Guide is being authored or revised. Not yet ready for use.", transitions_to: ["ready"] },
|
|
5732
|
+
{ 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"] },
|
|
5733
|
+
{ id: "in_use", status_category: "started", label: "In Use", description: "Currently being run in one or more research_study entities.", transitions_to: ["ready", "archived"] },
|
|
5734
|
+
{ id: "archived", status_category: "completed", label: "Archived", description: "Retired from active use. May reopen to drafting if revived.", transitions_to: ["drafting"] }
|
|
5563
5735
|
]
|
|
5564
5736
|
};
|
|
5565
5737
|
var TEST_PLAN_LIFECYCLE = {
|
|
@@ -5567,10 +5739,10 @@ var TEST_PLAN_LIFECYCLE = {
|
|
|
5567
5739
|
initial_phase: "drafted",
|
|
5568
5740
|
terminal_phases: ["completed", "cancelled"],
|
|
5569
5741
|
phases: [
|
|
5570
|
-
{ id: "drafted", label: "Drafted", description: "Plan has been authored. Not yet started.", transitions_to: ["executing", "cancelled"] },
|
|
5571
|
-
{ id: "executing", label: "Executing", description: "Tests are running according to the plan.", transitions_to: ["completed", "cancelled"] },
|
|
5572
|
-
{ id: "completed", label: "Completed", description: "All tests in the plan have run. Outcomes captured in linked test_result entities.", transitions_to: ["executing"] },
|
|
5573
|
-
{ id: "cancelled", label: "Cancelled", description: "Plan was abandoned mid-flight: assumption changed, priorities shifted, or the underlying code went away.", transitions_to: [] }
|
|
5742
|
+
{ id: "drafted", status_category: "unstarted", label: "Drafted", description: "Plan has been authored. Not yet started.", transitions_to: ["executing", "cancelled"] },
|
|
5743
|
+
{ id: "executing", status_category: "started", label: "Executing", description: "Tests are running according to the plan.", transitions_to: ["completed", "cancelled"] },
|
|
5744
|
+
{ 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"] },
|
|
5745
|
+
{ 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: [] }
|
|
5574
5746
|
]
|
|
5575
5747
|
};
|
|
5576
5748
|
var AI_DATASET_LIFECYCLE = {
|
|
@@ -5578,10 +5750,10 @@ var AI_DATASET_LIFECYCLE = {
|
|
|
5578
5750
|
initial_phase: "collecting",
|
|
5579
5751
|
terminal_phases: ["versioned", "archived"],
|
|
5580
5752
|
phases: [
|
|
5581
|
-
{ id: "collecting", label: "Collecting", description: "Examples are being gathered. Schema and labelling rules may still be in flux.", transitions_to: ["curated", "archived"] },
|
|
5582
|
-
{ id: "curated", label: "Curated", description: "Examples have been cleaned, deduped, and labelled. Ready for versioning.", transitions_to: ["versioned", "collecting"] },
|
|
5583
|
-
{ id: "versioned", label: "Versioned", description: "A specific cut has been pinned and is citable. New collection continues in a successor version.", transitions_to: ["archived"] },
|
|
5584
|
-
{ id: "archived", label: "Archived", description: "No longer in active use. May reopen to collecting if revived.", transitions_to: ["collecting"] }
|
|
5753
|
+
{ 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"] },
|
|
5754
|
+
{ id: "curated", status_category: "started", label: "Curated", description: "Examples have been cleaned, deduped, and labelled. Ready for versioning.", transitions_to: ["versioned", "collecting"] },
|
|
5755
|
+
{ 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"] },
|
|
5756
|
+
{ id: "archived", status_category: "completed", label: "Archived", description: "No longer in active use. May reopen to collecting if revived.", transitions_to: ["collecting"] }
|
|
5585
5757
|
]
|
|
5586
5758
|
};
|
|
5587
5759
|
var AI_GUARDRAIL_LIFECYCLE = {
|
|
@@ -5589,10 +5761,10 @@ var AI_GUARDRAIL_LIFECYCLE = {
|
|
|
5589
5761
|
initial_phase: "proposed",
|
|
5590
5762
|
terminal_phases: ["active", "relaxed", "removed"],
|
|
5591
5763
|
phases: [
|
|
5592
|
-
{ id: "proposed", label: "Proposed", description: "Guardrail has been suggested. Not yet enforced.", transitions_to: ["active", "removed"] },
|
|
5593
|
-
{ id: "active", label: "Active", description: "Guardrail is enforced as designed. Currently the steady state.", transitions_to: ["relaxed", "removed"] },
|
|
5594
|
-
{ 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"] },
|
|
5595
|
-
{ id: "removed", label: "Removed", description: "Guardrail is no longer enforced. May reopen to active if reinstated.", transitions_to: ["active"] }
|
|
5764
|
+
{ id: "proposed", status_category: "triage", label: "Proposed", description: "Guardrail has been suggested. Not yet enforced.", transitions_to: ["active", "removed"] },
|
|
5765
|
+
{ id: "active", status_category: "started", label: "Active", description: "Guardrail is enforced as designed. Currently the steady state.", transitions_to: ["relaxed", "removed"] },
|
|
5766
|
+
{ 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"] },
|
|
5767
|
+
{ id: "removed", status_category: "cancelled", label: "Removed", description: "Guardrail is no longer enforced. May reopen to active if reinstated.", transitions_to: ["active"] }
|
|
5596
5768
|
]
|
|
5597
5769
|
};
|
|
5598
5770
|
var MODEL_COMPARISON_LIFECYCLE = {
|
|
@@ -5600,10 +5772,10 @@ var MODEL_COMPARISON_LIFECYCLE = {
|
|
|
5600
5772
|
initial_phase: "planned",
|
|
5601
5773
|
terminal_phases: ["published", "archived"],
|
|
5602
5774
|
phases: [
|
|
5603
|
-
{ id: "planned", label: "Planned", description: "Comparison has been scoped: models, criteria, and methodology are agreed.", transitions_to: ["running", "archived"] },
|
|
5604
|
-
{ id: "running", label: "Running", description: "Models are being evaluated against the chosen criteria.", transitions_to: ["published", "archived"] },
|
|
5605
|
-
{ id: "published", label: "Published", description: "Results are written up and citable. Drives downstream model selection.", transitions_to: ["archived", "planned"] },
|
|
5606
|
-
{ id: "archived", label: "Archived", description: "Superseded by newer comparison. May reopen to planned if re-run.", transitions_to: ["planned"] }
|
|
5775
|
+
{ id: "planned", status_category: "unstarted", label: "Planned", description: "Comparison has been scoped: models, criteria, and methodology are agreed.", transitions_to: ["running", "archived"] },
|
|
5776
|
+
{ id: "running", status_category: "started", label: "Running", description: "Models are being evaluated against the chosen criteria.", transitions_to: ["published", "archived"] },
|
|
5777
|
+
{ id: "published", status_category: "completed", label: "Published", description: "Results are written up and citable. Drives downstream model selection.", transitions_to: ["archived", "planned"] },
|
|
5778
|
+
{ id: "archived", status_category: "completed", label: "Archived", description: "Superseded by newer comparison. May reopen to planned if re-run.", transitions_to: ["planned"] }
|
|
5607
5779
|
]
|
|
5608
5780
|
};
|
|
5609
5781
|
var PROMPT_VERSION_LIFECYCLE = {
|
|
@@ -5611,10 +5783,10 @@ var PROMPT_VERSION_LIFECYCLE = {
|
|
|
5611
5783
|
initial_phase: "drafted",
|
|
5612
5784
|
terminal_phases: ["active", "deprecated"],
|
|
5613
5785
|
phases: [
|
|
5614
|
-
{ id: "drafted", label: "Drafted", description: "Prompt has been authored. Not yet evaluated.", transitions_to: ["testing", "deprecated"] },
|
|
5615
|
-
{ id: "testing", label: "Testing", description: "Running through eval benchmarks. Results inform whether to promote.", transitions_to: ["active", "drafted", "deprecated"] },
|
|
5616
|
-
{ id: "active", label: "Active", description: "In production use.", transitions_to: ["deprecated"] },
|
|
5617
|
-
{ id: "deprecated", label: "Deprecated", description: "Superseded by a successor version. Still available for backwards-compat. May reopen to testing if reinstated.", transitions_to: ["testing"] }
|
|
5786
|
+
{ id: "drafted", status_category: "unstarted", label: "Drafted", description: "Prompt has been authored. Not yet evaluated.", transitions_to: ["testing", "deprecated"] },
|
|
5787
|
+
{ id: "testing", status_category: "started", label: "Testing", description: "Running through eval benchmarks. Results inform whether to promote.", transitions_to: ["active", "drafted", "deprecated"] },
|
|
5788
|
+
{ id: "active", status_category: "started", label: "Active", description: "In production use.", transitions_to: ["deprecated"] },
|
|
5789
|
+
{ 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"] }
|
|
5618
5790
|
]
|
|
5619
5791
|
};
|
|
5620
5792
|
var EVAL_BENCHMARK_LIFECYCLE = {
|
|
@@ -5622,10 +5794,10 @@ var EVAL_BENCHMARK_LIFECYCLE = {
|
|
|
5622
5794
|
initial_phase: "drafted",
|
|
5623
5795
|
terminal_phases: ["published", "deprecated"],
|
|
5624
5796
|
phases: [
|
|
5625
|
-
{ id: "drafted", label: "Drafted", description: "Benchmark questions and scoring rubric are being designed.", transitions_to: ["running", "deprecated"] },
|
|
5626
|
-
{ id: "running", label: "Running", description: "Benchmark is being executed against models or prompt versions.", transitions_to: ["published", "deprecated"] },
|
|
5627
|
-
{ id: "published", label: "Published", description: "Results are citable. Benchmark is part of the standard eval rotation.", transitions_to: ["deprecated", "running"] },
|
|
5628
|
-
{ id: "deprecated", label: "Deprecated", description: "Benchmark no longer reflects what the team measures. May reopen to drafted if revisited.", transitions_to: ["drafted"] }
|
|
5797
|
+
{ id: "drafted", status_category: "unstarted", label: "Drafted", description: "Benchmark questions and scoring rubric are being designed.", transitions_to: ["running", "deprecated"] },
|
|
5798
|
+
{ id: "running", status_category: "started", label: "Running", description: "Benchmark is being executed against models or prompt versions.", transitions_to: ["published", "deprecated"] },
|
|
5799
|
+
{ id: "published", status_category: "completed", label: "Published", description: "Results are citable. Benchmark is part of the standard eval rotation.", transitions_to: ["deprecated", "running"] },
|
|
5800
|
+
{ 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"] }
|
|
5629
5801
|
]
|
|
5630
5802
|
};
|
|
5631
5803
|
var BUSINESS_MODEL_LIFECYCLE = {
|
|
@@ -5633,11 +5805,11 @@ var BUSINESS_MODEL_LIFECYCLE = {
|
|
|
5633
5805
|
initial_phase: "drafted",
|
|
5634
5806
|
terminal_phases: ["validated", "invalidated", "pivoted"],
|
|
5635
5807
|
phases: [
|
|
5636
|
-
{ id: "drafted", label: "Drafted", description: "Model has been articulated. Not yet tested in market.", transitions_to: ["testing", "invalidated"] },
|
|
5637
|
-
{ id: "testing", label: "Testing", description: "Model is being tested against real customers and revenue. Evidence is accumulating.", transitions_to: ["validated", "invalidated", "pivoted"] },
|
|
5638
|
-
{ id: "validated", label: "Validated", description: "Model holds up under real customer behaviour. Forms the operating basis.", transitions_to: ["testing", "pivoted"] },
|
|
5639
|
-
{ id: "invalidated", label: "Invalidated", description: "Model failed to hold up. May reopen to drafted for a new attempt.", transitions_to: ["drafted"] },
|
|
5640
|
-
{ id: "pivoted", label: "Pivoted", description: "Model became something structurally different. Captured as a milestone before the new model takes over.", transitions_to: [] }
|
|
5808
|
+
{ id: "drafted", status_category: "unstarted", label: "Drafted", description: "Model has been articulated. Not yet tested in market.", transitions_to: ["testing", "invalidated"] },
|
|
5809
|
+
{ 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"] },
|
|
5810
|
+
{ id: "validated", status_category: "completed", label: "Validated", description: "Model holds up under real customer behaviour. Forms the operating basis.", transitions_to: ["testing", "pivoted"] },
|
|
5811
|
+
{ id: "invalidated", status_category: "completed", label: "Invalidated", description: "Model failed to hold up. May reopen to drafted for a new attempt.", transitions_to: ["drafted"] },
|
|
5812
|
+
{ 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: [] }
|
|
5641
5813
|
]
|
|
5642
5814
|
};
|
|
5643
5815
|
var REVENUE_STREAM_LIFECYCLE = {
|
|
@@ -5645,10 +5817,10 @@ var REVENUE_STREAM_LIFECYCLE = {
|
|
|
5645
5817
|
initial_phase: "proposed",
|
|
5646
5818
|
terminal_phases: ["live", "sunset"],
|
|
5647
5819
|
phases: [
|
|
5648
|
-
{ id: "proposed", label: "Proposed", description: "Stream has been hypothesised. Not yet built or sold.", transitions_to: ["piloting", "sunset"] },
|
|
5649
|
-
{ 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"] },
|
|
5650
|
-
{ id: "live", label: "Live", description: "Stream is generally available and generating revenue.", transitions_to: ["sunset"] },
|
|
5651
|
-
{ id: "sunset", label: "Sunset", description: "Stream is being wound down. May reopen to piloting if revived.", transitions_to: ["piloting"] }
|
|
5820
|
+
{ id: "proposed", status_category: "triage", label: "Proposed", description: "Stream has been hypothesised. Not yet built or sold.", transitions_to: ["piloting", "sunset"] },
|
|
5821
|
+
{ 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"] },
|
|
5822
|
+
{ id: "live", status_category: "started", label: "Live", description: "Stream is generally available and generating revenue.", transitions_to: ["sunset"] },
|
|
5823
|
+
{ id: "sunset", status_category: "completed", label: "Sunset", description: "Stream is being wound down. May reopen to piloting if revived.", transitions_to: ["piloting"] }
|
|
5652
5824
|
]
|
|
5653
5825
|
};
|
|
5654
5826
|
var CUSTOMER_HEALTH_SCORE_LIFECYCLE = {
|
|
@@ -5656,11 +5828,11 @@ var CUSTOMER_HEALTH_SCORE_LIFECYCLE = {
|
|
|
5656
5828
|
initial_phase: "monitoring",
|
|
5657
5829
|
terminal_phases: ["recovered", "churned"],
|
|
5658
5830
|
phases: [
|
|
5659
|
-
{ id: "monitoring", label: "Monitoring", description: "Customer is healthy. Score is being tracked passively.", transitions_to: ["at_risk", "churned", "recovered"] },
|
|
5660
|
-
{ id: "at_risk", label: "At Risk", description: "Signals indicate trouble. Customer Success has flagged the account for attention.", transitions_to: ["monitoring", "critical", "churned", "recovered"] },
|
|
5661
|
-
{ id: "critical", label: "Critical", description: "Customer is on the verge of churning. Active intervention is underway.", transitions_to: ["at_risk", "recovered", "churned"] },
|
|
5662
|
-
{ id: "recovered", label: "Recovered", description: "Customer health has returned to monitoring. Captured as a milestone. May reopen to monitoring naturally.", transitions_to: ["monitoring"] },
|
|
5663
|
-
{ id: "churned", label: "Churned", description: "Customer left. Captured for analysis; reopen would mean a new customer relationship.", transitions_to: [] }
|
|
5831
|
+
{ id: "monitoring", status_category: "started", label: "Monitoring", description: "Customer is healthy. Score is being tracked passively.", transitions_to: ["at_risk", "churned", "recovered"] },
|
|
5832
|
+
{ 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"] },
|
|
5833
|
+
{ 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"] },
|
|
5834
|
+
{ 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"] },
|
|
5835
|
+
{ id: "churned", status_category: "cancelled", label: "Churned", description: "Customer left. Captured for analysis; reopen would mean a new customer relationship.", transitions_to: [] }
|
|
5664
5836
|
]
|
|
5665
5837
|
};
|
|
5666
5838
|
var PLAYBOOK_LIFECYCLE = {
|
|
@@ -5668,10 +5840,10 @@ var PLAYBOOK_LIFECYCLE = {
|
|
|
5668
5840
|
initial_phase: "drafted",
|
|
5669
5841
|
terminal_phases: ["live", "retired"],
|
|
5670
5842
|
phases: [
|
|
5671
|
-
{ id: "drafted", label: "Drafted", description: "Playbook is being authored. Not yet tested with customers.", transitions_to: ["tested", "retired"] },
|
|
5672
|
-
{ id: "tested", label: "Tested", description: "Playbook has been run through pilot customers. Adjustments may follow.", transitions_to: ["live", "drafted"] },
|
|
5673
|
-
{ id: "live", label: "Live", description: "Playbook is in active use across the customer success team.", transitions_to: ["retired", "tested"] },
|
|
5674
|
-
{ id: "retired", label: "Retired", description: "Playbook no longer in use. May reopen to drafted if revived.", transitions_to: ["drafted"] }
|
|
5843
|
+
{ id: "drafted", status_category: "unstarted", label: "Drafted", description: "Playbook is being authored. Not yet tested with customers.", transitions_to: ["tested", "retired"] },
|
|
5844
|
+
{ id: "tested", status_category: "started", label: "Tested", description: "Playbook has been run through pilot customers. Adjustments may follow.", transitions_to: ["live", "drafted"] },
|
|
5845
|
+
{ id: "live", status_category: "started", label: "Live", description: "Playbook is in active use across the customer success team.", transitions_to: ["retired", "tested"] },
|
|
5846
|
+
{ id: "retired", status_category: "completed", label: "Retired", description: "Playbook no longer in use. May reopen to drafted if revived.", transitions_to: ["drafted"] }
|
|
5675
5847
|
]
|
|
5676
5848
|
};
|
|
5677
5849
|
var TEAM_OKR_LIFECYCLE = {
|
|
@@ -5679,11 +5851,11 @@ var TEAM_OKR_LIFECYCLE = {
|
|
|
5679
5851
|
initial_phase: "drafted",
|
|
5680
5852
|
terminal_phases: ["completed", "missed"],
|
|
5681
5853
|
phases: [
|
|
5682
|
-
{ id: "drafted", label: "Drafted", description: "OKR is being authored. Not yet committed to.", transitions_to: ["committed"] },
|
|
5683
|
-
{ id: "committed", label: "Committed", description: "Team has agreed to pursue the OKR. Cycle has not yet started.", transitions_to: ["in_progress", "drafted"] },
|
|
5684
|
-
{ id: "in_progress", label: "In Progress", description: "Cycle is underway. Progress is being tracked.", transitions_to: ["completed", "missed"] },
|
|
5685
|
-
{ id: "completed", label: "Completed", description: "OKR was achieved within the cycle.", transitions_to: [] },
|
|
5686
|
-
{ id: "missed", label: "Missed", description: "OKR was not achieved. May reopen to in_progress if carried forward.", transitions_to: ["in_progress"] }
|
|
5854
|
+
{ id: "drafted", status_category: "unstarted", label: "Drafted", description: "OKR is being authored. Not yet committed to.", transitions_to: ["committed"] },
|
|
5855
|
+
{ 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"] },
|
|
5856
|
+
{ id: "in_progress", status_category: "started", label: "In Progress", description: "Cycle is underway. Progress is being tracked.", transitions_to: ["completed", "missed"] },
|
|
5857
|
+
{ id: "completed", status_category: "completed", label: "Completed", description: "OKR was achieved within the cycle.", transitions_to: [] },
|
|
5858
|
+
{ id: "missed", status_category: "completed", label: "Missed", description: "OKR was not achieved. May reopen to in_progress if carried forward.", transitions_to: ["in_progress"] }
|
|
5687
5859
|
]
|
|
5688
5860
|
};
|
|
5689
5861
|
var RETROSPECTIVE_LIFECYCLE = {
|
|
@@ -5691,10 +5863,10 @@ var RETROSPECTIVE_LIFECYCLE = {
|
|
|
5691
5863
|
initial_phase: "scheduled",
|
|
5692
5864
|
terminal_phases: ["completed", "actions_tracked"],
|
|
5693
5865
|
phases: [
|
|
5694
|
-
{ id: "scheduled", label: "Scheduled", description: "Retro is on the calendar. Not yet held.", transitions_to: ["in_progress", "completed"] },
|
|
5695
|
-
{ id: "in_progress", label: "In Progress", description: "Retro is being held.", transitions_to: ["completed"] },
|
|
5696
|
-
{ id: "completed", label: "Completed", description: "Meeting is done. Action items captured but not yet tracked to closure.", transitions_to: ["actions_tracked"] },
|
|
5697
|
-
{ id: "actions_tracked", label: "Actions Tracked", description: "Retro action items have been completed or explicitly dropped. Full loop closed.", transitions_to: [] }
|
|
5866
|
+
{ id: "scheduled", status_category: "unstarted", label: "Scheduled", description: "Retro is on the calendar. Not yet held.", transitions_to: ["in_progress", "completed"] },
|
|
5867
|
+
{ id: "in_progress", status_category: "started", label: "In Progress", description: "Retro is being held.", transitions_to: ["completed"] },
|
|
5868
|
+
{ id: "completed", status_category: "completed", label: "Completed", description: "Meeting is done. Action items captured but not yet tracked to closure.", transitions_to: ["actions_tracked"] },
|
|
5869
|
+
{ id: "actions_tracked", status_category: "completed", label: "Actions Tracked", description: "Retro action items have been completed or explicitly dropped. Full loop closed.", transitions_to: [] }
|
|
5698
5870
|
]
|
|
5699
5871
|
};
|
|
5700
5872
|
var DEPENDENCY_LIFECYCLE = {
|
|
@@ -5702,10 +5874,10 @@ var DEPENDENCY_LIFECYCLE = {
|
|
|
5702
5874
|
initial_phase: "identified",
|
|
5703
5875
|
terminal_phases: ["resolved"],
|
|
5704
5876
|
phases: [
|
|
5705
|
-
{ id: "identified", label: "Identified", description: "Dependency has been named. Not yet evaluated for impact.", transitions_to: ["blocked", "in_progress", "resolved"] },
|
|
5706
|
-
{ id: "blocked", label: "Blocked", description: "Dependency is currently blocking work. Awaiting upstream action.", transitions_to: ["in_progress", "resolved"] },
|
|
5707
|
-
{ id: "in_progress", label: "In Progress", description: "Active work is happening to resolve the dependency.", transitions_to: ["blocked", "resolved"] },
|
|
5708
|
-
{ id: "resolved", label: "Resolved", description: "Dependency is no longer blocking. May reopen to blocked if regression.", transitions_to: ["blocked"] }
|
|
5877
|
+
{ id: "identified", status_category: "triage", label: "Identified", description: "Dependency has been named. Not yet evaluated for impact.", transitions_to: ["blocked", "in_progress", "resolved"] },
|
|
5878
|
+
{ id: "blocked", status_category: "started", label: "Blocked", description: "Dependency is currently blocking work. Awaiting upstream action.", transitions_to: ["in_progress", "resolved"] },
|
|
5879
|
+
{ id: "in_progress", status_category: "started", label: "In Progress", description: "Active work is happening to resolve the dependency.", transitions_to: ["blocked", "resolved"] },
|
|
5880
|
+
{ id: "resolved", status_category: "completed", label: "Resolved", description: "Dependency is no longer blocking. May reopen to blocked if regression.", transitions_to: ["blocked"] }
|
|
5709
5881
|
]
|
|
5710
5882
|
};
|
|
5711
5883
|
var ROLE_LIFECYCLE = {
|
|
@@ -5713,10 +5885,10 @@ var ROLE_LIFECYCLE = {
|
|
|
5713
5885
|
initial_phase: "proposed",
|
|
5714
5886
|
terminal_phases: ["filled", "vacant"],
|
|
5715
5887
|
phases: [
|
|
5716
|
-
{ id: "proposed", label: "Proposed", description: "Role has been described but not yet posted or staffed.", transitions_to: ["open", "vacant"] },
|
|
5717
|
-
{ id: "open", label: "Open", description: "Role is actively being recruited for.", transitions_to: ["filled", "vacant"] },
|
|
5718
|
-
{ id: "filled", label: "Filled", description: "Role is staffed. May reopen to open if the position becomes vacant again.", transitions_to: ["vacant"] },
|
|
5719
|
-
{ id: "vacant", label: "Vacant", description: "Role exists but is unfilled. May reopen to open to start recruiting.", transitions_to: ["open"] }
|
|
5888
|
+
{ id: "proposed", status_category: "triage", label: "Proposed", description: "Role has been described but not yet posted or staffed.", transitions_to: ["open", "vacant"] },
|
|
5889
|
+
{ id: "open", status_category: "started", label: "Open", description: "Role is actively being recruited for.", transitions_to: ["filled", "vacant"] },
|
|
5890
|
+
{ id: "filled", status_category: "completed", label: "Filled", description: "Role is staffed. May reopen to open if the position becomes vacant again.", transitions_to: ["vacant"] },
|
|
5891
|
+
{ id: "vacant", status_category: "backlog", label: "Vacant", description: "Role exists but is unfilled. May reopen to open to start recruiting.", transitions_to: ["open"] }
|
|
5720
5892
|
]
|
|
5721
5893
|
};
|
|
5722
5894
|
var CAPACITY_PLAN_LIFECYCLE = {
|
|
@@ -5724,11 +5896,11 @@ var CAPACITY_PLAN_LIFECYCLE = {
|
|
|
5724
5896
|
initial_phase: "drafted",
|
|
5725
5897
|
terminal_phases: ["completed", "revised"],
|
|
5726
5898
|
phases: [
|
|
5727
|
-
{ id: "drafted", label: "Drafted", description: "Plan is being authored. Not yet agreed.", transitions_to: ["committed", "revised"] },
|
|
5728
|
-
{ id: "committed", label: "Committed", description: "Plan has been agreed by stakeholders. Cycle has not yet started.", transitions_to: ["in_flight", "revised"] },
|
|
5729
|
-
{ id: "in_flight", label: "In Flight", description: "Cycle is underway. Capacity is being consumed.", transitions_to: ["completed", "revised"] },
|
|
5730
|
-
{ id: "completed", label: "Completed", description: "Cycle is done. Plan executed as agreed.", transitions_to: [] },
|
|
5731
|
-
{ id: "revised", label: "Revised", description: "Plan was changed mid-flight. May reopen to drafted for the next iteration.", transitions_to: ["drafted"] }
|
|
5899
|
+
{ id: "drafted", status_category: "unstarted", label: "Drafted", description: "Plan is being authored. Not yet agreed.", transitions_to: ["committed", "revised"] },
|
|
5900
|
+
{ id: "committed", status_category: "unstarted", label: "Committed", description: "Plan has been agreed by stakeholders. Cycle has not yet started.", transitions_to: ["in_flight", "revised"] },
|
|
5901
|
+
{ id: "in_flight", status_category: "started", label: "In Flight", description: "Cycle is underway. Capacity is being consumed.", transitions_to: ["completed", "revised"] },
|
|
5902
|
+
{ id: "completed", status_category: "completed", label: "Completed", description: "Cycle is done. Plan executed as agreed.", transitions_to: [] },
|
|
5903
|
+
{ id: "revised", status_category: "completed", label: "Revised", description: "Plan was changed mid-flight. May reopen to drafted for the next iteration.", transitions_to: ["drafted"] }
|
|
5732
5904
|
]
|
|
5733
5905
|
};
|
|
5734
5906
|
var VARIANT_LIFECYCLE = {
|
|
@@ -5736,11 +5908,11 @@ var VARIANT_LIFECYCLE = {
|
|
|
5736
5908
|
initial_phase: "proposed",
|
|
5737
5909
|
terminal_phases: ["winning", "losing", "retired"],
|
|
5738
5910
|
phases: [
|
|
5739
|
-
{ id: "proposed", label: "Proposed", description: "Variant has been designed. Not yet running.", transitions_to: ["live", "retired"] },
|
|
5740
|
-
{ id: "live", label: "Live", description: "Variant is being shown to users as part of an active test.", transitions_to: ["winning", "losing", "retired"] },
|
|
5741
|
-
{ id: "winning", label: "Winning", description: "Variant beat the control. Captured for the record before rollout.", transitions_to: ["retired"] },
|
|
5742
|
-
{ id: "losing", label: "Losing", description: "Variant did not beat the control. Captured for the record.", transitions_to: ["retired"] },
|
|
5743
|
-
{ id: "retired", label: "Retired", description: "Variant is no longer running. May reopen to proposed if revisited in a future test.", transitions_to: ["proposed"] }
|
|
5911
|
+
{ id: "proposed", status_category: "triage", label: "Proposed", description: "Variant has been designed. Not yet running.", transitions_to: ["live", "retired"] },
|
|
5912
|
+
{ 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"] },
|
|
5913
|
+
{ id: "winning", status_category: "completed", label: "Winning", description: "Variant beat the control. Captured for the record before rollout.", transitions_to: ["retired"] },
|
|
5914
|
+
{ id: "losing", status_category: "completed", label: "Losing", description: "Variant did not beat the control. Captured for the record.", transitions_to: ["retired"] },
|
|
5915
|
+
{ 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"] }
|
|
5744
5916
|
]
|
|
5745
5917
|
};
|
|
5746
5918
|
var GROWTH_CAMPAIGN_LIFECYCLE = {
|
|
@@ -5748,11 +5920,11 @@ var GROWTH_CAMPAIGN_LIFECYCLE = {
|
|
|
5748
5920
|
initial_phase: "drafted",
|
|
5749
5921
|
terminal_phases: ["completed", "paused"],
|
|
5750
5922
|
phases: [
|
|
5751
|
-
{ id: "drafted", label: "Drafted", description: "Campaign concept exists. Not yet planned for launch.", transitions_to: ["planning", "paused"] },
|
|
5752
|
-
{ id: "planning", label: "Planning", description: "Campaign creative, channels, and timing are being finalised.", transitions_to: ["live", "paused"] },
|
|
5753
|
-
{ id: "live", label: "Live", description: "Campaign is running across channels.", transitions_to: ["completed", "paused"] },
|
|
5754
|
-
{ id: "completed", label: "Completed", description: "Campaign ran to completion. Outcomes captured.", transitions_to: [] },
|
|
5755
|
-
{ id: "paused", label: "Paused", description: "Campaign was halted before completion. May reopen to live if resumed.", transitions_to: ["live"] }
|
|
5923
|
+
{ id: "drafted", status_category: "unstarted", label: "Drafted", description: "Campaign concept exists. Not yet planned for launch.", transitions_to: ["planning", "paused"] },
|
|
5924
|
+
{ id: "planning", status_category: "unstarted", label: "Planning", description: "Campaign creative, channels, and timing are being finalised.", transitions_to: ["live", "paused"] },
|
|
5925
|
+
{ id: "live", status_category: "started", label: "Live", description: "Campaign is running across channels.", transitions_to: ["completed", "paused"] },
|
|
5926
|
+
{ id: "completed", status_category: "completed", label: "Completed", description: "Campaign ran to completion. Outcomes captured.", transitions_to: [] },
|
|
5927
|
+
{ id: "paused", status_category: "backlog", label: "Paused", description: "Campaign was halted before completion. May reopen to live if resumed.", transitions_to: ["live"] }
|
|
5756
5928
|
]
|
|
5757
5929
|
};
|
|
5758
5930
|
function fromTemplate(entityType, template) {
|
|
@@ -5763,10 +5935,10 @@ var PUBLISHING_TEMPLATE = {
|
|
|
5763
5935
|
initial_phase: "draft",
|
|
5764
5936
|
terminal_phases: ["archived"],
|
|
5765
5937
|
phases: [
|
|
5766
|
-
{ id: "draft", label: "Draft", description: "Being authored or revised. Not visible externally.", transitions_to: ["review"] },
|
|
5767
|
-
{ id: "review", label: "In Review", description: "Under editorial or stakeholder review before publishing.", transitions_to: ["draft", "published"] },
|
|
5768
|
-
{ id: "published", label: "Published", description: "Live and visible to the intended audience.", transitions_to: ["archived", "draft"] },
|
|
5769
|
-
{ id: "archived", label: "Archived", description: "No longer current. Retained for historical reference.", transitions_to: ["draft"] }
|
|
5938
|
+
{ id: "draft", status_category: "started", label: "Draft", description: "Being authored or revised. Not visible externally.", transitions_to: ["review"] },
|
|
5939
|
+
{ id: "review", status_category: "started", label: "In Review", description: "Under editorial or stakeholder review before publishing.", transitions_to: ["draft", "published"] },
|
|
5940
|
+
{ id: "published", status_category: "completed", label: "Published", description: "Live and visible to the intended audience.", transitions_to: ["archived", "draft"] },
|
|
5941
|
+
{ id: "archived", status_category: "completed", label: "Archived", description: "No longer current. Retained for historical reference.", transitions_to: ["draft"] }
|
|
5770
5942
|
]
|
|
5771
5943
|
};
|
|
5772
5944
|
var OPERATIONAL_TEMPLATE = {
|
|
@@ -5774,11 +5946,11 @@ var OPERATIONAL_TEMPLATE = {
|
|
|
5774
5946
|
initial_phase: "planning",
|
|
5775
5947
|
terminal_phases: ["completed", "sunset"],
|
|
5776
5948
|
phases: [
|
|
5777
|
-
{ id: "planning", label: "Planning", description: "Being designed or scoped. Not yet started.", transitions_to: ["active"] },
|
|
5778
|
-
{ id: "active", label: "Active", description: "Currently running or in operation.", transitions_to: ["paused", "completed", "sunset"] },
|
|
5779
|
-
{ id: "paused", label: "Paused", description: "Temporarily halted. Can be resumed.", transitions_to: ["active", "sunset"] },
|
|
5780
|
-
{ id: "completed", label: "Completed", description: "Finished successfully. Outcomes captured.", transitions_to: [] },
|
|
5781
|
-
{ id: "sunset", label: "Sunset", description: "Winding down or discontinued.", transitions_to: [] }
|
|
5949
|
+
{ id: "planning", status_category: "unstarted", label: "Planning", description: "Being designed or scoped. Not yet started.", transitions_to: ["active"] },
|
|
5950
|
+
{ id: "active", status_category: "started", label: "Active", description: "Currently running or in operation.", transitions_to: ["paused", "completed", "sunset"] },
|
|
5951
|
+
{ id: "paused", status_category: "backlog", label: "Paused", description: "Temporarily halted. Can be resumed.", transitions_to: ["active", "sunset"] },
|
|
5952
|
+
{ id: "completed", status_category: "completed", label: "Completed", description: "Finished successfully. Outcomes captured.", transitions_to: [] },
|
|
5953
|
+
{ id: "sunset", status_category: "completed", label: "Sunset", description: "Winding down or discontinued.", transitions_to: [] }
|
|
5782
5954
|
]
|
|
5783
5955
|
};
|
|
5784
5956
|
var APPROVAL_TEMPLATE = {
|
|
@@ -5790,22 +5962,23 @@ var APPROVAL_TEMPLATE = {
|
|
|
5790
5962
|
// UPGLifecycle.terminal_phases contract.
|
|
5791
5963
|
terminal_phases: ["approved", "rejected", "deprecated"],
|
|
5792
5964
|
phases: [
|
|
5793
|
-
{ id: "proposed", label: "Proposed", description: "Submitted for consideration. Awaiting review.", transitions_to: ["reviewing"] },
|
|
5794
|
-
{ id: "reviewing", label: "Reviewing", description: "Under active review by approvers.", transitions_to: ["approved", "rejected", "proposed"] },
|
|
5795
|
-
{ id: "approved", label: "Approved", description: "Accepted and ready for implementation.", transitions_to: ["deprecated"] },
|
|
5796
|
-
{ id: "rejected", label: "Rejected", description: "Not accepted. Reasons should be documented.", transitions_to: ["proposed"] },
|
|
5797
|
-
{ id: "deprecated", label: "Deprecated", description: "Previously approved but no longer current.", transitions_to: [] }
|
|
5965
|
+
{ id: "proposed", status_category: "triage", label: "Proposed", description: "Submitted for consideration. Awaiting review.", transitions_to: ["reviewing"] },
|
|
5966
|
+
{ id: "reviewing", status_category: "started", label: "Reviewing", description: "Under active review by approvers.", transitions_to: ["approved", "rejected", "proposed"] },
|
|
5967
|
+
{ id: "approved", status_category: "completed", label: "Approved", description: "Accepted and ready for implementation.", transitions_to: ["deprecated"] },
|
|
5968
|
+
{ id: "rejected", status_category: "cancelled", label: "Rejected", description: "Not accepted. Reasons should be documented.", transitions_to: ["proposed"] },
|
|
5969
|
+
{ id: "deprecated", status_category: "completed", label: "Deprecated", description: "Previously approved but no longer current.", transitions_to: [] }
|
|
5798
5970
|
]
|
|
5799
5971
|
};
|
|
5800
5972
|
var WORK_ITEM_TEMPLATE = {
|
|
5801
5973
|
template_id: "WORK_ITEM",
|
|
5802
5974
|
initial_phase: "todo",
|
|
5803
|
-
terminal_phases: ["done"],
|
|
5975
|
+
terminal_phases: ["done", "cancelled"],
|
|
5804
5976
|
phases: [
|
|
5805
|
-
{ id: "todo", label: "To Do", description: "Identified but not yet started.", transitions_to: ["in_progress"] },
|
|
5806
|
-
{ id: "in_progress", label: "In Progress", description: "Actively being worked on.", transitions_to: ["in_review", "todo"] },
|
|
5807
|
-
{ id: "in_review", label: "In Review", description: "Work completed, awaiting review or acceptance.", transitions_to: ["done", "in_progress"] },
|
|
5808
|
-
{ id: "done", label: "Done", description: "Completed and accepted.", transitions_to: [] }
|
|
5977
|
+
{ id: "todo", status_category: "unstarted", label: "To Do", description: "Identified but not yet started.", transitions_to: ["in_progress", "cancelled"] },
|
|
5978
|
+
{ id: "in_progress", status_category: "started", label: "In Progress", description: "Actively being worked on.", transitions_to: ["in_review", "todo", "cancelled"] },
|
|
5979
|
+
{ id: "in_review", status_category: "started", label: "In Review", description: "Work completed, awaiting review or acceptance.", transitions_to: ["done", "in_progress", "cancelled"] },
|
|
5980
|
+
{ id: "done", status_category: "completed", label: "Done", description: "Completed and accepted.", transitions_to: [] },
|
|
5981
|
+
{ 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"] }
|
|
5809
5982
|
]
|
|
5810
5983
|
};
|
|
5811
5984
|
var DISCOVERY_TEMPLATE = {
|
|
@@ -5813,10 +5986,10 @@ var DISCOVERY_TEMPLATE = {
|
|
|
5813
5986
|
initial_phase: "open",
|
|
5814
5987
|
terminal_phases: ["resolved", "parked"],
|
|
5815
5988
|
phases: [
|
|
5816
|
-
{ id: "open", label: "Open", description: "Identified as worth exploring. No work started yet.", transitions_to: ["exploring"] },
|
|
5817
|
-
{ id: "exploring", label: "Exploring", description: "Actively being investigated or researched.", transitions_to: ["resolved", "parked", "open"] },
|
|
5818
|
-
{ id: "resolved", label: "Resolved", description: "Answered or addressed. Findings captured.", transitions_to: [] },
|
|
5819
|
-
{ id: "parked", label: "Parked", description: "Set aside for now. May revisit later.", transitions_to: ["open"] }
|
|
5989
|
+
{ id: "open", status_category: "triage", label: "Open", description: "Identified as worth exploring. No work started yet.", transitions_to: ["exploring"] },
|
|
5990
|
+
{ id: "exploring", status_category: "started", label: "Exploring", description: "Actively being investigated or researched.", transitions_to: ["resolved", "parked", "open"] },
|
|
5991
|
+
{ id: "resolved", status_category: "completed", label: "Resolved", description: "Answered or addressed. Findings captured.", transitions_to: [] },
|
|
5992
|
+
{ id: "parked", status_category: "backlog", label: "Parked", description: "Set aside for now. May revisit later.", transitions_to: ["open"] }
|
|
5820
5993
|
]
|
|
5821
5994
|
};
|
|
5822
5995
|
var MATURITY_TEMPLATE = {
|
|
@@ -5824,10 +5997,10 @@ var MATURITY_TEMPLATE = {
|
|
|
5824
5997
|
initial_phase: "alpha",
|
|
5825
5998
|
terminal_phases: ["deprecated"],
|
|
5826
5999
|
phases: [
|
|
5827
|
-
{ id: "alpha", label: "Alpha", description: "Early stage, internal use only. Expect breaking changes.", transitions_to: ["beta"] },
|
|
5828
|
-
{ id: "beta", label: "Beta", description: "Feature complete but may have rough edges. Limited external use.", transitions_to: ["ga", "alpha"] },
|
|
5829
|
-
{ id: "ga", label: "Generally Available", description: "Stable, production-ready. Widely available.", transitions_to: ["deprecated"] },
|
|
5830
|
-
{ id: "deprecated", label: "Deprecated", description: "Scheduled for removal. Migration path should be documented.", transitions_to: [] }
|
|
6000
|
+
{ id: "alpha", status_category: "started", label: "Alpha", description: "Early stage, internal use only. Expect breaking changes.", transitions_to: ["beta"] },
|
|
6001
|
+
{ id: "beta", status_category: "started", label: "Beta", description: "Feature complete but may have rough edges. Limited external use.", transitions_to: ["ga", "alpha"] },
|
|
6002
|
+
{ id: "ga", status_category: "completed", label: "Generally Available", description: "Stable, production-ready. Widely available.", transitions_to: ["deprecated"] },
|
|
6003
|
+
{ id: "deprecated", status_category: "completed", label: "Deprecated", description: "Scheduled for removal. Migration path should be documented.", transitions_to: [] }
|
|
5831
6004
|
]
|
|
5832
6005
|
};
|
|
5833
6006
|
var RISK_ITEM_TEMPLATE = {
|
|
@@ -5835,11 +6008,11 @@ var RISK_ITEM_TEMPLATE = {
|
|
|
5835
6008
|
initial_phase: "identified",
|
|
5836
6009
|
terminal_phases: ["mitigated", "accepted", "closed"],
|
|
5837
6010
|
phases: [
|
|
5838
|
-
{ id: "identified", label: "Identified", description: "Risk has been recognised and named. Not yet assessed for likelihood or impact.", transitions_to: ["assessed"] },
|
|
5839
|
-
{ id: "assessed", label: "Assessed", description: "Likelihood and impact have been evaluated. Outcome is one of mitigated, accepted, or closed.", transitions_to: ["mitigated", "accepted", "closed"] },
|
|
5840
|
-
{ id: "mitigated", label: "Mitigated", description: "Action has been taken to reduce likelihood or impact. The risk is no longer active.", transitions_to: [] },
|
|
5841
|
-
{ id: "accepted", label: "Accepted", description: "Risk is acknowledged. Cost of mitigation outweighs exposure; the team chooses to live with it.", transitions_to: [] },
|
|
5842
|
-
{ id: "closed", label: "Closed", description: "Risk became irrelevant without action; underlying conditions changed. May reopen to `assessed` if conditions change again.", transitions_to: ["assessed"] }
|
|
6011
|
+
{ id: "identified", status_category: "triage", label: "Identified", description: "Risk has been recognised and named. Not yet assessed for likelihood or impact.", transitions_to: ["assessed"] },
|
|
6012
|
+
{ 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"] },
|
|
6013
|
+
{ 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: [] },
|
|
6014
|
+
{ 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: [] },
|
|
6015
|
+
{ 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"] }
|
|
5843
6016
|
]
|
|
5844
6017
|
};
|
|
5845
6018
|
var SALES_DEAL_TEMPLATE = {
|
|
@@ -5847,11 +6020,11 @@ var SALES_DEAL_TEMPLATE = {
|
|
|
5847
6020
|
initial_phase: "qualified",
|
|
5848
6021
|
terminal_phases: ["closed_won", "closed_lost"],
|
|
5849
6022
|
phases: [
|
|
5850
|
-
{ id: "qualified", label: "Qualified", description: "Lead has been qualified: there's a real budget, need, and decision-maker. Not yet pitched.", transitions_to: ["proposal"] },
|
|
5851
|
-
{ id: "proposal", label: "Proposal", description: "A proposal has been delivered. Pricing and scope are on the table.", transitions_to: ["negotiation", "closed_lost"] },
|
|
5852
|
-
{ id: "negotiation", label: "Negotiation", description: "Terms are being finalised. Both sides are working toward agreement.", transitions_to: ["closed_won", "closed_lost"] },
|
|
5853
|
-
{ id: "closed_won", label: "Closed Won", description: "Deal signed. Customer is now active.", transitions_to: [] },
|
|
5854
|
-
{ 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: [] }
|
|
6023
|
+
{ 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"] },
|
|
6024
|
+
{ 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"] },
|
|
6025
|
+
{ id: "negotiation", status_category: "started", label: "Negotiation", description: "Terms are being finalised. Both sides are working toward agreement.", transitions_to: ["closed_won", "closed_lost"] },
|
|
6026
|
+
{ id: "closed_won", status_category: "completed", label: "Closed Won", description: "Deal signed. Customer is now active.", transitions_to: [] },
|
|
6027
|
+
{ 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: [] }
|
|
5855
6028
|
]
|
|
5856
6029
|
};
|
|
5857
6030
|
var VALIDATION_TEMPLATE = {
|
|
@@ -5859,11 +6032,11 @@ var VALIDATION_TEMPLATE = {
|
|
|
5859
6032
|
initial_phase: "untested",
|
|
5860
6033
|
terminal_phases: ["validated", "invalidated", "archived"],
|
|
5861
6034
|
phases: [
|
|
5862
|
-
{ id: "untested", label: "Untested", description: "Articulated but not yet examined against evidence.", transitions_to: ["testing"] },
|
|
5863
|
-
{ id: "testing", label: "Testing", description: "Actively gathering evidence for or against the claim.", transitions_to: ["validated", "invalidated"] },
|
|
5864
|
-
{ id: "validated", label: "Validated", description: "Evidence supports the claim. Treated as true until contradicted.", transitions_to: ["archived"] },
|
|
5865
|
-
{ id: "invalidated", label: "Invalidated", description: "Evidence contradicts the claim. May re-test if new evidence appears.", transitions_to: ["archived", "testing"] },
|
|
5866
|
-
{ id: "archived", label: "Archived", description: "Settled and retained for provenance. No longer active.", transitions_to: [] }
|
|
6035
|
+
{ id: "untested", status_category: "triage", label: "Untested", description: "Articulated but not yet examined against evidence.", transitions_to: ["testing"] },
|
|
6036
|
+
{ id: "testing", status_category: "started", label: "Testing", description: "Actively gathering evidence for or against the claim.", transitions_to: ["validated", "invalidated"] },
|
|
6037
|
+
{ id: "validated", status_category: "completed", label: "Validated", description: "Evidence supports the claim. Treated as true until contradicted.", transitions_to: ["archived"] },
|
|
6038
|
+
{ id: "invalidated", status_category: "completed", label: "Invalidated", description: "Evidence contradicts the claim. May re-test if new evidence appears.", transitions_to: ["archived", "testing"] },
|
|
6039
|
+
{ id: "archived", status_category: "completed", label: "Archived", description: "Settled and retained for provenance. No longer active.", transitions_to: [] }
|
|
5867
6040
|
]
|
|
5868
6041
|
};
|
|
5869
6042
|
var INCIDENT_TEMPLATE = {
|
|
@@ -5871,12 +6044,12 @@ var INCIDENT_TEMPLATE = {
|
|
|
5871
6044
|
initial_phase: "open",
|
|
5872
6045
|
terminal_phases: ["resolved", "closed", "wont_fix"],
|
|
5873
6046
|
phases: [
|
|
5874
|
-
{ id: "open", label: "Open", description: "Surfaced and logged. Not yet triaged.", transitions_to: ["triaged"] },
|
|
5875
|
-
{ id: "triaged", label: "Triaged", description: "Assessed for severity and ownership. Routed for work or dispositioned.", transitions_to: ["in_progress", "resolved", "wont_fix"] },
|
|
5876
|
-
{ id: "in_progress", label: "In Progress", description: "Actively being worked toward a fix.", transitions_to: ["resolved", "wont_fix"] },
|
|
5877
|
-
{ id: "resolved", label: "Resolved", description: "Addressed and verified. May reopen to `triaged` on regression.", transitions_to: ["closed", "triaged"] },
|
|
5878
|
-
{ id: "closed", label: "Closed", description: "Administratively closed (duplicate, withdrawn, or no longer relevant).", transitions_to: [] },
|
|
5879
|
-
{ id: "wont_fix", label: "Won't Fix", description: "Triaged as not to be actioned. Reason should be documented.", transitions_to: [] }
|
|
6047
|
+
{ id: "open", status_category: "triage", label: "Open", description: "Surfaced and logged. Not yet triaged.", transitions_to: ["triaged"] },
|
|
6048
|
+
{ 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"] },
|
|
6049
|
+
{ id: "in_progress", status_category: "started", label: "In Progress", description: "Actively being worked toward a fix.", transitions_to: ["resolved", "wont_fix"] },
|
|
6050
|
+
{ id: "resolved", status_category: "completed", label: "Resolved", description: "Addressed and verified. May reopen to `triaged` on regression.", transitions_to: ["closed", "triaged"] },
|
|
6051
|
+
{ id: "closed", status_category: "cancelled", label: "Closed", description: "Administratively closed (duplicate, withdrawn, or no longer relevant).", transitions_to: [] },
|
|
6052
|
+
{ id: "wont_fix", status_category: "cancelled", label: "Won't Fix", description: "Triaged as not to be actioned. Reason should be documented.", transitions_to: [] }
|
|
5880
6053
|
]
|
|
5881
6054
|
};
|
|
5882
6055
|
var STUDY_TEMPLATE = {
|
|
@@ -5884,11 +6057,11 @@ var STUDY_TEMPLATE = {
|
|
|
5884
6057
|
initial_phase: "planned",
|
|
5885
6058
|
terminal_phases: ["complete", "abandoned"],
|
|
5886
6059
|
phases: [
|
|
5887
|
-
{ id: "planned", label: "Planned", description: "Scoped and scheduled. Not yet started.", transitions_to: ["running"] },
|
|
5888
|
-
{ id: "running", label: "Running", description: "Actively executing: collecting data or running the protocol.", transitions_to: ["analysing", "abandoned"] },
|
|
5889
|
-
{ id: "analysing", label: "Analysing", description: "Execution done; results are being analysed and written up.", transitions_to: ["complete", "abandoned"] },
|
|
5890
|
-
{ id: "complete", label: "Complete", description: "Analysed and concluded. Findings captured.", transitions_to: [] },
|
|
5891
|
-
{ id: "abandoned", label: "Abandoned", description: "Stopped before completion (killed, timed out, or superseded).", transitions_to: [] }
|
|
6060
|
+
{ id: "planned", status_category: "unstarted", label: "Planned", description: "Scoped and scheduled. Not yet started.", transitions_to: ["running"] },
|
|
6061
|
+
{ id: "running", status_category: "started", label: "Running", description: "Actively executing: collecting data or running the protocol.", transitions_to: ["analysing", "abandoned"] },
|
|
6062
|
+
{ id: "analysing", status_category: "started", label: "Analysing", description: "Execution done; results are being analysed and written up.", transitions_to: ["complete", "abandoned"] },
|
|
6063
|
+
{ id: "complete", status_category: "completed", label: "Complete", description: "Analysed and concluded. Findings captured.", transitions_to: [] },
|
|
6064
|
+
{ id: "abandoned", status_category: "cancelled", label: "Abandoned", description: "Stopped before completion (killed, timed out, or superseded).", transitions_to: [] }
|
|
5892
6065
|
]
|
|
5893
6066
|
};
|
|
5894
6067
|
var TEMPLATE_LIFECYCLES = [
|
|
@@ -6050,18 +6223,21 @@ var FRAMEWORK_EXERCISE_LIFECYCLE = {
|
|
|
6050
6223
|
phases: [
|
|
6051
6224
|
{
|
|
6052
6225
|
id: "draft",
|
|
6226
|
+
status_category: "started",
|
|
6053
6227
|
label: "Draft",
|
|
6054
6228
|
description: "The exercise has been created and entities pulled into scope, but the framework's inputs have not all been filled in yet.",
|
|
6055
6229
|
transitions_to: ["active", "archived"]
|
|
6056
6230
|
},
|
|
6057
6231
|
{
|
|
6058
6232
|
id: "active",
|
|
6233
|
+
status_category: "started",
|
|
6059
6234
|
label: "Active",
|
|
6060
6235
|
description: "The current, authoritative run of its framework. Its include edges carry the live results consumers read, rank, and render by.",
|
|
6061
6236
|
transitions_to: ["archived"]
|
|
6062
6237
|
},
|
|
6063
6238
|
{
|
|
6064
6239
|
id: "archived",
|
|
6240
|
+
status_category: "completed",
|
|
6065
6241
|
label: "Archived",
|
|
6066
6242
|
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.",
|
|
6067
6243
|
transitions_to: ["active"]
|
|
@@ -6075,24 +6251,28 @@ var SPECIFICATION_LIFECYCLE = {
|
|
|
6075
6251
|
phases: [
|
|
6076
6252
|
{
|
|
6077
6253
|
id: "draft",
|
|
6254
|
+
status_category: "started",
|
|
6078
6255
|
label: "Draft",
|
|
6079
6256
|
description: "Being authored. Not yet adopted as the canonical specification.",
|
|
6080
6257
|
transitions_to: ["active", "superseded"]
|
|
6081
6258
|
},
|
|
6082
6259
|
{
|
|
6083
6260
|
id: "active",
|
|
6261
|
+
status_category: "started",
|
|
6084
6262
|
label: "Active",
|
|
6085
6263
|
description: "In force. The current authoritative version products implement and conform to.",
|
|
6086
6264
|
transitions_to: ["deprecated", "superseded"]
|
|
6087
6265
|
},
|
|
6088
6266
|
{
|
|
6089
6267
|
id: "deprecated",
|
|
6268
|
+
status_category: "started",
|
|
6090
6269
|
label: "Deprecated",
|
|
6091
6270
|
description: "Still valid but no longer recommended; a successor exists or is imminent.",
|
|
6092
6271
|
transitions_to: ["superseded"]
|
|
6093
6272
|
},
|
|
6094
6273
|
{
|
|
6095
6274
|
id: "superseded",
|
|
6275
|
+
status_category: "completed",
|
|
6096
6276
|
label: "Superseded",
|
|
6097
6277
|
description: "Replaced by a newer specification. Retained for historical reference.",
|
|
6098
6278
|
transitions_to: []
|
|
@@ -6104,9 +6284,9 @@ var PLANNING_CYCLE_LIFECYCLE = {
|
|
|
6104
6284
|
initial_phase: "planned",
|
|
6105
6285
|
terminal_phases: ["closed"],
|
|
6106
6286
|
phases: [
|
|
6107
|
-
{ 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"] },
|
|
6108
|
-
{ id: "active", label: "Active", description: "The team is inside the interval; work is flowing through it.", transitions_to: ["closed"] },
|
|
6109
|
-
{ 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"] }
|
|
6287
|
+
{ 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"] },
|
|
6288
|
+
{ id: "active", status_category: "started", label: "Active", description: "The team is inside the interval; work is flowing through it.", transitions_to: ["closed"] },
|
|
6289
|
+
{ 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"] }
|
|
6110
6290
|
]
|
|
6111
6291
|
};
|
|
6112
6292
|
var UPG_LIFECYCLES = [
|
|
@@ -29725,6 +29905,28 @@ function portfolioBody(doc) {
|
|
|
29725
29905
|
...doc.signals && doc.signals.length > 0 ? { signals: sortNodes(doc.signals).map(canonicalNode) } : {}
|
|
29726
29906
|
};
|
|
29727
29907
|
}
|
|
29908
|
+
function deriveSingleCounts(doc) {
|
|
29909
|
+
return { nodes: doc.nodes?.length ?? 0, edges: doc.edges?.length ?? 0 };
|
|
29910
|
+
}
|
|
29911
|
+
function derivePortfolioCounts(doc) {
|
|
29912
|
+
const members = doc.products ?? [];
|
|
29913
|
+
const memberKindOf = (p) => p.member_kind ?? "product";
|
|
29914
|
+
const watchedCount = members.filter((p) => memberKindOf(p) === "watched").length;
|
|
29915
|
+
const rollupCount = members.filter((p) => memberKindOf(p) === "org_rollup").length;
|
|
29916
|
+
const operatingFunctionCount = members.filter((p) => memberKindOf(p) === "operating_function").length;
|
|
29917
|
+
return {
|
|
29918
|
+
products: members.filter((p) => memberKindOf(p) === "product").length,
|
|
29919
|
+
...watchedCount > 0 ? { watched_products: watchedCount } : {},
|
|
29920
|
+
...rollupCount > 0 ? { org_rollups: rollupCount } : {},
|
|
29921
|
+
...operatingFunctionCount > 0 ? { operating_functions: operatingFunctionCount } : {},
|
|
29922
|
+
product_areas: doc.product_areas?.length ?? 0,
|
|
29923
|
+
portfolios: doc.portfolios?.length ?? 0,
|
|
29924
|
+
cross_edges: doc.cross_edges?.length ?? 0
|
|
29925
|
+
};
|
|
29926
|
+
}
|
|
29927
|
+
function deriveCounts(doc) {
|
|
29928
|
+
return isPortfolio(doc) ? derivePortfolioCounts(doc) : deriveSingleCounts(doc);
|
|
29929
|
+
}
|
|
29728
29930
|
function computeBodyChecksum(doc) {
|
|
29729
29931
|
const body = isPortfolio(doc) ? portfolioBody(doc) : singleBody(doc);
|
|
29730
29932
|
const content = JSON.stringify(body);
|
|
@@ -29764,7 +29966,7 @@ function serializeSingleWithHeader(doc, opts) {
|
|
|
29764
29966
|
};
|
|
29765
29967
|
const summary = deriveSummary(product.description);
|
|
29766
29968
|
if (summary) header.summary = summary;
|
|
29767
|
-
header.counts =
|
|
29969
|
+
header.counts = deriveSingleCounts(doc);
|
|
29768
29970
|
if (doc.member_kind === "org_rollup" || doc.member_kind === "watched" || doc.member_kind === "operating_function") {
|
|
29769
29971
|
header.member_kind = doc.member_kind;
|
|
29770
29972
|
}
|
|
@@ -29787,20 +29989,7 @@ function serializePortfolioWithHeader(doc, opts) {
|
|
|
29787
29989
|
};
|
|
29788
29990
|
const summary = deriveSummary(org.description);
|
|
29789
29991
|
if (summary) header.summary = summary;
|
|
29790
|
-
|
|
29791
|
-
const memberKindOf = (p) => p.member_kind ?? "product";
|
|
29792
|
-
const watchedCount = members.filter((p) => memberKindOf(p) === "watched").length;
|
|
29793
|
-
const rollupCount = members.filter((p) => memberKindOf(p) === "org_rollup").length;
|
|
29794
|
-
const operatingFunctionCount = members.filter((p) => memberKindOf(p) === "operating_function").length;
|
|
29795
|
-
header.counts = {
|
|
29796
|
-
products: members.filter((p) => memberKindOf(p) === "product").length,
|
|
29797
|
-
...watchedCount > 0 ? { watched_products: watchedCount } : {},
|
|
29798
|
-
...rollupCount > 0 ? { org_rollups: rollupCount } : {},
|
|
29799
|
-
...operatingFunctionCount > 0 ? { operating_functions: operatingFunctionCount } : {},
|
|
29800
|
-
product_areas: doc.product_areas?.length ?? 0,
|
|
29801
|
-
portfolios: doc.portfolios?.length ?? 0,
|
|
29802
|
-
cross_edges: doc.cross_edges?.length ?? 0
|
|
29803
|
-
};
|
|
29992
|
+
header.counts = derivePortfolioCounts(doc);
|
|
29804
29993
|
header.provenance = buildProvenance(doc, opts);
|
|
29805
29994
|
header.integrity = { algorithm: INTEGRITY_ALGORITHM, body: computeBodyChecksum(doc) };
|
|
29806
29995
|
return JSON.stringify({ $upg: header, ...body }, null, 2) + "\n";
|
|
@@ -29868,9 +30057,61 @@ function isCanonical(text) {
|
|
|
29868
30057
|
const parsed = parseUpg(text);
|
|
29869
30058
|
return text === serializeCanonical(parsed);
|
|
29870
30059
|
}
|
|
30060
|
+
function checkHeaderSeal(obj) {
|
|
30061
|
+
const raw = obj;
|
|
30062
|
+
const header = raw?.$upg;
|
|
30063
|
+
const report = {
|
|
30064
|
+
header_present: !!header,
|
|
30065
|
+
counts_checked: false,
|
|
30066
|
+
integrity_checked: false,
|
|
30067
|
+
counts_drift: [],
|
|
30068
|
+
integrity_drift: []
|
|
30069
|
+
};
|
|
30070
|
+
if (!header) return report;
|
|
30071
|
+
if (header.format_version !== UPG_CANONICAL_FORMAT_VERSION) {
|
|
30072
|
+
report.skipped_reason = `format_version "${header.format_version}" is not this serialiser's "${UPG_CANONICAL_FORMAT_VERSION}"; counts keys and body layout are format-version contracts, so neither seal can be judged here.`;
|
|
30073
|
+
return report;
|
|
30074
|
+
}
|
|
30075
|
+
const doc = normalizeDocument(raw);
|
|
30076
|
+
const declaredCounts = header.counts ?? {};
|
|
30077
|
+
const actualCounts = deriveCounts(doc);
|
|
30078
|
+
if (header.counts === void 0) {
|
|
30079
|
+
report.skipped_reason = "header has no `counts` block to compare.";
|
|
30080
|
+
} else {
|
|
30081
|
+
report.counts_checked = true;
|
|
30082
|
+
const fields = /* @__PURE__ */ new Set([...Object.keys(declaredCounts), ...Object.keys(actualCounts)]);
|
|
30083
|
+
for (const field of [...fields].sort()) {
|
|
30084
|
+
const declaredRaw = declaredCounts[field];
|
|
30085
|
+
const declared = typeof declaredRaw === "number" ? declaredRaw : 0;
|
|
30086
|
+
const actual = actualCounts[field] ?? 0;
|
|
30087
|
+
if (declared !== actual) report.counts_drift.push({ field, declared, actual });
|
|
30088
|
+
}
|
|
30089
|
+
}
|
|
30090
|
+
const integrity = header.integrity;
|
|
30091
|
+
if (!integrity || typeof integrity.body !== "string") {
|
|
30092
|
+
report.skipped_reason = report.skipped_reason ?? "header has no `integrity.body` seal to compare.";
|
|
30093
|
+
} else if (integrity.algorithm !== INTEGRITY_ALGORITHM) {
|
|
30094
|
+
report.skipped_reason = report.skipped_reason ?? `integrity.algorithm "${integrity.algorithm}" is not "${INTEGRITY_ALGORITHM}"; the declared digest cannot be recomputed here.`;
|
|
30095
|
+
} else {
|
|
30096
|
+
report.integrity_checked = true;
|
|
30097
|
+
const computed = computeBodyChecksum(doc);
|
|
30098
|
+
if (computed !== integrity.body) {
|
|
30099
|
+
report.integrity_drift.push({
|
|
30100
|
+
algorithm: integrity.algorithm,
|
|
30101
|
+
declared: integrity.body,
|
|
30102
|
+
computed
|
|
30103
|
+
});
|
|
30104
|
+
}
|
|
30105
|
+
}
|
|
30106
|
+
return report;
|
|
30107
|
+
}
|
|
30108
|
+
function checkHeaderSealText(text) {
|
|
30109
|
+
const noBom = text.charCodeAt(0) === 65279 ? text.slice(1) : text;
|
|
30110
|
+
return checkHeaderSeal(JSON.parse(noBom));
|
|
30111
|
+
}
|
|
29871
30112
|
|
|
29872
30113
|
// src/index.ts
|
|
29873
|
-
var UPG_VERSION = "0.
|
|
30114
|
+
var UPG_VERSION = "0.26.1";
|
|
29874
30115
|
var UPG_FORMAT_VERSION = "0.4.0";
|
|
29875
30116
|
var MARKDOWN_FORMAT_VERSION = "0.1";
|
|
29876
30117
|
var UPG_TYPES = getTypes();
|
|
@@ -30039,6 +30280,8 @@ export {
|
|
|
30039
30280
|
backfillSlug,
|
|
30040
30281
|
buildTypeAliases,
|
|
30041
30282
|
canBeChildOf,
|
|
30283
|
+
checkHeaderSeal,
|
|
30284
|
+
checkHeaderSealText,
|
|
30042
30285
|
coerceProductStage,
|
|
30043
30286
|
collectSlugsForType,
|
|
30044
30287
|
compareVersions,
|
|
@@ -30047,6 +30290,9 @@ export {
|
|
|
30047
30290
|
concernFor,
|
|
30048
30291
|
concernGatesFor,
|
|
30049
30292
|
crossProductScope,
|
|
30293
|
+
deriveCounts,
|
|
30294
|
+
derivePortfolioCounts,
|
|
30295
|
+
deriveSingleCounts,
|
|
30050
30296
|
describeTreePattern,
|
|
30051
30297
|
edgeCarriesProperties,
|
|
30052
30298
|
evaluateAntiPatterns,
|