@cat-factory/orchestration 0.225.0 → 0.228.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.
Files changed (74) hide show
  1. package/dist/container/dependencies.d.ts +23 -1
  2. package/dist/container/dependencies.d.ts.map +1 -1
  3. package/dist/container/foundation.d.ts.map +1 -1
  4. package/dist/container/foundation.js +17 -6
  5. package/dist/container/foundation.js.map +1 -1
  6. package/dist/container/modules.js +2 -2
  7. package/dist/container/modules.js.map +1 -1
  8. package/dist/container/platform-modules.d.ts.map +1 -1
  9. package/dist/container/platform-modules.js +1 -0
  10. package/dist/container/platform-modules.js.map +1 -1
  11. package/dist/container.d.ts +21 -8
  12. package/dist/container.d.ts.map +1 -1
  13. package/dist/container.js +4 -1
  14. package/dist/container.js.map +1 -1
  15. package/dist/index.d.ts +1 -1
  16. package/dist/index.d.ts.map +1 -1
  17. package/dist/index.js +1 -1
  18. package/dist/index.js.map +1 -1
  19. package/dist/modules/board/BoardService.d.ts +22 -9
  20. package/dist/modules/board/BoardService.d.ts.map +1 -1
  21. package/dist/modules/board/BoardService.js +42 -106
  22. package/dist/modules/board/BoardService.js.map +1 -1
  23. package/dist/modules/board/publicBoardReads.d.ts +3 -3
  24. package/dist/modules/board/publicBoardReads.d.ts.map +1 -1
  25. package/dist/modules/board/publicBoardReads.js.map +1 -1
  26. package/dist/modules/board/reparentWrite.d.ts +43 -0
  27. package/dist/modules/board/reparentWrite.d.ts.map +1 -0
  28. package/dist/modules/board/reparentWrite.js +126 -0
  29. package/dist/modules/board/reparentWrite.js.map +1 -0
  30. package/dist/modules/board/riskPolicySelectionGuard.d.ts +45 -4
  31. package/dist/modules/board/riskPolicySelectionGuard.d.ts.map +1 -1
  32. package/dist/modules/board/riskPolicySelectionGuard.js +84 -20
  33. package/dist/modules/board/riskPolicySelectionGuard.js.map +1 -1
  34. package/dist/modules/boardScan/BoardScanService.js +6 -6
  35. package/dist/modules/boardScan/BoardScanService.js.map +1 -1
  36. package/dist/modules/execution/ExecutionServiceDependencies.d.ts +2 -1
  37. package/dist/modules/execution/ExecutionServiceDependencies.d.ts.map +1 -1
  38. package/dist/modules/execution/MergeResolver.d.ts +3 -3
  39. package/dist/modules/execution/MergeResolver.d.ts.map +1 -1
  40. package/dist/modules/execution/MergeResolver.js +76 -34
  41. package/dist/modules/execution/MergeResolver.js.map +1 -1
  42. package/dist/modules/execution/PostMergeBoardController.d.ts.map +1 -1
  43. package/dist/modules/execution/PostMergeBoardController.js +6 -1
  44. package/dist/modules/execution/PostMergeBoardController.js.map +1 -1
  45. package/dist/modules/execution/RunMergePolicy.d.ts +3 -2
  46. package/dist/modules/execution/RunMergePolicy.d.ts.map +1 -1
  47. package/dist/modules/execution/RunMergePolicy.js +1 -1
  48. package/dist/modules/execution/RunMergePolicy.js.map +1 -1
  49. package/dist/modules/execution/StepGraph.d.ts.map +1 -1
  50. package/dist/modules/execution/StepGraph.js +20 -0
  51. package/dist/modules/execution/StepGraph.js.map +1 -1
  52. package/dist/modules/execution/policy-types.d.ts +5 -4
  53. package/dist/modules/execution/policy-types.d.ts.map +1 -1
  54. package/dist/modules/merge/RiskPolicyService.d.ts +22 -11
  55. package/dist/modules/merge/RiskPolicyService.d.ts.map +1 -1
  56. package/dist/modules/merge/RiskPolicyService.js +27 -48
  57. package/dist/modules/merge/RiskPolicyService.js.map +1 -1
  58. package/dist/modules/merge/riskPolicyResolution.d.ts +36 -4
  59. package/dist/modules/merge/riskPolicyResolution.d.ts.map +1 -1
  60. package/dist/modules/merge/riskPolicyResolution.js +36 -8
  61. package/dist/modules/merge/riskPolicyResolution.js.map +1 -1
  62. package/dist/modules/observability/retentionPass.d.ts +82 -1
  63. package/dist/modules/observability/retentionPass.d.ts.map +1 -1
  64. package/dist/modules/observability/retentionPass.js +104 -0
  65. package/dist/modules/observability/retentionPass.js.map +1 -1
  66. package/dist/modules/reports/ReportsService.d.ts +29 -6
  67. package/dist/modules/reports/ReportsService.d.ts.map +1 -1
  68. package/dist/modules/reports/ReportsService.js +64 -18
  69. package/dist/modules/reports/ReportsService.js.map +1 -1
  70. package/dist/modules/reports/reports.logic.d.ts +16 -2
  71. package/dist/modules/reports/reports.logic.d.ts.map +1 -1
  72. package/dist/modules/reports/reports.logic.js +26 -5
  73. package/dist/modules/reports/reports.logic.js.map +1 -1
  74. package/package.json +11 -11
