@blxzer/cursor-trellis-core 0.4.1 → 0.4.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +0 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -3
- package/dist/index.js.map +1 -1
- package/dist/task/adapter-middleware.d.ts +91 -0
- package/dist/task/adapter-middleware.d.ts.map +1 -0
- package/dist/task/adapter-middleware.js +384 -0
- package/dist/task/adapter-middleware.js.map +1 -0
- package/dist/task/contract-migrate.d.ts +29 -0
- package/dist/task/contract-migrate.d.ts.map +1 -0
- package/dist/task/contract-migrate.js +207 -0
- package/dist/task/contract-migrate.js.map +1 -0
- package/dist/task/full-quality.d.ts +89 -0
- package/dist/task/full-quality.d.ts.map +1 -0
- package/dist/task/full-quality.js +379 -0
- package/dist/task/full-quality.js.map +1 -0
- package/dist/task/index.d.ts +20 -0
- package/dist/task/index.d.ts.map +1 -1
- package/dist/task/index.js +10 -0
- package/dist/task/index.js.map +1 -1
- package/dist/task/kernel-cli.d.ts +44 -0
- package/dist/task/kernel-cli.d.ts.map +1 -0
- package/dist/task/kernel-cli.js +287 -0
- package/dist/task/kernel-cli.js.map +1 -0
- package/dist/task/kernel-contract.d.ts +113 -0
- package/dist/task/kernel-contract.d.ts.map +1 -0
- package/dist/task/kernel-contract.js +332 -0
- package/dist/task/kernel-contract.js.map +1 -0
- package/dist/task/kernel-store.d.ts +99 -0
- package/dist/task/kernel-store.d.ts.map +1 -0
- package/dist/task/kernel-store.js +735 -0
- package/dist/task/kernel-store.js.map +1 -0
- package/dist/task/lite-context-pack.d.ts +71 -0
- package/dist/task/lite-context-pack.d.ts.map +1 -0
- package/dist/task/lite-context-pack.js +175 -0
- package/dist/task/lite-context-pack.js.map +1 -0
- package/dist/task/ondemand-topology.d.ts +100 -0
- package/dist/task/ondemand-topology.d.ts.map +1 -0
- package/dist/task/ondemand-topology.js +418 -0
- package/dist/task/ondemand-topology.js.map +1 -0
- package/dist/task/p36-artifact-migrate.d.ts +61 -0
- package/dist/task/p36-artifact-migrate.d.ts.map +1 -0
- package/dist/task/p36-artifact-migrate.js +336 -0
- package/dist/task/p36-artifact-migrate.js.map +1 -0
- package/dist/task/p36-wave-c.d.ts +39 -0
- package/dist/task/p36-wave-c.d.ts.map +1 -0
- package/dist/task/p36-wave-c.js +100 -0
- package/dist/task/p36-wave-c.js.map +1 -0
- package/dist/task/records.d.ts +9 -0
- package/dist/task/records.d.ts.map +1 -1
- package/dist/task/records.js +11 -0
- package/dist/task/records.js.map +1 -1
- package/package.json +1 -6
- package/dist/rpc/broker/audit.d.ts +0 -16
- package/dist/rpc/broker/audit.d.ts.map +0 -1
- package/dist/rpc/broker/audit.js +0 -33
- package/dist/rpc/broker/audit.js.map +0 -1
- package/dist/rpc/broker/in-process.d.ts +0 -62
- package/dist/rpc/broker/in-process.d.ts.map +0 -1
- package/dist/rpc/broker/in-process.js +0 -490
- package/dist/rpc/broker/in-process.js.map +0 -1
- package/dist/rpc/broker/journal.d.ts +0 -11
- package/dist/rpc/broker/journal.d.ts.map +0 -1
- package/dist/rpc/broker/journal.js +0 -17
- package/dist/rpc/broker/journal.js.map +0 -1
- package/dist/rpc/contract/errors.d.ts +0 -18
- package/dist/rpc/contract/errors.d.ts.map +0 -1
- package/dist/rpc/contract/errors.js +0 -55
- package/dist/rpc/contract/errors.js.map +0 -1
- package/dist/rpc/contract/parse.d.ts +0 -9
- package/dist/rpc/contract/parse.d.ts.map +0 -1
- package/dist/rpc/contract/parse.js +0 -144
- package/dist/rpc/contract/parse.js.map +0 -1
- package/dist/rpc/contract/topics.d.ts +0 -11
- package/dist/rpc/contract/topics.d.ts.map +0 -1
- package/dist/rpc/contract/topics.js +0 -42
- package/dist/rpc/contract/topics.js.map +0 -1
- package/dist/rpc/contract/types.d.ts +0 -54
- package/dist/rpc/contract/types.d.ts.map +0 -1
- package/dist/rpc/contract/types.js +0 -39
- package/dist/rpc/contract/types.js.map +0 -1
- package/dist/rpc/index.d.ts +0 -10
- package/dist/rpc/index.d.ts.map +0 -1
- package/dist/rpc/index.js +0 -11
- package/dist/rpc/index.js.map +0 -1
- package/dist/rpc/transport/localhost-server.d.ts +0 -36
- package/dist/rpc/transport/localhost-server.d.ts.map +0 -1
- package/dist/rpc/transport/localhost-server.js +0 -275
- package/dist/rpc/transport/localhost-server.js.map +0 -1
- package/dist/rpc/transport/websocket.d.ts +0 -20
- package/dist/rpc/transport/websocket.d.ts.map +0 -1
- package/dist/rpc/transport/websocket.js +0 -156
- package/dist/rpc/transport/websocket.js.map +0 -1
|
@@ -0,0 +1,418 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Stage 5 Topology + typed Dependency Graph + On-demand activation
|
|
3
|
+
* (P28 Topology, P29 On-demand, P30 Stage 5, P18 Prefer native parallel).
|
|
4
|
+
*
|
|
5
|
+
* Pure helpers persisted through existing create extras / patch. Does not
|
|
6
|
+
* write Kernel store or task.json. Field names here are an implementation
|
|
7
|
+
* choice — not a frozen Manifest schema. Does not schedule workers.
|
|
8
|
+
*/
|
|
9
|
+
import { KernelError } from "./kernel-contract.js";
|
|
10
|
+
import { isPlainObject } from "./schema.js";
|
|
11
|
+
export const STAGE5_SOURCE = "stage5-ondemand-topology";
|
|
12
|
+
export const STAGE5_SCHEMA_VERSION = 1;
|
|
13
|
+
export const TOPOLOGY_KINDS = ["single", "parent-child"];
|
|
14
|
+
export const DEPENDENCY_EDGE_TYPES = ["requires", "advisory"];
|
|
15
|
+
export const LIFECYCLE_SLOTS = [
|
|
16
|
+
"define",
|
|
17
|
+
"approve",
|
|
18
|
+
"execute",
|
|
19
|
+
"verify",
|
|
20
|
+
"close",
|
|
21
|
+
];
|
|
22
|
+
export const STAGE5_ONDEMAND_MODULES = [
|
|
23
|
+
"candidate-pool",
|
|
24
|
+
"define-extended",
|
|
25
|
+
"worker-orchestration",
|
|
26
|
+
"parent-child",
|
|
27
|
+
"debug-recovery",
|
|
28
|
+
"integration-handoff",
|
|
29
|
+
"session-transfer",
|
|
30
|
+
"spec-learning",
|
|
31
|
+
"vcs-integration",
|
|
32
|
+
"personal-memory",
|
|
33
|
+
"retention-storage",
|
|
34
|
+
];
|
|
35
|
+
export const ONDEMAND_OWNERS = {
|
|
36
|
+
"integration-handoff": "parent-child",
|
|
37
|
+
"session-transfer": "session-transfer",
|
|
38
|
+
};
|
|
39
|
+
export const LITE_DORMANT_ONDEMAND = [
|
|
40
|
+
"parent-child",
|
|
41
|
+
"vcs-integration",
|
|
42
|
+
"personal-memory",
|
|
43
|
+
"retention-storage",
|
|
44
|
+
];
|
|
45
|
+
export function topologyKindFromChildren(children) {
|
|
46
|
+
return uniqueStrings(children).length > 0 ? "parent-child" : "single";
|
|
47
|
+
}
|
|
48
|
+
export function defaultTopology(record) {
|
|
49
|
+
const parent = typeof record?.parent === "string" && record.parent.trim() !== ""
|
|
50
|
+
? record.parent
|
|
51
|
+
: null;
|
|
52
|
+
const children = uniqueStrings(record?.children ?? []);
|
|
53
|
+
return {
|
|
54
|
+
schema_version: STAGE5_SCHEMA_VERSION,
|
|
55
|
+
kind: topologyKindFromChildren(children),
|
|
56
|
+
parent_id: parent,
|
|
57
|
+
children,
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
export function defaultOndemandModules() {
|
|
61
|
+
return {
|
|
62
|
+
schema_version: STAGE5_SCHEMA_VERSION,
|
|
63
|
+
source: STAGE5_SOURCE,
|
|
64
|
+
registered: [...STAGE5_ONDEMAND_MODULES],
|
|
65
|
+
active: [],
|
|
66
|
+
triggers: [],
|
|
67
|
+
owners: { ...ONDEMAND_OWNERS },
|
|
68
|
+
degraded: [],
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
export function defaultDependencyGraph() {
|
|
72
|
+
return { schema_version: STAGE5_SCHEMA_VERSION, edges: [] };
|
|
73
|
+
}
|
|
74
|
+
export function captureCandidate(summary) {
|
|
75
|
+
return {
|
|
76
|
+
kind: "candidate",
|
|
77
|
+
summary: summary.trim(),
|
|
78
|
+
task_created: false,
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
export function proposeDecompose(parentId, slices) {
|
|
82
|
+
return {
|
|
83
|
+
parent_id: parentId,
|
|
84
|
+
slices: uniqueStrings(slices),
|
|
85
|
+
confirmed: false,
|
|
86
|
+
children_created: [],
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
export function confirmDecompose(proposal) {
|
|
90
|
+
return {
|
|
91
|
+
...proposal,
|
|
92
|
+
confirmed: true,
|
|
93
|
+
children_created: [...proposal.slices],
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
export function applyRetention(outcome) {
|
|
97
|
+
return outcome;
|
|
98
|
+
}
|
|
99
|
+
export function assignParent(topology, parentId) {
|
|
100
|
+
const next = parentId.trim();
|
|
101
|
+
if (!next) {
|
|
102
|
+
throw new KernelError("INVALID_REQUEST", "parent_id must be a non-empty string");
|
|
103
|
+
}
|
|
104
|
+
if (topology.parent_id && topology.parent_id !== next) {
|
|
105
|
+
throw new KernelError("INVALID_REQUEST", `single-parent tree: second parent rejected (${topology.parent_id} vs ${next})`);
|
|
106
|
+
}
|
|
107
|
+
return {
|
|
108
|
+
schema_version: STAGE5_SCHEMA_VERSION,
|
|
109
|
+
kind: topologyKindFromChildren(topology.children),
|
|
110
|
+
parent_id: next,
|
|
111
|
+
children: [...topology.children],
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
export function assertIntegrationAuthority(actorRole) {
|
|
115
|
+
if (actorRole === "parent")
|
|
116
|
+
return;
|
|
117
|
+
throw new KernelError("INVALID_REQUEST", "Integration authority stays with Parent; Child cannot integrate-child");
|
|
118
|
+
}
|
|
119
|
+
export function expandDependsOnToRequires(graph, fromId, dependsOn) {
|
|
120
|
+
const edges = [...graph.edges];
|
|
121
|
+
for (const dep of uniqueStrings(dependsOn)) {
|
|
122
|
+
if (hasEdge(edges, fromId, dep, "requires"))
|
|
123
|
+
continue;
|
|
124
|
+
edges.push({ from: fromId, to: dep, type: "requires" });
|
|
125
|
+
}
|
|
126
|
+
return { schema_version: STAGE5_SCHEMA_VERSION, edges };
|
|
127
|
+
}
|
|
128
|
+
export function unmetRequires(graph, satisfied, fromId) {
|
|
129
|
+
const done = new Set(satisfied);
|
|
130
|
+
const missing = [];
|
|
131
|
+
for (const edge of graph.edges) {
|
|
132
|
+
if (edge.type !== "requires")
|
|
133
|
+
continue;
|
|
134
|
+
if (fromId && edge.from !== fromId)
|
|
135
|
+
continue;
|
|
136
|
+
if (done.has(edge.to))
|
|
137
|
+
continue;
|
|
138
|
+
if (!missing.includes(edge.to))
|
|
139
|
+
missing.push(edge.to);
|
|
140
|
+
}
|
|
141
|
+
return missing;
|
|
142
|
+
}
|
|
143
|
+
export function projectTaskMapGraph(topology, graph) {
|
|
144
|
+
const children = topology.children.map((id) => ({
|
|
145
|
+
id,
|
|
146
|
+
depends_on: graph.edges
|
|
147
|
+
.filter((edge) => edge.type === "requires" && edge.from === id)
|
|
148
|
+
.map((edge) => edge.to),
|
|
149
|
+
}));
|
|
150
|
+
return {
|
|
151
|
+
graph_authority: "kernel-extras",
|
|
152
|
+
topology_kind: topology.kind,
|
|
153
|
+
parent_id: topology.parent_id,
|
|
154
|
+
children,
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
export function renderTaskMapProjection(projection) {
|
|
158
|
+
const lines = [
|
|
159
|
+
"graph_authority: kernel-extras",
|
|
160
|
+
`topology_kind: ${projection.topology_kind}`,
|
|
161
|
+
`parent_id: ${projection.parent_id ?? "null"}`,
|
|
162
|
+
"children:",
|
|
163
|
+
];
|
|
164
|
+
if (projection.children.length === 0) {
|
|
165
|
+
lines.push(" []");
|
|
166
|
+
}
|
|
167
|
+
else {
|
|
168
|
+
for (const child of projection.children) {
|
|
169
|
+
const deps = child.depends_on.length === 0
|
|
170
|
+
? "[]"
|
|
171
|
+
: `[${child.depends_on.join(", ")}]`;
|
|
172
|
+
lines.push(` - id: ${child.id}`);
|
|
173
|
+
lines.push(` depends_on: ${deps}`);
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
return `${lines.join("\n")}\n`;
|
|
177
|
+
}
|
|
178
|
+
export function residentOnDemandModules(extras) {
|
|
179
|
+
return readOndemandModules(extras).active;
|
|
180
|
+
}
|
|
181
|
+
export function activateOnDemand(extras, moduleName, reason, at = new Date().toISOString()) {
|
|
182
|
+
const current = readOndemandModules(extras);
|
|
183
|
+
if (!current.registered.includes(moduleName)) {
|
|
184
|
+
throw new KernelError("INVALID_REQUEST", `On-demand module is not registered: ${moduleName}`);
|
|
185
|
+
}
|
|
186
|
+
const triggers = [
|
|
187
|
+
...current.triggers,
|
|
188
|
+
{ module: moduleName, at, reason: reason.trim() || "trigger" },
|
|
189
|
+
];
|
|
190
|
+
const active = current.active.includes(moduleName)
|
|
191
|
+
? [...current.active]
|
|
192
|
+
: [...current.active, moduleName];
|
|
193
|
+
const next = { ...current, active, triggers };
|
|
194
|
+
extras.ondemand_modules = next;
|
|
195
|
+
return next;
|
|
196
|
+
}
|
|
197
|
+
export function normalizeTopology(raw, record) {
|
|
198
|
+
if (raw === undefined || raw === null)
|
|
199
|
+
return defaultTopology(record);
|
|
200
|
+
if (!isPlainObject(raw)) {
|
|
201
|
+
throw new KernelError("INVALID_REQUEST", "topology must be a JSON object");
|
|
202
|
+
}
|
|
203
|
+
const kind = raw.kind === "parent-child" ? "parent-child" : raw.kind === "single" ? "single" : null;
|
|
204
|
+
if (kind === null) {
|
|
205
|
+
throw new KernelError("INVALID_REQUEST", "topology.kind must be single or parent-child");
|
|
206
|
+
}
|
|
207
|
+
const parentId = raw.parent_id === null || raw.parent_id === undefined
|
|
208
|
+
? null
|
|
209
|
+
: requireId(raw.parent_id, "topology.parent_id");
|
|
210
|
+
const children = uniqueStrings(asStringArray(raw.children));
|
|
211
|
+
const seeded = defaultTopology(record);
|
|
212
|
+
if (parentId && seeded.parent_id && parentId !== seeded.parent_id) {
|
|
213
|
+
throw new KernelError("INVALID_REQUEST", `single-parent tree: second parent rejected (${parentId} vs ${seeded.parent_id})`);
|
|
214
|
+
}
|
|
215
|
+
const resolvedParent = parentId ?? seeded.parent_id;
|
|
216
|
+
const resolvedChildren = uniqueStrings([...children, ...seeded.children]);
|
|
217
|
+
return {
|
|
218
|
+
schema_version: STAGE5_SCHEMA_VERSION,
|
|
219
|
+
kind: topologyKindFromChildren(resolvedChildren),
|
|
220
|
+
parent_id: resolvedParent,
|
|
221
|
+
children: resolvedChildren,
|
|
222
|
+
};
|
|
223
|
+
}
|
|
224
|
+
export function normalizeDependencyGraph(raw) {
|
|
225
|
+
if (raw === undefined || raw === null)
|
|
226
|
+
return defaultDependencyGraph();
|
|
227
|
+
if (!isPlainObject(raw)) {
|
|
228
|
+
throw new KernelError("INVALID_REQUEST", "dependency_graph must be a JSON object");
|
|
229
|
+
}
|
|
230
|
+
const edgesIn = raw.edges;
|
|
231
|
+
if (edgesIn === undefined || edgesIn === null)
|
|
232
|
+
return defaultDependencyGraph();
|
|
233
|
+
if (!Array.isArray(edgesIn)) {
|
|
234
|
+
throw new KernelError("INVALID_REQUEST", "dependency_graph.edges must be an array");
|
|
235
|
+
}
|
|
236
|
+
const edges = [];
|
|
237
|
+
for (const item of edgesIn) {
|
|
238
|
+
if (!isPlainObject(item)) {
|
|
239
|
+
throw new KernelError("INVALID_REQUEST", "dependency_graph.edges[] must be objects");
|
|
240
|
+
}
|
|
241
|
+
if (item.type !== "requires" && item.type !== "advisory") {
|
|
242
|
+
throw new KernelError("INVALID_REQUEST", "dependency_graph.edges[].type must be requires or advisory");
|
|
243
|
+
}
|
|
244
|
+
const edge = {
|
|
245
|
+
from: requireId(item.from, "dependency_graph.edges[].from"),
|
|
246
|
+
to: requireId(item.to, "dependency_graph.edges[].to"),
|
|
247
|
+
type: item.type,
|
|
248
|
+
};
|
|
249
|
+
if (!hasEdge(edges, edge.from, edge.to, edge.type))
|
|
250
|
+
edges.push(edge);
|
|
251
|
+
}
|
|
252
|
+
return { schema_version: STAGE5_SCHEMA_VERSION, edges };
|
|
253
|
+
}
|
|
254
|
+
export function normalizeOndemandModules(raw) {
|
|
255
|
+
if (raw === undefined || raw === null)
|
|
256
|
+
return defaultOndemandModules();
|
|
257
|
+
if (!isPlainObject(raw)) {
|
|
258
|
+
throw new KernelError("INVALID_REQUEST", "ondemand_modules must be a JSON object");
|
|
259
|
+
}
|
|
260
|
+
const defaults = defaultOndemandModules();
|
|
261
|
+
const registered = uniqueStrings([
|
|
262
|
+
...defaults.registered,
|
|
263
|
+
...asStringArray(raw.registered),
|
|
264
|
+
]);
|
|
265
|
+
const active = uniqueStrings(asStringArray(raw.active)).filter((name) => registered.includes(name));
|
|
266
|
+
const degraded = uniqueStrings(asStringArray(raw.degraded));
|
|
267
|
+
const triggers = Array.isArray(raw.triggers)
|
|
268
|
+
? raw.triggers.filter(isPlainObject).map((item) => ({
|
|
269
|
+
module: typeof item.module === "string" ? item.module : "",
|
|
270
|
+
at: typeof item.at === "string" ? item.at : "",
|
|
271
|
+
reason: typeof item.reason === "string" ? item.reason : "",
|
|
272
|
+
}))
|
|
273
|
+
: [];
|
|
274
|
+
const owners = isPlainObject(raw.owners)
|
|
275
|
+
? {
|
|
276
|
+
...defaults.owners,
|
|
277
|
+
...Object.fromEntries(Object.entries(raw.owners).filter((entry) => typeof entry[1] === "string")),
|
|
278
|
+
}
|
|
279
|
+
: { ...defaults.owners };
|
|
280
|
+
return {
|
|
281
|
+
schema_version: STAGE5_SCHEMA_VERSION,
|
|
282
|
+
source: STAGE5_SOURCE,
|
|
283
|
+
registered,
|
|
284
|
+
active,
|
|
285
|
+
triggers,
|
|
286
|
+
owners,
|
|
287
|
+
degraded,
|
|
288
|
+
};
|
|
289
|
+
}
|
|
290
|
+
export function readTopology(extras) {
|
|
291
|
+
return normalizeTopology(extras.topology);
|
|
292
|
+
}
|
|
293
|
+
export function readDependencyGraph(extras) {
|
|
294
|
+
return normalizeDependencyGraph(extras.dependency_graph);
|
|
295
|
+
}
|
|
296
|
+
export function readOndemandModules(extras) {
|
|
297
|
+
return normalizeOndemandModules(extras.ondemand_modules);
|
|
298
|
+
}
|
|
299
|
+
export function normalizeStage5InExtras(extras, record) {
|
|
300
|
+
assertUnconfirmedChildCreation(extras, existingTopologyChildren(extras), record);
|
|
301
|
+
extras.topology = normalizeTopology(extras.topology, record);
|
|
302
|
+
let graph = normalizeDependencyGraph(extras.dependency_graph);
|
|
303
|
+
const selfId = typeof record?.id === "string" ? record.id : "";
|
|
304
|
+
const dependsOn = asStringArray(extras.depends_on);
|
|
305
|
+
if (selfId && dependsOn.length > 0) {
|
|
306
|
+
graph = expandDependsOnToRequires(graph, selfId, dependsOn);
|
|
307
|
+
}
|
|
308
|
+
extras.dependency_graph = graph;
|
|
309
|
+
extras.ondemand_modules = normalizeOndemandModules(extras.ondemand_modules);
|
|
310
|
+
const missing = uniqueStrings(asStringArray(extras.ondemand_required_missing));
|
|
311
|
+
if (missing.length > 0) {
|
|
312
|
+
const modules = extras.ondemand_modules;
|
|
313
|
+
extras.ondemand_modules = {
|
|
314
|
+
...modules,
|
|
315
|
+
degraded: uniqueStrings([...modules.degraded, ...missing]),
|
|
316
|
+
};
|
|
317
|
+
extras.profile_health = "degraded";
|
|
318
|
+
}
|
|
319
|
+
const topology = extras.topology;
|
|
320
|
+
if (topology.kind === "parent-child" &&
|
|
321
|
+
!residentOnDemandModules(extras).includes("parent-child")) {
|
|
322
|
+
activateOnDemand(extras, "parent-child", "topology:parent-child");
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
export function assertStage5ForPhase(extras, record, phase) {
|
|
326
|
+
if (extras.intake_outcome === "capture-candidate") {
|
|
327
|
+
throw new KernelError("INVALID_REQUEST", "Capture Candidate must not create a Task");
|
|
328
|
+
}
|
|
329
|
+
if (isPlainObject(extras.capture_candidate) && extras.capture_candidate.task_created === true) {
|
|
330
|
+
throw new KernelError("INVALID_REQUEST", "Capture Candidate must not create a Task");
|
|
331
|
+
}
|
|
332
|
+
assertUnconfirmedChildCreation(extras, existingTopologyChildren(extras), record);
|
|
333
|
+
const topology = normalizeTopology(extras.topology, record);
|
|
334
|
+
extras.topology = topology;
|
|
335
|
+
assertSingleParent(topology, record);
|
|
336
|
+
if (extras.integration_action === "integrate-child") {
|
|
337
|
+
const actor = extras.integration_actor === "parent" ? "parent" : "child";
|
|
338
|
+
assertIntegrationAuthority(actor);
|
|
339
|
+
}
|
|
340
|
+
if (phase === "create" || phase === "patch")
|
|
341
|
+
return;
|
|
342
|
+
assertLifecycleSlots(extras);
|
|
343
|
+
const graph = readDependencyGraph(extras);
|
|
344
|
+
const missing = unmetRequires(graph, asStringArray(extras.dependency_satisfied), typeof record.id === "string" ? record.id : undefined);
|
|
345
|
+
if (missing.length > 0) {
|
|
346
|
+
throw new KernelError("INVALID_TRANSITION", `requires unmet: ${missing.join(", ")}`);
|
|
347
|
+
}
|
|
348
|
+
if (phase === "archive") {
|
|
349
|
+
const outcome = typeof extras.close_outcome === "string" ? extras.close_outcome : "completed";
|
|
350
|
+
extras.close_outcome = applyRetention(outcome);
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
export function normalizeStage5InExtrasAndAssert(extras, record, phase) {
|
|
354
|
+
normalizeStage5InExtras(extras, record);
|
|
355
|
+
assertStage5ForPhase(extras, record, phase);
|
|
356
|
+
}
|
|
357
|
+
function assertSingleParent(topology, record) {
|
|
358
|
+
const incoming = typeof record.parent === "string" && record.parent.trim() !== ""
|
|
359
|
+
? record.parent
|
|
360
|
+
: null;
|
|
361
|
+
if (topology.parent_id && incoming && topology.parent_id !== incoming) {
|
|
362
|
+
throw new KernelError("INVALID_REQUEST", `single-parent tree: second parent rejected (${topology.parent_id} vs ${incoming})`);
|
|
363
|
+
}
|
|
364
|
+
}
|
|
365
|
+
function existingTopologyChildren(extras) {
|
|
366
|
+
if (!isPlainObject(extras.topology))
|
|
367
|
+
return [];
|
|
368
|
+
return uniqueStrings(asStringArray(extras.topology.children));
|
|
369
|
+
}
|
|
370
|
+
function assertUnconfirmedChildCreation(extras, existingChildren, record) {
|
|
371
|
+
const proposal = extras.decompose_proposal;
|
|
372
|
+
if (!isPlainObject(proposal) || proposal.confirmed === true)
|
|
373
|
+
return;
|
|
374
|
+
const slices = uniqueStrings(asStringArray(proposal.slices ?? proposal.children));
|
|
375
|
+
const incoming = uniqueStrings(record?.children ?? []);
|
|
376
|
+
for (const id of incoming) {
|
|
377
|
+
if (slices.includes(id) && !existingChildren.includes(id)) {
|
|
378
|
+
throw new KernelError("INVALID_REQUEST", "Decompose must not create Child before confirmation");
|
|
379
|
+
}
|
|
380
|
+
}
|
|
381
|
+
}
|
|
382
|
+
function assertLifecycleSlots(extras) {
|
|
383
|
+
if (extras.lifecycle_slots === undefined || extras.lifecycle_slots === null) {
|
|
384
|
+
return;
|
|
385
|
+
}
|
|
386
|
+
const present = new Set(asStringArray(extras.lifecycle_slots));
|
|
387
|
+
const missing = LIFECYCLE_SLOTS.filter((slot) => !present.has(slot));
|
|
388
|
+
if (missing.length > 0) {
|
|
389
|
+
throw new KernelError("INVALID_REQUEST", `lifecycle required slot missing: ${missing.join(", ")}`);
|
|
390
|
+
}
|
|
391
|
+
}
|
|
392
|
+
function asStringArray(value) {
|
|
393
|
+
if (!Array.isArray(value))
|
|
394
|
+
return [];
|
|
395
|
+
return value.filter((item) => typeof item === "string");
|
|
396
|
+
}
|
|
397
|
+
function uniqueStrings(values) {
|
|
398
|
+
const out = [];
|
|
399
|
+
for (const value of values) {
|
|
400
|
+
if (typeof value !== "string")
|
|
401
|
+
continue;
|
|
402
|
+
const id = value.trim();
|
|
403
|
+
if (!id || out.includes(id))
|
|
404
|
+
continue;
|
|
405
|
+
out.push(id);
|
|
406
|
+
}
|
|
407
|
+
return out;
|
|
408
|
+
}
|
|
409
|
+
function requireId(value, field) {
|
|
410
|
+
if (typeof value !== "string" || value.trim() === "") {
|
|
411
|
+
throw new KernelError("INVALID_REQUEST", `${field} must be a non-empty string`);
|
|
412
|
+
}
|
|
413
|
+
return value.trim();
|
|
414
|
+
}
|
|
415
|
+
function hasEdge(edges, from, to, type) {
|
|
416
|
+
return edges.some((edge) => edge.from === from && edge.to === to && edge.type === type);
|
|
417
|
+
}
|
|
418
|
+
//# sourceMappingURL=ondemand-topology.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ondemand-topology.js","sourceRoot":"","sources":["../../src/task/ondemand-topology.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* P36 wave B — artifact dual-read + optional write (not wave C).
|
|
3
|
+
*
|
|
4
|
+
* User default: keep reading old task.json / evidence / pool. Maintainer
|
|
5
|
+
* may write required_controls + Topology projections. Never delete
|
|
6
|
+
* business prose. Archive is read-only. Failure rolls back to dual-read.
|
|
7
|
+
*/
|
|
8
|
+
import { type RequiredControlsBundle } from "./full-quality.js";
|
|
9
|
+
import { type DependencyGraph, type TopologyState } from "./ondemand-topology.js";
|
|
10
|
+
export declare const P36_ARTIFACT_SOURCE = "p36-artifact-migrate";
|
|
11
|
+
export interface ArtifactWriteTarget {
|
|
12
|
+
kind: "task" | "pool";
|
|
13
|
+
path: string;
|
|
14
|
+
extra?: {
|
|
15
|
+
required_controls?: RequiredControlsBundle;
|
|
16
|
+
topology?: TopologyState;
|
|
17
|
+
dependency_graph?: DependencyGraph;
|
|
18
|
+
};
|
|
19
|
+
nextText?: string;
|
|
20
|
+
}
|
|
21
|
+
export interface ArtifactTaskScan {
|
|
22
|
+
path: string;
|
|
23
|
+
id: string;
|
|
24
|
+
status: string;
|
|
25
|
+
archive: boolean;
|
|
26
|
+
continueOk: boolean;
|
|
27
|
+
dualRead: boolean;
|
|
28
|
+
writable: boolean;
|
|
29
|
+
missing: string[];
|
|
30
|
+
}
|
|
31
|
+
export interface ArtifactMigratePlan {
|
|
32
|
+
scanned: number;
|
|
33
|
+
dualRead: number;
|
|
34
|
+
activeDualRead: number;
|
|
35
|
+
archiveSkipped: number;
|
|
36
|
+
writable: ArtifactWriteTarget[];
|
|
37
|
+
tasks: ArtifactTaskScan[];
|
|
38
|
+
degraded: string[];
|
|
39
|
+
continueOk: boolean;
|
|
40
|
+
}
|
|
41
|
+
export interface PlanArtifactMigrationOptions {
|
|
42
|
+
root: string;
|
|
43
|
+
tasksDir?: string;
|
|
44
|
+
poolDir?: string;
|
|
45
|
+
}
|
|
46
|
+
export interface ApplyArtifactMigrationOptions {
|
|
47
|
+
root: string;
|
|
48
|
+
plan: ArtifactMigratePlan;
|
|
49
|
+
onBeforeWrite?: (target: ArtifactWriteTarget) => void;
|
|
50
|
+
}
|
|
51
|
+
export interface ApplyArtifactMigrationResult {
|
|
52
|
+
ok: boolean;
|
|
53
|
+
wrote: boolean;
|
|
54
|
+
written: number;
|
|
55
|
+
rolledBack: boolean;
|
|
56
|
+
error?: string;
|
|
57
|
+
}
|
|
58
|
+
export declare function planArtifactMigration(options: PlanArtifactMigrationOptions): ArtifactMigratePlan;
|
|
59
|
+
export declare function applyArtifactMigration(options: ApplyArtifactMigrationOptions): ApplyArtifactMigrationResult;
|
|
60
|
+
export declare function formatArtifactVernacular(plan: ArtifactMigratePlan, writeArtifacts: boolean): string[];
|
|
61
|
+
//# sourceMappingURL=p36-artifact-migrate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"p36-artifact-migrate.d.ts","sourceRoot":"","sources":["../../src/task/p36-artifact-migrate.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,OAAO,EAA2B,KAAK,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAEzF,OAAO,EAML,KAAK,eAAe,EACpB,KAAK,aAAa,EACnB,MAAM,wBAAwB,CAAC;AAIhC,eAAO,MAAM,mBAAmB,yBAAyB,CAAC;AAE1D,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE;QACN,iBAAiB,CAAC,EAAE,sBAAsB,CAAC;QAC3C,QAAQ,CAAC,EAAE,aAAa,CAAC;QACzB,gBAAgB,CAAC,EAAE,eAAe,CAAC;KACpC,CAAC;IACF,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,OAAO,CAAC;IACpB,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,mBAAmB,EAAE,CAAC;IAChC,KAAK,EAAE,gBAAgB,EAAE,CAAC;IAC1B,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,UAAU,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,4BAA4B;IAC3C,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,6BAA6B;IAC5C,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,mBAAmB,CAAC;IAC1B,aAAa,CAAC,EAAE,CAAC,MAAM,EAAE,mBAAmB,KAAK,IAAI,CAAC;CACvD;AAED,MAAM,WAAW,4BAA4B;IAC3C,EAAE,EAAE,OAAO,CAAC;IACZ,KAAK,EAAE,OAAO,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,OAAO,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,4BAA4B,GACpC,mBAAmB,CA8CrB;AAED,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,6BAA6B,GACrC,4BAA4B,CA4B9B;AAED,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,mBAAmB,EACzB,cAAc,EAAE,OAAO,GACtB,MAAM,EAAE,CAYV"}
|