@cat-factory/orchestration 0.238.0 → 0.240.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 (26) hide show
  1. package/dist/container/modules.d.ts.map +1 -1
  2. package/dist/container/modules.js +5 -0
  3. package/dist/container/modules.js.map +1 -1
  4. package/dist/index.d.ts +1 -1
  5. package/dist/index.d.ts.map +1 -1
  6. package/dist/index.js.map +1 -1
  7. package/dist/modules/execution/ExecutionService.d.ts.map +1 -1
  8. package/dist/modules/execution/ExecutionService.js +2 -1
  9. package/dist/modules/execution/ExecutionService.js.map +1 -1
  10. package/dist/modules/execution/VisualConfirmationController.d.ts +20 -4
  11. package/dist/modules/execution/VisualConfirmationController.d.ts.map +1 -1
  12. package/dist/modules/execution/VisualConfirmationController.js +77 -15
  13. package/dist/modules/execution/VisualConfirmationController.js.map +1 -1
  14. package/dist/modules/execution/drive.d.ts +28 -0
  15. package/dist/modules/execution/drive.d.ts.map +1 -1
  16. package/dist/modules/execution/drive.js +53 -3
  17. package/dist/modules/execution/drive.js.map +1 -1
  18. package/dist/modules/execution/gate-window-controllers.d.ts +2 -0
  19. package/dist/modules/execution/gate-window-controllers.d.ts.map +1 -1
  20. package/dist/modules/execution/gate-window-controllers.js +2 -1
  21. package/dist/modules/execution/gate-window-controllers.js.map +1 -1
  22. package/dist/modules/execution/visual-confirm-design-references.d.ts +85 -0
  23. package/dist/modules/execution/visual-confirm-design-references.d.ts.map +1 -0
  24. package/dist/modules/execution/visual-confirm-design-references.js +229 -0
  25. package/dist/modules/execution/visual-confirm-design-references.js.map +1 -0
  26. package/package.json +11 -11