@@ -0,0 +1,43 @@
1
+ import type { BlockEditAuthority, ReparentInput } from '@cat-factory/contracts';
2
+ import type { Block, BlockRepository, BoardChange, ExecutionRepository, ServiceRepository, WorkspaceMountRepository } from '@cat-factory/kernel';
3
+ import type { BoardChangeReason } from './board.logic.js';
4
+ import type { RiskPolicySelectionGuard } from './riskPolicySelectionGuard.js';
5
+ /**
6
+ * The board's REPARENT write (moving a block into a new container), extracted from `BoardService`
7
+ * following the established controller-extraction pattern: one small deps object of bound
8
+ * callbacks, and the service keeps a thin delegate.
9
+ *
10
+ * It is its own collaborator rather than a third layout write, because it is not a layout write at
11
+ * all. Where those split ONE block's geometry between a mount override and the row, this moves a
12
+ * whole SUBTREE between parents, and in the cross-home case between physical workspaces. It carries
13
+ * the rows and their executions, re-stamps the service scope key, prunes the edges that then
14
+ * dangle, and decides whether the destination's merge policy is one the mover may put the task
15
+ * under.
16
+ */
17
+ export interface BoardReparentDeps {
18
+ blockRepository: BlockRepository;
19
+ executionRepository: ExecutionRepository;
20
+ /** Absent ⇒ sharing isn't wired, so blocks are plain workspace-local and never re-stamped. */
21
+ serviceRepository?: ServiceRepository;
22
+ workspaceMountRepository?: WorkspaceMountRepository;
23
+ /** Refuses a move that would drop a role-scoped merge restriction (ADR 0037). */
24
+ riskPolicySelection: RiskPolicySelectionGuard;
25
+ /** 404s an unknown board before anything is written. */
26
+ requireWorkspace: (workspaceId: string) => Promise<unknown>;
27
+ /** The block plus the workspace that HOMES it (which may not be the acting one). */
28
+ resolveBlock: (workspaceId: string, id: string) => Promise<{
29
+ homeWorkspaceId: string;
30
+ block: Block;
31
+ }>;
32
+ /** The service id a block placed under `container` belongs to, or undefined. */
33
+ serviceForContainer: (blocks: Block[], container: Block) => Promise<string | undefined>;
34
+ /** The doc-repo containment rule, shared with `addTask`. */
35
+ assertTaskTypeAllowed: (frame: Block | undefined, taskType: Block['taskType']) => void;
36
+ emitBoardChanged: (originWorkspaceId: string, change: BoardChange & {
37
+ reason: BoardChangeReason;
38
+ }) => Promise<void>;
39
+ }
40
+ export declare function createBoardReparentWrite(deps: BoardReparentDeps): {
41
+ reparent: (workspaceId: string, id: string, input: ReparentInput, editor: BlockEditAuthority, originConnectionId?: string | null) => Promise<Block>;
42
+ };
43
+ //# sourceMappingURL=reparentWrite.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reparentWrite.d.ts","sourceRoot":"","sources":["../../../src/modules/board/reparentWrite.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAA;AAE/E,OAAO,KAAK,EACV,KAAK,EACL,eAAe,EAEf,WAAW,EACX,mBAAmB,EACnB,iBAAiB,EACjB,wBAAwB,EACzB,MAAM,qBAAqB,CAAA;AAE5B,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AAGzD,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAA;AAE7E;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,iBAAiB;IAChC,eAAe,EAAE,eAAe,CAAA;IAChC,mBAAmB,EAAE,mBAAmB,CAAA;IACxC,8FAA8F;IAC9F,iBAAiB,CAAC,EAAE,iBAAiB,CAAA;IACrC,wBAAwB,CAAC,EAAE,wBAAwB,CAAA;IACnD,iFAAiF;IACjF,mBAAmB,EAAE,wBAAwB,CAAA;IAC7C,wDAAwD;IACxD,gBAAgB,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;IAC3D,oFAAoF;IACpF,YAAY,EAAE,CACZ,WAAW,EAAE,MAAM,EACnB,EAAE,EAAE,MAAM,KACP,OAAO,CAAC;QAAE,eAAe,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,KAAK,CAAA;KAAE,CAAC,CAAA;IACvD,gFAAgF;IAChF,mBAAmB,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,KAAK,KAAK,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAA;IACvF,4DAA4D;IAC5D,qBAAqB,EAAE,CAAC,KAAK,EAAE,KAAK,GAAG,SAAS,EAAE,QAAQ,EAAE,KAAK,CAAC,UAAU,CAAC,KAAK,IAAI,CAAA;IACtF,gBAAgB,EAAE,CAChB,iBAAiB,EAAE,MAAM,EACzB,MAAM,EAAE,WAAW,GAAG;QAAE,MAAM,EAAE,iBAAiB,CAAA;KAAE,KAChD,OAAO,CAAC,IAAI,CAAC,CAAA;CACnB;AAED,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,iBAAiB;4BAU/C,MAAM,MACf,MAAM,SACH,aAAa,UACZ,kBAAkB,uBACL,MAAM,GAAG,IAAI,KACjC,OAAO,CAAC,KAAK,CAAC;EA8HlB"}
@@ -0,0 +1,126 @@
1
+ import { BLOCK_LEVEL_RUNS_PIPELINES } from '@cat-factory/contracts';
2
+ import { assertFound, ValidationError } from '@cat-factory/kernel';
3
+ import { canReparent, descendantIds, serviceOf } from './board.logic.js';
4
+ import { pruneDanglingEdges } from './removal-cascade.js';
5
+ export function createBoardReparentWrite(deps) {
6
+ /**
7
+ * Move a block into a new container at a new local position.
8
+ *
9
+ * `editor` is who is moving it, for the merge-preset guard: see the cross-home branch below. It
10
+ * is an AUTHORITY rather than a resolved actor because a cross-home move decides in two
11
+ * workspaces and the mover holds a role in each on their own terms. Pass
12
+ * `UNATTRIBUTED_BLOCK_EDIT_AUTHORITY` for a caller with no workspace tier (an engine path).
13
+ */
14
+ async function reparent(workspaceId, id, input, editor, originConnectionId) {
15
+ await deps.requireWorkspace(workspaceId);
16
+ const { homeWorkspaceId: blockHome, block } = await deps.resolveBlock(workspaceId, id);
17
+ if (id === input.parentId)
18
+ throw new ValidationError('A block cannot contain itself');
19
+ const { homeWorkspaceId: parentHome, block: parent } = await deps.resolveBlock(workspaceId, input.parentId);
20
+ if (!canReparent(block.level, parent)) {
21
+ throw new ValidationError(`A ${block.level} cannot be placed inside a ${parent.level}`);
22
+ }
23
+ // The destination's enclosing frame drives two things: the doc-repo task gate (same as
24
+ // addTask — drag-drop must not smuggle a feature/bug/recurring task into a doc frame) and
25
+ // the moved task's inherited `type`, which is behavioural for the frame repo roles. Load
26
+ // the parent's workspace blocks once here; the branches below reuse this list.
27
+ const destBlocks = await deps.blockRepository.listByWorkspace(parentHome);
28
+ const destFrame = serviceOf(destBlocks, parent);
29
+ if (block.level === 'task') {
30
+ deps.assertTaskTypeAllowed(destFrame, block.taskType);
31
+ }
32
+ // A task inherits its enclosing frame's type, so a move re-stamps it (no-op when unchanged
33
+ // or when the destination isn't a resolvable frame). Non-task blocks keep their own type.
34
+ const movedType = block.level === 'task' && destFrame ? destFrame.type : block.type;
35
+ // Same physical home (the common case, incl. two of the workspace's own services): move in
36
+ // place and re-stamp `service_id`, the physical scope key that decides which boards render
37
+ // the subtree and where its events fan out. No-op re-stamp when sharing isn't wired or the
38
+ // destination frame isn't a registered service. No preset guard here: the home decides which
39
+ // library a `riskPolicyId` resolves against, so a move that keeps it re-decides nothing.
40
+ if (blockHome === parentHome) {
41
+ await deps.blockRepository.update(blockHome, id, {
42
+ parentId: input.parentId,
43
+ position: input.position,
44
+ ...(movedType !== block.type ? { type: movedType } : {}),
45
+ });
46
+ if (deps.serviceRepository) {
47
+ const destService = await deps.serviceForContainer(destBlocks, parent);
48
+ await deps.blockRepository.setService(blockHome, [...descendantIds(destBlocks, id)], destService ?? null);
49
+ }
50
+ // Origin = the block's HOME so the re-stamped subtree fans out to every mounting board. No
51
+ // payload: a reparent moves the whole SUBTREE between parents, and the moved block alone
52
+ // cannot state what its descendants' service stamps became.
53
+ await deps.emitBoardChanged(blockHome, {
54
+ reason: 'block-reparented',
55
+ blockId: id,
56
+ originConnectionId,
57
+ });
58
+ return assertFound(await deps.blockRepository.get(blockHome, id), 'Block', id);
59
+ }
60
+ // Cross-home: the block and its new parent belong to two services homed in different
61
+ // workspaces (both mounted on this board). Keep the invariant that a service's blocks live
62
+ // in its home workspace by MOVING the subtree's rows — and any executions on them — to the
63
+ // destination service's home, re-stamped with the destination service.
64
+ const srcBlocks = await deps.blockRepository.listByWorkspace(blockHome);
65
+ const ids = [...descendantIds(srcBlocks, id)];
66
+ const subtree = ids
67
+ .map((bid) => srcBlocks.find((b) => b.id === bid))
68
+ .filter((b) => b !== undefined);
69
+ // BEFORE any write, and the reason this write takes an editor at all. A block's merge preset
70
+ // resolves against the workspace that HOMES it, so carrying it to another home re-decides
71
+ // which policy governs its runs without touching `riskPolicyId` or the preset library: the
72
+ // swap the picker refuses, spelled as a drag. Every RUNNABLE block in the moved subtree is
73
+ // judged, not just the dragged one, because a module carries its contents with it. What
74
+ // counts as runnable is the declared `BLOCK_LEVEL_RUNS_PIPELINES`, not a `level === 'task'`
75
+ // test, which silently exempted the `initiative` blocks that start their own planning chains.
76
+ await deps.riskPolicySelection.assertMayMove({
77
+ fromWorkspaceId: blockHome,
78
+ toWorkspaceId: parentHome,
79
+ authority: editor,
80
+ riskPolicyIds: subtree
81
+ .filter((b) => BLOCK_LEVEL_RUNS_PIPELINES[b.level])
82
+ .map((b) => b.riskPolicyId),
83
+ });
84
+ // Capture the SOURCE service's mounting boards BEFORE the move (afterwards the subtree no
85
+ // longer resolves to the source service), so every board that showed the block at its old
86
+ // home can refresh it away. The destination side is reached by the post-move emit below.
87
+ const sourceFanout = new Set([blockHome]);
88
+ if (deps.workspaceMountRepository) {
89
+ for (const ws of await deps.workspaceMountRepository.listWorkspaceIdsMountingBlock(blockHome, id)) {
90
+ sourceFanout.add(ws);
91
+ }
92
+ }
93
+ const destService = (await deps.serviceForContainer(destBlocks, parent)) ?? null;
94
+ for (const b of subtree) {
95
+ const moved = b.id === id
96
+ ? { ...b, parentId: input.parentId, position: input.position, type: movedType }
97
+ : b;
98
+ await deps.blockRepository.insert(parentHome, moved, destService);
99
+ const exec = await deps.executionRepository.getByBlock(blockHome, b.id);
100
+ if (exec) {
101
+ await deps.executionRepository.deleteByBlock(blockHome, b.id);
102
+ await deps.executionRepository.upsert(parentHome, exec);
103
+ }
104
+ }
105
+ await deps.blockRepository.deleteMany(blockHome, ids);
106
+ // Drop dependency + epic edges in the source workspace that now dangle to the moved subtree.
107
+ await pruneDanglingEdges(deps.blockRepository, blockHome, srcBlocks, new Set(ids));
108
+ // Destination side: origin = the new HOME so the moved subtree fans out to the destination
109
+ // service's mounts (and that board). Source side: the block is gone from its old service, so
110
+ // the block→service join can't resolve it anymore — notify the captured source boards
111
+ // directly (origin-only) so they refresh the subtree away.
112
+ await deps.emitBoardChanged(parentHome, {
113
+ reason: 'block-reparented',
114
+ blockId: id,
115
+ originConnectionId,
116
+ });
117
+ for (const ws of sourceFanout) {
118
+ if (ws !== parentHome) {
119
+ await deps.emitBoardChanged(ws, { reason: 'block-reparented', originConnectionId });
120
+ }
121
+ }
122
+ return assertFound(await deps.blockRepository.get(parentHome, id), 'Block', id);
123
+ }
124
+ return { reparent };
125
+ }
126
+ //# sourceMappingURL=reparentWrite.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reparentWrite.js","sourceRoot":"","sources":["../../../src/modules/board/reparentWrite.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,0BAA0B,EAAE,MAAM,wBAAwB,CAAA;AAUnE,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AAElE,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AACxE,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AAwCzD,MAAM,UAAU,wBAAwB,CAAC,IAAuB;IAC9D;;;;;;;OAOG;IACH,KAAK,UAAU,QAAQ,CACrB,WAAmB,EACnB,EAAU,EACV,KAAoB,EACpB,MAA0B,EAC1B,kBAAkC;QAElC,MAAM,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAA;QACxC,MAAM,EAAE,eAAe,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,EAAE,CAAC,CAAA;QACtF,IAAI,EAAE,KAAK,KAAK,CAAC,QAAQ;YAAE,MAAM,IAAI,eAAe,CAAC,+BAA+B,CAAC,CAAA;QACrF,MAAM,EAAE,eAAe,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,YAAY,CAC5E,WAAW,EACX,KAAK,CAAC,QAAQ,CACf,CAAA;QACD,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,CAAC;YACtC,MAAM,IAAI,eAAe,CAAC,KAAK,KAAK,CAAC,KAAK,8BAA8B,MAAM,CAAC,KAAK,EAAE,CAAC,CAAA;QACzF,CAAC;QAED,uFAAuF;QACvF,0FAA0F;QAC1F,yFAAyF;QACzF,+EAA+E;QAC/E,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,eAAe,CAAC,UAAU,CAAC,CAAA;QACzE,MAAM,SAAS,GAAG,SAAS,CAAC,UAAU,EAAE,MAAM,CAAC,CAAA;QAC/C,IAAI,KAAK,CAAC,KAAK,KAAK,MAAM,EAAE,CAAC;YAC3B,IAAI,CAAC,qBAAqB,CAAC,SAAS,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAA;QACvD,CAAC;QACD,2FAA2F;QAC3F,0FAA0F;QAC1F,MAAM,SAAS,GAAc,KAAK,CAAC,KAAK,KAAK,MAAM,IAAI,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAA;QAE9F,2FAA2F;QAC3F,2FAA2F;QAC3F,2FAA2F;QAC3F,6FAA6F;QAC7F,yFAAyF;QACzF,IAAI,SAAS,KAAK,UAAU,EAAE,CAAC;YAC7B,MAAM,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,EAAE;gBAC/C,QAAQ,EAAE,KAAK,CAAC,QAAQ;gBACxB,QAAQ,EAAE,KAAK,CAAC,QAAQ;gBACxB,GAAG,CAAC,SAAS,KAAK,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACzD,CAAC,CAAA;YACF,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;gBAC3B,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,UAAU,EAAE,MAAM,CAAC,CAAA;gBACtE,MAAM,IAAI,CAAC,eAAe,CAAC,UAAU,CACnC,SAAS,EACT,CAAC,GAAG,aAAa,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,EAClC,WAAW,IAAI,IAAI,CACpB,CAAA;YACH,CAAC;YACD,2FAA2F;YAC3F,yFAAyF;YACzF,4DAA4D;YAC5D,MAAM,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE;gBACrC,MAAM,EAAE,kBAAkB;gBAC1B,OAAO,EAAE,EAAE;gBACX,kBAAkB;aACnB,CAAC,CAAA;YACF,OAAO,WAAW,CAAC,MAAM,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,CAAC,CAAA;QAChF,CAAC;QAED,qFAAqF;QACrF,2FAA2F;QAC3F,2FAA2F;QAC3F,uEAAuE;QACvE,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,eAAe,CAAC,SAAS,CAAC,CAAA;QACvE,MAAM,GAAG,GAAG,CAAC,GAAG,aAAa,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,CAAA;QAC7C,MAAM,OAAO,GAAG,GAAG;aAChB,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC;aACjD,MAAM,CAAC,CAAC,CAAC,EAAc,EAAE,CAAC,CAAC,KAAK,SAAS,CAAC,CAAA;QAC7C,6FAA6F;QAC7F,0FAA0F;QAC1F,2FAA2F;QAC3F,2FAA2F;QAC3F,wFAAwF;QACxF,4FAA4F;QAC5F,8FAA8F;QAC9F,MAAM,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC;YAC3C,eAAe,EAAE,SAAS;YAC1B,aAAa,EAAE,UAAU;YACzB,SAAS,EAAE,MAAM;YACjB,aAAa,EAAE,OAAO;iBACnB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,0BAA0B,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;iBAClD,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC;SAC9B,CAAC,CAAA;QAEF,0FAA0F;QAC1F,0FAA0F;QAC1F,yFAAyF;QACzF,MAAM,YAAY,GAAG,IAAI,GAAG,CAAS,CAAC,SAAS,CAAC,CAAC,CAAA;QACjD,IAAI,IAAI,CAAC,wBAAwB,EAAE,CAAC;YAClC,KAAK,MAAM,EAAE,IAAI,MAAM,IAAI,CAAC,wBAAwB,CAAC,6BAA6B,CAChF,SAAS,EACT,EAAE,CACH,EAAE,CAAC;gBACF,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;YACtB,CAAC;QACH,CAAC;QACD,MAAM,WAAW,GAAG,CAAC,MAAM,IAAI,CAAC,mBAAmB,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,IAAI,IAAI,CAAA;QAChF,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;YACxB,MAAM,KAAK,GACT,CAAC,CAAC,EAAE,KAAK,EAAE;gBACT,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE;gBAC/E,CAAC,CAAC,CAAC,CAAA;YACP,MAAM,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,UAAU,EAAE,KAAK,EAAE,WAAW,CAAC,CAAA;YACjE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,UAAU,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,CAAA;YACvE,IAAI,IAAI,EAAE,CAAC;gBACT,MAAM,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,CAAA;gBAC7D,MAAM,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,UAAU,EAAE,IAAI,CAAC,CAAA;YACzD,CAAC;QACH,CAAC;QACD,MAAM,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,SAAS,EAAE,GAAG,CAAC,CAAA;QACrD,6FAA6F;QAC7F,MAAM,kBAAkB,CAAC,IAAI,CAAC,eAAe,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,CAAA;QAClF,2FAA2F;QAC3F,6FAA6F;QAC7F,sFAAsF;QACtF,2DAA2D;QAC3D,MAAM,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE;YACtC,MAAM,EAAE,kBAAkB;YAC1B,OAAO,EAAE,EAAE;YACX,kBAAkB;SACnB,CAAC,CAAA;QACF,KAAK,MAAM,EAAE,IAAI,YAAY,EAAE,CAAC;YAC9B,IAAI,EAAE,KAAK,UAAU,EAAE,CAAC;gBACtB,MAAM,IAAI,CAAC,gBAAgB,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,CAAC,CAAA;YACrF,CAAC;QACH,CAAC;QACD,OAAO,WAAW,CAAC,MAAM,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,UAAU,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,CAAC,CAAA;IACjF,CAAC;IAED,OAAO,EAAE,QAAQ,EAAE,CAAA;AACrB,CAAC"}
@@ -1,4 +1,4 @@
1
- import type { BlockEditActor } from '@cat-factory/contracts';
1
+ import type { BlockEditAuthority } from '@cat-factory/contracts';
2
2
  import type { RiskPolicyRepository } from '@cat-factory/kernel';
