crewly 1.8.12 → 1.9.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/config/roles/orchestrator/prompt.md +53 -0
- package/config/roles/product-manager/prompt.md +40 -0
- package/config/roles/team-leader/prompt.md +33 -0
- package/config/skills/orchestrator/decompose-okr/SKILL.md +107 -0
- package/config/skills/orchestrator/decompose-okr/execute.sh +142 -0
- package/config/skills/registry.json +52 -6
- package/dist/backend/backend/src/controllers/mission/kr.controller.d.ts +8 -0
- package/dist/backend/backend/src/controllers/mission/kr.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/mission/kr.controller.js +17 -0
- package/dist/backend/backend/src/controllers/mission/kr.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/mission/mission-policy.routes.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/mission/mission-policy.routes.js +198 -26
- package/dist/backend/backend/src/controllers/mission/mission-policy.routes.js.map +1 -1
- package/dist/backend/backend/src/services/v3/kr-tracking.service.d.ts +92 -1
- package/dist/backend/backend/src/services/v3/kr-tracking.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/v3/kr-tracking.service.js +169 -1
- package/dist/backend/backend/src/services/v3/kr-tracking.service.js.map +1 -1
- package/dist/backend/backend/src/services/v3/mission-period.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/v3/mission-period.service.js +7 -1
- package/dist/backend/backend/src/services/v3/mission-period.service.js.map +1 -1
- package/dist/backend/backend/src/services/v3/okr-cascade.service.d.ts +217 -0
- package/dist/backend/backend/src/services/v3/okr-cascade.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/v3/okr-cascade.service.js +417 -0
- package/dist/backend/backend/src/services/v3/okr-cascade.service.js.map +1 -0
- package/dist/backend/backend/src/services/v3/okr-review.service.d.ts +11 -0
- package/dist/backend/backend/src/services/v3/okr-review.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/v3/okr-review.service.js +50 -0
- package/dist/backend/backend/src/services/v3/okr-review.service.js.map +1 -1
- package/dist/backend/backend/src/services/wiki/wiki-migrate.service.d.ts +91 -0
- package/dist/backend/backend/src/services/wiki/wiki-migrate.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/wiki/wiki-migrate.service.js +180 -0
- package/dist/backend/backend/src/services/wiki/wiki-migrate.service.js.map +1 -1
- package/dist/backend/backend/src/types/v2/index.d.ts +4 -4
- package/dist/backend/backend/src/types/v2/index.d.ts.map +1 -1
- package/dist/backend/backend/src/types/v2/index.js +2 -2
- package/dist/backend/backend/src/types/v2/index.js.map +1 -1
- package/dist/backend/backend/src/types/v2/key-result.types.d.ts +84 -0
- package/dist/backend/backend/src/types/v2/key-result.types.d.ts.map +1 -1
- package/dist/backend/backend/src/types/v2/key-result.types.js +73 -3
- package/dist/backend/backend/src/types/v2/key-result.types.js.map +1 -1
- package/dist/backend/backend/src/types/v2/mission.types.d.ts +235 -0
- package/dist/backend/backend/src/types/v2/mission.types.d.ts.map +1 -1
- package/dist/backend/backend/src/types/v2/mission.types.js +230 -0
- package/dist/backend/backend/src/types/v2/mission.types.js.map +1 -1
- package/package.json +1 -1
|
@@ -13,7 +13,8 @@ import * as fs from 'fs/promises';
|
|
|
13
13
|
import * as path from 'path';
|
|
14
14
|
import { existsSync, mkdirSync } from 'fs';
|
|
15
15
|
import { LoggerService } from '../core/logger.service.js';
|
|
16
|
-
import {
|
|
16
|
+
import { deriveLevel, } from '../../types/v2/mission.types.js';
|
|
17
|
+
import { createKeyResult, computeKRProgress, deriveKRStatus, deriveCascadeChildStatus, deriveOKRRecommendation, computeRolledUpProgress, MAX_MEASUREMENT_HISTORY, validateCreateKeyResultInput, } from '../../types/v2/key-result.types.js';
|
|
17
18
|
// ---------------------------------------------------------------------------
|
|
18
19
|
// Constants
|
|
19
20
|
// ---------------------------------------------------------------------------
|
|
@@ -29,6 +30,10 @@ function getKRDir(missionId) {
|
|
|
29
30
|
function getKRPath(missionId, krId) {
|
|
30
31
|
return path.join(getKRDir(missionId), `${krId}.json`);
|
|
31
32
|
}
|
|
33
|
+
/** Proposal state that marks an approved (cascade-active) mission. */
|
|
34
|
+
const APPROVED_STATE = 'approved';
|
|
35
|
+
/** Stale-cycle fallback when a mission has no persisted `staleCycles`. */
|
|
36
|
+
const NO_STALE_CYCLES = 0;
|
|
32
37
|
// ---------------------------------------------------------------------------
|
|
33
38
|
// Service
|
|
34
39
|
// ---------------------------------------------------------------------------
|
|
@@ -298,6 +303,169 @@ export class KRTrackingService {
|
|
|
298
303
|
};
|
|
299
304
|
}
|
|
300
305
|
// -------------------------------------------------------------------------
|
|
306
|
+
// Cross-Level Roll-Up (cascade)
|
|
307
|
+
// -------------------------------------------------------------------------
|
|
308
|
+
/**
|
|
309
|
+
* List the cascade-active direct children of a mission.
|
|
310
|
+
*
|
|
311
|
+
* Reads every mission document and keeps those whose `parentMissionId`
|
|
312
|
+
* equals `parentId` AND that are cascade-active. A mission is cascade-active
|
|
313
|
+
* iff its `approval` is absent (legacy missions) OR
|
|
314
|
+
* `approval.state === 'approved'`. Draft / pending_approval / rejected
|
|
315
|
+
* children are excluded from the roll-up per spec §4.2.
|
|
316
|
+
*
|
|
317
|
+
* @param parentId - Parent mission ID
|
|
318
|
+
* @returns The approved direct-child missions (empty if none / on read error)
|
|
319
|
+
*
|
|
320
|
+
* @example
|
|
321
|
+
* ```ts
|
|
322
|
+
* const children = await KRTrackingService.getInstance().listChildMissions('team-1');
|
|
323
|
+
* ```
|
|
324
|
+
*/
|
|
325
|
+
async listChildMissions(parentId) {
|
|
326
|
+
const all = await this.loadAllMissions();
|
|
327
|
+
return all.filter((m) => m.parentMissionId === parentId && this.isCascadeActive(m));
|
|
328
|
+
}
|
|
329
|
+
/**
|
|
330
|
+
* Compute cross-level cascade roll-up of OKR progress for a mission and its
|
|
331
|
+
* approved descendants (company → team → project).
|
|
332
|
+
*
|
|
333
|
+
* Recursively walks the `parentMissionId` tree. At each node it reuses
|
|
334
|
+
* {@link computeMissionOKRProgress} for that node's OWN KRs, then folds in the
|
|
335
|
+
* `rolledUpProgress` of each approved child:
|
|
336
|
+
*
|
|
337
|
+
* - `rolledUpProgress` = equal-weight average of this node's own
|
|
338
|
+
* `overallProgress` and each approved child's `rolledUpProgress`
|
|
339
|
+
* (see {@link computeRolledUpProgress}); a leaf equals its own progress.
|
|
340
|
+
* - The roll-up recommendation is derived over this node's own KR statuses
|
|
341
|
+
* PLUS one synthetic status per child mapped from the child's
|
|
342
|
+
* `rolledUpProgress` via {@link deriveCascadeChildStatus} — so "all children
|
|
343
|
+
* off_track ⇒ parent escalates/replans" falls out naturally (including when
|
|
344
|
+
* children are stalled at 0% progress).
|
|
345
|
+
*
|
|
346
|
+
* Orphans (a mission whose `parentMissionId` points at a missing or
|
|
347
|
+
* non-approved parent) are treated as roots of their own subtree and never
|
|
348
|
+
* crash. A `visited` set guards against cycles defensively (create/update
|
|
349
|
+
* already reject cycles).
|
|
350
|
+
*
|
|
351
|
+
* @param missionId - Root mission of the subtree to roll up
|
|
352
|
+
* @param staleCycles - Consecutive stale review cycles for the root node. When
|
|
353
|
+
* omitted, the root's PERSISTED `staleCycles` is used so staleness-driven
|
|
354
|
+
* replan/escalate is not silently suppressed at the queried node (spec §4.2).
|
|
355
|
+
* Pass an explicit number to override the persisted value.
|
|
356
|
+
* @returns The recursive {@link CascadeOKRSummary} for the subtree
|
|
357
|
+
*
|
|
358
|
+
* @example
|
|
359
|
+
* ```ts
|
|
360
|
+
* const summary = await KRTrackingService.getInstance().computeCascadeOKRProgress('co-1');
|
|
361
|
+
* console.log(summary.rolledUpProgress, summary.children.length);
|
|
362
|
+
* ```
|
|
363
|
+
*/
|
|
364
|
+
async computeCascadeOKRProgress(missionId, staleCycles) {
|
|
365
|
+
const all = await this.loadAllMissions();
|
|
366
|
+
const byId = new Map(all.map((m) => [m.id, m]));
|
|
367
|
+
const linkById = new Map(all.map((m) => [m.id, { id: m.id, parentMissionId: m.parentMissionId }]));
|
|
368
|
+
// Seed the root's stale cycles from its persisted value unless the caller
|
|
369
|
+
// explicitly overrides it. Children read their own persisted value below.
|
|
370
|
+
const rootStaleCycles = staleCycles ?? byId.get(missionId)?.staleCycles ?? NO_STALE_CYCLES;
|
|
371
|
+
return this.rollUp(missionId, rootStaleCycles, byId, linkById, new Set());
|
|
372
|
+
}
|
|
373
|
+
/**
|
|
374
|
+
* Recursive worker for {@link computeCascadeOKRProgress}.
|
|
375
|
+
*
|
|
376
|
+
* @param missionId - Current node
|
|
377
|
+
* @param staleCycles - Stale cycles applied to the current node only
|
|
378
|
+
* @param byId - All missions indexed by ID
|
|
379
|
+
* @param linkById - Lightweight parent-link map for level derivation
|
|
380
|
+
* @param visited - Cycle-guard set of already-walked mission IDs
|
|
381
|
+
* @returns The {@link CascadeOKRSummary} for this node's subtree
|
|
382
|
+
*/
|
|
383
|
+
async rollUp(missionId, staleCycles, byId, linkById, visited) {
|
|
384
|
+
visited.add(missionId);
|
|
385
|
+
const own = await this.computeMissionOKRProgress(missionId, staleCycles);
|
|
386
|
+
const level = this.resolveLevel(missionId, byId, linkById);
|
|
387
|
+
// Approved direct children that have not already been visited (cycle guard).
|
|
388
|
+
const approvedChildren = [...byId.values()].filter((m) => m.parentMissionId === missionId &&
|
|
389
|
+
this.isCascadeActive(m) &&
|
|
390
|
+
!visited.has(m.id));
|
|
391
|
+
const children = [];
|
|
392
|
+
for (const child of approvedChildren) {
|
|
393
|
+
// Child stale cycles read from its own persisted value (independent node).
|
|
394
|
+
children.push(await this.rollUp(child.id, child.staleCycles ?? NO_STALE_CYCLES, byId, linkById, visited));
|
|
395
|
+
}
|
|
396
|
+
const childProgresses = children.map((c) => c.rolledUpProgress);
|
|
397
|
+
const rolledUpProgress = computeRolledUpProgress(own.overallProgress, childProgresses);
|
|
398
|
+
// Roll-up recommendation: own KR statuses + one synthetic status per child
|
|
399
|
+
// mapped from its rolled-up progress. Uses deriveCascadeChildStatus (no
|
|
400
|
+
// baseline-equality short-circuit) so a child stalled at 0% reads as
|
|
401
|
+
// off_track rather than not_started — otherwise an all-stalled parent would
|
|
402
|
+
// never escalate/replan (spec §4.2).
|
|
403
|
+
const ownStatuses = (await this.listByMission(missionId)).map((kr) => kr.status);
|
|
404
|
+
const childStatuses = children.map((c) => deriveCascadeChildStatus(c.rolledUpProgress));
|
|
405
|
+
const recommendation = deriveOKRRecommendation([...ownStatuses, ...childStatuses], staleCycles);
|
|
406
|
+
return {
|
|
407
|
+
...own,
|
|
408
|
+
recommendation,
|
|
409
|
+
level,
|
|
410
|
+
childMissionCount: children.length,
|
|
411
|
+
rolledUpProgress,
|
|
412
|
+
children,
|
|
413
|
+
};
|
|
414
|
+
}
|
|
415
|
+
/**
|
|
416
|
+
* Whether a mission counts as cascade-active: approval absent (legacy) or
|
|
417
|
+
* explicitly approved.
|
|
418
|
+
*
|
|
419
|
+
* @param mission - Mission to test
|
|
420
|
+
* @returns `true` if the mission participates in the cascade roll-up
|
|
421
|
+
*/
|
|
422
|
+
isCascadeActive(mission) {
|
|
423
|
+
return mission.approval === undefined || mission.approval.state === APPROVED_STATE;
|
|
424
|
+
}
|
|
425
|
+
/**
|
|
426
|
+
* Resolve a mission's cascade level: prefer its explicit `level`, else derive
|
|
427
|
+
* it from the parent chain via {@link deriveLevel}. Missing/orphan missions
|
|
428
|
+
* fall back to `company` (treated as a root).
|
|
429
|
+
*
|
|
430
|
+
* @param missionId - Mission whose level to resolve
|
|
431
|
+
* @param byId - All missions indexed by ID
|
|
432
|
+
* @param linkById - Lightweight parent-link map for derivation
|
|
433
|
+
* @returns The resolved {@link MissionLevel}
|
|
434
|
+
*/
|
|
435
|
+
resolveLevel(missionId, byId, linkById) {
|
|
436
|
+
const mission = byId.get(missionId);
|
|
437
|
+
if (mission?.level)
|
|
438
|
+
return mission.level;
|
|
439
|
+
if (!mission)
|
|
440
|
+
return 'company';
|
|
441
|
+
return deriveLevel(missionId, linkById);
|
|
442
|
+
}
|
|
443
|
+
/**
|
|
444
|
+
* Load all mission documents from disk, skipping unreadable files.
|
|
445
|
+
*
|
|
446
|
+
* @returns Array of missions (empty on a missing directory)
|
|
447
|
+
*/
|
|
448
|
+
async loadAllMissions() {
|
|
449
|
+
const dir = getMissionsDir();
|
|
450
|
+
let files = [];
|
|
451
|
+
try {
|
|
452
|
+
files = (await fs.readdir(dir)).filter((f) => f.endsWith('.json'));
|
|
453
|
+
}
|
|
454
|
+
catch {
|
|
455
|
+
return [];
|
|
456
|
+
}
|
|
457
|
+
const missions = await Promise.all(files.map(async (f) => {
|
|
458
|
+
try {
|
|
459
|
+
const raw = await fs.readFile(path.join(dir, f), 'utf-8');
|
|
460
|
+
return JSON.parse(raw);
|
|
461
|
+
}
|
|
462
|
+
catch {
|
|
463
|
+
return null;
|
|
464
|
+
}
|
|
465
|
+
}));
|
|
466
|
+
return missions.filter((m) => m !== null);
|
|
467
|
+
}
|
|
468
|
+
// -------------------------------------------------------------------------
|
|
301
469
|
// Persistence
|
|
302
470
|
// -------------------------------------------------------------------------
|
|
303
471
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kr-tracking.service.js","sourceRoot":"","sources":["../../../../../../backend/src/services/v3/kr-tracking.service.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"kr-tracking.service.js","sourceRoot":"","sources":["../../../../../../backend/src/services/v3/kr-tracking.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mission-period.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/v3/mission-period.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAKH,OAAO,KAAK,EAAE,OAAO,EAAgC,MAAM,iCAAiC,CAAC;
|
|
1
|
+
{"version":3,"file":"mission-period.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/v3/mission-period.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAKH,OAAO,KAAK,EAAE,OAAO,EAAgC,MAAM,iCAAiC,CAAC;AA2B7F,+CAA+C;AAC/C,MAAM,WAAW,qBAAqB;IACpC,sDAAsD;IACtD,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,0DAA0D;IAC1D,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,+BAA+B;IAC/B,SAAS,EAAE,MAAM,CAAC;CACnB;AAMD;;GAEG;AACH,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAqC;IAC5D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkB;IAEzC,OAAO;IAIP,MAAM,CAAC,WAAW,IAAI,oBAAoB;IAO1C,MAAM,CAAC,aAAa,IAAI,IAAI;IAQ5B;;;;;;;;;OASG;IACG,SAAS,CAAC,GAAG,CAAC,EAAE,IAAI,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAkD3D;;;;;OAKG;IACG,uBAAuB,CAAC,GAAG,CAAC,EAAE,IAAI,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAY7D;;;;;;;OAOG;IACG,0BAA0B,CAC9B,MAAM,EAAE,MAAM,EACd,YAAY,GAAE,SAAS,GAAG,QAAQ,GAAG,MAAM,GAAG,KAAa,EAC3D,GAAG,CAAC,EAAE,IAAI,GACT,OAAO,CAAC,OAAO,EAAE,CAAC;IAkCrB;;OAEG;YACW,eAAe;IAoB7B;;OAEG;YACW,mBAAmB;CAYlC"}
|
|
@@ -22,8 +22,14 @@ import { isPeriodActive, isPeriodPast, isPeriodFuture, sortMissionsByPriority, T
|
|
|
22
22
|
// ---------------------------------------------------------------------------
|
|
23
23
|
// Constants
|
|
24
24
|
// ---------------------------------------------------------------------------
|
|
25
|
+
/**
|
|
26
|
+
* Resolve the mission store directory. Defaults to `<cwd>/.crewly/missions`
|
|
27
|
+
* (the production store). Honors the `CREWLY_MISSIONS_DIR` env override so tests
|
|
28
|
+
* can isolate to a temp directory and never read/delete the real store — without
|
|
29
|
+
* this override a test's cleanup would wipe production missions.
|
|
30
|
+
*/
|
|
25
31
|
function getMissionsDir() {
|
|
26
|
-
return path.join(process.cwd(), '.crewly', 'missions');
|
|
32
|
+
return process.env['CREWLY_MISSIONS_DIR'] || path.join(process.cwd(), '.crewly', 'missions');
|
|
27
33
|
}
|
|
28
34
|
// ---------------------------------------------------------------------------
|
|
29
35
|
// Service
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mission-period.service.js","sourceRoot":"","sources":["../../../../../../backend/src/services/v3/mission-period.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAE,MAAM,aAAa,CAAC;AAClC,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAwB,MAAM,2BAA2B,CAAC;AAEhF,OAAO,EACL,cAAc,EACd,YAAY,EACZ,cAAc,EACd,sBAAsB,EACtB,yBAAyB,GAC1B,MAAM,iCAAiC,CAAC;AAEzC,8EAA8E;AAC9E,YAAY;AACZ,8EAA8E;AAE9E,SAAS,cAAc;IACrB,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"mission-period.service.js","sourceRoot":"","sources":["../../../../../../backend/src/services/v3/mission-period.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OKR Cascade Service
|
|
3
|
+
*
|
|
4
|
+
* Owns the decompose → propose → approve/reject workflow for the OKR cascade
|
|
5
|
+
* (company → team → project). A team-leader/PM agent drafts child OKRs as a
|
|
6
|
+
* PROPOSAL; the child Missions are persisted with
|
|
7
|
+
* `approval.state = 'pending_approval'` and are NOT cascade-active until the
|
|
8
|
+
* human owner approves. Rejection carries a required reason.
|
|
9
|
+
*
|
|
10
|
+
* This service is the SINGLE owner of `approval.state` transitions — the
|
|
11
|
+
* `updateMission` PUT route blocks direct `approval` writes so that all
|
|
12
|
+
* transitions flow through {@link OKRCascadeService.approveDecomposition} and
|
|
13
|
+
* {@link OKRCascadeService.rejectDecomposition} (spec §3.2/§3.3).
|
|
14
|
+
*
|
|
15
|
+
* FLAG (spec §2.5): the approval *workflow* (this service + its routes) is a
|
|
16
|
+
* plausible future move to `crewly-pro` as a gated governance feature. The
|
|
17
|
+
* approval *types* live in `mission.types.ts` and stay there; only this
|
|
18
|
+
* workflow layer would relocate. Do NOT split now.
|
|
19
|
+
*
|
|
20
|
+
* Persistence reuses the existing on-disk layout:
|
|
21
|
+
* - Missions: `.crewly/missions/{id}.json`
|
|
22
|
+
* - KRs: `.crewly/missions/{id}/key-results/` (via {@link KRTrackingService})
|
|
23
|
+
*
|
|
24
|
+
* @module services/v3/okr-cascade.service
|
|
25
|
+
*/
|
|
26
|
+
import { type Mission, type MissionLevel } from '../../types/v2/mission.types.js';
|
|
27
|
+
import type { CreateKeyResultInput } from '../../types/v2/key-result.types.js';
|
|
28
|
+
/**
|
|
29
|
+
* A single proposed child OKR within a decomposition: one objective plus its
|
|
30
|
+
* Key Results. `projectId` is required only when the resulting child level is
|
|
31
|
+
* `project`.
|
|
32
|
+
*/
|
|
33
|
+
export interface DecomposeOKRChild {
|
|
34
|
+
/** Objective statement for the child OKR. */
|
|
35
|
+
objective: string;
|
|
36
|
+
/** Strategic approach the child will pursue. */
|
|
37
|
+
currentStrategy: string;
|
|
38
|
+
/** Free-text success criteria (in addition to structured KRs). */
|
|
39
|
+
successCriteria: string[];
|
|
40
|
+
/** Required when the child level resolves to `project`. */
|
|
41
|
+
projectId?: string;
|
|
42
|
+
/**
|
|
43
|
+
* Key Results to create under the child mission. `missionId` is filled in by
|
|
44
|
+
* the service once the child mission id is known, so callers omit it.
|
|
45
|
+
*/
|
|
46
|
+
keyResults: Array<Omit<CreateKeyResultInput, 'missionId'>>;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Input to {@link OKRCascadeService.proposeDecomposition}: the set of child
|
|
50
|
+
* OKRs to draft one tier below the parent mission.
|
|
51
|
+
*/
|
|
52
|
+
export interface DecomposeOKRInput {
|
|
53
|
+
/** One entry per proposed child mission. */
|
|
54
|
+
children: DecomposeOKRChild[];
|
|
55
|
+
}
|
|
56
|
+
/** Result of a successful {@link OKRCascadeService.proposeDecomposition} call. */
|
|
57
|
+
export interface ProposeResult {
|
|
58
|
+
/** The parent mission that was decomposed. */
|
|
59
|
+
parentId: string;
|
|
60
|
+
/** Cascade level of every created child (parent level + 1). */
|
|
61
|
+
childLevel: MissionLevel;
|
|
62
|
+
/** IDs of the created (pending-approval) child missions. */
|
|
63
|
+
childMissionIds: string[];
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Singleton service implementing the OKR decomposition / approval workflow.
|
|
67
|
+
*/
|
|
68
|
+
export declare class OKRCascadeService {
|
|
69
|
+
private static instance;
|
|
70
|
+
private readonly logger;
|
|
71
|
+
private constructor();
|
|
72
|
+
/**
|
|
73
|
+
* Get the singleton instance.
|
|
74
|
+
*
|
|
75
|
+
* @returns The shared {@link OKRCascadeService}
|
|
76
|
+
*/
|
|
77
|
+
static getInstance(): OKRCascadeService;
|
|
78
|
+
/**
|
|
79
|
+
* Reset the singleton (for testing).
|
|
80
|
+
*/
|
|
81
|
+
static resetInstance(): void;
|
|
82
|
+
/**
|
|
83
|
+
* Draft a child OKR decomposition for a parent mission as a PROPOSAL.
|
|
84
|
+
*
|
|
85
|
+
* The parent must exist and be cascade-active (approval absent or
|
|
86
|
+
* `approval.state === 'approved'`). The child level is computed as exactly one
|
|
87
|
+
* tier below the parent; decomposing a `project`-level parent is rejected
|
|
88
|
+
* (there is no tier below project). Each child mission is created with
|
|
89
|
+
* `approval.state = 'pending_approval'` and is NOT active until the owner
|
|
90
|
+
* approves. Each child's Key Results are created via {@link KRTrackingService}
|
|
91
|
+
* (no duplicate KR persistence here).
|
|
92
|
+
*
|
|
93
|
+
* The decomposition is "fail before writing": EVERY child is fully validated
|
|
94
|
+
* (project-id presence + cascade-link adjacency/cycle) BEFORE any mission or
|
|
95
|
+
* KR is persisted, so a later invalid child never leaves an earlier child
|
|
96
|
+
* half-written to disk.
|
|
97
|
+
*
|
|
98
|
+
* @param parentId - ID of the parent mission to decompose
|
|
99
|
+
* @param input - The proposed child OKRs (objectives + KRs)
|
|
100
|
+
* @param proposedBy - Agent session that drafted the proposal
|
|
101
|
+
* @returns The parent id, resolved child level, and created child IDs
|
|
102
|
+
* @throws If the parent is missing, not approved, already at `project` level,
|
|
103
|
+
* the input has no children, or a child fails cascade-link validation
|
|
104
|
+
*
|
|
105
|
+
* @example
|
|
106
|
+
* ```ts
|
|
107
|
+
* const result = await OKRCascadeService.getInstance().proposeDecomposition(
|
|
108
|
+
* 'co-1',
|
|
109
|
+
* { children: [{ objective: 'Ship v2', currentStrategy: '...', successCriteria: [], keyResults: [] }] },
|
|
110
|
+
* 'team-leader-session',
|
|
111
|
+
* );
|
|
112
|
+
* ```
|
|
113
|
+
*/
|
|
114
|
+
proposeDecomposition(parentId: string, input: DecomposeOKRInput, proposedBy: string): Promise<ProposeResult>;
|
|
115
|
+
/**
|
|
116
|
+
* Approve a pending decomposition proposal, making the child mission
|
|
117
|
+
* cascade-active. Guarded by {@link isValidProposalTransition} so only a
|
|
118
|
+
* `pending_approval` mission may transition to `approved`.
|
|
119
|
+
*
|
|
120
|
+
* @param missionId - ID of the proposed (pending_approval) mission
|
|
121
|
+
* @param decidedBy - Human owner who approved (e.g. "steve")
|
|
122
|
+
* @returns The updated mission
|
|
123
|
+
* @throws If the mission is missing, has no approval state, or the
|
|
124
|
+
* `pending_approval → approved` transition is illegal
|
|
125
|
+
*/
|
|
126
|
+
approveDecomposition(missionId: string, decidedBy: string): Promise<Mission>;
|
|
127
|
+
/**
|
|
128
|
+
* Reject a pending decomposition proposal with a required reason. The
|
|
129
|
+
* rejected mission is excluded from roll-up and autonomous execution.
|
|
130
|
+
*
|
|
131
|
+
* @param missionId - ID of the proposed (pending_approval) mission
|
|
132
|
+
* @param decidedBy - Human owner who rejected (e.g. "steve")
|
|
133
|
+
* @param reason - Non-empty explanation surfaced back to the proposing agent
|
|
134
|
+
* @returns The updated mission
|
|
135
|
+
* @throws If the reason is empty, the mission is missing, has no approval
|
|
136
|
+
* state, or the `pending_approval → rejected` transition is illegal
|
|
137
|
+
*/
|
|
138
|
+
rejectDecomposition(missionId: string, decidedBy: string, reason: string): Promise<Mission>;
|
|
139
|
+
/**
|
|
140
|
+
* List missions awaiting an owner decision (`approval.state ===
|
|
141
|
+
* 'pending_approval'`). Optionally scope to the direct children of one parent.
|
|
142
|
+
*
|
|
143
|
+
* @param parentId - When provided, only pending children of this parent
|
|
144
|
+
* @returns Pending-approval missions
|
|
145
|
+
*/
|
|
146
|
+
listPendingApprovals(parentId?: string): Promise<Mission[]>;
|
|
147
|
+
/**
|
|
148
|
+
* Whether a mission counts as cascade-active: approval absent (legacy) or
|
|
149
|
+
* explicitly approved.
|
|
150
|
+
*
|
|
151
|
+
* @param mission - Mission to test
|
|
152
|
+
* @returns `true` if the mission participates in the cascade
|
|
153
|
+
*/
|
|
154
|
+
private isCascadeActive;
|
|
155
|
+
/**
|
|
156
|
+
* Resolve a mission's effective level through the SINGLE canonical resolver
|
|
157
|
+
* shared with the routes' read-migration ({@link resolveMissionLevel}), which
|
|
158
|
+
* prefers an explicit `level` and otherwise falls back to `deriveLevel` over
|
|
159
|
+
* the parent chain. A parentless legacy mission therefore resolves to
|
|
160
|
+
* `company` consistently across every read path.
|
|
161
|
+
*
|
|
162
|
+
* @param mission - Mission whose level to resolve
|
|
163
|
+
* @param byId - All missions indexed by ID for the parent-chain walk
|
|
164
|
+
* @returns The mission's resolved level
|
|
165
|
+
*/
|
|
166
|
+
private resolveLevel;
|
|
167
|
+
/**
|
|
168
|
+
* Compute the cascade level exactly one tier below the given level.
|
|
169
|
+
*
|
|
170
|
+
* @param level - Parent level
|
|
171
|
+
* @returns The child level, or `null` if `level` is already the bottom tier
|
|
172
|
+
*/
|
|
173
|
+
private nextLevel;
|
|
174
|
+
/** Absolute path to the missions directory under the current cwd. */
|
|
175
|
+
private getMissionsDir;
|
|
176
|
+
/** Absolute path to a single mission's JSON file. */
|
|
177
|
+
private getMissionPath;
|
|
178
|
+
/**
|
|
179
|
+
* Validate + normalize a parsed mission document read from disk.
|
|
180
|
+
*
|
|
181
|
+
* - Returns `null` for anything that is not structurally a {@link Mission}
|
|
182
|
+
* (corrupt / hand-edited / wrong shape), so callers never trust junk.
|
|
183
|
+
* - When `approval` is present but `approval.state` is NOT a recognized
|
|
184
|
+
* {@link isValidProposalState}, the state is normalized to
|
|
185
|
+
* {@link CORRUPT_APPROVAL_FALLBACK} (`rejected`). This deliberately treats a
|
|
186
|
+
* corrupt governance state as INACTIVE — neither cascade-active nor a
|
|
187
|
+
* recognized pending state — rather than silently trusting an unknown
|
|
188
|
+
* string (which would otherwise be neither active nor pending and could
|
|
189
|
+
* crash transition guards).
|
|
190
|
+
*
|
|
191
|
+
* @param value - Raw JSON-parsed value
|
|
192
|
+
* @returns A validated, normalized Mission, or `null` if not a valid Mission
|
|
193
|
+
*/
|
|
194
|
+
private sanitizeMission;
|
|
195
|
+
/**
|
|
196
|
+
* Load a single mission from disk, validated + normalized via
|
|
197
|
+
* {@link sanitizeMission}.
|
|
198
|
+
*
|
|
199
|
+
* @param missionId - Mission ID
|
|
200
|
+
* @returns The mission, or `null` if missing/unreadable/not a valid Mission
|
|
201
|
+
*/
|
|
202
|
+
private loadMission;
|
|
203
|
+
/**
|
|
204
|
+
* Load all missions from disk, skipping unreadable AND structurally-invalid
|
|
205
|
+
* files (each validated + normalized via {@link sanitizeMission}).
|
|
206
|
+
*
|
|
207
|
+
* @returns Array of valid missions
|
|
208
|
+
*/
|
|
209
|
+
private loadAllMissions;
|
|
210
|
+
/**
|
|
211
|
+
* Persist a mission to disk (creating the missions directory if needed).
|
|
212
|
+
*
|
|
213
|
+
* @param mission - Mission to write
|
|
214
|
+
*/
|
|
215
|
+
private persistMission;
|
|
216
|
+
}
|
|
217
|
+
//# sourceMappingURL=okr-cascade.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"okr-cascade.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/v3/okr-cascade.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAMH,OAAO,EASL,KAAK,OAAO,EACZ,KAAK,YAAY,EAClB,MAAM,iCAAiC,CAAC;AACzC,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,oCAAoC,CAAC;AAkC/E;;;;GAIG;AACH,MAAM,WAAW,iBAAiB;IAChC,6CAA6C;IAC7C,SAAS,EAAE,MAAM,CAAC;IAClB,gDAAgD;IAChD,eAAe,EAAE,MAAM,CAAC;IACxB,kEAAkE;IAClE,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,2DAA2D;IAC3D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,UAAU,EAAE,KAAK,CAAC,IAAI,CAAC,oBAAoB,EAAE,WAAW,CAAC,CAAC,CAAC;CAC5D;AAED;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC,4CAA4C;IAC5C,QAAQ,EAAE,iBAAiB,EAAE,CAAC;CAC/B;AAED,kFAAkF;AAClF,MAAM,WAAW,aAAa;IAC5B,8CAA8C;IAC9C,QAAQ,EAAE,MAAM,CAAC;IACjB,+DAA+D;IAC/D,UAAU,EAAE,YAAY,CAAC;IACzB,4DAA4D;IAC5D,eAAe,EAAE,MAAM,EAAE,CAAC;CAC3B;AAMD;;GAEG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAkC;IACzD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkB;IAEzC,OAAO;IAIP;;;;OAIG;IACH,MAAM,CAAC,WAAW,IAAI,iBAAiB;IAOvC;;OAEG;IACH,MAAM,CAAC,aAAa,IAAI,IAAI;IAQ5B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA+BG;IACG,oBAAoB,CACxB,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,iBAAiB,EACxB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,aAAa,CAAC;IA6FzB;;;;;;;;;;OAUG;IACG,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IA6BlF;;;;;;;;;;OAUG;IACG,mBAAmB,CACvB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,OAAO,CAAC;IAiCnB;;;;;;OAMG;IACG,oBAAoB,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAajE;;;;;;OAMG;IACH,OAAO,CAAC,eAAe;IAIvB;;;;;;;;;;OAUG;IACH,OAAO,CAAC,YAAY;IAOpB;;;;;OAKG;IACH,OAAO,CAAC,SAAS;IAKjB,qEAAqE;IACrE,OAAO,CAAC,cAAc;IAItB,qDAAqD;IACrD,OAAO,CAAC,cAAc;IAItB;;;;;;;;;;;;;;;OAeG;IACH,OAAO,CAAC,eAAe;IAgBvB;;;;;;OAMG;YACW,WAAW;IASzB;;;;;OAKG;YACW,eAAe;IAqB7B;;;;OAIG;YACW,cAAc;CAK7B"}
|