@bicon/mcp-composer 0.3.6 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +75 -13
- package/dist/index.mjs +671 -69
- package/package.json +8 -2
package/dist/index.mjs
CHANGED
|
@@ -12,7 +12,7 @@ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"
|
|
|
12
12
|
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
13
13
|
|
|
14
14
|
// src/version.ts
|
|
15
|
-
var COMPOSER_VERSION = true ? "0.
|
|
15
|
+
var COMPOSER_VERSION = true ? "0.5.0" : readPackageVersion();
|
|
16
16
|
|
|
17
17
|
// ../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/external.js
|
|
18
18
|
var external_exports = {};
|
|
@@ -4102,12 +4102,75 @@ var UpdateSkillResponse = objectType({
|
|
|
4102
4102
|
var DeleteSkillParams = objectType({
|
|
4103
4103
|
"id": coerce.string().uuid()
|
|
4104
4104
|
});
|
|
4105
|
+
var listCapabilitiesResponseNameMax = 200;
|
|
4106
|
+
var listCapabilitiesResponseCurrentMaturityMax = 5;
|
|
4107
|
+
var listCapabilitiesResponseTargetMaturityMax = 5;
|
|
4108
|
+
var listCapabilitiesResponseOwnerMax = 200;
|
|
4109
|
+
var ListCapabilitiesResponseItem = objectType({
|
|
4110
|
+
"id": stringType().uuid(),
|
|
4111
|
+
"name": stringType().max(listCapabilitiesResponseNameMax),
|
|
4112
|
+
"parentId": stringType().uuid().nullable(),
|
|
4113
|
+
"currentMaturity": numberType().min(1).max(listCapabilitiesResponseCurrentMaturityMax),
|
|
4114
|
+
"targetMaturity": numberType().min(1).max(listCapabilitiesResponseTargetMaturityMax),
|
|
4115
|
+
"importance": enumType(["differentiating", "core", "supporting"]),
|
|
4116
|
+
"owner": stringType().max(listCapabilitiesResponseOwnerMax).optional(),
|
|
4117
|
+
"sortOrder": numberType()
|
|
4118
|
+
}).describe("One node of the organisation's capability map: a domain (parentId null) or a capability under a domain. Maturity (1\u20135) and importance are meaningful on capabilities; a domain carries the defaults.");
|
|
4119
|
+
var ListCapabilitiesResponse = arrayType(ListCapabilitiesResponseItem);
|
|
4120
|
+
var createCapabilityBodyNameMax = 200;
|
|
4121
|
+
var createCapabilityBodyCurrentMaturityMax = 5;
|
|
4122
|
+
var createCapabilityBodyTargetMaturityMax = 5;
|
|
4123
|
+
var createCapabilityBodyOwnerMax = 200;
|
|
4124
|
+
var CreateCapabilityBody = objectType({
|
|
4125
|
+
"id": stringType().uuid().optional().describe("Optional client-supplied id \u2014 see SkillInput's id field."),
|
|
4126
|
+
"name": stringType().max(createCapabilityBodyNameMax),
|
|
4127
|
+
"parentId": stringType().uuid().nullish().describe("The domain this capability belongs to; null (or absent) for a domain."),
|
|
4128
|
+
"currentMaturity": numberType().min(1).max(createCapabilityBodyCurrentMaturityMax),
|
|
4129
|
+
"targetMaturity": numberType().min(1).max(createCapabilityBodyTargetMaturityMax),
|
|
4130
|
+
"importance": enumType(["differentiating", "core", "supporting"]),
|
|
4131
|
+
"owner": stringType().max(createCapabilityBodyOwnerMax).optional(),
|
|
4132
|
+
"sortOrder": numberType()
|
|
4133
|
+
});
|
|
4134
|
+
var UpdateCapabilityParams = objectType({
|
|
4135
|
+
"id": coerce.string().uuid()
|
|
4136
|
+
});
|
|
4137
|
+
var updateCapabilityBodyNameMax = 200;
|
|
4138
|
+
var updateCapabilityBodyCurrentMaturityMax = 5;
|
|
4139
|
+
var updateCapabilityBodyTargetMaturityMax = 5;
|
|
4140
|
+
var updateCapabilityBodyOwnerMax = 200;
|
|
4141
|
+
var UpdateCapabilityBody = objectType({
|
|
4142
|
+
"id": stringType().uuid().optional().describe("Optional client-supplied id \u2014 see SkillInput's id field."),
|
|
4143
|
+
"name": stringType().max(updateCapabilityBodyNameMax),
|
|
4144
|
+
"parentId": stringType().uuid().nullish().describe("The domain this capability belongs to; null (or absent) for a domain."),
|
|
4145
|
+
"currentMaturity": numberType().min(1).max(updateCapabilityBodyCurrentMaturityMax),
|
|
4146
|
+
"targetMaturity": numberType().min(1).max(updateCapabilityBodyTargetMaturityMax),
|
|
4147
|
+
"importance": enumType(["differentiating", "core", "supporting"]),
|
|
4148
|
+
"owner": stringType().max(updateCapabilityBodyOwnerMax).optional(),
|
|
4149
|
+
"sortOrder": numberType()
|
|
4150
|
+
});
|
|
4151
|
+
var updateCapabilityResponseNameMax = 200;
|
|
4152
|
+
var updateCapabilityResponseCurrentMaturityMax = 5;
|
|
4153
|
+
var updateCapabilityResponseTargetMaturityMax = 5;
|
|
4154
|
+
var updateCapabilityResponseOwnerMax = 200;
|
|
4155
|
+
var UpdateCapabilityResponse = objectType({
|
|
4156
|
+
"id": stringType().uuid(),
|
|
4157
|
+
"name": stringType().max(updateCapabilityResponseNameMax),
|
|
4158
|
+
"parentId": stringType().uuid().nullable(),
|
|
4159
|
+
"currentMaturity": numberType().min(1).max(updateCapabilityResponseCurrentMaturityMax),
|
|
4160
|
+
"targetMaturity": numberType().min(1).max(updateCapabilityResponseTargetMaturityMax),
|
|
4161
|
+
"importance": enumType(["differentiating", "core", "supporting"]),
|
|
4162
|
+
"owner": stringType().max(updateCapabilityResponseOwnerMax).optional(),
|
|
4163
|
+
"sortOrder": numberType()
|
|
4164
|
+
}).describe("One node of the organisation's capability map: a domain (parentId null) or a capability under a domain. Maturity (1\u20135) and importance are meaningful on capabilities; a domain carries the defaults.");
|
|
4165
|
+
var DeleteCapabilityParams = objectType({
|
|
4166
|
+
"id": coerce.string().uuid()
|
|
4167
|
+
});
|
|
4105
4168
|
var ListOrganizationMembersResponseItem = objectType({
|
|
4106
4169
|
"userId": stringType().uuid(),
|
|
4107
4170
|
"email": stringType(),
|
|
4108
4171
|
"displayName": stringType().nullable(),
|
|
4109
4172
|
"role": enumType(["admin", "member", "viewer"]),
|
|
4110
|
-
"permissions": arrayType(stringType()).describe("App-managed permission overrides on top of the fixed role (free-form strings, not a closed enum). Known keys: manage_skills, manage_ai_act, manage_metadata, manage_stage_gate, manage_economics, manage_decision_log, manage_dependencies, manage_required_skills, manage_scoring, manage_status_report, manage_prioritisation.")
|
|
4173
|
+
"permissions": arrayType(stringType()).describe("App-managed permission overrides on top of the fixed role (free-form strings, not a closed enum). Known keys: manage_skills, manage_ai_act, manage_metadata, manage_stage_gate, manage_economics, manage_decision_log, manage_dependencies, manage_required_skills, manage_scoring, manage_status_report, manage_prioritisation, manage_capabilities, manage_capability_impact, manage_milestones.")
|
|
4111
4174
|
});
|
|
4112
4175
|
var ListOrganizationMembersResponse = arrayType(ListOrganizationMembersResponseItem);
|
|
4113
4176
|
var SyncOrganizationMembersResponse = objectType({
|
|
@@ -4117,17 +4180,18 @@ var SyncOrganizationMembersResponse = objectType({
|
|
|
4117
4180
|
var GetMyOrganizationAccessResponse = objectType({
|
|
4118
4181
|
"userId": stringType().describe(`The caller's own local user id (matches AuthorRef.userId on initiatives), so the client can tell its own changes apart from a teammate's \u2014 e.g. to suppress the "updated by X" collaboration banner when an edit echoing back is the caller's own save.`),
|
|
4119
4182
|
"role": enumType(["admin", "member", "viewer"]),
|
|
4120
|
-
"permissions": arrayType(stringType()).describe("App-managed permission overrides on top of the fixed role (free-form strings, not a closed enum). Known keys: manage_skills, manage_ai_act, manage_metadata, manage_stage_gate, manage_economics, manage_decision_log, manage_dependencies, manage_required_skills, manage_scoring, manage_status_report, manage_prioritisation.")
|
|
4183
|
+
"permissions": arrayType(stringType()).describe("App-managed permission overrides on top of the fixed role (free-form strings, not a closed enum). Known keys: manage_skills, manage_ai_act, manage_metadata, manage_stage_gate, manage_economics, manage_decision_log, manage_dependencies, manage_required_skills, manage_scoring, manage_status_report, manage_prioritisation, manage_capabilities, manage_capability_impact, manage_milestones."),
|
|
4184
|
+
"initiativeLimit": numberType().describe("The most initiatives this organisation may hold, archived ones included. Creating one more answers 507 with code initiative_limit_reached, so the client blocks New, Duplicate and Import up front.")
|
|
4121
4185
|
});
|
|
4122
4186
|
var UpdateOrganizationMemberPermissionsParams = objectType({
|
|
4123
4187
|
"userId": coerce.string().uuid()
|
|
4124
4188
|
});
|
|
4125
4189
|
var UpdateOrganizationMemberPermissionsBody = objectType({
|
|
4126
|
-
"permissions": arrayType(stringType()).describe("App-managed permission overrides on top of the fixed role (free-form strings, not a closed enum). Known keys: manage_skills, manage_ai_act, manage_metadata, manage_stage_gate, manage_economics, manage_decision_log, manage_dependencies, manage_required_skills, manage_scoring, manage_status_report, manage_prioritisation.")
|
|
4190
|
+
"permissions": arrayType(stringType()).describe("App-managed permission overrides on top of the fixed role (free-form strings, not a closed enum). Known keys: manage_skills, manage_ai_act, manage_metadata, manage_stage_gate, manage_economics, manage_decision_log, manage_dependencies, manage_required_skills, manage_scoring, manage_status_report, manage_prioritisation, manage_capabilities, manage_capability_impact, manage_milestones.")
|
|
4127
4191
|
});
|
|
4128
4192
|
var UpdateOrganizationMemberPermissionsResponse = objectType({
|
|
4129
4193
|
"userId": stringType().uuid(),
|
|
4130
|
-
"permissions": arrayType(stringType()).describe("App-managed permission overrides on top of the fixed role (free-form strings, not a closed enum). Known keys: manage_skills, manage_ai_act, manage_metadata, manage_stage_gate, manage_economics, manage_decision_log, manage_dependencies, manage_required_skills, manage_scoring, manage_status_report, manage_prioritisation.")
|
|
4194
|
+
"permissions": arrayType(stringType()).describe("App-managed permission overrides on top of the fixed role (free-form strings, not a closed enum). Known keys: manage_skills, manage_ai_act, manage_metadata, manage_stage_gate, manage_economics, manage_decision_log, manage_dependencies, manage_required_skills, manage_scoring, manage_status_report, manage_prioritisation, manage_capabilities, manage_capability_impact, manage_milestones.")
|
|
4131
4195
|
});
|
|
4132
4196
|
var ListPermissionProfilesResponseItem = objectType({
|
|
4133
4197
|
"id": stringType().uuid(),
|
|
@@ -4216,9 +4280,17 @@ var listSnapshotsResponseInitiativesItemStatusReportsItemBudgetCommentMax = 1e4;
|
|
|
4216
4280
|
var listSnapshotsResponseInitiativesItemStatusReportsItemSkillsCommentMax = 1e4;
|
|
4217
4281
|
var listSnapshotsResponseInitiativesItemStatusReportsItemSummaryMax = 1e4;
|
|
4218
4282
|
var listSnapshotsResponseInitiativesItemStatusReportsMax = 1e3;
|
|
4283
|
+
var listSnapshotsResponseInitiativesItemMilestonesItemTitleMax = 300;
|
|
4284
|
+
var listSnapshotsResponseInitiativesItemMilestonesItemBaselineDateRegExp = new RegExp("^\\d{4}-\\d{2}-\\d{2}$");
|
|
4285
|
+
var listSnapshotsResponseInitiativesItemMilestonesItemForecastDateRegExp = new RegExp("^\\d{4}-\\d{2}-\\d{2}$");
|
|
4286
|
+
var listSnapshotsResponseInitiativesItemMilestonesItemDoneDateRegExp = new RegExp("^\\d{4}-\\d{2}-\\d{2}$");
|
|
4287
|
+
var listSnapshotsResponseInitiativesItemMilestonesItemNoteMax = 1e4;
|
|
4288
|
+
var listSnapshotsResponseInitiativesItemMilestonesMax = 30;
|
|
4219
4289
|
var listSnapshotsResponseInitiativesItemDependsOnMax = 1e3;
|
|
4220
4290
|
var listSnapshotsResponseInitiativesItemRequiredSkillsItemRunFteMin = 0;
|
|
4221
4291
|
var listSnapshotsResponseInitiativesItemRequiredSkillsMax = 1e3;
|
|
4292
|
+
var listSnapshotsResponseInitiativesItemCapabilityImpactsItemMaturityToMax = 5;
|
|
4293
|
+
var listSnapshotsResponseInitiativesItemCapabilityImpactsMax = 1e3;
|
|
4222
4294
|
var listSnapshotsResponseInitiativesItemDpiaUrlMax = 2e3;
|
|
4223
4295
|
var listSnapshotsResponseInitiativesItemModelCardUrlMax = 2e3;
|
|
4224
4296
|
var listSnapshotsResponseInitiativesItemProhibitedOverrideMax = 2e3;
|
|
@@ -4268,7 +4340,12 @@ var ListSnapshotsResponseItem = objectType({
|
|
|
4268
4340
|
"evaluation": objectType({
|
|
4269
4341
|
"valueScale": objectType({
|
|
4270
4342
|
"score": numberType(),
|
|
4271
|
-
"confidence": enumType(["Low", "Medium", "High"])
|
|
4343
|
+
"confidence": enumType(["Low", "Medium", "High"]),
|
|
4344
|
+
"scoredAt": stringType().optional().describe("Server stamp: when this dimension's confidence or a sub-score last changed. Absent until a save changes it. Ignored in requests."),
|
|
4345
|
+
"scoredBy": objectType({
|
|
4346
|
+
"userId": stringType().uuid(),
|
|
4347
|
+
"name": stringType()
|
|
4348
|
+
}).describe("Display reference to the local user who created / last edited a record. Server-assigned from the authenticated session \u2014 never taken from the request body.").optional().describe("Server stamp, who made that change. Ignored in requests.")
|
|
4272
4349
|
}).and(objectType({
|
|
4273
4350
|
"subs": objectType({
|
|
4274
4351
|
"frequencyOfProcess": numberType(),
|
|
@@ -4282,7 +4359,12 @@ var ListSnapshotsResponseItem = objectType({
|
|
|
4282
4359
|
})),
|
|
4283
4360
|
"feasibility": objectType({
|
|
4284
4361
|
"score": numberType(),
|
|
4285
|
-
"confidence": enumType(["Low", "Medium", "High"])
|
|
4362
|
+
"confidence": enumType(["Low", "Medium", "High"]),
|
|
4363
|
+
"scoredAt": stringType().optional().describe("Server stamp: when this dimension's confidence or a sub-score last changed. Absent until a save changes it. Ignored in requests."),
|
|
4364
|
+
"scoredBy": objectType({
|
|
4365
|
+
"userId": stringType().uuid(),
|
|
4366
|
+
"name": stringType()
|
|
4367
|
+
}).describe("Display reference to the local user who created / last edited a record. Server-assigned from the authenticated session \u2014 never taken from the request body.").optional().describe("Server stamp, who made that change. Ignored in requests.")
|
|
4286
4368
|
}).and(objectType({
|
|
4287
4369
|
"subs": objectType({
|
|
4288
4370
|
"dataAvailability": numberType(),
|
|
@@ -4296,7 +4378,12 @@ var ListSnapshotsResponseItem = objectType({
|
|
|
4296
4378
|
})),
|
|
4297
4379
|
"governance": objectType({
|
|
4298
4380
|
"score": numberType(),
|
|
4299
|
-
"confidence": enumType(["Low", "Medium", "High"])
|
|
4381
|
+
"confidence": enumType(["Low", "Medium", "High"]),
|
|
4382
|
+
"scoredAt": stringType().optional().describe("Server stamp: when this dimension's confidence or a sub-score last changed. Absent until a save changes it. Ignored in requests."),
|
|
4383
|
+
"scoredBy": objectType({
|
|
4384
|
+
"userId": stringType().uuid(),
|
|
4385
|
+
"name": stringType()
|
|
4386
|
+
}).describe("Display reference to the local user who created / last edited a record. Server-assigned from the authenticated session \u2014 never taken from the request body.").optional().describe("Server stamp, who made that change. Ignored in requests.")
|
|
4300
4387
|
}).and(objectType({
|
|
4301
4388
|
"subs": objectType({
|
|
4302
4389
|
"regulatoryExposure": numberType(),
|
|
@@ -4311,7 +4398,12 @@ var ListSnapshotsResponseItem = objectType({
|
|
|
4311
4398
|
})),
|
|
4312
4399
|
"strategic": objectType({
|
|
4313
4400
|
"score": numberType(),
|
|
4314
|
-
"confidence": enumType(["Low", "Medium", "High"])
|
|
4401
|
+
"confidence": enumType(["Low", "Medium", "High"]),
|
|
4402
|
+
"scoredAt": stringType().optional().describe("Server stamp: when this dimension's confidence or a sub-score last changed. Absent until a save changes it. Ignored in requests."),
|
|
4403
|
+
"scoredBy": objectType({
|
|
4404
|
+
"userId": stringType().uuid(),
|
|
4405
|
+
"name": stringType()
|
|
4406
|
+
}).describe("Display reference to the local user who created / last edited a record. Server-assigned from the authenticated session \u2014 never taken from the request body.").optional().describe("Server stamp, who made that change. Ignored in requests.")
|
|
4315
4407
|
}).and(objectType({
|
|
4316
4408
|
"subs": objectType({
|
|
4317
4409
|
"strategicDifferentiation": numberType(),
|
|
@@ -4366,7 +4458,12 @@ var ListSnapshotsResponseItem = objectType({
|
|
|
4366
4458
|
"kind": enumType(["go", "pause", "stop", "rescope", "rebudget", "other"]),
|
|
4367
4459
|
"owner": stringType().max(listSnapshotsResponseInitiativesItemDecisionLogItemOwnerMax).optional(),
|
|
4368
4460
|
"rationale": stringType().max(listSnapshotsResponseInitiativesItemDecisionLogItemRationaleMax).optional(),
|
|
4369
|
-
"createdAt": stringType().optional()
|
|
4461
|
+
"createdAt": stringType().optional(),
|
|
4462
|
+
"recordedAt": stringType().optional().describe("Server stamp: when the entry was recorded or its content last changed (`date` is when the decision was taken). Absent on entries not saved since the stamps were introduced. Ignored in requests."),
|
|
4463
|
+
"recordedBy": objectType({
|
|
4464
|
+
"userId": stringType().uuid(),
|
|
4465
|
+
"name": stringType()
|
|
4466
|
+
}).describe("Display reference to the local user who created / last edited a record. Server-assigned from the authenticated session \u2014 never taken from the request body.").optional().describe("Server stamp, who recorded it. Ignored in requests.")
|
|
4370
4467
|
})).max(listSnapshotsResponseInitiativesItemDecisionLogMax).optional(),
|
|
4371
4468
|
"statusReports": arrayType(objectType({
|
|
4372
4469
|
"id": stringType(),
|
|
@@ -4390,12 +4487,25 @@ var ListSnapshotsResponseItem = objectType({
|
|
|
4390
4487
|
}),
|
|
4391
4488
|
"summary": stringType().max(listSnapshotsResponseInitiativesItemStatusReportsItemSummaryMax).optional()
|
|
4392
4489
|
})).max(listSnapshotsResponseInitiativesItemStatusReportsMax).optional(),
|
|
4490
|
+
"milestones": arrayType(objectType({
|
|
4491
|
+
"id": stringType(),
|
|
4492
|
+
"title": stringType().min(1).max(listSnapshotsResponseInitiativesItemMilestonesItemTitleMax),
|
|
4493
|
+
"baselineDate": stringType().regex(listSnapshotsResponseInitiativesItemMilestonesItemBaselineDateRegExp),
|
|
4494
|
+
"forecastDate": stringType().regex(listSnapshotsResponseInitiativesItemMilestonesItemForecastDateRegExp).optional(),
|
|
4495
|
+
"doneDate": stringType().regex(listSnapshotsResponseInitiativesItemMilestonesItemDoneDateRegExp).optional(),
|
|
4496
|
+
"note": stringType().max(listSnapshotsResponseInitiativesItemMilestonesItemNoteMax).optional()
|
|
4497
|
+
}).describe("A dated intermediate result (docs/milestones-concept-2026-10-17.md). baselineDate is the agreed plan, forecastDate today's expectation (absent = the baseline), doneDate marks it reached; all yyyy-mm-dd.")).max(listSnapshotsResponseInitiativesItemMilestonesMax).optional(),
|
|
4393
4498
|
"dependsOn": arrayType(stringType()).max(listSnapshotsResponseInitiativesItemDependsOnMax),
|
|
4394
4499
|
"requiredSkills": arrayType(objectType({
|
|
4395
4500
|
"skillId": stringType(),
|
|
4396
4501
|
"fte": numberType(),
|
|
4397
4502
|
"runFte": numberType().min(listSnapshotsResponseInitiativesItemRequiredSkillsItemRunFteMin).optional()
|
|
4398
4503
|
})).max(listSnapshotsResponseInitiativesItemRequiredSkillsMax).optional(),
|
|
4504
|
+
"capabilityImpacts": arrayType(objectType({
|
|
4505
|
+
"capabilityId": stringType(),
|
|
4506
|
+
"kind": enumType(["improve", "new", "replace", "retire"]),
|
|
4507
|
+
"maturityTo": numberType().min(1).max(listSnapshotsResponseInitiativesItemCapabilityImpactsItemMaturityToMax).optional().describe("The maturity level the initiative brings the capability to; absent for `retire`.")
|
|
4508
|
+
}).describe("What an initiative does to one capability of the organisation's map.")).max(listSnapshotsResponseInitiativesItemCapabilityImpactsMax).optional(),
|
|
4399
4509
|
"aiRiskTier": enumType(["Prohibited", "High-Risk", "Limited", "Minimal"]).optional(),
|
|
4400
4510
|
"hitlPosture": enumType(["Unattended", "Supervised", "Human-Required"]).optional(),
|
|
4401
4511
|
"dpiaStatus": enumType(["Not Required", "In Progress", "Completed"]).optional(),
|
|
@@ -4406,7 +4516,12 @@ var ListSnapshotsResponseItem = objectType({
|
|
|
4406
4516
|
"gateEvidence": recordType(stringType(), recordType(stringType(), objectType({
|
|
4407
4517
|
"checked": booleanType(),
|
|
4408
4518
|
"asOfDate": stringType().optional(),
|
|
4409
|
-
"note": stringType().max(listSnapshotsResponseInitiativesItemGateEvidenceNoteMax).optional()
|
|
4519
|
+
"note": stringType().max(listSnapshotsResponseInitiativesItemGateEvidenceNoteMax).optional(),
|
|
4520
|
+
"checkedAt": stringType().optional().describe("Server stamp: when the item was ticked; absent while unchecked or ticked before the stamps were introduced. Ignored in requests."),
|
|
4521
|
+
"checkedBy": objectType({
|
|
4522
|
+
"userId": stringType().uuid(),
|
|
4523
|
+
"name": stringType()
|
|
4524
|
+
}).describe("Display reference to the local user who created / last edited a record. Server-assigned from the authenticated session \u2014 never taken from the request body.").optional().describe("Server stamp, who ticked it. Ignored in requests.")
|
|
4410
4525
|
}))).optional().describe("Partial<Record<GateTransitionKey, Record<itemId, GateEvidenceItem>>>"),
|
|
4411
4526
|
"gateBypassed": booleanType().optional(),
|
|
4412
4527
|
"aiAct": objectType({
|
|
@@ -4489,6 +4604,7 @@ var ListSnapshotsResponseItem = objectType({
|
|
|
4489
4604
|
"userId": stringType().uuid(),
|
|
4490
4605
|
"name": stringType()
|
|
4491
4606
|
}).optional().describe("Display reference to the local user who created / last edited a record. Server-assigned from the authenticated session \u2014 never taken from the request body."),
|
|
4607
|
+
"version": numberType().min(1).optional().describe("Save counter, raised by the server on every save. A request names the version its edit is based on in InitiativeInput.baseVersion; this field is ignored in requests."),
|
|
4492
4608
|
"createdAt": stringType(),
|
|
4493
4609
|
"updatedAt": stringType()
|
|
4494
4610
|
})),
|
|
@@ -4516,9 +4632,17 @@ var createSnapshotBodyInitiativesItemStatusReportsItemBudgetCommentMax = 1e4;
|
|
|
4516
4632
|
var createSnapshotBodyInitiativesItemStatusReportsItemSkillsCommentMax = 1e4;
|
|
4517
4633
|
var createSnapshotBodyInitiativesItemStatusReportsItemSummaryMax = 1e4;
|
|
4518
4634
|
var createSnapshotBodyInitiativesItemStatusReportsMax = 1e3;
|
|
4635
|
+
var createSnapshotBodyInitiativesItemMilestonesItemTitleMax = 300;
|
|
4636
|
+
var createSnapshotBodyInitiativesItemMilestonesItemBaselineDateRegExp = new RegExp("^\\d{4}-\\d{2}-\\d{2}$");
|
|
4637
|
+
var createSnapshotBodyInitiativesItemMilestonesItemForecastDateRegExp = new RegExp("^\\d{4}-\\d{2}-\\d{2}$");
|
|
4638
|
+
var createSnapshotBodyInitiativesItemMilestonesItemDoneDateRegExp = new RegExp("^\\d{4}-\\d{2}-\\d{2}$");
|
|
4639
|
+
var createSnapshotBodyInitiativesItemMilestonesItemNoteMax = 1e4;
|
|
4640
|
+
var createSnapshotBodyInitiativesItemMilestonesMax = 30;
|
|
4519
4641
|
var createSnapshotBodyInitiativesItemDependsOnMax = 1e3;
|
|
4520
4642
|
var createSnapshotBodyInitiativesItemRequiredSkillsItemRunFteMin = 0;
|
|
4521
4643
|
var createSnapshotBodyInitiativesItemRequiredSkillsMax = 1e3;
|
|
4644
|
+
var createSnapshotBodyInitiativesItemCapabilityImpactsItemMaturityToMax = 5;
|
|
4645
|
+
var createSnapshotBodyInitiativesItemCapabilityImpactsMax = 1e3;
|
|
4522
4646
|
var createSnapshotBodyInitiativesItemDpiaUrlMax = 2e3;
|
|
4523
4647
|
var createSnapshotBodyInitiativesItemModelCardUrlMax = 2e3;
|
|
4524
4648
|
var createSnapshotBodyInitiativesItemProhibitedOverrideMax = 2e3;
|
|
@@ -4568,7 +4692,12 @@ var CreateSnapshotBody = objectType({
|
|
|
4568
4692
|
"evaluation": objectType({
|
|
4569
4693
|
"valueScale": objectType({
|
|
4570
4694
|
"score": numberType(),
|
|
4571
|
-
"confidence": enumType(["Low", "Medium", "High"])
|
|
4695
|
+
"confidence": enumType(["Low", "Medium", "High"]),
|
|
4696
|
+
"scoredAt": stringType().optional().describe("Server stamp: when this dimension's confidence or a sub-score last changed. Absent until a save changes it. Ignored in requests."),
|
|
4697
|
+
"scoredBy": objectType({
|
|
4698
|
+
"userId": stringType().uuid(),
|
|
4699
|
+
"name": stringType()
|
|
4700
|
+
}).describe("Display reference to the local user who created / last edited a record. Server-assigned from the authenticated session \u2014 never taken from the request body.").optional().describe("Server stamp, who made that change. Ignored in requests.")
|
|
4572
4701
|
}).and(objectType({
|
|
4573
4702
|
"subs": objectType({
|
|
4574
4703
|
"frequencyOfProcess": numberType(),
|
|
@@ -4582,7 +4711,12 @@ var CreateSnapshotBody = objectType({
|
|
|
4582
4711
|
})),
|
|
4583
4712
|
"feasibility": objectType({
|
|
4584
4713
|
"score": numberType(),
|
|
4585
|
-
"confidence": enumType(["Low", "Medium", "High"])
|
|
4714
|
+
"confidence": enumType(["Low", "Medium", "High"]),
|
|
4715
|
+
"scoredAt": stringType().optional().describe("Server stamp: when this dimension's confidence or a sub-score last changed. Absent until a save changes it. Ignored in requests."),
|
|
4716
|
+
"scoredBy": objectType({
|
|
4717
|
+
"userId": stringType().uuid(),
|
|
4718
|
+
"name": stringType()
|
|
4719
|
+
}).describe("Display reference to the local user who created / last edited a record. Server-assigned from the authenticated session \u2014 never taken from the request body.").optional().describe("Server stamp, who made that change. Ignored in requests.")
|
|
4586
4720
|
}).and(objectType({
|
|
4587
4721
|
"subs": objectType({
|
|
4588
4722
|
"dataAvailability": numberType(),
|
|
@@ -4596,7 +4730,12 @@ var CreateSnapshotBody = objectType({
|
|
|
4596
4730
|
})),
|
|
4597
4731
|
"governance": objectType({
|
|
4598
4732
|
"score": numberType(),
|
|
4599
|
-
"confidence": enumType(["Low", "Medium", "High"])
|
|
4733
|
+
"confidence": enumType(["Low", "Medium", "High"]),
|
|
4734
|
+
"scoredAt": stringType().optional().describe("Server stamp: when this dimension's confidence or a sub-score last changed. Absent until a save changes it. Ignored in requests."),
|
|
4735
|
+
"scoredBy": objectType({
|
|
4736
|
+
"userId": stringType().uuid(),
|
|
4737
|
+
"name": stringType()
|
|
4738
|
+
}).describe("Display reference to the local user who created / last edited a record. Server-assigned from the authenticated session \u2014 never taken from the request body.").optional().describe("Server stamp, who made that change. Ignored in requests.")
|
|
4600
4739
|
}).and(objectType({
|
|
4601
4740
|
"subs": objectType({
|
|
4602
4741
|
"regulatoryExposure": numberType(),
|
|
@@ -4611,7 +4750,12 @@ var CreateSnapshotBody = objectType({
|
|
|
4611
4750
|
})),
|
|
4612
4751
|
"strategic": objectType({
|
|
4613
4752
|
"score": numberType(),
|
|
4614
|
-
"confidence": enumType(["Low", "Medium", "High"])
|
|
4753
|
+
"confidence": enumType(["Low", "Medium", "High"]),
|
|
4754
|
+
"scoredAt": stringType().optional().describe("Server stamp: when this dimension's confidence or a sub-score last changed. Absent until a save changes it. Ignored in requests."),
|
|
4755
|
+
"scoredBy": objectType({
|
|
4756
|
+
"userId": stringType().uuid(),
|
|
4757
|
+
"name": stringType()
|
|
4758
|
+
}).describe("Display reference to the local user who created / last edited a record. Server-assigned from the authenticated session \u2014 never taken from the request body.").optional().describe("Server stamp, who made that change. Ignored in requests.")
|
|
4615
4759
|
}).and(objectType({
|
|
4616
4760
|
"subs": objectType({
|
|
4617
4761
|
"strategicDifferentiation": numberType(),
|
|
@@ -4666,7 +4810,12 @@ var CreateSnapshotBody = objectType({
|
|
|
4666
4810
|
"kind": enumType(["go", "pause", "stop", "rescope", "rebudget", "other"]),
|
|
4667
4811
|
"owner": stringType().max(createSnapshotBodyInitiativesItemDecisionLogItemOwnerMax).optional(),
|
|
4668
4812
|
"rationale": stringType().max(createSnapshotBodyInitiativesItemDecisionLogItemRationaleMax).optional(),
|
|
4669
|
-
"createdAt": stringType().optional()
|
|
4813
|
+
"createdAt": stringType().optional(),
|
|
4814
|
+
"recordedAt": stringType().optional().describe("Server stamp: when the entry was recorded or its content last changed (`date` is when the decision was taken). Absent on entries not saved since the stamps were introduced. Ignored in requests."),
|
|
4815
|
+
"recordedBy": objectType({
|
|
4816
|
+
"userId": stringType().uuid(),
|
|
4817
|
+
"name": stringType()
|
|
4818
|
+
}).describe("Display reference to the local user who created / last edited a record. Server-assigned from the authenticated session \u2014 never taken from the request body.").optional().describe("Server stamp, who recorded it. Ignored in requests.")
|
|
4670
4819
|
})).max(createSnapshotBodyInitiativesItemDecisionLogMax).optional(),
|
|
4671
4820
|
"statusReports": arrayType(objectType({
|
|
4672
4821
|
"id": stringType(),
|
|
@@ -4690,12 +4839,25 @@ var CreateSnapshotBody = objectType({
|
|
|
4690
4839
|
}),
|
|
4691
4840
|
"summary": stringType().max(createSnapshotBodyInitiativesItemStatusReportsItemSummaryMax).optional()
|
|
4692
4841
|
})).max(createSnapshotBodyInitiativesItemStatusReportsMax).optional(),
|
|
4842
|
+
"milestones": arrayType(objectType({
|
|
4843
|
+
"id": stringType(),
|
|
4844
|
+
"title": stringType().min(1).max(createSnapshotBodyInitiativesItemMilestonesItemTitleMax),
|
|
4845
|
+
"baselineDate": stringType().regex(createSnapshotBodyInitiativesItemMilestonesItemBaselineDateRegExp),
|
|
4846
|
+
"forecastDate": stringType().regex(createSnapshotBodyInitiativesItemMilestonesItemForecastDateRegExp).optional(),
|
|
4847
|
+
"doneDate": stringType().regex(createSnapshotBodyInitiativesItemMilestonesItemDoneDateRegExp).optional(),
|
|
4848
|
+
"note": stringType().max(createSnapshotBodyInitiativesItemMilestonesItemNoteMax).optional()
|
|
4849
|
+
}).describe("A dated intermediate result (docs/milestones-concept-2026-10-17.md). baselineDate is the agreed plan, forecastDate today's expectation (absent = the baseline), doneDate marks it reached; all yyyy-mm-dd.")).max(createSnapshotBodyInitiativesItemMilestonesMax).optional(),
|
|
4693
4850
|
"dependsOn": arrayType(stringType()).max(createSnapshotBodyInitiativesItemDependsOnMax),
|
|
4694
4851
|
"requiredSkills": arrayType(objectType({
|
|
4695
4852
|
"skillId": stringType(),
|
|
4696
4853
|
"fte": numberType(),
|
|
4697
4854
|
"runFte": numberType().min(createSnapshotBodyInitiativesItemRequiredSkillsItemRunFteMin).optional()
|
|
4698
4855
|
})).max(createSnapshotBodyInitiativesItemRequiredSkillsMax).optional(),
|
|
4856
|
+
"capabilityImpacts": arrayType(objectType({
|
|
4857
|
+
"capabilityId": stringType(),
|
|
4858
|
+
"kind": enumType(["improve", "new", "replace", "retire"]),
|
|
4859
|
+
"maturityTo": numberType().min(1).max(createSnapshotBodyInitiativesItemCapabilityImpactsItemMaturityToMax).optional().describe("The maturity level the initiative brings the capability to; absent for `retire`.")
|
|
4860
|
+
}).describe("What an initiative does to one capability of the organisation's map.")).max(createSnapshotBodyInitiativesItemCapabilityImpactsMax).optional(),
|
|
4699
4861
|
"aiRiskTier": enumType(["Prohibited", "High-Risk", "Limited", "Minimal"]).optional(),
|
|
4700
4862
|
"hitlPosture": enumType(["Unattended", "Supervised", "Human-Required"]).optional(),
|
|
4701
4863
|
"dpiaStatus": enumType(["Not Required", "In Progress", "Completed"]).optional(),
|
|
@@ -4706,7 +4868,12 @@ var CreateSnapshotBody = objectType({
|
|
|
4706
4868
|
"gateEvidence": recordType(stringType(), recordType(stringType(), objectType({
|
|
4707
4869
|
"checked": booleanType(),
|
|
4708
4870
|
"asOfDate": stringType().optional(),
|
|
4709
|
-
"note": stringType().max(createSnapshotBodyInitiativesItemGateEvidenceNoteMax).optional()
|
|
4871
|
+
"note": stringType().max(createSnapshotBodyInitiativesItemGateEvidenceNoteMax).optional(),
|
|
4872
|
+
"checkedAt": stringType().optional().describe("Server stamp: when the item was ticked; absent while unchecked or ticked before the stamps were introduced. Ignored in requests."),
|
|
4873
|
+
"checkedBy": objectType({
|
|
4874
|
+
"userId": stringType().uuid(),
|
|
4875
|
+
"name": stringType()
|
|
4876
|
+
}).describe("Display reference to the local user who created / last edited a record. Server-assigned from the authenticated session \u2014 never taken from the request body.").optional().describe("Server stamp, who ticked it. Ignored in requests.")
|
|
4710
4877
|
}))).optional().describe("Partial<Record<GateTransitionKey, Record<itemId, GateEvidenceItem>>>"),
|
|
4711
4878
|
"gateBypassed": booleanType().optional(),
|
|
4712
4879
|
"aiAct": objectType({
|
|
@@ -4789,6 +4956,7 @@ var CreateSnapshotBody = objectType({
|
|
|
4789
4956
|
"userId": stringType().uuid(),
|
|
4790
4957
|
"name": stringType()
|
|
4791
4958
|
}).optional().describe("Display reference to the local user who created / last edited a record. Server-assigned from the authenticated session \u2014 never taken from the request body."),
|
|
4959
|
+
"version": numberType().min(1).optional().describe("Save counter, raised by the server on every save. A request names the version its edit is based on in InitiativeInput.baseVersion; this field is ignored in requests."),
|
|
4792
4960
|
"createdAt": stringType(),
|
|
4793
4961
|
"updatedAt": stringType()
|
|
4794
4962
|
})),
|
|
@@ -4822,9 +4990,17 @@ var renameSnapshotResponseInitiativesItemStatusReportsItemBudgetCommentMax = 1e4
|
|
|
4822
4990
|
var renameSnapshotResponseInitiativesItemStatusReportsItemSkillsCommentMax = 1e4;
|
|
4823
4991
|
var renameSnapshotResponseInitiativesItemStatusReportsItemSummaryMax = 1e4;
|
|
4824
4992
|
var renameSnapshotResponseInitiativesItemStatusReportsMax = 1e3;
|
|
4993
|
+
var renameSnapshotResponseInitiativesItemMilestonesItemTitleMax = 300;
|
|
4994
|
+
var renameSnapshotResponseInitiativesItemMilestonesItemBaselineDateRegExp = new RegExp("^\\d{4}-\\d{2}-\\d{2}$");
|
|
4995
|
+
var renameSnapshotResponseInitiativesItemMilestonesItemForecastDateRegExp = new RegExp("^\\d{4}-\\d{2}-\\d{2}$");
|
|
4996
|
+
var renameSnapshotResponseInitiativesItemMilestonesItemDoneDateRegExp = new RegExp("^\\d{4}-\\d{2}-\\d{2}$");
|
|
4997
|
+
var renameSnapshotResponseInitiativesItemMilestonesItemNoteMax = 1e4;
|
|
4998
|
+
var renameSnapshotResponseInitiativesItemMilestonesMax = 30;
|
|
4825
4999
|
var renameSnapshotResponseInitiativesItemDependsOnMax = 1e3;
|
|
4826
5000
|
var renameSnapshotResponseInitiativesItemRequiredSkillsItemRunFteMin = 0;
|
|
4827
5001
|
var renameSnapshotResponseInitiativesItemRequiredSkillsMax = 1e3;
|
|
5002
|
+
var renameSnapshotResponseInitiativesItemCapabilityImpactsItemMaturityToMax = 5;
|
|
5003
|
+
var renameSnapshotResponseInitiativesItemCapabilityImpactsMax = 1e3;
|
|
4828
5004
|
var renameSnapshotResponseInitiativesItemDpiaUrlMax = 2e3;
|
|
4829
5005
|
var renameSnapshotResponseInitiativesItemModelCardUrlMax = 2e3;
|
|
4830
5006
|
var renameSnapshotResponseInitiativesItemProhibitedOverrideMax = 2e3;
|
|
@@ -4874,7 +5050,12 @@ var RenameSnapshotResponse = objectType({
|
|
|
4874
5050
|
"evaluation": objectType({
|
|
4875
5051
|
"valueScale": objectType({
|
|
4876
5052
|
"score": numberType(),
|
|
4877
|
-
"confidence": enumType(["Low", "Medium", "High"])
|
|
5053
|
+
"confidence": enumType(["Low", "Medium", "High"]),
|
|
5054
|
+
"scoredAt": stringType().optional().describe("Server stamp: when this dimension's confidence or a sub-score last changed. Absent until a save changes it. Ignored in requests."),
|
|
5055
|
+
"scoredBy": objectType({
|
|
5056
|
+
"userId": stringType().uuid(),
|
|
5057
|
+
"name": stringType()
|
|
5058
|
+
}).describe("Display reference to the local user who created / last edited a record. Server-assigned from the authenticated session \u2014 never taken from the request body.").optional().describe("Server stamp, who made that change. Ignored in requests.")
|
|
4878
5059
|
}).and(objectType({
|
|
4879
5060
|
"subs": objectType({
|
|
4880
5061
|
"frequencyOfProcess": numberType(),
|
|
@@ -4888,7 +5069,12 @@ var RenameSnapshotResponse = objectType({
|
|
|
4888
5069
|
})),
|
|
4889
5070
|
"feasibility": objectType({
|
|
4890
5071
|
"score": numberType(),
|
|
4891
|
-
"confidence": enumType(["Low", "Medium", "High"])
|
|
5072
|
+
"confidence": enumType(["Low", "Medium", "High"]),
|
|
5073
|
+
"scoredAt": stringType().optional().describe("Server stamp: when this dimension's confidence or a sub-score last changed. Absent until a save changes it. Ignored in requests."),
|
|
5074
|
+
"scoredBy": objectType({
|
|
5075
|
+
"userId": stringType().uuid(),
|
|
5076
|
+
"name": stringType()
|
|
5077
|
+
}).describe("Display reference to the local user who created / last edited a record. Server-assigned from the authenticated session \u2014 never taken from the request body.").optional().describe("Server stamp, who made that change. Ignored in requests.")
|
|
4892
5078
|
}).and(objectType({
|
|
4893
5079
|
"subs": objectType({
|
|
4894
5080
|
"dataAvailability": numberType(),
|
|
@@ -4902,7 +5088,12 @@ var RenameSnapshotResponse = objectType({
|
|
|
4902
5088
|
})),
|
|
4903
5089
|
"governance": objectType({
|
|
4904
5090
|
"score": numberType(),
|
|
4905
|
-
"confidence": enumType(["Low", "Medium", "High"])
|
|
5091
|
+
"confidence": enumType(["Low", "Medium", "High"]),
|
|
5092
|
+
"scoredAt": stringType().optional().describe("Server stamp: when this dimension's confidence or a sub-score last changed. Absent until a save changes it. Ignored in requests."),
|
|
5093
|
+
"scoredBy": objectType({
|
|
5094
|
+
"userId": stringType().uuid(),
|
|
5095
|
+
"name": stringType()
|
|
5096
|
+
}).describe("Display reference to the local user who created / last edited a record. Server-assigned from the authenticated session \u2014 never taken from the request body.").optional().describe("Server stamp, who made that change. Ignored in requests.")
|
|
4906
5097
|
}).and(objectType({
|
|
4907
5098
|
"subs": objectType({
|
|
4908
5099
|
"regulatoryExposure": numberType(),
|
|
@@ -4917,7 +5108,12 @@ var RenameSnapshotResponse = objectType({
|
|
|
4917
5108
|
})),
|
|
4918
5109
|
"strategic": objectType({
|
|
4919
5110
|
"score": numberType(),
|
|
4920
|
-
"confidence": enumType(["Low", "Medium", "High"])
|
|
5111
|
+
"confidence": enumType(["Low", "Medium", "High"]),
|
|
5112
|
+
"scoredAt": stringType().optional().describe("Server stamp: when this dimension's confidence or a sub-score last changed. Absent until a save changes it. Ignored in requests."),
|
|
5113
|
+
"scoredBy": objectType({
|
|
5114
|
+
"userId": stringType().uuid(),
|
|
5115
|
+
"name": stringType()
|
|
5116
|
+
}).describe("Display reference to the local user who created / last edited a record. Server-assigned from the authenticated session \u2014 never taken from the request body.").optional().describe("Server stamp, who made that change. Ignored in requests.")
|
|
4921
5117
|
}).and(objectType({
|
|
4922
5118
|
"subs": objectType({
|
|
4923
5119
|
"strategicDifferentiation": numberType(),
|
|
@@ -4972,7 +5168,12 @@ var RenameSnapshotResponse = objectType({
|
|
|
4972
5168
|
"kind": enumType(["go", "pause", "stop", "rescope", "rebudget", "other"]),
|
|
4973
5169
|
"owner": stringType().max(renameSnapshotResponseInitiativesItemDecisionLogItemOwnerMax).optional(),
|
|
4974
5170
|
"rationale": stringType().max(renameSnapshotResponseInitiativesItemDecisionLogItemRationaleMax).optional(),
|
|
4975
|
-
"createdAt": stringType().optional()
|
|
5171
|
+
"createdAt": stringType().optional(),
|
|
5172
|
+
"recordedAt": stringType().optional().describe("Server stamp: when the entry was recorded or its content last changed (`date` is when the decision was taken). Absent on entries not saved since the stamps were introduced. Ignored in requests."),
|
|
5173
|
+
"recordedBy": objectType({
|
|
5174
|
+
"userId": stringType().uuid(),
|
|
5175
|
+
"name": stringType()
|
|
5176
|
+
}).describe("Display reference to the local user who created / last edited a record. Server-assigned from the authenticated session \u2014 never taken from the request body.").optional().describe("Server stamp, who recorded it. Ignored in requests.")
|
|
4976
5177
|
})).max(renameSnapshotResponseInitiativesItemDecisionLogMax).optional(),
|
|
4977
5178
|
"statusReports": arrayType(objectType({
|
|
4978
5179
|
"id": stringType(),
|
|
@@ -4996,12 +5197,25 @@ var RenameSnapshotResponse = objectType({
|
|
|
4996
5197
|
}),
|
|
4997
5198
|
"summary": stringType().max(renameSnapshotResponseInitiativesItemStatusReportsItemSummaryMax).optional()
|
|
4998
5199
|
})).max(renameSnapshotResponseInitiativesItemStatusReportsMax).optional(),
|
|
5200
|
+
"milestones": arrayType(objectType({
|
|
5201
|
+
"id": stringType(),
|
|
5202
|
+
"title": stringType().min(1).max(renameSnapshotResponseInitiativesItemMilestonesItemTitleMax),
|
|
5203
|
+
"baselineDate": stringType().regex(renameSnapshotResponseInitiativesItemMilestonesItemBaselineDateRegExp),
|
|
5204
|
+
"forecastDate": stringType().regex(renameSnapshotResponseInitiativesItemMilestonesItemForecastDateRegExp).optional(),
|
|
5205
|
+
"doneDate": stringType().regex(renameSnapshotResponseInitiativesItemMilestonesItemDoneDateRegExp).optional(),
|
|
5206
|
+
"note": stringType().max(renameSnapshotResponseInitiativesItemMilestonesItemNoteMax).optional()
|
|
5207
|
+
}).describe("A dated intermediate result (docs/milestones-concept-2026-10-17.md). baselineDate is the agreed plan, forecastDate today's expectation (absent = the baseline), doneDate marks it reached; all yyyy-mm-dd.")).max(renameSnapshotResponseInitiativesItemMilestonesMax).optional(),
|
|
4999
5208
|
"dependsOn": arrayType(stringType()).max(renameSnapshotResponseInitiativesItemDependsOnMax),
|
|
5000
5209
|
"requiredSkills": arrayType(objectType({
|
|
5001
5210
|
"skillId": stringType(),
|
|
5002
5211
|
"fte": numberType(),
|
|
5003
5212
|
"runFte": numberType().min(renameSnapshotResponseInitiativesItemRequiredSkillsItemRunFteMin).optional()
|
|
5004
5213
|
})).max(renameSnapshotResponseInitiativesItemRequiredSkillsMax).optional(),
|
|
5214
|
+
"capabilityImpacts": arrayType(objectType({
|
|
5215
|
+
"capabilityId": stringType(),
|
|
5216
|
+
"kind": enumType(["improve", "new", "replace", "retire"]),
|
|
5217
|
+
"maturityTo": numberType().min(1).max(renameSnapshotResponseInitiativesItemCapabilityImpactsItemMaturityToMax).optional().describe("The maturity level the initiative brings the capability to; absent for `retire`.")
|
|
5218
|
+
}).describe("What an initiative does to one capability of the organisation's map.")).max(renameSnapshotResponseInitiativesItemCapabilityImpactsMax).optional(),
|
|
5005
5219
|
"aiRiskTier": enumType(["Prohibited", "High-Risk", "Limited", "Minimal"]).optional(),
|
|
5006
5220
|
"hitlPosture": enumType(["Unattended", "Supervised", "Human-Required"]).optional(),
|
|
5007
5221
|
"dpiaStatus": enumType(["Not Required", "In Progress", "Completed"]).optional(),
|
|
@@ -5012,7 +5226,12 @@ var RenameSnapshotResponse = objectType({
|
|
|
5012
5226
|
"gateEvidence": recordType(stringType(), recordType(stringType(), objectType({
|
|
5013
5227
|
"checked": booleanType(),
|
|
5014
5228
|
"asOfDate": stringType().optional(),
|
|
5015
|
-
"note": stringType().max(renameSnapshotResponseInitiativesItemGateEvidenceNoteMax).optional()
|
|
5229
|
+
"note": stringType().max(renameSnapshotResponseInitiativesItemGateEvidenceNoteMax).optional(),
|
|
5230
|
+
"checkedAt": stringType().optional().describe("Server stamp: when the item was ticked; absent while unchecked or ticked before the stamps were introduced. Ignored in requests."),
|
|
5231
|
+
"checkedBy": objectType({
|
|
5232
|
+
"userId": stringType().uuid(),
|
|
5233
|
+
"name": stringType()
|
|
5234
|
+
}).describe("Display reference to the local user who created / last edited a record. Server-assigned from the authenticated session \u2014 never taken from the request body.").optional().describe("Server stamp, who ticked it. Ignored in requests.")
|
|
5016
5235
|
}))).optional().describe("Partial<Record<GateTransitionKey, Record<itemId, GateEvidenceItem>>>"),
|
|
5017
5236
|
"gateBypassed": booleanType().optional(),
|
|
5018
5237
|
"aiAct": objectType({
|
|
@@ -5095,6 +5314,7 @@ var RenameSnapshotResponse = objectType({
|
|
|
5095
5314
|
"userId": stringType().uuid(),
|
|
5096
5315
|
"name": stringType()
|
|
5097
5316
|
}).optional().describe("Display reference to the local user who created / last edited a record. Server-assigned from the authenticated session \u2014 never taken from the request body."),
|
|
5317
|
+
"version": numberType().min(1).optional().describe("Save counter, raised by the server on every save. A request names the version its edit is based on in InitiativeInput.baseVersion; this field is ignored in requests."),
|
|
5098
5318
|
"createdAt": stringType(),
|
|
5099
5319
|
"updatedAt": stringType()
|
|
5100
5320
|
})),
|
|
@@ -5123,9 +5343,17 @@ var listInitiativesResponseStatusReportsItemBudgetCommentMax = 1e4;
|
|
|
5123
5343
|
var listInitiativesResponseStatusReportsItemSkillsCommentMax = 1e4;
|
|
5124
5344
|
var listInitiativesResponseStatusReportsItemSummaryMax = 1e4;
|
|
5125
5345
|
var listInitiativesResponseStatusReportsMax = 1e3;
|
|
5346
|
+
var listInitiativesResponseMilestonesItemTitleMax = 300;
|
|
5347
|
+
var listInitiativesResponseMilestonesItemBaselineDateRegExp = new RegExp("^\\d{4}-\\d{2}-\\d{2}$");
|
|
5348
|
+
var listInitiativesResponseMilestonesItemForecastDateRegExp = new RegExp("^\\d{4}-\\d{2}-\\d{2}$");
|
|
5349
|
+
var listInitiativesResponseMilestonesItemDoneDateRegExp = new RegExp("^\\d{4}-\\d{2}-\\d{2}$");
|
|
5350
|
+
var listInitiativesResponseMilestonesItemNoteMax = 1e4;
|
|
5351
|
+
var listInitiativesResponseMilestonesMax = 30;
|
|
5126
5352
|
var listInitiativesResponseDependsOnMax = 1e3;
|
|
5127
5353
|
var listInitiativesResponseRequiredSkillsItemRunFteMin = 0;
|
|
5128
5354
|
var listInitiativesResponseRequiredSkillsMax = 1e3;
|
|
5355
|
+
var listInitiativesResponseCapabilityImpactsItemMaturityToMax = 5;
|
|
5356
|
+
var listInitiativesResponseCapabilityImpactsMax = 1e3;
|
|
5129
5357
|
var listInitiativesResponseDpiaUrlMax = 2e3;
|
|
5130
5358
|
var listInitiativesResponseModelCardUrlMax = 2e3;
|
|
5131
5359
|
var listInitiativesResponseProhibitedOverrideMax = 2e3;
|
|
@@ -5169,7 +5397,12 @@ var ListInitiativesResponseItem = objectType({
|
|
|
5169
5397
|
"evaluation": objectType({
|
|
5170
5398
|
"valueScale": objectType({
|
|
5171
5399
|
"score": numberType(),
|
|
5172
|
-
"confidence": enumType(["Low", "Medium", "High"])
|
|
5400
|
+
"confidence": enumType(["Low", "Medium", "High"]),
|
|
5401
|
+
"scoredAt": stringType().optional().describe("Server stamp: when this dimension's confidence or a sub-score last changed. Absent until a save changes it. Ignored in requests."),
|
|
5402
|
+
"scoredBy": objectType({
|
|
5403
|
+
"userId": stringType().uuid(),
|
|
5404
|
+
"name": stringType()
|
|
5405
|
+
}).describe("Display reference to the local user who created / last edited a record. Server-assigned from the authenticated session \u2014 never taken from the request body.").optional().describe("Server stamp, who made that change. Ignored in requests.")
|
|
5173
5406
|
}).and(objectType({
|
|
5174
5407
|
"subs": objectType({
|
|
5175
5408
|
"frequencyOfProcess": numberType(),
|
|
@@ -5183,7 +5416,12 @@ var ListInitiativesResponseItem = objectType({
|
|
|
5183
5416
|
})),
|
|
5184
5417
|
"feasibility": objectType({
|
|
5185
5418
|
"score": numberType(),
|
|
5186
|
-
"confidence": enumType(["Low", "Medium", "High"])
|
|
5419
|
+
"confidence": enumType(["Low", "Medium", "High"]),
|
|
5420
|
+
"scoredAt": stringType().optional().describe("Server stamp: when this dimension's confidence or a sub-score last changed. Absent until a save changes it. Ignored in requests."),
|
|
5421
|
+
"scoredBy": objectType({
|
|
5422
|
+
"userId": stringType().uuid(),
|
|
5423
|
+
"name": stringType()
|
|
5424
|
+
}).describe("Display reference to the local user who created / last edited a record. Server-assigned from the authenticated session \u2014 never taken from the request body.").optional().describe("Server stamp, who made that change. Ignored in requests.")
|
|
5187
5425
|
}).and(objectType({
|
|
5188
5426
|
"subs": objectType({
|
|
5189
5427
|
"dataAvailability": numberType(),
|
|
@@ -5197,7 +5435,12 @@ var ListInitiativesResponseItem = objectType({
|
|
|
5197
5435
|
})),
|
|
5198
5436
|
"governance": objectType({
|
|
5199
5437
|
"score": numberType(),
|
|
5200
|
-
"confidence": enumType(["Low", "Medium", "High"])
|
|
5438
|
+
"confidence": enumType(["Low", "Medium", "High"]),
|
|
5439
|
+
"scoredAt": stringType().optional().describe("Server stamp: when this dimension's confidence or a sub-score last changed. Absent until a save changes it. Ignored in requests."),
|
|
5440
|
+
"scoredBy": objectType({
|
|
5441
|
+
"userId": stringType().uuid(),
|
|
5442
|
+
"name": stringType()
|
|
5443
|
+
}).describe("Display reference to the local user who created / last edited a record. Server-assigned from the authenticated session \u2014 never taken from the request body.").optional().describe("Server stamp, who made that change. Ignored in requests.")
|
|
5201
5444
|
}).and(objectType({
|
|
5202
5445
|
"subs": objectType({
|
|
5203
5446
|
"regulatoryExposure": numberType(),
|
|
@@ -5212,7 +5455,12 @@ var ListInitiativesResponseItem = objectType({
|
|
|
5212
5455
|
})),
|
|
5213
5456
|
"strategic": objectType({
|
|
5214
5457
|
"score": numberType(),
|
|
5215
|
-
"confidence": enumType(["Low", "Medium", "High"])
|
|
5458
|
+
"confidence": enumType(["Low", "Medium", "High"]),
|
|
5459
|
+
"scoredAt": stringType().optional().describe("Server stamp: when this dimension's confidence or a sub-score last changed. Absent until a save changes it. Ignored in requests."),
|
|
5460
|
+
"scoredBy": objectType({
|
|
5461
|
+
"userId": stringType().uuid(),
|
|
5462
|
+
"name": stringType()
|
|
5463
|
+
}).describe("Display reference to the local user who created / last edited a record. Server-assigned from the authenticated session \u2014 never taken from the request body.").optional().describe("Server stamp, who made that change. Ignored in requests.")
|
|
5216
5464
|
}).and(objectType({
|
|
5217
5465
|
"subs": objectType({
|
|
5218
5466
|
"strategicDifferentiation": numberType(),
|
|
@@ -5267,7 +5515,12 @@ var ListInitiativesResponseItem = objectType({
|
|
|
5267
5515
|
"kind": enumType(["go", "pause", "stop", "rescope", "rebudget", "other"]),
|
|
5268
5516
|
"owner": stringType().max(listInitiativesResponseDecisionLogItemOwnerMax).optional(),
|
|
5269
5517
|
"rationale": stringType().max(listInitiativesResponseDecisionLogItemRationaleMax).optional(),
|
|
5270
|
-
"createdAt": stringType().optional()
|
|
5518
|
+
"createdAt": stringType().optional(),
|
|
5519
|
+
"recordedAt": stringType().optional().describe("Server stamp: when the entry was recorded or its content last changed (`date` is when the decision was taken). Absent on entries not saved since the stamps were introduced. Ignored in requests."),
|
|
5520
|
+
"recordedBy": objectType({
|
|
5521
|
+
"userId": stringType().uuid(),
|
|
5522
|
+
"name": stringType()
|
|
5523
|
+
}).describe("Display reference to the local user who created / last edited a record. Server-assigned from the authenticated session \u2014 never taken from the request body.").optional().describe("Server stamp, who recorded it. Ignored in requests.")
|
|
5271
5524
|
})).max(listInitiativesResponseDecisionLogMax).optional(),
|
|
5272
5525
|
"statusReports": arrayType(objectType({
|
|
5273
5526
|
"id": stringType(),
|
|
@@ -5291,12 +5544,25 @@ var ListInitiativesResponseItem = objectType({
|
|
|
5291
5544
|
}),
|
|
5292
5545
|
"summary": stringType().max(listInitiativesResponseStatusReportsItemSummaryMax).optional()
|
|
5293
5546
|
})).max(listInitiativesResponseStatusReportsMax).optional(),
|
|
5547
|
+
"milestones": arrayType(objectType({
|
|
5548
|
+
"id": stringType(),
|
|
5549
|
+
"title": stringType().min(1).max(listInitiativesResponseMilestonesItemTitleMax),
|
|
5550
|
+
"baselineDate": stringType().regex(listInitiativesResponseMilestonesItemBaselineDateRegExp),
|
|
5551
|
+
"forecastDate": stringType().regex(listInitiativesResponseMilestonesItemForecastDateRegExp).optional(),
|
|
5552
|
+
"doneDate": stringType().regex(listInitiativesResponseMilestonesItemDoneDateRegExp).optional(),
|
|
5553
|
+
"note": stringType().max(listInitiativesResponseMilestonesItemNoteMax).optional()
|
|
5554
|
+
}).describe("A dated intermediate result (docs/milestones-concept-2026-10-17.md). baselineDate is the agreed plan, forecastDate today's expectation (absent = the baseline), doneDate marks it reached; all yyyy-mm-dd.")).max(listInitiativesResponseMilestonesMax).optional(),
|
|
5294
5555
|
"dependsOn": arrayType(stringType()).max(listInitiativesResponseDependsOnMax),
|
|
5295
5556
|
"requiredSkills": arrayType(objectType({
|
|
5296
5557
|
"skillId": stringType(),
|
|
5297
5558
|
"fte": numberType(),
|
|
5298
5559
|
"runFte": numberType().min(listInitiativesResponseRequiredSkillsItemRunFteMin).optional()
|
|
5299
5560
|
})).max(listInitiativesResponseRequiredSkillsMax).optional(),
|
|
5561
|
+
"capabilityImpacts": arrayType(objectType({
|
|
5562
|
+
"capabilityId": stringType(),
|
|
5563
|
+
"kind": enumType(["improve", "new", "replace", "retire"]),
|
|
5564
|
+
"maturityTo": numberType().min(1).max(listInitiativesResponseCapabilityImpactsItemMaturityToMax).optional().describe("The maturity level the initiative brings the capability to; absent for `retire`.")
|
|
5565
|
+
}).describe("What an initiative does to one capability of the organisation's map.")).max(listInitiativesResponseCapabilityImpactsMax).optional(),
|
|
5300
5566
|
"aiRiskTier": enumType(["Prohibited", "High-Risk", "Limited", "Minimal"]).optional(),
|
|
5301
5567
|
"hitlPosture": enumType(["Unattended", "Supervised", "Human-Required"]).optional(),
|
|
5302
5568
|
"dpiaStatus": enumType(["Not Required", "In Progress", "Completed"]).optional(),
|
|
@@ -5307,7 +5573,12 @@ var ListInitiativesResponseItem = objectType({
|
|
|
5307
5573
|
"gateEvidence": recordType(stringType(), recordType(stringType(), objectType({
|
|
5308
5574
|
"checked": booleanType(),
|
|
5309
5575
|
"asOfDate": stringType().optional(),
|
|
5310
|
-
"note": stringType().max(listInitiativesResponseGateEvidenceNoteMax).optional()
|
|
5576
|
+
"note": stringType().max(listInitiativesResponseGateEvidenceNoteMax).optional(),
|
|
5577
|
+
"checkedAt": stringType().optional().describe("Server stamp: when the item was ticked; absent while unchecked or ticked before the stamps were introduced. Ignored in requests."),
|
|
5578
|
+
"checkedBy": objectType({
|
|
5579
|
+
"userId": stringType().uuid(),
|
|
5580
|
+
"name": stringType()
|
|
5581
|
+
}).describe("Display reference to the local user who created / last edited a record. Server-assigned from the authenticated session \u2014 never taken from the request body.").optional().describe("Server stamp, who ticked it. Ignored in requests.")
|
|
5311
5582
|
}))).optional().describe("Partial<Record<GateTransitionKey, Record<itemId, GateEvidenceItem>>>"),
|
|
5312
5583
|
"gateBypassed": booleanType().optional(),
|
|
5313
5584
|
"aiAct": objectType({
|
|
@@ -5390,6 +5661,7 @@ var ListInitiativesResponseItem = objectType({
|
|
|
5390
5661
|
"userId": stringType().uuid(),
|
|
5391
5662
|
"name": stringType()
|
|
5392
5663
|
}).optional().describe("Display reference to the local user who created / last edited a record. Server-assigned from the authenticated session \u2014 never taken from the request body."),
|
|
5664
|
+
"version": numberType().min(1).optional().describe("Save counter, raised by the server on every save. A request names the version its edit is based on in InitiativeInput.baseVersion; this field is ignored in requests."),
|
|
5393
5665
|
"createdAt": stringType(),
|
|
5394
5666
|
"updatedAt": stringType()
|
|
5395
5667
|
});
|
|
@@ -5414,9 +5686,17 @@ var createInitiativeBodyOneStatusReportsItemBudgetCommentMax = 1e4;
|
|
|
5414
5686
|
var createInitiativeBodyOneStatusReportsItemSkillsCommentMax = 1e4;
|
|
5415
5687
|
var createInitiativeBodyOneStatusReportsItemSummaryMax = 1e4;
|
|
5416
5688
|
var createInitiativeBodyOneStatusReportsMax = 1e3;
|
|
5689
|
+
var createInitiativeBodyOneMilestonesItemTitleMax = 300;
|
|
5690
|
+
var createInitiativeBodyOneMilestonesItemBaselineDateRegExp = new RegExp("^\\d{4}-\\d{2}-\\d{2}$");
|
|
5691
|
+
var createInitiativeBodyOneMilestonesItemForecastDateRegExp = new RegExp("^\\d{4}-\\d{2}-\\d{2}$");
|
|
5692
|
+
var createInitiativeBodyOneMilestonesItemDoneDateRegExp = new RegExp("^\\d{4}-\\d{2}-\\d{2}$");
|
|
5693
|
+
var createInitiativeBodyOneMilestonesItemNoteMax = 1e4;
|
|
5694
|
+
var createInitiativeBodyOneMilestonesMax = 30;
|
|
5417
5695
|
var createInitiativeBodyOneDependsOnMax = 1e3;
|
|
5418
5696
|
var createInitiativeBodyOneRequiredSkillsItemRunFteMin = 0;
|
|
5419
5697
|
var createInitiativeBodyOneRequiredSkillsMax = 1e3;
|
|
5698
|
+
var createInitiativeBodyOneCapabilityImpactsItemMaturityToMax = 5;
|
|
5699
|
+
var createInitiativeBodyOneCapabilityImpactsMax = 1e3;
|
|
5420
5700
|
var createInitiativeBodyOneDpiaUrlMax = 2e3;
|
|
5421
5701
|
var createInitiativeBodyOneModelCardUrlMax = 2e3;
|
|
5422
5702
|
var createInitiativeBodyOneProhibitedOverrideMax = 2e3;
|
|
@@ -5460,7 +5740,12 @@ var CreateInitiativeBody = objectType({
|
|
|
5460
5740
|
"evaluation": objectType({
|
|
5461
5741
|
"valueScale": objectType({
|
|
5462
5742
|
"score": numberType(),
|
|
5463
|
-
"confidence": enumType(["Low", "Medium", "High"])
|
|
5743
|
+
"confidence": enumType(["Low", "Medium", "High"]),
|
|
5744
|
+
"scoredAt": stringType().optional().describe("Server stamp: when this dimension's confidence or a sub-score last changed. Absent until a save changes it. Ignored in requests."),
|
|
5745
|
+
"scoredBy": objectType({
|
|
5746
|
+
"userId": stringType().uuid(),
|
|
5747
|
+
"name": stringType()
|
|
5748
|
+
}).describe("Display reference to the local user who created / last edited a record. Server-assigned from the authenticated session \u2014 never taken from the request body.").optional().describe("Server stamp, who made that change. Ignored in requests.")
|
|
5464
5749
|
}).and(objectType({
|
|
5465
5750
|
"subs": objectType({
|
|
5466
5751
|
"frequencyOfProcess": numberType(),
|
|
@@ -5474,7 +5759,12 @@ var CreateInitiativeBody = objectType({
|
|
|
5474
5759
|
})),
|
|
5475
5760
|
"feasibility": objectType({
|
|
5476
5761
|
"score": numberType(),
|
|
5477
|
-
"confidence": enumType(["Low", "Medium", "High"])
|
|
5762
|
+
"confidence": enumType(["Low", "Medium", "High"]),
|
|
5763
|
+
"scoredAt": stringType().optional().describe("Server stamp: when this dimension's confidence or a sub-score last changed. Absent until a save changes it. Ignored in requests."),
|
|
5764
|
+
"scoredBy": objectType({
|
|
5765
|
+
"userId": stringType().uuid(),
|
|
5766
|
+
"name": stringType()
|
|
5767
|
+
}).describe("Display reference to the local user who created / last edited a record. Server-assigned from the authenticated session \u2014 never taken from the request body.").optional().describe("Server stamp, who made that change. Ignored in requests.")
|
|
5478
5768
|
}).and(objectType({
|
|
5479
5769
|
"subs": objectType({
|
|
5480
5770
|
"dataAvailability": numberType(),
|
|
@@ -5488,7 +5778,12 @@ var CreateInitiativeBody = objectType({
|
|
|
5488
5778
|
})),
|
|
5489
5779
|
"governance": objectType({
|
|
5490
5780
|
"score": numberType(),
|
|
5491
|
-
"confidence": enumType(["Low", "Medium", "High"])
|
|
5781
|
+
"confidence": enumType(["Low", "Medium", "High"]),
|
|
5782
|
+
"scoredAt": stringType().optional().describe("Server stamp: when this dimension's confidence or a sub-score last changed. Absent until a save changes it. Ignored in requests."),
|
|
5783
|
+
"scoredBy": objectType({
|
|
5784
|
+
"userId": stringType().uuid(),
|
|
5785
|
+
"name": stringType()
|
|
5786
|
+
}).describe("Display reference to the local user who created / last edited a record. Server-assigned from the authenticated session \u2014 never taken from the request body.").optional().describe("Server stamp, who made that change. Ignored in requests.")
|
|
5492
5787
|
}).and(objectType({
|
|
5493
5788
|
"subs": objectType({
|
|
5494
5789
|
"regulatoryExposure": numberType(),
|
|
@@ -5503,7 +5798,12 @@ var CreateInitiativeBody = objectType({
|
|
|
5503
5798
|
})),
|
|
5504
5799
|
"strategic": objectType({
|
|
5505
5800
|
"score": numberType(),
|
|
5506
|
-
"confidence": enumType(["Low", "Medium", "High"])
|
|
5801
|
+
"confidence": enumType(["Low", "Medium", "High"]),
|
|
5802
|
+
"scoredAt": stringType().optional().describe("Server stamp: when this dimension's confidence or a sub-score last changed. Absent until a save changes it. Ignored in requests."),
|
|
5803
|
+
"scoredBy": objectType({
|
|
5804
|
+
"userId": stringType().uuid(),
|
|
5805
|
+
"name": stringType()
|
|
5806
|
+
}).describe("Display reference to the local user who created / last edited a record. Server-assigned from the authenticated session \u2014 never taken from the request body.").optional().describe("Server stamp, who made that change. Ignored in requests.")
|
|
5507
5807
|
}).and(objectType({
|
|
5508
5808
|
"subs": objectType({
|
|
5509
5809
|
"strategicDifferentiation": numberType(),
|
|
@@ -5558,7 +5858,12 @@ var CreateInitiativeBody = objectType({
|
|
|
5558
5858
|
"kind": enumType(["go", "pause", "stop", "rescope", "rebudget", "other"]),
|
|
5559
5859
|
"owner": stringType().max(createInitiativeBodyOneDecisionLogItemOwnerMax).optional(),
|
|
5560
5860
|
"rationale": stringType().max(createInitiativeBodyOneDecisionLogItemRationaleMax).optional(),
|
|
5561
|
-
"createdAt": stringType().optional()
|
|
5861
|
+
"createdAt": stringType().optional(),
|
|
5862
|
+
"recordedAt": stringType().optional().describe("Server stamp: when the entry was recorded or its content last changed (`date` is when the decision was taken). Absent on entries not saved since the stamps were introduced. Ignored in requests."),
|
|
5863
|
+
"recordedBy": objectType({
|
|
5864
|
+
"userId": stringType().uuid(),
|
|
5865
|
+
"name": stringType()
|
|
5866
|
+
}).describe("Display reference to the local user who created / last edited a record. Server-assigned from the authenticated session \u2014 never taken from the request body.").optional().describe("Server stamp, who recorded it. Ignored in requests.")
|
|
5562
5867
|
})).max(createInitiativeBodyOneDecisionLogMax).optional(),
|
|
5563
5868
|
"statusReports": arrayType(objectType({
|
|
5564
5869
|
"id": stringType(),
|
|
@@ -5582,12 +5887,25 @@ var CreateInitiativeBody = objectType({
|
|
|
5582
5887
|
}),
|
|
5583
5888
|
"summary": stringType().max(createInitiativeBodyOneStatusReportsItemSummaryMax).optional()
|
|
5584
5889
|
})).max(createInitiativeBodyOneStatusReportsMax).optional(),
|
|
5890
|
+
"milestones": arrayType(objectType({
|
|
5891
|
+
"id": stringType(),
|
|
5892
|
+
"title": stringType().min(1).max(createInitiativeBodyOneMilestonesItemTitleMax),
|
|
5893
|
+
"baselineDate": stringType().regex(createInitiativeBodyOneMilestonesItemBaselineDateRegExp),
|
|
5894
|
+
"forecastDate": stringType().regex(createInitiativeBodyOneMilestonesItemForecastDateRegExp).optional(),
|
|
5895
|
+
"doneDate": stringType().regex(createInitiativeBodyOneMilestonesItemDoneDateRegExp).optional(),
|
|
5896
|
+
"note": stringType().max(createInitiativeBodyOneMilestonesItemNoteMax).optional()
|
|
5897
|
+
}).describe("A dated intermediate result (docs/milestones-concept-2026-10-17.md). baselineDate is the agreed plan, forecastDate today's expectation (absent = the baseline), doneDate marks it reached; all yyyy-mm-dd.")).max(createInitiativeBodyOneMilestonesMax).optional(),
|
|
5585
5898
|
"dependsOn": arrayType(stringType()).max(createInitiativeBodyOneDependsOnMax),
|
|
5586
5899
|
"requiredSkills": arrayType(objectType({
|
|
5587
5900
|
"skillId": stringType(),
|
|
5588
5901
|
"fte": numberType(),
|
|
5589
5902
|
"runFte": numberType().min(createInitiativeBodyOneRequiredSkillsItemRunFteMin).optional()
|
|
5590
5903
|
})).max(createInitiativeBodyOneRequiredSkillsMax).optional(),
|
|
5904
|
+
"capabilityImpacts": arrayType(objectType({
|
|
5905
|
+
"capabilityId": stringType(),
|
|
5906
|
+
"kind": enumType(["improve", "new", "replace", "retire"]),
|
|
5907
|
+
"maturityTo": numberType().min(1).max(createInitiativeBodyOneCapabilityImpactsItemMaturityToMax).optional().describe("The maturity level the initiative brings the capability to; absent for `retire`.")
|
|
5908
|
+
}).describe("What an initiative does to one capability of the organisation's map.")).max(createInitiativeBodyOneCapabilityImpactsMax).optional(),
|
|
5591
5909
|
"aiRiskTier": enumType(["Prohibited", "High-Risk", "Limited", "Minimal"]).optional(),
|
|
5592
5910
|
"hitlPosture": enumType(["Unattended", "Supervised", "Human-Required"]).optional(),
|
|
5593
5911
|
"dpiaStatus": enumType(["Not Required", "In Progress", "Completed"]).optional(),
|
|
@@ -5598,7 +5916,12 @@ var CreateInitiativeBody = objectType({
|
|
|
5598
5916
|
"gateEvidence": recordType(stringType(), recordType(stringType(), objectType({
|
|
5599
5917
|
"checked": booleanType(),
|
|
5600
5918
|
"asOfDate": stringType().optional(),
|
|
5601
|
-
"note": stringType().max(createInitiativeBodyOneGateEvidenceNoteMax).optional()
|
|
5919
|
+
"note": stringType().max(createInitiativeBodyOneGateEvidenceNoteMax).optional(),
|
|
5920
|
+
"checkedAt": stringType().optional().describe("Server stamp: when the item was ticked; absent while unchecked or ticked before the stamps were introduced. Ignored in requests."),
|
|
5921
|
+
"checkedBy": objectType({
|
|
5922
|
+
"userId": stringType().uuid(),
|
|
5923
|
+
"name": stringType()
|
|
5924
|
+
}).describe("Display reference to the local user who created / last edited a record. Server-assigned from the authenticated session \u2014 never taken from the request body.").optional().describe("Server stamp, who ticked it. Ignored in requests.")
|
|
5602
5925
|
}))).optional().describe("Partial<Record<GateTransitionKey, Record<itemId, GateEvidenceItem>>>"),
|
|
5603
5926
|
"gateBypassed": booleanType().optional(),
|
|
5604
5927
|
"aiAct": objectType({
|
|
@@ -5681,6 +6004,7 @@ var CreateInitiativeBody = objectType({
|
|
|
5681
6004
|
"userId": stringType().uuid(),
|
|
5682
6005
|
"name": stringType()
|
|
5683
6006
|
}).optional().describe("Display reference to the local user who created / last edited a record. Server-assigned from the authenticated session \u2014 never taken from the request body."),
|
|
6007
|
+
"version": numberType().min(1).optional().describe("Save counter, raised by the server on every save. A request names the version its edit is based on in InitiativeInput.baseVersion; this field is ignored in requests."),
|
|
5684
6008
|
"createdAt": stringType(),
|
|
5685
6009
|
"updatedAt": stringType()
|
|
5686
6010
|
}).and(objectType({
|
|
@@ -5688,7 +6012,9 @@ var CreateInitiativeBody = objectType({
|
|
|
5688
6012
|
"createdBy": unknownType().optional(),
|
|
5689
6013
|
"updatedBy": unknownType().optional(),
|
|
5690
6014
|
"createdAt": unknownType().optional(),
|
|
5691
|
-
"updatedAt": unknownType().optional()
|
|
6015
|
+
"updatedAt": unknownType().optional(),
|
|
6016
|
+
"version": unknownType().optional(),
|
|
6017
|
+
"baseVersion": numberType().min(1).optional().describe("PUT only: the version the edit is based on. When it differs from the stored version, someone else saved in between and the save is refused with 409 and the current copy. Omitted (clients that predate it), the save is not checked. A separate field, not `version`, because older clients echo every field they received, including `version`, without ever updating it.")
|
|
5692
6018
|
})).describe("Same as Initiative, minus server-assigned fields.");
|
|
5693
6019
|
var GetInitiativeParams = objectType({
|
|
5694
6020
|
"id": coerce.string().uuid()
|
|
@@ -5713,9 +6039,17 @@ var getInitiativeResponseStatusReportsItemBudgetCommentMax = 1e4;
|
|
|
5713
6039
|
var getInitiativeResponseStatusReportsItemSkillsCommentMax = 1e4;
|
|
5714
6040
|
var getInitiativeResponseStatusReportsItemSummaryMax = 1e4;
|
|
5715
6041
|
var getInitiativeResponseStatusReportsMax = 1e3;
|
|
6042
|
+
var getInitiativeResponseMilestonesItemTitleMax = 300;
|
|
6043
|
+
var getInitiativeResponseMilestonesItemBaselineDateRegExp = new RegExp("^\\d{4}-\\d{2}-\\d{2}$");
|
|
6044
|
+
var getInitiativeResponseMilestonesItemForecastDateRegExp = new RegExp("^\\d{4}-\\d{2}-\\d{2}$");
|
|
6045
|
+
var getInitiativeResponseMilestonesItemDoneDateRegExp = new RegExp("^\\d{4}-\\d{2}-\\d{2}$");
|
|
6046
|
+
var getInitiativeResponseMilestonesItemNoteMax = 1e4;
|
|
6047
|
+
var getInitiativeResponseMilestonesMax = 30;
|
|
5716
6048
|
var getInitiativeResponseDependsOnMax = 1e3;
|
|
5717
6049
|
var getInitiativeResponseRequiredSkillsItemRunFteMin = 0;
|
|
5718
6050
|
var getInitiativeResponseRequiredSkillsMax = 1e3;
|
|
6051
|
+
var getInitiativeResponseCapabilityImpactsItemMaturityToMax = 5;
|
|
6052
|
+
var getInitiativeResponseCapabilityImpactsMax = 1e3;
|
|
5719
6053
|
var getInitiativeResponseDpiaUrlMax = 2e3;
|
|
5720
6054
|
var getInitiativeResponseModelCardUrlMax = 2e3;
|
|
5721
6055
|
var getInitiativeResponseProhibitedOverrideMax = 2e3;
|
|
@@ -5759,7 +6093,12 @@ var GetInitiativeResponse = objectType({
|
|
|
5759
6093
|
"evaluation": objectType({
|
|
5760
6094
|
"valueScale": objectType({
|
|
5761
6095
|
"score": numberType(),
|
|
5762
|
-
"confidence": enumType(["Low", "Medium", "High"])
|
|
6096
|
+
"confidence": enumType(["Low", "Medium", "High"]),
|
|
6097
|
+
"scoredAt": stringType().optional().describe("Server stamp: when this dimension's confidence or a sub-score last changed. Absent until a save changes it. Ignored in requests."),
|
|
6098
|
+
"scoredBy": objectType({
|
|
6099
|
+
"userId": stringType().uuid(),
|
|
6100
|
+
"name": stringType()
|
|
6101
|
+
}).describe("Display reference to the local user who created / last edited a record. Server-assigned from the authenticated session \u2014 never taken from the request body.").optional().describe("Server stamp, who made that change. Ignored in requests.")
|
|
5763
6102
|
}).and(objectType({
|
|
5764
6103
|
"subs": objectType({
|
|
5765
6104
|
"frequencyOfProcess": numberType(),
|
|
@@ -5773,7 +6112,12 @@ var GetInitiativeResponse = objectType({
|
|
|
5773
6112
|
})),
|
|
5774
6113
|
"feasibility": objectType({
|
|
5775
6114
|
"score": numberType(),
|
|
5776
|
-
"confidence": enumType(["Low", "Medium", "High"])
|
|
6115
|
+
"confidence": enumType(["Low", "Medium", "High"]),
|
|
6116
|
+
"scoredAt": stringType().optional().describe("Server stamp: when this dimension's confidence or a sub-score last changed. Absent until a save changes it. Ignored in requests."),
|
|
6117
|
+
"scoredBy": objectType({
|
|
6118
|
+
"userId": stringType().uuid(),
|
|
6119
|
+
"name": stringType()
|
|
6120
|
+
}).describe("Display reference to the local user who created / last edited a record. Server-assigned from the authenticated session \u2014 never taken from the request body.").optional().describe("Server stamp, who made that change. Ignored in requests.")
|
|
5777
6121
|
}).and(objectType({
|
|
5778
6122
|
"subs": objectType({
|
|
5779
6123
|
"dataAvailability": numberType(),
|
|
@@ -5787,7 +6131,12 @@ var GetInitiativeResponse = objectType({
|
|
|
5787
6131
|
})),
|
|
5788
6132
|
"governance": objectType({
|
|
5789
6133
|
"score": numberType(),
|
|
5790
|
-
"confidence": enumType(["Low", "Medium", "High"])
|
|
6134
|
+
"confidence": enumType(["Low", "Medium", "High"]),
|
|
6135
|
+
"scoredAt": stringType().optional().describe("Server stamp: when this dimension's confidence or a sub-score last changed. Absent until a save changes it. Ignored in requests."),
|
|
6136
|
+
"scoredBy": objectType({
|
|
6137
|
+
"userId": stringType().uuid(),
|
|
6138
|
+
"name": stringType()
|
|
6139
|
+
}).describe("Display reference to the local user who created / last edited a record. Server-assigned from the authenticated session \u2014 never taken from the request body.").optional().describe("Server stamp, who made that change. Ignored in requests.")
|
|
5791
6140
|
}).and(objectType({
|
|
5792
6141
|
"subs": objectType({
|
|
5793
6142
|
"regulatoryExposure": numberType(),
|
|
@@ -5802,7 +6151,12 @@ var GetInitiativeResponse = objectType({
|
|
|
5802
6151
|
})),
|
|
5803
6152
|
"strategic": objectType({
|
|
5804
6153
|
"score": numberType(),
|
|
5805
|
-
"confidence": enumType(["Low", "Medium", "High"])
|
|
6154
|
+
"confidence": enumType(["Low", "Medium", "High"]),
|
|
6155
|
+
"scoredAt": stringType().optional().describe("Server stamp: when this dimension's confidence or a sub-score last changed. Absent until a save changes it. Ignored in requests."),
|
|
6156
|
+
"scoredBy": objectType({
|
|
6157
|
+
"userId": stringType().uuid(),
|
|
6158
|
+
"name": stringType()
|
|
6159
|
+
}).describe("Display reference to the local user who created / last edited a record. Server-assigned from the authenticated session \u2014 never taken from the request body.").optional().describe("Server stamp, who made that change. Ignored in requests.")
|
|
5806
6160
|
}).and(objectType({
|
|
5807
6161
|
"subs": objectType({
|
|
5808
6162
|
"strategicDifferentiation": numberType(),
|
|
@@ -5857,7 +6211,12 @@ var GetInitiativeResponse = objectType({
|
|
|
5857
6211
|
"kind": enumType(["go", "pause", "stop", "rescope", "rebudget", "other"]),
|
|
5858
6212
|
"owner": stringType().max(getInitiativeResponseDecisionLogItemOwnerMax).optional(),
|
|
5859
6213
|
"rationale": stringType().max(getInitiativeResponseDecisionLogItemRationaleMax).optional(),
|
|
5860
|
-
"createdAt": stringType().optional()
|
|
6214
|
+
"createdAt": stringType().optional(),
|
|
6215
|
+
"recordedAt": stringType().optional().describe("Server stamp: when the entry was recorded or its content last changed (`date` is when the decision was taken). Absent on entries not saved since the stamps were introduced. Ignored in requests."),
|
|
6216
|
+
"recordedBy": objectType({
|
|
6217
|
+
"userId": stringType().uuid(),
|
|
6218
|
+
"name": stringType()
|
|
6219
|
+
}).describe("Display reference to the local user who created / last edited a record. Server-assigned from the authenticated session \u2014 never taken from the request body.").optional().describe("Server stamp, who recorded it. Ignored in requests.")
|
|
5861
6220
|
})).max(getInitiativeResponseDecisionLogMax).optional(),
|
|
5862
6221
|
"statusReports": arrayType(objectType({
|
|
5863
6222
|
"id": stringType(),
|
|
@@ -5881,12 +6240,25 @@ var GetInitiativeResponse = objectType({
|
|
|
5881
6240
|
}),
|
|
5882
6241
|
"summary": stringType().max(getInitiativeResponseStatusReportsItemSummaryMax).optional()
|
|
5883
6242
|
})).max(getInitiativeResponseStatusReportsMax).optional(),
|
|
6243
|
+
"milestones": arrayType(objectType({
|
|
6244
|
+
"id": stringType(),
|
|
6245
|
+
"title": stringType().min(1).max(getInitiativeResponseMilestonesItemTitleMax),
|
|
6246
|
+
"baselineDate": stringType().regex(getInitiativeResponseMilestonesItemBaselineDateRegExp),
|
|
6247
|
+
"forecastDate": stringType().regex(getInitiativeResponseMilestonesItemForecastDateRegExp).optional(),
|
|
6248
|
+
"doneDate": stringType().regex(getInitiativeResponseMilestonesItemDoneDateRegExp).optional(),
|
|
6249
|
+
"note": stringType().max(getInitiativeResponseMilestonesItemNoteMax).optional()
|
|
6250
|
+
}).describe("A dated intermediate result (docs/milestones-concept-2026-10-17.md). baselineDate is the agreed plan, forecastDate today's expectation (absent = the baseline), doneDate marks it reached; all yyyy-mm-dd.")).max(getInitiativeResponseMilestonesMax).optional(),
|
|
5884
6251
|
"dependsOn": arrayType(stringType()).max(getInitiativeResponseDependsOnMax),
|
|
5885
6252
|
"requiredSkills": arrayType(objectType({
|
|
5886
6253
|
"skillId": stringType(),
|
|
5887
6254
|
"fte": numberType(),
|
|
5888
6255
|
"runFte": numberType().min(getInitiativeResponseRequiredSkillsItemRunFteMin).optional()
|
|
5889
6256
|
})).max(getInitiativeResponseRequiredSkillsMax).optional(),
|
|
6257
|
+
"capabilityImpacts": arrayType(objectType({
|
|
6258
|
+
"capabilityId": stringType(),
|
|
6259
|
+
"kind": enumType(["improve", "new", "replace", "retire"]),
|
|
6260
|
+
"maturityTo": numberType().min(1).max(getInitiativeResponseCapabilityImpactsItemMaturityToMax).optional().describe("The maturity level the initiative brings the capability to; absent for `retire`.")
|
|
6261
|
+
}).describe("What an initiative does to one capability of the organisation's map.")).max(getInitiativeResponseCapabilityImpactsMax).optional(),
|
|
5890
6262
|
"aiRiskTier": enumType(["Prohibited", "High-Risk", "Limited", "Minimal"]).optional(),
|
|
5891
6263
|
"hitlPosture": enumType(["Unattended", "Supervised", "Human-Required"]).optional(),
|
|
5892
6264
|
"dpiaStatus": enumType(["Not Required", "In Progress", "Completed"]).optional(),
|
|
@@ -5897,7 +6269,12 @@ var GetInitiativeResponse = objectType({
|
|
|
5897
6269
|
"gateEvidence": recordType(stringType(), recordType(stringType(), objectType({
|
|
5898
6270
|
"checked": booleanType(),
|
|
5899
6271
|
"asOfDate": stringType().optional(),
|
|
5900
|
-
"note": stringType().max(getInitiativeResponseGateEvidenceNoteMax).optional()
|
|
6272
|
+
"note": stringType().max(getInitiativeResponseGateEvidenceNoteMax).optional(),
|
|
6273
|
+
"checkedAt": stringType().optional().describe("Server stamp: when the item was ticked; absent while unchecked or ticked before the stamps were introduced. Ignored in requests."),
|
|
6274
|
+
"checkedBy": objectType({
|
|
6275
|
+
"userId": stringType().uuid(),
|
|
6276
|
+
"name": stringType()
|
|
6277
|
+
}).describe("Display reference to the local user who created / last edited a record. Server-assigned from the authenticated session \u2014 never taken from the request body.").optional().describe("Server stamp, who ticked it. Ignored in requests.")
|
|
5901
6278
|
}))).optional().describe("Partial<Record<GateTransitionKey, Record<itemId, GateEvidenceItem>>>"),
|
|
5902
6279
|
"gateBypassed": booleanType().optional(),
|
|
5903
6280
|
"aiAct": objectType({
|
|
@@ -5980,6 +6357,7 @@ var GetInitiativeResponse = objectType({
|
|
|
5980
6357
|
"userId": stringType().uuid(),
|
|
5981
6358
|
"name": stringType()
|
|
5982
6359
|
}).optional().describe("Display reference to the local user who created / last edited a record. Server-assigned from the authenticated session \u2014 never taken from the request body."),
|
|
6360
|
+
"version": numberType().min(1).optional().describe("Save counter, raised by the server on every save. A request names the version its edit is based on in InitiativeInput.baseVersion; this field is ignored in requests."),
|
|
5983
6361
|
"createdAt": stringType(),
|
|
5984
6362
|
"updatedAt": stringType()
|
|
5985
6363
|
});
|
|
@@ -6006,9 +6384,17 @@ var updateInitiativeBodyOneStatusReportsItemBudgetCommentMax = 1e4;
|
|
|
6006
6384
|
var updateInitiativeBodyOneStatusReportsItemSkillsCommentMax = 1e4;
|
|
6007
6385
|
var updateInitiativeBodyOneStatusReportsItemSummaryMax = 1e4;
|
|
6008
6386
|
var updateInitiativeBodyOneStatusReportsMax = 1e3;
|
|
6387
|
+
var updateInitiativeBodyOneMilestonesItemTitleMax = 300;
|
|
6388
|
+
var updateInitiativeBodyOneMilestonesItemBaselineDateRegExp = new RegExp("^\\d{4}-\\d{2}-\\d{2}$");
|
|
6389
|
+
var updateInitiativeBodyOneMilestonesItemForecastDateRegExp = new RegExp("^\\d{4}-\\d{2}-\\d{2}$");
|
|
6390
|
+
var updateInitiativeBodyOneMilestonesItemDoneDateRegExp = new RegExp("^\\d{4}-\\d{2}-\\d{2}$");
|
|
6391
|
+
var updateInitiativeBodyOneMilestonesItemNoteMax = 1e4;
|
|
6392
|
+
var updateInitiativeBodyOneMilestonesMax = 30;
|
|
6009
6393
|
var updateInitiativeBodyOneDependsOnMax = 1e3;
|
|
6010
6394
|
var updateInitiativeBodyOneRequiredSkillsItemRunFteMin = 0;
|
|
6011
6395
|
var updateInitiativeBodyOneRequiredSkillsMax = 1e3;
|
|
6396
|
+
var updateInitiativeBodyOneCapabilityImpactsItemMaturityToMax = 5;
|
|
6397
|
+
var updateInitiativeBodyOneCapabilityImpactsMax = 1e3;
|
|
6012
6398
|
var updateInitiativeBodyOneDpiaUrlMax = 2e3;
|
|
6013
6399
|
var updateInitiativeBodyOneModelCardUrlMax = 2e3;
|
|
6014
6400
|
var updateInitiativeBodyOneProhibitedOverrideMax = 2e3;
|
|
@@ -6052,7 +6438,12 @@ var UpdateInitiativeBody = objectType({
|
|
|
6052
6438
|
"evaluation": objectType({
|
|
6053
6439
|
"valueScale": objectType({
|
|
6054
6440
|
"score": numberType(),
|
|
6055
|
-
"confidence": enumType(["Low", "Medium", "High"])
|
|
6441
|
+
"confidence": enumType(["Low", "Medium", "High"]),
|
|
6442
|
+
"scoredAt": stringType().optional().describe("Server stamp: when this dimension's confidence or a sub-score last changed. Absent until a save changes it. Ignored in requests."),
|
|
6443
|
+
"scoredBy": objectType({
|
|
6444
|
+
"userId": stringType().uuid(),
|
|
6445
|
+
"name": stringType()
|
|
6446
|
+
}).describe("Display reference to the local user who created / last edited a record. Server-assigned from the authenticated session \u2014 never taken from the request body.").optional().describe("Server stamp, who made that change. Ignored in requests.")
|
|
6056
6447
|
}).and(objectType({
|
|
6057
6448
|
"subs": objectType({
|
|
6058
6449
|
"frequencyOfProcess": numberType(),
|
|
@@ -6066,7 +6457,12 @@ var UpdateInitiativeBody = objectType({
|
|
|
6066
6457
|
})),
|
|
6067
6458
|
"feasibility": objectType({
|
|
6068
6459
|
"score": numberType(),
|
|
6069
|
-
"confidence": enumType(["Low", "Medium", "High"])
|
|
6460
|
+
"confidence": enumType(["Low", "Medium", "High"]),
|
|
6461
|
+
"scoredAt": stringType().optional().describe("Server stamp: when this dimension's confidence or a sub-score last changed. Absent until a save changes it. Ignored in requests."),
|
|
6462
|
+
"scoredBy": objectType({
|
|
6463
|
+
"userId": stringType().uuid(),
|
|
6464
|
+
"name": stringType()
|
|
6465
|
+
}).describe("Display reference to the local user who created / last edited a record. Server-assigned from the authenticated session \u2014 never taken from the request body.").optional().describe("Server stamp, who made that change. Ignored in requests.")
|
|
6070
6466
|
}).and(objectType({
|
|
6071
6467
|
"subs": objectType({
|
|
6072
6468
|
"dataAvailability": numberType(),
|
|
@@ -6080,7 +6476,12 @@ var UpdateInitiativeBody = objectType({
|
|
|
6080
6476
|
})),
|
|
6081
6477
|
"governance": objectType({
|
|
6082
6478
|
"score": numberType(),
|
|
6083
|
-
"confidence": enumType(["Low", "Medium", "High"])
|
|
6479
|
+
"confidence": enumType(["Low", "Medium", "High"]),
|
|
6480
|
+
"scoredAt": stringType().optional().describe("Server stamp: when this dimension's confidence or a sub-score last changed. Absent until a save changes it. Ignored in requests."),
|
|
6481
|
+
"scoredBy": objectType({
|
|
6482
|
+
"userId": stringType().uuid(),
|
|
6483
|
+
"name": stringType()
|
|
6484
|
+
}).describe("Display reference to the local user who created / last edited a record. Server-assigned from the authenticated session \u2014 never taken from the request body.").optional().describe("Server stamp, who made that change. Ignored in requests.")
|
|
6084
6485
|
}).and(objectType({
|
|
6085
6486
|
"subs": objectType({
|
|
6086
6487
|
"regulatoryExposure": numberType(),
|
|
@@ -6095,7 +6496,12 @@ var UpdateInitiativeBody = objectType({
|
|
|
6095
6496
|
})),
|
|
6096
6497
|
"strategic": objectType({
|
|
6097
6498
|
"score": numberType(),
|
|
6098
|
-
"confidence": enumType(["Low", "Medium", "High"])
|
|
6499
|
+
"confidence": enumType(["Low", "Medium", "High"]),
|
|
6500
|
+
"scoredAt": stringType().optional().describe("Server stamp: when this dimension's confidence or a sub-score last changed. Absent until a save changes it. Ignored in requests."),
|
|
6501
|
+
"scoredBy": objectType({
|
|
6502
|
+
"userId": stringType().uuid(),
|
|
6503
|
+
"name": stringType()
|
|
6504
|
+
}).describe("Display reference to the local user who created / last edited a record. Server-assigned from the authenticated session \u2014 never taken from the request body.").optional().describe("Server stamp, who made that change. Ignored in requests.")
|
|
6099
6505
|
}).and(objectType({
|
|
6100
6506
|
"subs": objectType({
|
|
6101
6507
|
"strategicDifferentiation": numberType(),
|
|
@@ -6150,7 +6556,12 @@ var UpdateInitiativeBody = objectType({
|
|
|
6150
6556
|
"kind": enumType(["go", "pause", "stop", "rescope", "rebudget", "other"]),
|
|
6151
6557
|
"owner": stringType().max(updateInitiativeBodyOneDecisionLogItemOwnerMax).optional(),
|
|
6152
6558
|
"rationale": stringType().max(updateInitiativeBodyOneDecisionLogItemRationaleMax).optional(),
|
|
6153
|
-
"createdAt": stringType().optional()
|
|
6559
|
+
"createdAt": stringType().optional(),
|
|
6560
|
+
"recordedAt": stringType().optional().describe("Server stamp: when the entry was recorded or its content last changed (`date` is when the decision was taken). Absent on entries not saved since the stamps were introduced. Ignored in requests."),
|
|
6561
|
+
"recordedBy": objectType({
|
|
6562
|
+
"userId": stringType().uuid(),
|
|
6563
|
+
"name": stringType()
|
|
6564
|
+
}).describe("Display reference to the local user who created / last edited a record. Server-assigned from the authenticated session \u2014 never taken from the request body.").optional().describe("Server stamp, who recorded it. Ignored in requests.")
|
|
6154
6565
|
})).max(updateInitiativeBodyOneDecisionLogMax).optional(),
|
|
6155
6566
|
"statusReports": arrayType(objectType({
|
|
6156
6567
|
"id": stringType(),
|
|
@@ -6174,12 +6585,25 @@ var UpdateInitiativeBody = objectType({
|
|
|
6174
6585
|
}),
|
|
6175
6586
|
"summary": stringType().max(updateInitiativeBodyOneStatusReportsItemSummaryMax).optional()
|
|
6176
6587
|
})).max(updateInitiativeBodyOneStatusReportsMax).optional(),
|
|
6588
|
+
"milestones": arrayType(objectType({
|
|
6589
|
+
"id": stringType(),
|
|
6590
|
+
"title": stringType().min(1).max(updateInitiativeBodyOneMilestonesItemTitleMax),
|
|
6591
|
+
"baselineDate": stringType().regex(updateInitiativeBodyOneMilestonesItemBaselineDateRegExp),
|
|
6592
|
+
"forecastDate": stringType().regex(updateInitiativeBodyOneMilestonesItemForecastDateRegExp).optional(),
|
|
6593
|
+
"doneDate": stringType().regex(updateInitiativeBodyOneMilestonesItemDoneDateRegExp).optional(),
|
|
6594
|
+
"note": stringType().max(updateInitiativeBodyOneMilestonesItemNoteMax).optional()
|
|
6595
|
+
}).describe("A dated intermediate result (docs/milestones-concept-2026-10-17.md). baselineDate is the agreed plan, forecastDate today's expectation (absent = the baseline), doneDate marks it reached; all yyyy-mm-dd.")).max(updateInitiativeBodyOneMilestonesMax).optional(),
|
|
6177
6596
|
"dependsOn": arrayType(stringType()).max(updateInitiativeBodyOneDependsOnMax),
|
|
6178
6597
|
"requiredSkills": arrayType(objectType({
|
|
6179
6598
|
"skillId": stringType(),
|
|
6180
6599
|
"fte": numberType(),
|
|
6181
6600
|
"runFte": numberType().min(updateInitiativeBodyOneRequiredSkillsItemRunFteMin).optional()
|
|
6182
6601
|
})).max(updateInitiativeBodyOneRequiredSkillsMax).optional(),
|
|
6602
|
+
"capabilityImpacts": arrayType(objectType({
|
|
6603
|
+
"capabilityId": stringType(),
|
|
6604
|
+
"kind": enumType(["improve", "new", "replace", "retire"]),
|
|
6605
|
+
"maturityTo": numberType().min(1).max(updateInitiativeBodyOneCapabilityImpactsItemMaturityToMax).optional().describe("The maturity level the initiative brings the capability to; absent for `retire`.")
|
|
6606
|
+
}).describe("What an initiative does to one capability of the organisation's map.")).max(updateInitiativeBodyOneCapabilityImpactsMax).optional(),
|
|
6183
6607
|
"aiRiskTier": enumType(["Prohibited", "High-Risk", "Limited", "Minimal"]).optional(),
|
|
6184
6608
|
"hitlPosture": enumType(["Unattended", "Supervised", "Human-Required"]).optional(),
|
|
6185
6609
|
"dpiaStatus": enumType(["Not Required", "In Progress", "Completed"]).optional(),
|
|
@@ -6190,7 +6614,12 @@ var UpdateInitiativeBody = objectType({
|
|
|
6190
6614
|
"gateEvidence": recordType(stringType(), recordType(stringType(), objectType({
|
|
6191
6615
|
"checked": booleanType(),
|
|
6192
6616
|
"asOfDate": stringType().optional(),
|
|
6193
|
-
"note": stringType().max(updateInitiativeBodyOneGateEvidenceNoteMax).optional()
|
|
6617
|
+
"note": stringType().max(updateInitiativeBodyOneGateEvidenceNoteMax).optional(),
|
|
6618
|
+
"checkedAt": stringType().optional().describe("Server stamp: when the item was ticked; absent while unchecked or ticked before the stamps were introduced. Ignored in requests."),
|
|
6619
|
+
"checkedBy": objectType({
|
|
6620
|
+
"userId": stringType().uuid(),
|
|
6621
|
+
"name": stringType()
|
|
6622
|
+
}).describe("Display reference to the local user who created / last edited a record. Server-assigned from the authenticated session \u2014 never taken from the request body.").optional().describe("Server stamp, who ticked it. Ignored in requests.")
|
|
6194
6623
|
}))).optional().describe("Partial<Record<GateTransitionKey, Record<itemId, GateEvidenceItem>>>"),
|
|
6195
6624
|
"gateBypassed": booleanType().optional(),
|
|
6196
6625
|
"aiAct": objectType({
|
|
@@ -6273,6 +6702,7 @@ var UpdateInitiativeBody = objectType({
|
|
|
6273
6702
|
"userId": stringType().uuid(),
|
|
6274
6703
|
"name": stringType()
|
|
6275
6704
|
}).optional().describe("Display reference to the local user who created / last edited a record. Server-assigned from the authenticated session \u2014 never taken from the request body."),
|
|
6705
|
+
"version": numberType().min(1).optional().describe("Save counter, raised by the server on every save. A request names the version its edit is based on in InitiativeInput.baseVersion; this field is ignored in requests."),
|
|
6276
6706
|
"createdAt": stringType(),
|
|
6277
6707
|
"updatedAt": stringType()
|
|
6278
6708
|
}).and(objectType({
|
|
@@ -6280,7 +6710,9 @@ var UpdateInitiativeBody = objectType({
|
|
|
6280
6710
|
"createdBy": unknownType().optional(),
|
|
6281
6711
|
"updatedBy": unknownType().optional(),
|
|
6282
6712
|
"createdAt": unknownType().optional(),
|
|
6283
|
-
"updatedAt": unknownType().optional()
|
|
6713
|
+
"updatedAt": unknownType().optional(),
|
|
6714
|
+
"version": unknownType().optional(),
|
|
6715
|
+
"baseVersion": numberType().min(1).optional().describe("PUT only: the version the edit is based on. When it differs from the stored version, someone else saved in between and the save is refused with 409 and the current copy. Omitted (clients that predate it), the save is not checked. A separate field, not `version`, because older clients echo every field they received, including `version`, without ever updating it.")
|
|
6284
6716
|
})).describe("Same as Initiative, minus server-assigned fields.");
|
|
6285
6717
|
var updateInitiativeResponseNameMax = 200;
|
|
6286
6718
|
var updateInitiativeResponseExternalIdMax = 200;
|
|
@@ -6302,9 +6734,17 @@ var updateInitiativeResponseStatusReportsItemBudgetCommentMax = 1e4;
|
|
|
6302
6734
|
var updateInitiativeResponseStatusReportsItemSkillsCommentMax = 1e4;
|
|
6303
6735
|
var updateInitiativeResponseStatusReportsItemSummaryMax = 1e4;
|
|
6304
6736
|
var updateInitiativeResponseStatusReportsMax = 1e3;
|
|
6737
|
+
var updateInitiativeResponseMilestonesItemTitleMax = 300;
|
|
6738
|
+
var updateInitiativeResponseMilestonesItemBaselineDateRegExp = new RegExp("^\\d{4}-\\d{2}-\\d{2}$");
|
|
6739
|
+
var updateInitiativeResponseMilestonesItemForecastDateRegExp = new RegExp("^\\d{4}-\\d{2}-\\d{2}$");
|
|
6740
|
+
var updateInitiativeResponseMilestonesItemDoneDateRegExp = new RegExp("^\\d{4}-\\d{2}-\\d{2}$");
|
|
6741
|
+
var updateInitiativeResponseMilestonesItemNoteMax = 1e4;
|
|
6742
|
+
var updateInitiativeResponseMilestonesMax = 30;
|
|
6305
6743
|
var updateInitiativeResponseDependsOnMax = 1e3;
|
|
6306
6744
|
var updateInitiativeResponseRequiredSkillsItemRunFteMin = 0;
|
|
6307
6745
|
var updateInitiativeResponseRequiredSkillsMax = 1e3;
|
|
6746
|
+
var updateInitiativeResponseCapabilityImpactsItemMaturityToMax = 5;
|
|
6747
|
+
var updateInitiativeResponseCapabilityImpactsMax = 1e3;
|
|
6308
6748
|
var updateInitiativeResponseDpiaUrlMax = 2e3;
|
|
6309
6749
|
var updateInitiativeResponseModelCardUrlMax = 2e3;
|
|
6310
6750
|
var updateInitiativeResponseProhibitedOverrideMax = 2e3;
|
|
@@ -6348,7 +6788,12 @@ var UpdateInitiativeResponse = objectType({
|
|
|
6348
6788
|
"evaluation": objectType({
|
|
6349
6789
|
"valueScale": objectType({
|
|
6350
6790
|
"score": numberType(),
|
|
6351
|
-
"confidence": enumType(["Low", "Medium", "High"])
|
|
6791
|
+
"confidence": enumType(["Low", "Medium", "High"]),
|
|
6792
|
+
"scoredAt": stringType().optional().describe("Server stamp: when this dimension's confidence or a sub-score last changed. Absent until a save changes it. Ignored in requests."),
|
|
6793
|
+
"scoredBy": objectType({
|
|
6794
|
+
"userId": stringType().uuid(),
|
|
6795
|
+
"name": stringType()
|
|
6796
|
+
}).describe("Display reference to the local user who created / last edited a record. Server-assigned from the authenticated session \u2014 never taken from the request body.").optional().describe("Server stamp, who made that change. Ignored in requests.")
|
|
6352
6797
|
}).and(objectType({
|
|
6353
6798
|
"subs": objectType({
|
|
6354
6799
|
"frequencyOfProcess": numberType(),
|
|
@@ -6362,7 +6807,12 @@ var UpdateInitiativeResponse = objectType({
|
|
|
6362
6807
|
})),
|
|
6363
6808
|
"feasibility": objectType({
|
|
6364
6809
|
"score": numberType(),
|
|
6365
|
-
"confidence": enumType(["Low", "Medium", "High"])
|
|
6810
|
+
"confidence": enumType(["Low", "Medium", "High"]),
|
|
6811
|
+
"scoredAt": stringType().optional().describe("Server stamp: when this dimension's confidence or a sub-score last changed. Absent until a save changes it. Ignored in requests."),
|
|
6812
|
+
"scoredBy": objectType({
|
|
6813
|
+
"userId": stringType().uuid(),
|
|
6814
|
+
"name": stringType()
|
|
6815
|
+
}).describe("Display reference to the local user who created / last edited a record. Server-assigned from the authenticated session \u2014 never taken from the request body.").optional().describe("Server stamp, who made that change. Ignored in requests.")
|
|
6366
6816
|
}).and(objectType({
|
|
6367
6817
|
"subs": objectType({
|
|
6368
6818
|
"dataAvailability": numberType(),
|
|
@@ -6376,7 +6826,12 @@ var UpdateInitiativeResponse = objectType({
|
|
|
6376
6826
|
})),
|
|
6377
6827
|
"governance": objectType({
|
|
6378
6828
|
"score": numberType(),
|
|
6379
|
-
"confidence": enumType(["Low", "Medium", "High"])
|
|
6829
|
+
"confidence": enumType(["Low", "Medium", "High"]),
|
|
6830
|
+
"scoredAt": stringType().optional().describe("Server stamp: when this dimension's confidence or a sub-score last changed. Absent until a save changes it. Ignored in requests."),
|
|
6831
|
+
"scoredBy": objectType({
|
|
6832
|
+
"userId": stringType().uuid(),
|
|
6833
|
+
"name": stringType()
|
|
6834
|
+
}).describe("Display reference to the local user who created / last edited a record. Server-assigned from the authenticated session \u2014 never taken from the request body.").optional().describe("Server stamp, who made that change. Ignored in requests.")
|
|
6380
6835
|
}).and(objectType({
|
|
6381
6836
|
"subs": objectType({
|
|
6382
6837
|
"regulatoryExposure": numberType(),
|
|
@@ -6391,7 +6846,12 @@ var UpdateInitiativeResponse = objectType({
|
|
|
6391
6846
|
})),
|
|
6392
6847
|
"strategic": objectType({
|
|
6393
6848
|
"score": numberType(),
|
|
6394
|
-
"confidence": enumType(["Low", "Medium", "High"])
|
|
6849
|
+
"confidence": enumType(["Low", "Medium", "High"]),
|
|
6850
|
+
"scoredAt": stringType().optional().describe("Server stamp: when this dimension's confidence or a sub-score last changed. Absent until a save changes it. Ignored in requests."),
|
|
6851
|
+
"scoredBy": objectType({
|
|
6852
|
+
"userId": stringType().uuid(),
|
|
6853
|
+
"name": stringType()
|
|
6854
|
+
}).describe("Display reference to the local user who created / last edited a record. Server-assigned from the authenticated session \u2014 never taken from the request body.").optional().describe("Server stamp, who made that change. Ignored in requests.")
|
|
6395
6855
|
}).and(objectType({
|
|
6396
6856
|
"subs": objectType({
|
|
6397
6857
|
"strategicDifferentiation": numberType(),
|
|
@@ -6446,7 +6906,12 @@ var UpdateInitiativeResponse = objectType({
|
|
|
6446
6906
|
"kind": enumType(["go", "pause", "stop", "rescope", "rebudget", "other"]),
|
|
6447
6907
|
"owner": stringType().max(updateInitiativeResponseDecisionLogItemOwnerMax).optional(),
|
|
6448
6908
|
"rationale": stringType().max(updateInitiativeResponseDecisionLogItemRationaleMax).optional(),
|
|
6449
|
-
"createdAt": stringType().optional()
|
|
6909
|
+
"createdAt": stringType().optional(),
|
|
6910
|
+
"recordedAt": stringType().optional().describe("Server stamp: when the entry was recorded or its content last changed (`date` is when the decision was taken). Absent on entries not saved since the stamps were introduced. Ignored in requests."),
|
|
6911
|
+
"recordedBy": objectType({
|
|
6912
|
+
"userId": stringType().uuid(),
|
|
6913
|
+
"name": stringType()
|
|
6914
|
+
}).describe("Display reference to the local user who created / last edited a record. Server-assigned from the authenticated session \u2014 never taken from the request body.").optional().describe("Server stamp, who recorded it. Ignored in requests.")
|
|
6450
6915
|
})).max(updateInitiativeResponseDecisionLogMax).optional(),
|
|
6451
6916
|
"statusReports": arrayType(objectType({
|
|
6452
6917
|
"id": stringType(),
|
|
@@ -6470,12 +6935,25 @@ var UpdateInitiativeResponse = objectType({
|
|
|
6470
6935
|
}),
|
|
6471
6936
|
"summary": stringType().max(updateInitiativeResponseStatusReportsItemSummaryMax).optional()
|
|
6472
6937
|
})).max(updateInitiativeResponseStatusReportsMax).optional(),
|
|
6938
|
+
"milestones": arrayType(objectType({
|
|
6939
|
+
"id": stringType(),
|
|
6940
|
+
"title": stringType().min(1).max(updateInitiativeResponseMilestonesItemTitleMax),
|
|
6941
|
+
"baselineDate": stringType().regex(updateInitiativeResponseMilestonesItemBaselineDateRegExp),
|
|
6942
|
+
"forecastDate": stringType().regex(updateInitiativeResponseMilestonesItemForecastDateRegExp).optional(),
|
|
6943
|
+
"doneDate": stringType().regex(updateInitiativeResponseMilestonesItemDoneDateRegExp).optional(),
|
|
6944
|
+
"note": stringType().max(updateInitiativeResponseMilestonesItemNoteMax).optional()
|
|
6945
|
+
}).describe("A dated intermediate result (docs/milestones-concept-2026-10-17.md). baselineDate is the agreed plan, forecastDate today's expectation (absent = the baseline), doneDate marks it reached; all yyyy-mm-dd.")).max(updateInitiativeResponseMilestonesMax).optional(),
|
|
6473
6946
|
"dependsOn": arrayType(stringType()).max(updateInitiativeResponseDependsOnMax),
|
|
6474
6947
|
"requiredSkills": arrayType(objectType({
|
|
6475
6948
|
"skillId": stringType(),
|
|
6476
6949
|
"fte": numberType(),
|
|
6477
6950
|
"runFte": numberType().min(updateInitiativeResponseRequiredSkillsItemRunFteMin).optional()
|
|
6478
6951
|
})).max(updateInitiativeResponseRequiredSkillsMax).optional(),
|
|
6952
|
+
"capabilityImpacts": arrayType(objectType({
|
|
6953
|
+
"capabilityId": stringType(),
|
|
6954
|
+
"kind": enumType(["improve", "new", "replace", "retire"]),
|
|
6955
|
+
"maturityTo": numberType().min(1).max(updateInitiativeResponseCapabilityImpactsItemMaturityToMax).optional().describe("The maturity level the initiative brings the capability to; absent for `retire`.")
|
|
6956
|
+
}).describe("What an initiative does to one capability of the organisation's map.")).max(updateInitiativeResponseCapabilityImpactsMax).optional(),
|
|
6479
6957
|
"aiRiskTier": enumType(["Prohibited", "High-Risk", "Limited", "Minimal"]).optional(),
|
|
6480
6958
|
"hitlPosture": enumType(["Unattended", "Supervised", "Human-Required"]).optional(),
|
|
6481
6959
|
"dpiaStatus": enumType(["Not Required", "In Progress", "Completed"]).optional(),
|
|
@@ -6486,7 +6964,12 @@ var UpdateInitiativeResponse = objectType({
|
|
|
6486
6964
|
"gateEvidence": recordType(stringType(), recordType(stringType(), objectType({
|
|
6487
6965
|
"checked": booleanType(),
|
|
6488
6966
|
"asOfDate": stringType().optional(),
|
|
6489
|
-
"note": stringType().max(updateInitiativeResponseGateEvidenceNoteMax).optional()
|
|
6967
|
+
"note": stringType().max(updateInitiativeResponseGateEvidenceNoteMax).optional(),
|
|
6968
|
+
"checkedAt": stringType().optional().describe("Server stamp: when the item was ticked; absent while unchecked or ticked before the stamps were introduced. Ignored in requests."),
|
|
6969
|
+
"checkedBy": objectType({
|
|
6970
|
+
"userId": stringType().uuid(),
|
|
6971
|
+
"name": stringType()
|
|
6972
|
+
}).describe("Display reference to the local user who created / last edited a record. Server-assigned from the authenticated session \u2014 never taken from the request body.").optional().describe("Server stamp, who ticked it. Ignored in requests.")
|
|
6490
6973
|
}))).optional().describe("Partial<Record<GateTransitionKey, Record<itemId, GateEvidenceItem>>>"),
|
|
6491
6974
|
"gateBypassed": booleanType().optional(),
|
|
6492
6975
|
"aiAct": objectType({
|
|
@@ -6569,6 +7052,7 @@ var UpdateInitiativeResponse = objectType({
|
|
|
6569
7052
|
"userId": stringType().uuid(),
|
|
6570
7053
|
"name": stringType()
|
|
6571
7054
|
}).optional().describe("Display reference to the local user who created / last edited a record. Server-assigned from the authenticated session \u2014 never taken from the request body."),
|
|
7055
|
+
"version": numberType().min(1).optional().describe("Save counter, raised by the server on every save. A request names the version its edit is based on in InitiativeInput.baseVersion; this field is ignored in requests."),
|
|
6572
7056
|
"createdAt": stringType(),
|
|
6573
7057
|
"updatedAt": stringType()
|
|
6574
7058
|
});
|
|
@@ -6605,7 +7089,7 @@ var ListAdminAuditLogQueryParams = objectType({
|
|
|
6605
7089
|
});
|
|
6606
7090
|
var ListAdminAuditLogResponseItem = objectType({
|
|
6607
7091
|
"id": stringType().uuid(),
|
|
6608
|
-
"action": enumType(["member.added", "member.role_changed", "member.permissions_changed", "member.removed", "settings.updated", "permission_profile.created", "permission_profile.updated", "permission_profile.deleted", "initiative.created", "initiative.deleted", "snapshot.created", "snapshot.renamed", "snapshot.deleted", "skill.created", "skill.updated", "skill.deleted", "organization.renamed", "user.erased"]),
|
|
7092
|
+
"action": enumType(["member.added", "member.role_changed", "member.permissions_changed", "member.removed", "settings.updated", "permission_profile.created", "permission_profile.updated", "permission_profile.deleted", "initiative.created", "initiative.deleted", "snapshot.created", "snapshot.renamed", "snapshot.deleted", "skill.created", "skill.updated", "skill.deleted", "capability.created", "capability.updated", "capability.deleted", "organization.renamed", "user.erased"]),
|
|
6609
7093
|
"targetType": stringType(),
|
|
6610
7094
|
"targetId": stringType().nullable(),
|
|
6611
7095
|
"actorName": stringType().nullable(),
|
|
@@ -6711,6 +7195,9 @@ var GATE_TRANSITIONS = [
|
|
|
6711
7195
|
{ key: "scaling-production", from: "Scaling", to: "In Production" }
|
|
6712
7196
|
];
|
|
6713
7197
|
var GATE_TRANSITION_KEYS = GATE_TRANSITIONS.map((t) => t.key);
|
|
7198
|
+
var CAPABILITY_IMPORTANCES = ["differentiating", "core", "supporting"];
|
|
7199
|
+
var CAPABILITY_MATURITY_MIN = 1;
|
|
7200
|
+
var CAPABILITY_MATURITY_MAX = 5;
|
|
6714
7201
|
var ANNEX_III_CATEGORIES = [
|
|
6715
7202
|
"Biometrics",
|
|
6716
7203
|
"Critical Infrastructure",
|
|
@@ -6841,6 +7328,7 @@ var EN_DIGITAL = {
|
|
|
6841
7328
|
"govLabel.Controlled Automation": "Controlled Operation",
|
|
6842
7329
|
"govLabel.Human-in-the-Loop Required": "Supervised Operation Required",
|
|
6843
7330
|
"govLabel.Restricted Deployment": "Restricted Rollout",
|
|
7331
|
+
"memo.governance.intro": "{count} initiatives sit in the Restricted Rollout band or above (governance \u2265 61/100) and require active board-level monitoring.",
|
|
6844
7332
|
"subHelp.modelRobustness": "Stability of the solution under load, edge cases and unexpected inputs.",
|
|
6845
7333
|
"subHelp.reproducibility": "Maturity of the underlying cloud / platform stack \u2014 proven and supported (managed services, mature regions, SLAs) vs experimental or self-hosted.",
|
|
6846
7334
|
"subHelp.explainability": "How clearly the system's behaviour and outputs can be explained to operators and end-users.",
|
|
@@ -7057,6 +7545,7 @@ var DE_DIGITAL = {
|
|
|
7057
7545
|
"govLabel.Controlled Automation": "Kontrollierter Betrieb",
|
|
7058
7546
|
"govLabel.Human-in-the-Loop Required": "Beaufsichtigter Betrieb erforderlich",
|
|
7059
7547
|
"govLabel.Restricted Deployment": "Eingeschr\xE4nkter Rollout",
|
|
7548
|
+
"memo.governance.intro": "{count} Initiativen liegen im Band \u201EEingeschr\xE4nkter Rollout\u201C oder dar\xFCber (Governance \u2265 61/100) und ben\xF6tigen aktive Vorstandsaufsicht.",
|
|
7060
7549
|
"subHelp.modelRobustness": "Stabilit\xE4t der L\xF6sung unter Last, bei Edge-Cases und unerwarteten Eingaben.",
|
|
7061
7550
|
"subHelp.reproducibility": "Reife des zugrundeliegenden Cloud-/Plattform-Stacks \u2014 bew\xE4hrt und supportet (Managed Services, etablierte Regionen, SLAs) vs. experimentell oder selbstgehostet.",
|
|
7062
7551
|
"subHelp.explainability": "Wie klar Verhalten und Ergebnisse des Systems Betreibern und Endnutzern erkl\xE4rbar sind.",
|
|
@@ -7273,6 +7762,7 @@ var EN_INNOVATION = {
|
|
|
7273
7762
|
"govLabel.Controlled Automation": "Monitored Trial",
|
|
7274
7763
|
"govLabel.Human-in-the-Loop Required": "Active Stewardship Required",
|
|
7275
7764
|
"govLabel.Restricted Deployment": "Bounded Pilot Only",
|
|
7765
|
+
"memo.governance.intro": "{count} initiatives sit in the Bounded Pilot Only band or above (governance \u2265 61/100) and require active board-level monitoring.",
|
|
7276
7766
|
"govLabel.High Governance Sensitivity": "Board-Level Sponsorship Required",
|
|
7277
7767
|
"subHelp.modelRobustness": "How well the core concept holds up under stress, edge cases and pessimistic assumptions.",
|
|
7278
7768
|
"subHelp.reproducibility": "Likelihood that observed results would repeat under independent conditions.",
|
|
@@ -7538,6 +8028,7 @@ var DE_INNOVATION = {
|
|
|
7538
8028
|
"govLabel.Controlled Automation": "\xDCberwachte Erprobung",
|
|
7539
8029
|
"govLabel.Human-in-the-Loop Required": "Aktive Begleitung erforderlich",
|
|
7540
8030
|
"govLabel.Restricted Deployment": "Nur eingegrenzter Pilot",
|
|
8031
|
+
"memo.governance.intro": "{count} Initiativen liegen im Band \u201ENur eingegrenzter Pilot\u201C oder dar\xFCber (Governance \u2265 61/100) und ben\xF6tigen aktive Vorstandsaufsicht.",
|
|
7541
8032
|
"govLabel.High Governance Sensitivity": "Vorstandspatenschaft erforderlich",
|
|
7542
8033
|
"subHelp.modelRobustness": "Wie gut das Kernkonzept Belastung, Edge-Cases und pessimistische Annahmen aush\xE4lt.",
|
|
7543
8034
|
"subHelp.reproducibility": "Wahrscheinlichkeit, dass beobachtete Ergebnisse unter unabh\xE4ngigen Bedingungen wiederholbar sind.",
|
|
@@ -9055,6 +9546,20 @@ var OPTIONAL_SECTIONS = [
|
|
|
9055
9546
|
{ key: "economics", hint: { en: "Benefit/cost P10/P50/P90 ranges, ramp, confidence, discount rate", de: "Nutzen/Kosten P10/P50/P90, Ramp, Konfidenz, Diskontsatz" } },
|
|
9056
9547
|
{ key: "decisionLog", hint: { en: "Dated decisions (go/pause/stop/rescope/rebudget/other)", de: "Datierte Entscheidungen" } },
|
|
9057
9548
|
{ key: "statusReports", hint: { en: "Dated RAG reports (scope/timeline/budget/skills)", de: "Datierte RAG-Berichte" } },
|
|
9549
|
+
{
|
|
9550
|
+
key: "milestones",
|
|
9551
|
+
hint: {
|
|
9552
|
+
en: "[{title, baselineDate, forecastDate?, doneDate?, note?}] \u2014 dated intermediate results (pilot live, vendor selected, go-live; at most 30, title up to 300 characters). baselineDate is the agreed plan; forecastDate today's expectation when it differs; doneDate once reached. Ask for the 3\u20135 that the steering committee watches. On an update, send every milestone the initiative keeps: the file replaces the list.",
|
|
9553
|
+
de: "[{title, baselineDate, forecastDate?, doneDate?, note?}] \u2014 datierte Zwischenergebnisse (Pilot live, Anbieter gew\xE4hlt, Go-live; h\xF6chstens 30, Titel bis 300 Zeichen). baselineDate ist der vereinbarte Plan, forecastDate die heutige Erwartung, wenn sie abweicht, doneDate sobald erreicht. Nach den 3\u20135 fragen, die der Lenkungsausschuss verfolgt. Bei einem Update alle Meilensteine senden, die bleiben sollen: die Datei ersetzt die Liste."
|
|
9554
|
+
}
|
|
9555
|
+
},
|
|
9556
|
+
{
|
|
9557
|
+
key: "capabilityImpacts",
|
|
9558
|
+
hint: {
|
|
9559
|
+
en: "[{capabilityId, kind: improve|new|replace|retire, maturityTo?}] \u2014 what the initiative does to a capability of the organisation's map; maturityTo (1\u20135) is the level it brings the capability to (omit = the capability's target; never for retire). With the portfolio-context file, pick from read_portfolio_context \u2192 lists.capabilities (id, name, domain, current \u2192 target maturity); without it, leave empty and link capabilities in the app.",
|
|
9560
|
+
de: "[{capabilityId, kind: improve|new|replace|retire, maturityTo?}] \u2014 was die Initiative mit einer F\xE4higkeit der Landkarte macht; maturityTo (1\u20135) ist die Stufe, auf die sie die F\xE4higkeit bringt (fehlend = Ziel der F\xE4higkeit; nie bei retire). Mit der Portfolio-Kontext-Datei aus read_portfolio_context \u2192 lists.capabilities (ID, Name, Dom\xE4ne, Reife heute \u2192 Ziel) w\xE4hlen; ohne sie leer lassen und in der App verkn\xFCpfen."
|
|
9561
|
+
}
|
|
9562
|
+
},
|
|
9058
9563
|
{
|
|
9059
9564
|
key: "requiredSkills",
|
|
9060
9565
|
hint: {
|
|
@@ -9107,7 +9612,7 @@ function describeZodShape(schema, depth = 0) {
|
|
|
9107
9612
|
}
|
|
9108
9613
|
function buildSchemaDescriptor(sectionShapes) {
|
|
9109
9614
|
return {
|
|
9110
|
-
about: "BICon initiative composer. Collect the required fields, then rate every sub-dimension 0\u2013100 (higher = more of the named quality) and a confidence per dimension. Dimension scores are DERIVED (mean of subs) \u2014 never ask the user for them. Values are used verbatim; enum values must match exactly; unknown keys are rejected. Dates: talk dd/mm/yyyy with the user (dd/mm/yyyy, dd.mm.yyyy and yyyy-mm-dd are all accepted; stored as yyyy-mm-dd). Row ids of decision-log entries, status reports and incidents are minted by the Composer \u2014 never invent ids. To UPDATE an existing initiative pass its id as `id`; omit it for a new one.",
|
|
9615
|
+
about: "BICon initiative composer. Collect the required fields, then rate every sub-dimension 0\u2013100 (higher = more of the named quality) and a confidence per dimension. Dimension scores are DERIVED (mean of subs) \u2014 never ask the user for them. Values are used verbatim; enum values must match exactly; unknown keys are rejected. Dates: talk dd/mm/yyyy with the user (dd/mm/yyyy, dd.mm.yyyy and yyyy-mm-dd are all accepted; stored as yyyy-mm-dd). Row ids of decision-log entries, status reports, milestones and incidents are minted by the Composer \u2014 never invent ids. To UPDATE an existing initiative pass its id as `id`; omit it for a new one.",
|
|
9111
9616
|
requiredFields: REQUIRED_FIELDS,
|
|
9112
9617
|
enums: {
|
|
9113
9618
|
status: STATUS_VALUES,
|
|
@@ -9139,7 +9644,7 @@ function buildSchemaDescriptor(sectionShapes) {
|
|
|
9139
9644
|
},
|
|
9140
9645
|
optionalSections: OPTIONAL_SECTIONS,
|
|
9141
9646
|
// Exact shapes of the object/array sections (aiAct, economics, actuals,
|
|
9142
|
-
// decisionLog, statusReports, requiredSkills). Keys ending in "?" are
|
|
9647
|
+
// decisionLog, statusReports, requiredSkills, capabilityImpacts, milestones). Keys ending in "?" are
|
|
9143
9648
|
// optional; "enum[a|b]" lists the allowed values; "<key>" marks a map.
|
|
9144
9649
|
// Pass these sections as JSON objects/arrays. Any key not listed is
|
|
9145
9650
|
// rejected with its path.
|
|
@@ -9149,7 +9654,7 @@ function buildSchemaDescriptor(sectionShapes) {
|
|
|
9149
9654
|
...AI_ACT_VOCABULARIES,
|
|
9150
9655
|
note: "prohibitedPractices/art50Flags: arrays of these ids. artifacts/obligations: maps keyed by these ids. annexIIICategory: one of these, or omit when no Annex III area applies (record the reasoning in classificationRationale; annexExceptionRationale is only for an Art. 6(3) exception claim). Empty is honest; invented values are rejected."
|
|
9151
9656
|
},
|
|
9152
|
-
portfolioContext: "Ask the user for the organisation's portfolio-context file first (in the app: Import/Export \u2192 'Download portfolio context'). Call read_portfolio_context on it: it returns the interview plan in the organisation's own wording, the sub-dimensions that are switched off, the slider step the ratings must follow, and the organisation's business units, categories, tags, skills and
|
|
9657
|
+
portfolioContext: "Ask the user for the organisation's portfolio-context file first (in the app: Import/Export \u2192 'Download portfolio context'). Call read_portfolio_context on it: it returns the interview plan in the organisation's own wording, the sub-dimensions that are switched off, the slider step the ratings must follow, and the organisation's business units, categories, tags, skills, initiatives and capabilities \u2014 with the file, business unit and category MUST be from those lists (no inventing) and skill / dependency / capability ids are validated. Pass the same context to assemble_initiative and export_initiative_file. Without the file, interview with the wording below and treat business unit / category as free text.",
|
|
9153
9658
|
handoff: "Call assemble_initiative with the compact spec (+ context), review derivedScores (and any warnings) with the user, then call export_initiative_file with the SAME spec (+ context) \u2192 save the JSON \u2192 in the app: Import/Export \u2192 Single initiative \u2192 drop the file \u2192 'Add as new' \u2192 Confirm. If the initiative carries EU-AI-Act data, the organisation's EU-AI-Act module must be switched on (Settings \u203A AI Act) when importing."
|
|
9154
9659
|
};
|
|
9155
9660
|
}
|
|
@@ -9191,12 +9696,14 @@ var keepDescription = (from, to) => from.description ? to.describe(from.descript
|
|
|
9191
9696
|
var dateField = (what) => external_exports.preprocess(normaliseDateInput, external_exports.string().refine(isCalendarDate, { message: `${what} must be a real calendar date \u2014 dd/mm/yyyy or yyyy-mm-dd` })).describe("dd/mm/yyyy (or yyyy-mm-dd)");
|
|
9192
9697
|
var DATE_LIKE_KEY = /^date$|Date$|At$/;
|
|
9193
9698
|
var MINTED_KEYS = /* @__PURE__ */ new Set(["id", "createdAt", "updatedAt"]);
|
|
9699
|
+
var SERVER_STAMP_KEY = /^(recorded|scored|checked)(At|By)$/;
|
|
9194
9700
|
var holdsString = (s) => s instanceof external_exports.ZodString || s instanceof external_exports.ZodOptional && s.unwrap() instanceof external_exports.ZodString || s instanceof external_exports.ZodNullable && s.unwrap() instanceof external_exports.ZodString;
|
|
9195
9701
|
function deepStrict(schema) {
|
|
9196
9702
|
const walk = (s, inArrayItem = false) => {
|
|
9197
9703
|
if (s instanceof external_exports.ZodObject) {
|
|
9198
9704
|
const next = {};
|
|
9199
9705
|
for (const [k, v] of Object.entries(s.shape)) {
|
|
9706
|
+
if (SERVER_STAMP_KEY.test(k)) continue;
|
|
9200
9707
|
let field = walk(v, false);
|
|
9201
9708
|
if (inArrayItem && MINTED_KEYS.has(k) && !(field instanceof external_exports.ZodOptional)) field = field.optional();
|
|
9202
9709
|
if (DATE_LIKE_KEY.test(k) && holdsString(field)) field = keepDescription(field, external_exports.preprocess(normaliseDateInput, field));
|
|
@@ -9233,7 +9740,7 @@ var parseIfString = (v) => typeof v === "string" ? tryParseJson(v) : v;
|
|
|
9233
9740
|
function wireSection(inner, description) {
|
|
9234
9741
|
return external_exports.preprocess(parseIfString, deepStrict(inner)).describe(description);
|
|
9235
9742
|
}
|
|
9236
|
-
var SECTION_KEYS = ["aiAct", "economics", "actuals", "decisionLog", "statusReports", "requiredSkills"];
|
|
9743
|
+
var SECTION_KEYS = ["aiAct", "economics", "actuals", "decisionLog", "statusReports", "requiredSkills", "capabilityImpacts", "milestones"];
|
|
9237
9744
|
var SECTION_SCHEMAS = Object.fromEntries(
|
|
9238
9745
|
SECTION_KEYS.map((k) => [k, contractSection(k)])
|
|
9239
9746
|
);
|
|
@@ -9243,6 +9750,8 @@ var SECTION_DESCRIPTIONS = {
|
|
|
9243
9750
|
actuals: "Actuals block (In Production only) \u2014 see sectionShapes.actuals.",
|
|
9244
9751
|
decisionLog: "Decision log entries \u2014 see sectionShapes.decisionLog. Entry ids are minted by the Composer \u2014 leave them out. Dates dd/mm/yyyy or yyyy-mm-dd.",
|
|
9245
9752
|
statusReports: "Status reports \u2014 see sectionShapes.statusReports. Report ids are minted by the Composer \u2014 leave them out. Dates dd/mm/yyyy or yyyy-mm-dd.",
|
|
9753
|
+
capabilityImpacts: "Capability links [{capabilityId, kind: improve|new|replace|retire, maturityTo?}]. maturityTo 1\u20135 = level reached (omit = the capability's target; never for retire). capabilityId: a capability of the map, from read_portfolio_context \u2192 lists.capabilities; without the context leave the list empty.",
|
|
9754
|
+
milestones: "Milestones (max 30, title \u2264300 chars): baselineDate = the plan, forecastDate = today's expectation (omit = baseline), doneDate = reached. Dates dd/mm/yyyy or yyyy-mm-dd; ids minted. An update replaces the list: send all.",
|
|
9246
9755
|
requiredSkills: "Required skills [{skillId, fte, runFte?}] \u2014 fte is the build-phase demand, the optional runFte the run-team demand after the planned end (absent = build fte continues, 0 = no run demand). skillId must be the id of a skill that exists in the organisation. With the portfolio context the Composer validates it (read_portfolio_context \u2192 lists.skills gives id + name); without it, leave the list empty and link skills in the app."
|
|
9247
9756
|
};
|
|
9248
9757
|
var contextWire = () => external_exports.preprocess(parseIfString, external_exports.union([external_exports.string().regex(/^ctx_[0-9a-f]{16}$/, "a contextId looks like ctx_<16 hex>"), external_exports.object({}).passthrough()]));
|
|
@@ -9286,6 +9795,8 @@ var compactSpecSchema = external_exports.object({
|
|
|
9286
9795
|
decisionLog: wireSection(SECTION_SCHEMAS.decisionLog, SECTION_DESCRIPTIONS.decisionLog).optional(),
|
|
9287
9796
|
statusReports: wireSection(SECTION_SCHEMAS.statusReports, SECTION_DESCRIPTIONS.statusReports).optional(),
|
|
9288
9797
|
requiredSkills: wireSection(SECTION_SCHEMAS.requiredSkills, SECTION_DESCRIPTIONS.requiredSkills).optional(),
|
|
9798
|
+
capabilityImpacts: wireSection(SECTION_SCHEMAS.capabilityImpacts, SECTION_DESCRIPTIONS.capabilityImpacts).optional(),
|
|
9799
|
+
milestones: wireSection(SECTION_SCHEMAS.milestones, SECTION_DESCRIPTIONS.milestones).optional(),
|
|
9289
9800
|
aiRiskTier: external_exports.enum(AI_RISK_TIERS).optional(),
|
|
9290
9801
|
hitlPosture: external_exports.enum(HITL_POSTURES).optional(),
|
|
9291
9802
|
dpiaStatus: external_exports.enum(DPIA_STATUSES).optional(),
|
|
@@ -9295,7 +9806,7 @@ var compactSpecSchema = external_exports.object({
|
|
|
9295
9806
|
prohibitedOverride: external_exports.string().optional(),
|
|
9296
9807
|
aiAct: wireSection(SECTION_SCHEMAS.aiAct, SECTION_DESCRIPTIONS.aiAct).optional(),
|
|
9297
9808
|
context: contextWire().optional().describe(
|
|
9298
|
-
`OPTIONAL but strongly recommended: the organisation's portfolio context \u2014 the contextId returned by read_portfolio_context ("ctx_\u2026") or the file's JSON itself. With it, switched-off sub-dimensions are skipped in the score, business unit / category must be the organisation's own, and skill / dependency / update ids are validated.`
|
|
9809
|
+
`OPTIONAL but strongly recommended: the organisation's portfolio context \u2014 the contextId returned by read_portfolio_context ("ctx_\u2026") or the file's JSON itself. With it, switched-off sub-dimensions are skipped in the score, business unit / category must be the organisation's own, and skill / dependency / capability / update ids are validated.`
|
|
9299
9810
|
)
|
|
9300
9811
|
}).strict();
|
|
9301
9812
|
var exportInputSchema = external_exports.object({
|
|
@@ -9340,7 +9851,7 @@ import { createHash } from "node:crypto";
|
|
|
9340
9851
|
|
|
9341
9852
|
// ../../initiative-model/src/portfolio-context.ts
|
|
9342
9853
|
var PORTFOLIO_CONTEXT_KIND = "portfolio-context";
|
|
9343
|
-
var PORTFOLIO_CONTEXT_VERSION =
|
|
9854
|
+
var PORTFOLIO_CONTEXT_VERSION = 2;
|
|
9344
9855
|
|
|
9345
9856
|
// ../../initiative-model/src/ai-act-fields.ts
|
|
9346
9857
|
var AI_ACT_FIELDS = [
|
|
@@ -9380,12 +9891,25 @@ var portfolioContextSchema = external_exports.object({
|
|
|
9380
9891
|
suggestedTags: external_exports.array(external_exports.string()),
|
|
9381
9892
|
skills: external_exports.array(external_exports.object({ id: external_exports.string().min(1), name: external_exports.string() }).passthrough()),
|
|
9382
9893
|
initiatives: external_exports.array(external_exports.object({ id: external_exports.string().min(1), externalId: external_exports.string().trim().optional(), name: external_exports.string(), status: external_exports.enum(STATUS_VALUES) }).passthrough()),
|
|
9383
|
-
sliders: external_exports.array(sliderSchema)
|
|
9894
|
+
sliders: external_exports.array(sliderSchema),
|
|
9895
|
+
/** Version 2 (2026-10-15): the capability map's leaves. Optional so a
|
|
9896
|
+
* version-1 file still parses — it then validates no capability links. */
|
|
9897
|
+
capabilities: external_exports.array(
|
|
9898
|
+
external_exports.object({
|
|
9899
|
+
id: external_exports.string().min(1),
|
|
9900
|
+
name: external_exports.string(),
|
|
9901
|
+
domain: external_exports.string(),
|
|
9902
|
+
importance: external_exports.enum(CAPABILITY_IMPORTANCES),
|
|
9903
|
+
currentMaturity: external_exports.number(),
|
|
9904
|
+
targetMaturity: external_exports.number()
|
|
9905
|
+
}).passthrough()
|
|
9906
|
+
).optional()
|
|
9384
9907
|
}).passthrough();
|
|
9385
9908
|
var CONTEXT_SUPPORTED_VERSION = PORTFOLIO_CONTEXT_VERSION;
|
|
9386
9909
|
function versionNotice(ctx) {
|
|
9387
9910
|
return ctx.version > CONTEXT_SUPPORTED_VERSION ? `The portfolio-context file is version ${ctx.version}; this Composer understands version ${CONTEXT_SUPPORTED_VERSION}. Newer fields are ignored \u2014 update the Composer (Import/Export \u2192 download the extension again) to be safe.` : void 0;
|
|
9388
9911
|
}
|
|
9912
|
+
var CAPABILITY_MATURITY_RANGE = `${CAPABILITY_MATURITY_MIN}\u2013${CAPABILITY_MATURITY_MAX}`;
|
|
9389
9913
|
var CONTEXT_ID_PREFIX = "ctx_";
|
|
9390
9914
|
var CACHE_MAX = 32;
|
|
9391
9915
|
var cache = /* @__PURE__ */ new Map();
|
|
@@ -9481,6 +10005,31 @@ function checkAgainstContext(spec, ctx) {
|
|
|
9481
10005
|
for (const [i, s] of (spec.requiredSkills ?? []).entries()) {
|
|
9482
10006
|
if (!skillIds.has(s.skillId)) errors.push(`requiredSkills.${i}.skillId: "${s.skillId}" is not a skill of this organisation \u2014 pick from read_portfolio_context \u2192 lists.skills (id + name), or leave requiredSkills empty.`);
|
|
9483
10007
|
}
|
|
10008
|
+
const impacts = spec.capabilityImpacts ?? [];
|
|
10009
|
+
if (impacts.length && ctx.capabilities === void 0) {
|
|
10010
|
+
errors.push(
|
|
10011
|
+
"capabilityImpacts: this portfolio-context file predates the capability map (version 1) \u2014 download it again from the app (Import/Export \u2192 Download portfolio context) so the Composer can check capability ids, or leave capabilityImpacts empty and link capabilities in the app."
|
|
10012
|
+
);
|
|
10013
|
+
} else {
|
|
10014
|
+
const caps = new Map((ctx.capabilities ?? []).map((c) => [c.id, c]));
|
|
10015
|
+
const seen = /* @__PURE__ */ new Set();
|
|
10016
|
+
for (const [i, link] of impacts.entries()) {
|
|
10017
|
+
if (seen.has(link.capabilityId)) continue;
|
|
10018
|
+
seen.add(link.capabilityId);
|
|
10019
|
+
const cap = caps.get(link.capabilityId);
|
|
10020
|
+
if (!cap) {
|
|
10021
|
+
errors.push(
|
|
10022
|
+
caps.size ? `capabilityImpacts.${i}.capabilityId: "${link.capabilityId}" is not a capability of this organisation's map \u2014 pick from read_portfolio_context \u2192 lists.capabilities (id + name + domain), or leave capabilityImpacts empty.` : `capabilityImpacts.${i}.capabilityId: this organisation has no capability map yet \u2014 it is built in the app's Settings \u203A Taxonomy; leave capabilityImpacts empty.`
|
|
10023
|
+
);
|
|
10024
|
+
continue;
|
|
10025
|
+
}
|
|
10026
|
+
if (link.maturityTo !== void 0 && link.kind !== "retire" && link.maturityTo < cap.currentMaturity) {
|
|
10027
|
+
warnings.push(
|
|
10028
|
+
`capabilityImpacts.${i}.maturityTo: ${link.maturityTo} is below the current maturity ${cap.currentMaturity} of "${cap.name}" \u2014 the app shows the capability as unchanged; the target is ${cap.targetMaturity}.`
|
|
10029
|
+
);
|
|
10030
|
+
}
|
|
10031
|
+
}
|
|
10032
|
+
}
|
|
9484
10033
|
const aiFieldsSet = AI_ACT_FIELDS.filter((f) => spec[f] !== void 0);
|
|
9485
10034
|
if (aiFieldsSet.length && !ctx.aiActEnabled) {
|
|
9486
10035
|
warnings.push(
|
|
@@ -9523,6 +10072,7 @@ function buildInterviewPlan(ctx, contextId) {
|
|
|
9523
10072
|
...allOff.length ? [`Dimension(s) with EVERY sub-dimension switched off (${allOff.join(", ")}) still need an entry in evaluation: { subs: {}, confidence } \u2014 the score is 0 there; ask only for the confidence.`] : [],
|
|
9524
10073
|
ctx.businessUnits.length && ctx.categories.length ? "businessUnit MUST be one of lists.businessUnits and aiCategory one of lists.categories (matched case-insensitively, normalised to the organisation's spelling) \u2014 the Composer rejects anything else; new ones are created in the app's Settings, not in the interview." : "This organisation has no business units and/or categories configured yet \u2014 they must be added in the app's Settings and the context downloaded again before an initiative can be assembled.",
|
|
9525
10074
|
"dependsOn entries must be ids from lists.initiatives; requiredSkills[].skillId must be ids from lists.skills. Never invent an id; leave the list empty when unsure.",
|
|
10075
|
+
ctx.capabilities === void 0 ? "This file predates the capability map (version 1): capability links cannot be checked \u2014 leave capabilityImpacts empty, or ask the user to download the portfolio context again." : ctx.capabilities.length ? `capabilityImpacts[].capabilityId must be ids from lists.capabilities (${ctx.capabilities.length} capabilities; each lists its domain, importance and current \u2192 target maturity ${CAPABILITY_MATURITY_RANGE}). kind is improve | new | replace | retire; maturityTo (${CAPABILITY_MATURITY_RANGE}) is the level the initiative brings the capability to \u2014 omit it to mean the capability's target, and never send it for retire. Ask which capabilities the initiative changes and to what level.` : "This organisation has no capability map yet (built in the app's Settings \u203A Taxonomy): leave capabilityImpacts empty.",
|
|
9526
10076
|
"To UPDATE an existing initiative instead of creating a new one, pass its id (from lists.initiatives) as `id` in the spec \u2014 the exported file then updates it in the app (Import/Export \u2192 Single initiative \u2192 'Update'). Omit id for a new initiative. Entries in lists.initiatives may carry externalId \u2014 the organisation's own reference (e.g. IC-26-118) \u2014 use it to recognise which initiative the user means. An update REPLACES the whole record: any field, section or row you omit is CLEARED \u2014 decision log, status reports and links included \u2014 so re-send everything that must survive. Exception: the organisation's externalId is carried over automatically when omitted.",
|
|
9527
10077
|
...ctx.sliderGranularity ? [`Ratings are in steps of ${ctx.sliderGranularity} (the organisation's slider step \u2014 Settings \u203A Slider granularity): ask for and send only multiples of ${ctx.sliderGranularity} between 0 and 100 (${gridExample(ctx.sliderGranularity)}); any other value is rejected.`] : [],
|
|
9528
10078
|
"Dates: talk to the user in dd/mm/yyyy; you may send dates as dd/mm/yyyy, dd.mm.yyyy or yyyy-mm-dd \u2014 the Composer stores yyyy-mm-dd.",
|
|
@@ -9547,7 +10097,17 @@ function buildInterviewPlan(ctx, contextId) {
|
|
|
9547
10097
|
categories: ctx.categories,
|
|
9548
10098
|
suggestedTags: ctx.suggestedTags,
|
|
9549
10099
|
skills: ctx.skills.map((s) => ({ id: s.id, name: s.name })),
|
|
9550
|
-
initiatives: ctx.initiatives.map((i) => ({ id: i.id, ...i.externalId ? { externalId: i.externalId } : {}, name: i.name, status: i.status }))
|
|
10100
|
+
initiatives: ctx.initiatives.map((i) => ({ id: i.id, ...i.externalId ? { externalId: i.externalId } : {}, name: i.name, status: i.status })),
|
|
10101
|
+
...ctx.capabilities ? {
|
|
10102
|
+
capabilities: ctx.capabilities.map((c) => ({
|
|
10103
|
+
id: c.id,
|
|
10104
|
+
name: c.name,
|
|
10105
|
+
domain: c.domain,
|
|
10106
|
+
importance: c.importance,
|
|
10107
|
+
currentMaturity: c.currentMaturity,
|
|
10108
|
+
targetMaturity: c.targetMaturity
|
|
10109
|
+
}))
|
|
10110
|
+
} : {}
|
|
9551
10111
|
},
|
|
9552
10112
|
interview: {
|
|
9553
10113
|
dimensions,
|
|
@@ -9608,8 +10168,11 @@ function checkAiActVocabularies(block, errors) {
|
|
|
9608
10168
|
}
|
|
9609
10169
|
function mintNestedIds(rows, stamp, withStamps = false) {
|
|
9610
10170
|
if (!rows) return void 0;
|
|
10171
|
+
const seen = /* @__PURE__ */ new Set();
|
|
9611
10172
|
return rows.map((r) => {
|
|
9612
|
-
const
|
|
10173
|
+
const id = isUuid(r.id) && !seen.has(r.id) ? r.id : randomUUID();
|
|
10174
|
+
seen.add(id);
|
|
10175
|
+
const next = { ...r, id };
|
|
9613
10176
|
if (withStamps) {
|
|
9614
10177
|
if (!next.createdAt) next.createdAt = stamp;
|
|
9615
10178
|
if (!next.updatedAt) next.updatedAt = stamp;
|
|
@@ -9643,6 +10206,41 @@ function assembleInitiative(input, now = /* @__PURE__ */ new Date()) {
|
|
|
9643
10206
|
}
|
|
9644
10207
|
}
|
|
9645
10208
|
if (spec.aiAct && typeof spec.aiAct === "object") checkAiActVocabularies(spec.aiAct, errors);
|
|
10209
|
+
const allImpacts = spec.capabilityImpacts ?? [];
|
|
10210
|
+
const seenCaps = /* @__PURE__ */ new Set();
|
|
10211
|
+
const impacts = [];
|
|
10212
|
+
for (const [i, link] of allImpacts.entries()) {
|
|
10213
|
+
if (seenCaps.has(link.capabilityId)) {
|
|
10214
|
+
errors.push(`capabilityImpacts.${i}.capabilityId: "${link.capabilityId}" is linked twice \u2014 one link per capability.`);
|
|
10215
|
+
continue;
|
|
10216
|
+
}
|
|
10217
|
+
seenCaps.add(link.capabilityId);
|
|
10218
|
+
impacts.push([i, link]);
|
|
10219
|
+
if (link.kind === "retire" && link.maturityTo !== void 0) errors.push(`capabilityImpacts.${i}.maturityTo: a retire link has no target level \u2014 omit maturityTo.`);
|
|
10220
|
+
else if (link.maturityTo !== void 0 && !Number.isInteger(link.maturityTo)) errors.push(`capabilityImpacts.${i}.maturityTo: must be a whole number 1\u20135 (got ${link.maturityTo}).`);
|
|
10221
|
+
}
|
|
10222
|
+
const milestones = spec.milestones ?? [];
|
|
10223
|
+
const pad = (n) => String(n).padStart(2, "0");
|
|
10224
|
+
const today = `${now.getFullYear()}-${pad(now.getMonth() + 1)}-${pad(now.getDate())}`;
|
|
10225
|
+
for (const [i, m] of milestones.entries()) {
|
|
10226
|
+
if (!m.title.trim()) errors.push(`milestones.${i}.title: must not be empty (got only spaces).`);
|
|
10227
|
+
for (const field of ["baselineDate", "forecastDate", "doneDate"]) {
|
|
10228
|
+
const v = m[field];
|
|
10229
|
+
if (v !== void 0 && !isCalendarDate(v)) errors.push(`milestones.${i}.${field}: "${v}" is not a real calendar date \u2014 dd/mm/yyyy or yyyy-mm-dd`);
|
|
10230
|
+
}
|
|
10231
|
+
const due = m.doneDate ?? m.forecastDate ?? m.baselineDate;
|
|
10232
|
+
if (isCalendarDate(due) && (spec.timelineStart && due < spec.timelineStart || spec.timelineEnd && due > spec.timelineEnd)) {
|
|
10233
|
+
warnings.push(`milestones.${i}: "${m.title.trim()}" falls on ${due}, outside the timeline ${spec.timelineStart} \u2013 ${spec.timelineEnd}.`);
|
|
10234
|
+
}
|
|
10235
|
+
if (m.doneDate && isCalendarDate(m.doneDate) && m.doneDate > today) warnings.push(`milestones.${i}.doneDate: ${m.doneDate} lies in the future \u2014 a done date marks a milestone already reached.`);
|
|
10236
|
+
}
|
|
10237
|
+
const norm2 = (v) => (v ?? "").trim().toLowerCase();
|
|
10238
|
+
const others = context?.initiatives ?? [];
|
|
10239
|
+
const ext = norm2(spec.externalId);
|
|
10240
|
+
const updates = spec.id !== void 0 || !!ext && others.filter((x) => norm2(x.externalId) === ext).length === 1 || others.some((x) => norm2(x.name) === norm2(spec.name));
|
|
10241
|
+
if (updates && spec.milestones === void 0) {
|
|
10242
|
+
warnings.push("milestones: none sent, and the app will offer this file as an update \u2014 it replaces the initiative's milestones, so any the app holds are removed. Send the full list to keep them.");
|
|
10243
|
+
}
|
|
9646
10244
|
let businessUnit = spec.businessUnit;
|
|
9647
10245
|
let aiCategory = spec.aiCategory;
|
|
9648
10246
|
if (context) {
|
|
@@ -9656,6 +10254,9 @@ function assembleInitiative(input, now = /* @__PURE__ */ new Date()) {
|
|
|
9656
10254
|
for (const [i, id] of (spec.dependsOn ?? []).entries()) {
|
|
9657
10255
|
if (!isUuid(id)) errors.push(`dependsOn.${i}: "${id}" is not a UUID \u2014 without the organisation's portfolio context the Composer cannot verify ids; leave dependsOn empty and link dependencies in the app, or provide the context.`);
|
|
9658
10256
|
}
|
|
10257
|
+
for (const [i, link] of impacts) {
|
|
10258
|
+
if (!isUuid(link.capabilityId)) errors.push(`capabilityImpacts.${i}.capabilityId: "${link.capabilityId}" is not a UUID \u2014 without the organisation's portfolio context the Composer cannot verify capability ids; leave capabilityImpacts empty and link capabilities in the app, or provide the context.`);
|
|
10259
|
+
}
|
|
9659
10260
|
}
|
|
9660
10261
|
if (spec.timelineStart && spec.timelineEnd && spec.timelineEnd < spec.timelineStart) {
|
|
9661
10262
|
warnings.push("timelineEnd is before timelineStart");
|
|
@@ -9690,6 +10291,7 @@ function assembleInitiative(input, now = /* @__PURE__ */ new Date()) {
|
|
|
9690
10291
|
evaluation,
|
|
9691
10292
|
decisionLog: mintNestedIds(spec.decisionLog, stamp),
|
|
9692
10293
|
statusReports: mintNestedIds(spec.statusReports, stamp),
|
|
10294
|
+
milestones: mintNestedIds(spec.milestones, stamp)?.map((m) => ({ ...m, title: m.title.trim() })),
|
|
9693
10295
|
aiAct: aiAct ? { ...aiAct, ...aiAct.incidents ? { incidents: mintNestedIds(aiAct.incidents, stamp, true) } : {} } : void 0,
|
|
9694
10296
|
createdAt: stamp,
|
|
9695
10297
|
updatedAt: stamp
|
|
@@ -9701,7 +10303,7 @@ function assembleInitiative(input, now = /* @__PURE__ */ new Date()) {
|
|
|
9701
10303
|
}
|
|
9702
10304
|
|
|
9703
10305
|
// ../../initiative-model/src/backup-version.ts
|
|
9704
|
-
var BACKUP_VERSION =
|
|
10306
|
+
var BACKUP_VERSION = 11;
|
|
9705
10307
|
|
|
9706
10308
|
// src/envelope.ts
|
|
9707
10309
|
var ENVELOPE_BRAND = "BICon Portfolio Steering";
|
|
@@ -9759,12 +10361,12 @@ function createServer() {
|
|
|
9759
10361
|
async () => text({
|
|
9760
10362
|
capabilities: [
|
|
9761
10363
|
"strict typed schemas: unknown keys anywhere in the spec are rejected with their exact path (never silently dropped)",
|
|
9762
|
-
"sections (aiAct/economics/actuals/decisionLog/statusReports/requiredSkills) accept a JSON object/array or the same JSON as a string; row ids are minted by the Composer",
|
|
10364
|
+
"sections (aiAct/economics/actuals/decisionLog/statusReports/requiredSkills/capabilityImpacts/milestones) accept a JSON object/array or the same JSON as a string; row ids are minted by the Composer",
|
|
9763
10365
|
"dates accepted as dd/mm/yyyy, dd.mm.yyyy or yyyy-mm-dd (stored as yyyy-mm-dd)",
|
|
9764
10366
|
"get_initiative_schema: sectionShapes, aiActVocabularies, portfolio-mode wording overlays",
|
|
9765
10367
|
"AI-Act vocabulary and id-format enforcement with the allowed values in the error",
|
|
9766
10368
|
"one pipeline: export_initiative_file takes the same spec as assemble_initiative \u2014 scores are always derived; pass `id` to update an existing initiative",
|
|
9767
|
-
"portfolio context: read_portfolio_context turns the app's exported context file into an organisation-specific interview plan and a short contextId; with it, switched-off sub-dimensions are skipped in the score, business unit / category must be the organisation's own, and skill / dependency / update ids are validated"
|
|
10369
|
+
"portfolio context: read_portfolio_context turns the app's exported context file into an organisation-specific interview plan and a short contextId; with it, switched-off sub-dimensions are skipped in the score, business unit / category must be the organisation's own, and skill / dependency / capability / update ids are validated (capabilities from the version-2 context file)"
|
|
9768
10370
|
]
|
|
9769
10371
|
})
|
|
9770
10372
|
);
|
|
@@ -9780,7 +10382,7 @@ function createServer() {
|
|
|
9780
10382
|
"read_portfolio_context",
|
|
9781
10383
|
{
|
|
9782
10384
|
title: "Read portfolio context",
|
|
9783
|
-
description: "Turns the organisation's portfolio-context file (downloaded in the BICon Portfolio Steering app: Import/Export \u2192 'Download portfolio context') into the interview plan for THIS organisation: its own labels, help texts and rating notes for the sub-dimensions, which sub-dimensions are switched off (do not ask, not scored), its business units, categories, tags, skills (id + name)
|
|
10385
|
+
description: "Turns the organisation's portfolio-context file (downloaded in the BICon Portfolio Steering app: Import/Export \u2192 'Download portfolio context') into the interview plan for THIS organisation: its own labels, help texts and rating notes for the sub-dimensions, which sub-dimensions are switched off (do not ask, not scored), its business units, categories, tags, skills (id + name), initiatives (id + name) and the capability map's capabilities (id, name, domain, importance, current \u2192 target maturity), currency, discount rate and whether the EU-AI-Act module is on \u2014 plus a short contextId. Call it right after get_initiative_schema when the user provides the file, then pass `context: \"<contextId>\"` to assemble_initiative and export_initiative_file.",
|
|
9784
10386
|
inputSchema: readContextInputSchema
|
|
9785
10387
|
},
|
|
9786
10388
|
async ({ context }) => {
|