3
3
  /**
4
4
  * Refuse a task's merge-preset SELECTION that would relax what the selector's own role is held to.
@@ -10,23 +10,64 @@ import type { RiskPolicyRepository } from '@cat-factory/kernel';
10
10
  * the guard cover CREATION too: a member authoring a task straight onto a permissive preset is
11
11
  * moving off the default that would otherwise have governed it.
12
12
  *
13
+ * A SELECTION is not the only way a task changes policy, which is why there are two methods.
14
+ * `riskPolicyId` resolves against the workspace that HOMES the task, so carrying the task to
15
+ * another home re-decides the policy while touching neither the id nor the library: the same swap,
16
+ * spelled as a drag. {@link RiskPolicySelectionGuard.assertMayMove} is that arm.
17
+ *
18
+ * **Every workspace named here is a HOME, never the acting board.** A board mounts services homed
19
+ * elsewhere, and a write on one lands at that home: the row is written there, its preset id
20
+ * resolves against THAT library, and a run on it is admitted through that board under the role the
21
+ * editor holds THERE (`blockRepository.get` is scoped by physical `workspace_id`, so a run cannot
22
+ * even resolve the block anywhere else). Which is why the editor arrives as a
23
+ * {@link BlockEditAuthority} rather than a pre-resolved actor: asking it per workspace is what
24
+ * keeps the policies and the role being compared answers to the same question.
25
+ *
13
26
  * Read live rather than through the `riskPolicy` cache slice: this runs on a rare board write, not
14
27
  * on the engine's per-gate path, and an authorization decision is the last place to want a
15
28
  * stale-by-a-TTL answer on a facade whose cross-isolate invalidation is a pass-through.
16
29
  */