@@ -0,0 +1,229 @@
1
+ import { isDesignSource } from '@cat-factory/contracts';
2
+ // ---------------------------------------------------------------------------
3
+ // The visual-confirmation gate's DESIGN-ORIGIN reference half: the rendered frames an import
4
+ // retained for the designs a task links, folded into the gate's gallery beside the images a
5
+ // person uploaded by hand.
6
+ //
7
+ // Its own module rather than more methods on `VisualConfirmationController` because the fold is
8
+ // pure and the interesting part: which frame wins a view, what a name collision across two
9
+ // designs means, and which of five ways a design can contribute nothing the reviewer is looking
10
+ // at. The controller keeps the one impure step (two reads) and hands the rest here.
11
+ // ---------------------------------------------------------------------------
12
+ /**
13
+ * How many design-rendered views one gallery may carry, across every design a task links.
14
+ *
15
+ * A per-document render cap already bounds each design (Figma rasterises the first frames of a
16
+ * file, not all of them), and this bounds their SUM: a task linking four designs would otherwise
17
+ * push a couple of captured screenshots off the bottom of a page of mocks nobody asked to review
18
+ * here. Whatever it excludes is COUNTED and stated, never quietly trimmed.
19
+ */
20
+ export const MAX_DESIGN_REFERENCE_VIEWS = 12;
21
+ /**
22
+ * Why a linked design contributed less than its whole set of frames, or null when it contributed
23
+ * everything it has.
24
+ *
25
+ * Reads the stored `renderStatus` AND what the artifact store actually holds, because the two can
26
+ * disagree in the one direction that matters: a row CLAIMING retention over an empty shelf (an
27
+ * account that re-pointed its blob backend, a reclaim that outran its re-import) would otherwise
28
+ * describe a gallery that is not there. `partial` is such a claim just as `stored` is, and left to
29
+ * speak for itself it tells the reviewer "only part of its frames were retained" above nothing at
30
+ * all, which reads as a design that is merely short rather than one that is absent, and sends them
31
+ * looking for the frames that did survive.
32
+ *
33
+ * So the two claiming statuses are checked against what is held, and the three that already say
34
+ * nothing was kept (`failed` / `none` / `storage_unavailable`) stand as they are: each names a
35
+ * DIFFERENT cause of the same empty shelf, and collapsing them would throw the cause away.
36
+ */
37
+ export function designGapReason(renderStatus, heldImages) {
38
+ switch (renderStatus) {
39
+ case 'stored':
40
+ return heldImages > 0 ? null : 'not_retained';
41
+ case 'partial':
42
+ return heldImages > 0 ? 'partial' : 'not_retained';
43
+ case 'failed':
44
+ return 'failed';
45
+ case 'none':
46
+ return 'none';
47
+ case 'storage_unavailable':
48
+ return 'storage_unavailable';
49
+ case null:
50
+ // No render outcome was ever recorded for this document. Two causes the gate cannot tell
51
+ // apart (a source that rasterises nothing, a document imported before renders were kept),
52
+ // and one answer covers both honestly; a re-import is what distinguishes them.
53
+ return heldImages > 0 ? null : 'not_retained';
54
+ default:
55
+ return exhaustiveRenderStatus(renderStatus);
56
+ }
57
+ }
58
+ /**
59
+ * The compile-time totality guard: a new {@link DocumentRenderStatus} member fails the build here
60
+ * rather than silently becoming "this design is complete".
61
+ */
62
+ function exhaustiveRenderStatus(status) {
63
+ void status;
64
+ return 'not_retained';
65
+ }
66
+ /** The stable key both sides of the join use: a document's own source identity. */
67
+ function documentKey(ref) {
68
+ return `${ref.source}::${ref.externalId}`;
69
+ }
70
+ /**
71
+ * A per-document display label that is UNIQUE within this fold, used to qualify a view name two
72
+ * designs both claim. Titles alone are not unique (two boards can import files named "Checkout
73
+ * flow"), so a shared title falls back to carrying the source id.
74
+ */
75
+ function documentLabels(documents) {
76
+ const byTitle = new Map();
77
+ for (const document of documents) {
78
+ byTitle.set(document.title, (byTitle.get(document.title) ?? 0) + 1);
79
+ }
80
+ const labels = new Map();
81
+ for (const document of documents) {
82
+ const shared = (byTitle.get(document.title) ?? 0) > 1;
83
+ labels.set(documentKey(document), shared ? `${document.title} ${document.externalId}` : document.title);
84
+ }
85
+ return labels;
86
+ }
87
+ /**
88
+ * Share a bounded budget of gallery slots across the designs competing for it, one slot at a time
89
+ * in turn, and answer how many each may take.
90
+ *
91
+ * The budget is shared, so how it is SPLIT is a decision, and taking the first `cap` views in read
92
+ * order is the one shape that answers it worst: reads come back oldest-first, so the design linked
93
+ * longest ago fills the gallery and a design linked this morning contributes nothing, its absence
94
+ * indistinguishable to the reviewer from a design with no frames. Round-robin instead: every
95
+ * design is represented before any design gets a second slot, a design with fewer frames than its
96
+ * share leaves the rest to the others, and the split does not move when the links are re-ordered.
97
+ */
98
+ function allocate(counts, cap) {
99
+ const taken = counts.map(() => 0);
100
+ let remaining = Math.max(0, cap);
101
+ for (let round = 0; remaining > 0; round += 1) {
102
+ let servedThisRound = false;
103
+ for (let i = 0; i < counts.length && remaining > 0; i += 1) {
104
+ if (round >= counts[i])
105
+ continue;
106
+ taken[i] += 1;
107
+ remaining -= 1;
108
+ servedThisRound = true;
109
+ }
110
+ // Nobody had a frame left at this depth, so nobody will at any greater one.
111
+ if (!servedThisRound)
112
+ break;
113
+ }
114
+ return taken;
115
+ }
116
+ /**
117
+ * Fold a task's design documents and their retained renders into the gate's reference set.
118
+ *
119
+ * Four rules, each of which the obvious shape gets wrong:
120
+ *
121
+ * A view name claimed by TWO designs is qualified with its design's label on BOTH sides, never
122
+ * just the second. This is the same rule slice 1 applied to a frame name repeated across pages
123
+ * within one file: leaving the first occurrence bare hands the plain name to whichever document
124
+ * happened to be read first, so re-ordering the links would silently re-point a reviewed view at
125
+ * a different screen. The cost is that neither qualified name matches a screenshot captured as
126
+ * plain "Checkout", which is correct: nothing knows which of two designs that capture is of.
127
+ *
128
+ * Within ONE design, the NEWEST render for a view wins. The artifact reads are ordered oldest
129
+ * first, so a later assignment overriding an earlier one is the rule, not an accident.
130
+ *
131
+ * The cap counts VIEWS, not artifacts, and is applied after the per-view reduction: capping the
132
+ * raw rows first would spend the budget on frames a later revision had already replaced. It is
133
+ * SHARED across the linked designs rather than consumed in read order (see {@link allocate}), and
134
+ * what it cuts is named per design, not just totalled.
135
+ *
136
+ * Emission stays in document order with each design's own frames contiguous: the allocation
137
+ * decides how many slots each design gets, never how the gallery reads.
138
+ */
139
+ export function foldDesignReferences(documents, artifacts, cap = MAX_DESIGN_REFERENCE_VIEWS) {
140
+ // One entry per document IDENTITY, in first-linked order. A repeated link is one design: counted
141
+ // twice it would take two shares of the budget, state its gap twice, and make its own title look
142
+ // shared to the qualifier below, which would then qualify every one of its views against itself.
143
+ const known = new Map(documents.map((document) => [documentKey(document), document]));
144
+ const unique = [...known.values()];
145
+ const renders = artifacts.filter((record) => record.kind === 'reference' && record.document && known.has(documentKey(record.document)));
146
+ // Which documents claim each raw view name: the collision test the qualification below runs on.
147
+ const claimants = new Map();
148
+ for (const record of renders) {
149
+ const view = record.view;
150
+ if (!view)
151
+ continue;
152
+ const key = documentKey(record.document);
153
+ const held = claimants.get(view);
154
+ if (held)
155
+ held.add(key);
156
+ else
157
+ claimants.set(view, new Set([key]));
158
+ }
159
+ const labels = documentLabels(unique);
160
+ const byDocument = new Map(unique.map((document) => [documentKey(document), new Map()]));
161
+ const heldPerDocument = new Map();
162
+ for (const record of renders) {
163
+ // A render with no view has no pairing key, so it can only ever be shown against nothing.
164
+ // Counted for its document (it IS retained) but not rendered as a pair.
165
+ const key = documentKey(record.document);
166
+ heldPerDocument.set(key, (heldPerDocument.get(key) ?? 0) + 1);
167
+ if (!record.view)
168
+ continue;
169
+ const contested = (claimants.get(record.view)?.size ?? 0) > 1;
170
+ const view = contested ? `${record.view} (${labels.get(key) ?? key})` : record.view;
171
+ byDocument.get(key).set(view, record.id);
172
+ }
173
+ const offered = unique.map((document) => [...byDocument.get(documentKey(document)).entries()]);
174
+ const taken = allocate(offered.map((views) => views.length), cap);
175
+ const references = offered.flatMap((views, index) => views.slice(0, taken[index]).map(([view, artifactId]) => ({ view, artifactId })));
176
+ const gaps = [];
177
+ let dropped = 0;
178
+ unique.forEach((document, index) => {
179
+ const cut = offered[index].length - taken[index];
180
+ dropped += cut;
181
+ const reason = designGapReason(document.renderStatus, heldPerDocument.get(documentKey(document)) ?? 0);
182
+ // The two ways a design falls short are independent, so one entry carries both: a design can
183
+ // be short at its source, short at the gallery ceiling, or both at once.
184
+ if (reason || cut > 0) {
185
+ gaps.push({ title: document.title, reason, ...(cut > 0 ? { dropped: cut } : {}) });
186
+ }
187
+ });
188
+ return {
189
+ references,
190
+ summary: {
191
+ documents: unique.length,
192
+ images: references.length,
193
+ ...(dropped > 0 ? { dropped } : {}),
194
+ ...(gaps.length ? { gaps } : {}),
195
+ },
196
+ };
197
+ }
198
+ /**
199
+ * Read the task's linked DESIGN documents and their retained renders, then fold them.
200
+ *
201
+ * Returns null when the task links no design at all, which is a different fact from a design that
202
+ * gave nothing: the first has nothing to state and the second is exactly what the summary exists
203
+ * to say. Two reads regardless of how many designs are attached (the batched
204
+ * {@link BinaryArtifactStore.listByDocuments}), because this runs on the driver path of every run
205
+ * whose pipeline carries the gate.
206
+ *
207
+ * The documents are read LIVE at gather time rather than off the run's recorded context, for the
208
+ * same reason the hand-uploaded references are: `recapture` exists so a person can attach a
209
+ * missing reference mid-review and see it, and a design linked while the gate is parked is that
210
+ * same act.
211
+ */
212
+ export async function resolveDesignReferences(documentRepository, store, workspaceId, blockId) {
213
+ if (!documentRepository || !store)
214
+ return null;
215
+ const linked = await documentRepository.listByBlock(workspaceId, blockId);
216
+ const designs = linked
217
+ .filter((document) => isDesignSource(document.source))
218
+ .map((document) => ({
219
+ source: document.source,
220
+ externalId: document.externalId,
221
+ title: document.title,
222
+ renderStatus: document.renderStatus,
223
+ }));
224
+ if (!designs.length)
225
+ return null;
226
+ const artifacts = await store.listByDocuments(workspaceId, designs.map((document) => ({ source: document.source, externalId: document.externalId })));
227
+ return foldDesignReferences(designs, artifacts);
228
+ }
229
+ //# sourceMappingURL=visual-confirm-design-references.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"visual-confirm-design-references.js","sourceRoot":"","sources":["../../../src/modules/execution/visual-confirm-design-references.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cat-factory/orchestration",
3
- "version": "0.238.0",
3
+ "version": "0.240.0",
4
4
  "description": "Delivery-workflow engine for the Agent Architecture Board (execution, bootstrap, pipelines, board, boardScan, requirements, and composition root).",