17
30
  export interface RiskPolicySelectionGuard {
18
31
  /**
19
- * Throw a {@link ForbiddenError} when `actor` may not move a task from `currentId` to `nextId`.
32
+ * Throw a {@link ForbiddenError} when the editor may not move a task from `currentId` to
33
+ * `nextId` within `homeWorkspaceId`.
34
+ *
35
+ * `homeWorkspaceId` is the workspace the row LIVES in, which for a task in a mounted foreign
36
+ * service is not the board the request was addressed to. Both the library the two ids resolve
37
+ * against and the role the editor is judged under are read there, because that is where the
38
+ * write lands and where a run on it would be admitted.
20
39
  *
21
40
  * Both ids are the RAW stored/patched values: absent or empty means "the workspace default",
22
41
  * which is a real selection with a real policy behind it, not the absence of one.
23
42
  */
24
43
  assertMaySelect(input: {
25
- workspaceId: string;
26
- actor: BlockEditActor;
44
+ homeWorkspaceId: string;
45
+ authority: BlockEditAuthority;
27
46
  currentId: string | null | undefined;
28
47
  nextId: string | null | undefined;
29
48
  }): Promise<void>;
49
+ /**
50
+ * Throw a {@link ForbiddenError} when the editor may not carry blocks pinning `riskPolicyIds`
51
+ * out of `fromWorkspaceId` and into `toWorkspaceId`.
52
+ *
53
+ * The two workspaces are the subtree's HOME before and after the move (a cross-home reparent,
54
+ * which physically migrates the rows), never the acting board. Each pinned id is resolved on
55
+ * both sides, because an id is only meaningful in the library that holds it: a preset belonging
56
+ * to the source workspace is simply dangling at the destination and falls back to ITS default,
57
+ * exactly like a deleted one. That is what makes the move a policy decision even when the id
58
+ * never changes. The editor is resolved on both sides too, and for the same reason: a role is
59
+ * only meaningful in the workspace that granted it.
60
+ *
61
+ * The ids arrive as the raw stored values of every RUNNABLE block in the moved subtree,
62
+ * deduplicated here: a module of a hundred tasks sharing one preset (or pinning none, which is
63
+ * the default) costs one pair of resolutions, not a hundred.
64
+ */
65
+ assertMayMove(input: {
66
+ fromWorkspaceId: string;
67
+ toWorkspaceId: string;
68
+ authority: BlockEditAuthority;
69
+ riskPolicyIds: Iterable<string | null | undefined>;
70
+ }): Promise<void>;
30
71
  }