5
5
  "repository": {
6
6
  "type": "git",
@@ -25,20 +25,20 @@
25
25
  },
26
26
  "dependencies": {
27
27
  "ai": "^7.0.51",
28
- "@cat-factory/agents": "0.117.10",
29
- "@cat-factory/caching": "0.18.11",
30
- "@cat-factory/contracts": "0.272.0",
31
- "@cat-factory/integrations": "0.148.0",
32
- "@cat-factory/kernel": "0.270.0",
33
- "@cat-factory/prompt-fragments": "1.0.20",
34
- "@cat-factory/sandbox": "0.11.97",
35
- "@cat-factory/spend": "0.15.38",
36
- "@cat-factory/workspaces": "0.26.10"
28
+ "@cat-factory/agents": "0.117.12",
29
+ "@cat-factory/caching": "0.18.13",
30
+ "@cat-factory/contracts": "0.274.0",
31
+ "@cat-factory/integrations": "0.150.0",
32
+ "@cat-factory/kernel": "0.272.0",
33
+ "@cat-factory/prompt-fragments": "1.0.22",
34
+ "@cat-factory/sandbox": "0.11.99",
35
+ "@cat-factory/spend": "0.15.40",
36
+ "@cat-factory/workspaces": "0.26.12"
37
37
  },
38
38
  "devDependencies": {
39
39
  "typescript": "7.0.2",
40
40
  "vitest": "^4.1.10",
41
- "@cat-factory/sandbox-fixtures": "0.7.307"
41
+ "@cat-factory/sandbox-fixtures": "0.7.309"
42
42
  },
43
43
  "scripts": {
44
44
  "build": "tsc -b tsconfig.build.json",