31
72
  export declare function createRiskPolicySelectionGuard(deps: {
32
73
  riskPolicyRepository?: RiskPolicyRepository;
@@ -1 +1 @@
1
- {"version":3,"file":"riskPolicySelectionGuard.d.ts","sourceRoot":"","sources":["../../../src/modules/board/riskPolicySelectionGuard.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAA8B,MAAM,wBAAwB,CAAA;AAExF,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAA;AAI/D;;;;;;;;;;;;;GAaG;AACH,MAAM,WAAW,wBAAwB;IACvC;;;;;OAKG;IACH,eAAe,CAAC,KAAK,EAAE;QACrB,WAAW,EAAE,MAAM,CAAA;QACnB,KAAK,EAAE,cAAc,CAAA;QACrB,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAA;QACpC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAA;KAClC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CAClB;AAeD,wBAAgB,8BAA8B,CAAC,IAAI,EAAE;IACnD,oBAAoB,CAAC,EAAE,oBAAoB,CAAA;CAC5C,GAAG,wBAAwB,CAyB3B"}
1
+ {"version":3,"file":"riskPolicySelectionGuard.d.ts","sourceRoot":"","sources":["../../../src/modules/board/riskPolicySelectionGuard.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,kBAAkB,EAEnB,MAAM,wBAAwB,CAAA;AAE/B,OAAO,KAAK,EAAc,oBAAoB,EAAE,MAAM,qBAAqB,CAAA;AAK3E;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,MAAM,WAAW,wBAAwB;IACvC;;;;;;;;;;;OAWG;IACH,eAAe,CAAC,KAAK,EAAE;QACrB,eAAe,EAAE,MAAM,CAAA;QACvB,SAAS,EAAE,kBAAkB,CAAA;QAC7B,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAA;QACpC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAA;KAClC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAEjB;;;;;;;;;;;;;;;OAeG;IACH,aAAa,CAAC,KAAK,EAAE;QACnB,eAAe,EAAE,MAAM,CAAA;QACvB,aAAa,EAAE,MAAM,CAAA;QACrB,SAAS,EAAE,kBAAkB,CAAA;QAC7B,aAAa,EAAE,QAAQ,CAAC,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC,CAAA;KACnD,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CAClB;AAoCD,wBAAgB,8BAA8B,CAAC,IAAI,EAAE;IACnD,oBAAoB,CAAC,EAAE,oBAAoB,CAAA;CAC5C,GAAG,wBAAwB,CAyE3B"}
@@ -1,6 +1,6 @@
1
1
  import { refuseRiskPolicySelection } from '@cat-factory/contracts';
2
2
  import { ForbiddenError } from '@cat-factory/kernel';
3
- import { resolveRiskPolicy } from '../merge/riskPolicyResolution.js';
3
+ import { preloadedRiskPolicyRead, resolveRiskPolicy } from '../merge/riskPolicyResolution.js';
4
4
  /** Why the swap was refused, in copy the person holding the picker can act on. */
5
5
  const REFUSAL_MESSAGE = {
6
6
  relaxes_role_sandbox: 'This task runs sandboxed for your role, and the merge policy you picked does not. Ask a ' +
@@ -10,33 +10,97 @@ const REFUSAL_MESSAGE = {
10
10
  relaxes_role_class_rule: 'The merge policy you picked auto-merges changes your role is held to review on this task. ' +
11
11
  'Ask a workspace admin to change the policy or to run this task themselves.',
12
12
  };
13
+ /**
14
+ * The same three refusals, said about the DESTINATION rather than about a picked preset. Separate
15
+ * copy rather than a shared string with the noun swapped, because the person who dragged a task
16
+ * between two services picked no policy at all: told "the merge policy you picked", they would go
17
+ * looking for a picker they never touched.
18
+ *
19
+ * Both maps are the UNTRANSLATED last resort behind `details.reason`, which is what the SPA maps
20
+ * to its own copy (CLAUDE.md: the backend does not localize prose).
21
+ */
22
+ const MOVE_REFUSAL_MESSAGE = {
23
+ relaxes_role_sandbox: 'This task runs sandboxed for your role where it is now, and the merge policy governing it ' +
24
+ 'where you are moving it does not. Ask a workspace admin to move it.',
25
+ relaxes_role_submission_allowlist: 'The merge policy where you are moving this task would let your role land kinds of change it ' +
26
+ 'is held back from here. Ask a workspace admin to move it.',
27
+ relaxes_role_class_rule: 'The merge policy where you are moving this task auto-merges changes your role is held to ' +
28
+ 'review on it here. Ask a workspace admin to move it.',
29
+ };
13
30
  export function createRiskPolicySelectionGuard(deps) {
31
+ /**
32
+ * A resolver for every policy in force in ONE workspace, off ONE query.
33
+ *
34
+ * The library is read whole rather than per pinned id because the alternative is the N+1 this
35
+ * repo bans (a point read per pin, with the workspace default re-read alongside every one of
36
+ * them), and a preset library is a handful of hand-maintained rows either way. The resolution
37
+ * itself stays `resolveRiskPolicy`, the one the engine uses, so a preloaded answer and a live
38
+ * one cannot diverge on a dangling id or an unseeded default.
39
+ */
40
+ const openLibrary = async (workspaceId) => {
41
+ const library = (await deps.riskPolicyRepository?.list(workspaceId)) ?? [];
42
+ const read = preloadedRiskPolicyRead(library);
43
+ return (riskPolicyId) => resolveRiskPolicy({ repository: deps.riskPolicyRepository, workspaceId, riskPolicyId, read });
44
+ };
45
+ /**
46
+ * Whether the rule can refuse anything at all for this pair of authorities, before either
47
+ * library is read. Not an optimisation the rule needs (`refuseRiskPolicySelection` decides the
48
+ * same cases), but it spares a round trip on the two readings that dominate: an editor with no
49
+ * tier on a side (an engine path, a headless key, dev-open) and one who owns the preset library.
50
+ */
51
+ const couldRefuse = (from, to) => Boolean(from.role) && Boolean(to.role) && !from.managesPolicy && !to.managesPolicy;
14
52
  return {
15
53
  async assertMaySelect(input) {
16
- const { workspaceId, actor, currentId, nextId } = input;
17
- // Short-circuit before either read on the two cases that cannot refuse anything: an editor
18
- // with no tier to be scoped by, and one who owns the preset library outright. Both are
19
- // decided by the contracts rule as well, so this only spares them the round trip.
20
- if (!actor.role || actor.managesPolicy)
21
- return;
54
+ const { homeWorkspaceId, authority, currentId, nextId } = input;
22
55
  if ((currentId ?? '') === (nextId ?? ''))
23
56
  return;
24
- const [from, to] = await Promise.all([
25
- resolveRiskPolicy({
26
- repository: deps.riskPolicyRepository,
27
- workspaceId,
28
- riskPolicyId: currentId,
29
- }),
30
- resolveRiskPolicy({
31
- repository: deps.riskPolicyRepository,
32
- workspaceId,
33
- riskPolicyId: nextId,
34
- }),
35
- ]);
36
- const refusal = refuseRiskPolicySelection({ from, to, actor });
57
+ const actor = await authority.in(homeWorkspaceId);
58
+ // Both sides are in force in the SAME workspace here, so one actor answers for both.
59
+ if (!couldRefuse(actor, actor))
60
+ return;
61
+ const policy = await openLibrary(homeWorkspaceId);
62
+ const [from, to] = await Promise.all([policy(currentId), policy(nextId)]);
63
+ const refusal = refuseRiskPolicySelection({
64
+ from: { policy: from, actor },
65
+ to: { policy: to, actor },
66
+ });
37
67
  if (refusal)
38
68
  throw new ForbiddenError(REFUSAL_MESSAGE[refusal], { reason: refusal });
39
69
  },
70
+ async assertMayMove(input) {
71
+ const { fromWorkspaceId, toWorkspaceId, authority, riskPolicyIds } = input;
72
+ // A move that does not change the home changes no resolution: same library, same ids, same
73
+ // answer, same role. Only the cross-home half of a reparent is a policy decision.
74
+ if (fromWorkspaceId === toWorkspaceId)
75
+ return;
76
+ const [fromActor, toActor] = await Promise.all([
77
+ authority.in(fromWorkspaceId),
78
+ authority.in(toWorkspaceId),
79
+ ]);
80
+ if (!couldRefuse(fromActor, toActor))
81
+ return;
82
+ const picks = new Set();
83
+ for (const id of riskPolicyIds)
84
+ picks.add(id ?? '');
85
+ if (picks.size === 0)
86
+ return;
87
+ // Two reads for the whole subtree: each home's library, once. Every pick below resolves in
88
+ // memory off those, so the pick count costs nothing.
89
+ const [fromPolicy, toPolicy] = await Promise.all([
90
+ openLibrary(fromWorkspaceId),
91
+ openLibrary(toWorkspaceId),
92
+ ]);
93
+ for (const pick of picks) {
94
+ const id = pick || null;
95
+ const [held, next] = await Promise.all([fromPolicy(id), toPolicy(id)]);
96
+ const refusal = refuseRiskPolicySelection({
97
+ from: { policy: held, actor: fromActor },
98
+ to: { policy: next, actor: toActor },
99
+ });
100
+ if (refusal)
101
+ throw new ForbiddenError(MOVE_REFUSAL_MESSAGE[refusal], { reason: refusal });
102
+ }
103
+ },
40
104
  };
41
105
  }
42
106
  //# sourceMappingURL=riskPolicySelectionGuard.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"riskPolicySelectionGuard.js","sourceRoot":"","sources":["../../../src/modules/board/riskPolicySelectionGuard.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAA;AAElE,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAA;AA+BpE,kFAAkF;AAClF,MAAM,eAAe,GAA+C;IAClE,oBAAoB,EAClB,0FAA0F;QAC1F,sEAAsE;IACxE,iCAAiC,EAC/B,0FAA0F;QAC1F,uFAAuF;IACzF,uBAAuB,EACrB,4FAA4F;QAC5F,4EAA4E;CAC/E,CAAA;AAED,MAAM,UAAU,8BAA8B,CAAC,IAE9C;IACC,OAAO;QACL,KAAK,CAAC,eAAe,CAAC,KAAK;YACzB,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,KAAK,CAAA;YACvD,2FAA2F;YAC3F,uFAAuF;YACvF,kFAAkF;YAClF,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,aAAa;gBAAE,OAAM;YAC9C,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC;gBAAE,OAAM;YAChD,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;gBACnC,iBAAiB,CAAC;oBAChB,UAAU,EAAE,IAAI,CAAC,oBAAoB;oBACrC,WAAW;oBACX,YAAY,EAAE,SAAS;iBACxB,CAAC;gBACF,iBAAiB,CAAC;oBAChB,UAAU,EAAE,IAAI,CAAC,oBAAoB;oBACrC,WAAW;oBACX,YAAY,EAAE,MAAM;iBACrB,CAAC;aACH,CAAC,CAAA;YACF,MAAM,OAAO,GAAG,yBAAyB,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAA;YAC9D,IAAI,OAAO;gBAAE,MAAM,IAAI,cAAc,CAAC,eAAe,CAAC,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAA;QACtF,CAAC;KACF,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"riskPolicySelectionGuard.js","sourceRoot":"","sources":["../../../src/modules/board/riskPolicySelectionGuard.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { UNATTRIBUTED_BLOCK_EDITOR } from '@cat-factory/contracts';
1
+ import { UNATTRIBUTED_BLOCK_EDIT_AUTHORITY } from '@cat-factory/contracts';
2
2
  import { countModules, describeNode } from './board-scan.logic.js';
3
3
  /** Case-insensitive, whitespace-tolerant name match used to pair board ↔ blueprint nodes. */
4
4
  function sameName(a, b) {
@@ -22,8 +22,8 @@ export class BoardScanService {
22
22
  position: { x: 80, y: 80 },
23
23
  });
24
24
  // Unattributed: the engine reconciling a blueprint is not a person acting under a workspace
25
- // tier, and none of these patches names a merge preset (see `BlockEditActor`).
26
- await this.deps.boardService.updateBlock(workspaceId, frame.id, { title: service.name, description: describeNode(service.summary, service.references) }, UNATTRIBUTED_BLOCK_EDITOR);
25
+ // tier, and none of these patches names a merge preset (see `BlockEditAuthority`).
26
+ await this.deps.boardService.updateBlock(workspaceId, frame.id, { title: service.name, description: describeNode(service.summary, service.references) }, UNATTRIBUTED_BLOCK_EDIT_AUTHORITY);
27
27
  const planModules = service.modules ?? [];
28
28
  // One batched insert for the whole map, not an addModule (→ full board list) per module.
29
29
  const created = await this.deps.boardService.addModules(workspaceId, frame.id, planModules.map((m) => ({ name: m.name })));
@@ -33,7 +33,7 @@ export class BoardScanService {
33
33
  continue;
34
34
  const moduleDescription = describeNode(planModule.summary, planModule.references);
35
35
  if (moduleDescription) {
36
- await this.deps.boardService.updateBlock(workspaceId, moduleBlock.id, { description: moduleDescription }, UNATTRIBUTED_BLOCK_EDITOR);
36
+ await this.deps.boardService.updateBlock(workspaceId, moduleBlock.id, { description: moduleDescription }, UNATTRIBUTED_BLOCK_EDIT_AUTHORITY);
37
37
  }
38
38
  }
39
39
  return { frameId: frame.id, modules: planModules.length };
@@ -58,7 +58,7 @@ export class BoardScanService {
58
58
  // which a human may have renamed.
59
59
  const frameDescription = describeNode(service.summary, service.references);
60
60
  if (frameDescription && frameDescription !== frame.description) {
61
- await this.deps.boardService.updateBlock(workspaceId, frame.id, { description: frameDescription }, UNATTRIBUTED_BLOCK_EDITOR);
61
+ await this.deps.boardService.updateBlock(workspaceId, frame.id, { description: frameDescription }, UNATTRIBUTED_BLOCK_EDIT_AUTHORITY);
62
62
  }
63
63
  const moduleBlocks = blocks.filter((b) => b.parentId === frame.id && b.level === 'module');
64
64
  const planModules = service.modules ?? [];
@@ -85,7 +85,7 @@ export class BoardScanService {
85
85
  modules += 1;
86
86
  const moduleDescription = describeNode(planModule.summary, planModule.references);
87
87
  if (moduleDescription && moduleDescription !== moduleBlock.description) {
88
- await this.deps.boardService.updateBlock(workspaceId, moduleBlock.id, { description: moduleDescription }, UNATTRIBUTED_BLOCK_EDITOR);
88
+ await this.deps.boardService.updateBlock(workspaceId, moduleBlock.id, { description: moduleDescription }, UNATTRIBUTED_BLOCK_EDIT_AUTHORITY);
89
89
  }
90
90
  }
91
91
  return { frameId: frame.id, modules };
@@ -1 +1 @@
1
- {"version":3,"file":"BoardScanService.js","sourceRoot":"","sources":["../../../src/modules/boardScan/BoardScanService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAA;AAIlE,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AAqBlE,6FAA6F;AAC7F,SAAS,QAAQ,CAAC,CAAS,EAAE,CAAS;IACpC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAA;AAC1D,CAAC;AAED,MAAM,OAAO,gBAAgB;IACE,IAAI;IAAjC,YAA6B,IAAkC;oBAAlC,IAAI;IAAiC,CAAC;IAEnE;;;;;;OAMG;IACK,KAAK,CAAC,cAAc,CAC1B,WAAmB,EACnB,OAAyB;QAEzB,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,WAAW,EAAE;YAC/D,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,QAAQ,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE;SAC3B,CAAC,CAAA;QACF,4FAA4F;QAC5F,+EAA+E;QAC/E,MAAM,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,WAAW,CACtC,WAAW,EACX,KAAK,CAAC,EAAE,EACR,EAAE,KAAK,EAAE,OAAO,CAAC,IAAI,EAAE,WAAW,EAAE,YAAY,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,UAAU,CAAC,EAAE,EACvF,yBAAyB,CAC1B,CAAA;QAED,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,IAAI,EAAE,CAAA;QACzC,yFAAyF;QACzF,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,UAAU,CACrD,WAAW,EACX,KAAK,CAAC,EAAE,EACR,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAC3C,CAAA;QACD,KAAK,MAAM,CAAC,CAAC,EAAE,UAAU,CAAC,IAAI,WAAW,CAAC,OAAO,EAAE,EAAE,CAAC;YACpD,MAAM,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;YAC9B,IAAI,CAAC,WAAW;gBAAE,SAAQ;YAC1B,MAAM,iBAAiB,GAAG,YAAY,CAAC,UAAU,CAAC,OAAO,EAAE,UAAU,CAAC,UAAU,CAAC,CAAA;YACjF,IAAI,iBAAiB,EAAE,CAAC;gBACtB,MAAM,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,WAAW,CACtC,WAAW,EACX,WAAW,CAAC,EAAE,EACd,EAAE,WAAW,EAAE,iBAAiB,EAAE,EAClC,yBAAyB,CAC1B,CAAA;YACH,CAAC;QACH,CAAC;QACD,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,EAAE,OAAO,EAAE,WAAW,CAAC,MAAM,EAAE,CAAA;IAC3D,CAAC;IAED;;;;;;;;;;OAUG;IACH,KAAK,CAAC,kBAAkB,CACtB,WAAmB,EACnB,OAAsB,EACtB,OAAyB;QAEzB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,eAAe,CAAC,WAAW,CAAC,CAAA;QAC3E,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,OAAO,IAAI,CAAC,CAAC,KAAK,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;QAC/F,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,OAAO,CAAC,CAAA;QAE5D,gFAAgF;QAChF,kCAAkC;QAClC,MAAM,gBAAgB,GAAG,YAAY,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,UAAU,CAAC,CAAA;QAC1E,IAAI,gBAAgB,IAAI,gBAAgB,KAAK,KAAK,CAAC,WAAW,EAAE,CAAC;YAC/D,MAAM,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,WAAW,CACtC,WAAW,EACX,KAAK,CAAC,EAAE,EACR,EAAE,WAAW,EAAE,gBAAgB,EAAE,EACjC,yBAAyB,CAC1B,CAAA;QACH,CAAC;QAED,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,KAAK,CAAC,EAAE,IAAI,CAAC,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAA;QAC1F,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,IAAI,EAAE,CAAA;QACzC,sFAAsF;QACtF,sFAAsF;QACtF,qFAAqF;QACrF,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC,CAAA;QAC3E,MAAM,OAAO,GAAa,EAAE,CAAA;QAC5B,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;YACrC,MAAM,GAAG,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAA;YAChD,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBACnB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;gBACb,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA;YAC/B,CAAC;QACH,CAAC;QACD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvB,YAAY,CAAC,IAAI,CACf,GAAG,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,UAAU,CACzC,WAAW,EACX,KAAK,CAAC,EAAE,EACR,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAClC,CAAC,CACH,CAAA;QACH,CAAC;QAED,IAAI,OAAO,GAAG,CAAC,CAAA;QACf,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;YACrC,MAAM,WAAW,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC,CAAA;YAChF,IAAI,CAAC,WAAW;gBAAE,SAAQ;YAC1B,OAAO,IAAI,CAAC,CAAA;YACZ,MAAM,iBAAiB,GAAG,YAAY,CAAC,UAAU,CAAC,OAAO,EAAE,UAAU,CAAC,UAAU,CAAC,CAAA;YACjF,IAAI,iBAAiB,IAAI,iBAAiB,KAAK,WAAW,CAAC,WAAW,EAAE,CAAC;gBACvE,MAAM,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,WAAW,CACtC,WAAW,EACX,WAAW,CAAC,EAAE,EACd,EAAE,WAAW,EAAE,iBAAiB,EAAE,EAClC,yBAAyB,CAC1B,CAAA;YACH,CAAC;QACH,CAAC;QACD,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,EAAE,OAAO,EAAE,CAAA;IACvC,CAAC;IAED,2EAA2E;IAC3E,MAAM,CAAC,WAAW,CAAC,OAAyB;QAC1C,OAAO,YAAY,CAAC,OAAO,CAAC,CAAA;IAC9B,CAAC;CACF"}
1
+ {"version":3,"file":"BoardScanService.js","sourceRoot":"","sources":["../../../src/modules/boardScan/BoardScanService.ts"],"names":[],"mappings":"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"}
@@ -397,7 +397,8 @@ export interface ExecutionServiceDependencies {
397
397
  pullRequestMerger?: PullRequestMerger;
398
398
  /**
399
399
  * Optional: resolves a task's merge threshold preset (auto-merge ceilings + the
400
- * CI-fixer attempt budget). Absent → the built-in {@link DEFAULT_RISK_POLICY}.
400
+ * CI-fixer attempt budget). Absent → the built-in `FALLBACK_RISK_POLICY`, which auto-merges
401
+ * nothing: an engine with no preset library configured lands no pull request on its own.
401
402
  */
402
403
  riskPolicyRepository?: RiskPolicyRepository;
403
404
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"ExecutionServiceDependencies.d.ts","sourceRoot":"","sources":["../../../src/modules/execution/ExecutionServiceDependencies.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ExecutionServiceDependencies.d.ts","sourceRoot":"","sources":["../../../src/modules/execution/ExecutionServiceDependencies.ts"],"names":[],"mappings":"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"}
@@ -87,9 +87,9 @@ export declare class MergeResolver {
87
87
  /**
88
88
  * The track-record context a review card carries so the human can tag in the same tap.
89
89
  *
90
- * Takes only what it PROJECTS. `dryRun` rides the same {@link ReviewCardContext} the callers
91
- * thread, but it changes the card's WORDING rather than its track-record link, so naming it
92
- * here would advertise an input this function has no use for.
90
+ * Takes only what it PROJECTS. The `reason` rides the same {@link ReviewCardContext} the
91
+ * callers thread, but it decides the card's WORDING rather than its track-record link, so
92
+ * naming it here would advertise an input this function has no use for.
93
93
  */
94
94
  private readonly trackContext;
95
95
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"MergeResolver.d.ts","sourceRoot":"","sources":["../../../src/modules/execution/MergeResolver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,KAAK,EACL,eAAe,EAEf,gBAAgB,EAChB,iBAAiB,EAIjB,eAAe,EACf,aAAa,EACb,uBAAuB,EACxB,MAAM,qBAAqB,CAAA;AAQ5B,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yCAAyC,CAAA;AAClF,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,qCAAqC,CAAA;AAOlF,iFAAiF;AACjF,UAAU,eAAe;IACvB,qFAAqF;IACrF,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,qFAAqF;IACrF,IAAI,EAAE,MAAM,CAAA;IACZ,aAAa,EAAE,MAAM,CAAA;IACrB,OAAO,EAAE,MAAM,CAAA;IACf,SAAS,EAAE,MAAM,CAAA;IACjB,wFAAwF;IACxF,gBAAgB,EAAE,OAAO,CAAA;IACzB;;;OAGG;IACH,UAAU,CAAC,EAAE,eAAe,CAAA;IAC5B;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,gBAAgB,CAAA;IACnC;;;;;OAKG;IACH,uBAAuB,CAAC,EAAE,uBAAuB,CAAA;CAClD;AAiHD;;;;;;;GAOG;AACH,MAAM,MAAM,mBAAmB,GAC3B;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,GAClB;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;CAAE,CAAA;AAE7D,iGAAiG;AACjG,MAAM,WAAW,iBAAiB;IAChC,eAAe,EAAE,eAAe,CAAA;IAChC,mBAAmB,CAAC,EAAE,mBAAmB,CAAA;IACzC,6FAA6F;IAC7F,iBAAiB,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,KAAK,OAAO,CAAC,eAAe,CAAC,CAAA;IAClF;;;;OAIG;IACH,aAAa,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,mBAAmB,CAAC,CAAA;IACrF;;;;;OAKG;IACH,gBAAgB,CAAC,EAAE,uBAAuB,CAAA;CAC3C;AAED;;;;;;;GAOG;AACH,qBAAa,aAAa;IACZ,OAAO,CAAC,QAAQ,CAAC,IAAI;IAAjC,YAA6B,IAAI,EAAE,iBAAiB,EAAI;IAExD;;;;;OAKG;IACG,iBAAiB,CACrB,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,iBAAiB,EAC3B,aAAa,EAAE,OAAO,GACrB,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAmK/B;IAED;;;;;;OAMG;IACH,OAAO,CAAC,QAAQ,CAAC,YAAY,CAG3B;IAEF;;;;;;;;;;;;OAYG;YACW,mBAAmB;IAcjC,oFAAoF;YACtE,gBAAgB;CA+C/B"}
1
+ {"version":3,"file":"MergeResolver.d.ts","sourceRoot":"","sources":["../../../src/modules/execution/MergeResolver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,KAAK,EACL,eAAe,EAEf,gBAAgB,EAChB,iBAAiB,EAIjB,eAAe,EACf,aAAa,EACb,uBAAuB,EACxB,MAAM,qBAAqB,CAAA;AAQ5B,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yCAAyC,CAAA;AAClF,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,qCAAqC,CAAA;AAYlF,iFAAiF;AACjF,UAAU,eAAe;IACvB,qFAAqF;IACrF,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,qFAAqF;IACrF,IAAI,EAAE,MAAM,CAAA;IACZ,aAAa,EAAE,MAAM,CAAA;IACrB,OAAO,EAAE,MAAM,CAAA;IACf,SAAS,EAAE,MAAM,CAAA;IACjB,wFAAwF;IACxF,gBAAgB,EAAE,OAAO,CAAA;IACzB;;;OAGG;IACH,UAAU,CAAC,EAAE,eAAe,CAAA;IAC5B;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,gBAAgB,CAAA;IACnC;;;;;OAKG;IACH,uBAAuB,CAAC,EAAE,uBAAuB,CAAA;CAClD;AAsMD;;;;;;;GAOG;AACH,MAAM,MAAM,mBAAmB,GAC3B;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,GAClB;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;CAAE,CAAA;AAE7D,iGAAiG;AACjG,MAAM,WAAW,iBAAiB;IAChC,eAAe,EAAE,eAAe,CAAA;IAChC,mBAAmB,CAAC,EAAE,mBAAmB,CAAA;IACzC,6FAA6F;IAC7F,iBAAiB,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,KAAK,OAAO,CAAC,eAAe,CAAC,CAAA;IAClF;;;;OAIG;IACH,aAAa,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,mBAAmB,CAAC,CAAA;IACrF;;;;;OAKG;IACH,gBAAgB,CAAC,EAAE,uBAAuB,CAAA;CAC3C;AAED;;;;;;;GAOG;AACH,qBAAa,aAAa;IACZ,OAAO,CAAC,QAAQ,CAAC,IAAI;IAAjC,YAA6B,IAAI,EAAE,iBAAiB,EAAI;IAExD;;;;;OAKG;IACG,iBAAiB,CACrB,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,iBAAiB,EAC3B,aAAa,EAAE,OAAO,GACrB,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAqK/B;IAED;;;;;;OAMG;IACH,OAAO,CAAC,QAAQ,CAAC,YAAY,CAG3B;IAEF;;;;;;;;;;;;OAYG;YACW,mBAAmB;IAcjC,oFAAoF;YACtE,gBAAgB;CA6B/B"}