assertledger 1.2.0 → 1.3.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.
@@ -0,0 +1,39 @@
1
+ import { type RepositoryInitResult, type RepositoryInitResultV2 } from "../contracts/index.js";
2
+ import { type ClientConnectionPlan, type ClientConnectionResult } from "./connection.js";
3
+ export type SetupClient = "codex" | "claude-code";
4
+ type AnyRepositoryInitResult = RepositoryInitResult | RepositoryInitResultV2;
5
+ export type RepositorySetupStatus = "WOULD_CREATE" | "CREATED" | "UNCHANGED" | "BLOCKED" | "CONFLICT" | "PARTIAL_FAILURE";
6
+ export type RepositorySetupArtifactState = "WOULD_CREATE" | "CREATED" | "UNCHANGED" | "CONFLICT" | "ROLLED_BACK" | "PARTIAL";
7
+ export interface RepositorySetupRollback {
8
+ status: "NOT_REQUIRED" | "COMPLETE" | "PARTIAL";
9
+ removed: string[];
10
+ unresolved: string[];
11
+ }
12
+ export interface RepositorySetupArtifact {
13
+ owner: "init" | "connection";
14
+ path: string;
15
+ state: RepositorySetupArtifactState;
16
+ }
17
+ export interface RepositorySetupResult {
18
+ status: RepositorySetupStatus;
19
+ client: SetupClient;
20
+ mode: "dry-run" | "write";
21
+ init: AnyRepositoryInitResult;
22
+ connection: ClientConnectionResult;
23
+ artifacts: RepositorySetupArtifact[];
24
+ rollback: RepositorySetupRollback;
25
+ limitations: string[];
26
+ reasonCodes?: string[];
27
+ nextActions?: string[];
28
+ diagnosticPaths?: string[];
29
+ }
30
+ export interface SetupRepositoryDependencies {
31
+ planInit?(root: string): Promise<AnyRepositoryInitResult>;
32
+ afterInitApplied?(): Promise<void>;
33
+ applyInit?(root: string): Promise<AnyRepositoryInitResult>;
34
+ applyConnection?(): Promise<ClientConnectionResult>;
35
+ planConnection?(root: string, cliEntry: string, client: SetupClient): Promise<ClientConnectionPlan>;
36
+ }
37
+ export declare function setupRepository(root: string, cliEntry: string, client: SetupClient, write: boolean, dependencies?: SetupRepositoryDependencies): Promise<RepositorySetupResult>;
38
+ export {};
39
+ //# sourceMappingURL=setup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/engine/setup.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,KAAK,oBAAoB,EACzB,KAAK,sBAAsB,EAC5B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAEL,KAAK,oBAAoB,EACzB,KAAK,sBAAsB,EAG5B,MAAM,iBAAiB,CAAC;AAGzB,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,aAAa,CAAC;AAClD,KAAK,uBAAuB,GAAG,oBAAoB,GAAG,sBAAsB,CAAC;AAC7E,MAAM,MAAM,qBAAqB,GAC7B,cAAc,GACd,SAAS,GACT,WAAW,GACX,SAAS,GACT,UAAU,GACV,iBAAiB,CAAC;AACtB,MAAM,MAAM,4BAA4B,GACpC,cAAc,GACd,SAAS,GACT,WAAW,GACX,UAAU,GACV,aAAa,GACb,SAAS,CAAC;AAEd,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,cAAc,GAAG,UAAU,GAAG,SAAS,CAAC;IAChD,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB;AAED,MAAM,WAAW,uBAAuB;IACtC,KAAK,EAAE,MAAM,GAAG,YAAY,CAAC;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,4BAA4B,CAAC;CACrC;AAED,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,qBAAqB,CAAC;IAC9B,MAAM,EAAE,WAAW,CAAC;IACpB,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC;IAC1B,IAAI,EAAE,uBAAuB,CAAC;IAC9B,UAAU,EAAE,sBAAsB,CAAC;IACnC,SAAS,EAAE,uBAAuB,EAAE,CAAC;IACrC,QAAQ,EAAE,uBAAuB,CAAC;IAClC,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;CAC5B;AAED,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAAC;IAC1D,gBAAgB,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACnC,SAAS,CAAC,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAAC;IAC3D,eAAe,CAAC,IAAI,OAAO,CAAC,sBAAsB,CAAC,CAAC;IACpD,cAAc,CAAC,CACb,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,WAAW,GAClB,OAAO,CAAC,oBAAoB,CAAC,CAAC;CAClC;AAiJD,wBAAsB,eAAe,CACnC,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,WAAW,EACnB,KAAK,EAAE,OAAO,EACd,YAAY,GAAE,2BAAgC,GAC7C,OAAO,CAAC,qBAAqB,CAAC,CAsThC"}
@@ -0,0 +1,411 @@
1
+ import { lstat, readFile, realpath, unlink } from "node:fs/promises";
2
+ import path from "node:path";
3
+ import { parseRepositoryInitResult, } from "../contracts/index.js";
4
+ import { ClientConnectionApplyError, connectClient, planClientConnection, } from "./connection.js";
5
+ import { initializeRepository, RepositoryInitWriteError } from "./index.js";
6
+ const SETUP_LIMITATIONS = [
7
+ "Setup configures static initialization and a read-only client connection only.",
8
+ "It does not authorize UNSANDBOXED execution, reload the client, or prove repository behavior.",
9
+ "Setup has no cross-process filesystem lock. Concurrent edits can be overwritten during lock regeneration or removed between a rollback byte check and unlink; run only while the trusted repository tree is stable.",
10
+ ];
11
+ function failedInitPreflight() {
12
+ return parseRepositoryInitResult({
13
+ schemaVersion: "1.0.0",
14
+ status: "CONFLICT",
15
+ reasonCodes: ["INIT_PREFLIGHT_FAILED"],
16
+ detections: {
17
+ packageManager: null,
18
+ framework: null,
19
+ testCommand: null,
20
+ ciProviders: [],
21
+ adapterRecommendation: "unavailable",
22
+ reasonCodes: ["INIT_PREFLIGHT_FAILED"],
23
+ },
24
+ actions: [],
25
+ files: [],
26
+ requiredOperatorInputs: ["worlds", "candidates"],
27
+ nextCommands: [{ executable: "assertledger", arguments: ["audit", ".", "--json"] }],
28
+ });
29
+ }
30
+ function connectionPreflightDiagnostic(error, cliEntry) {
31
+ const code = error instanceof Error ? error.message : "";
32
+ const skillPath = path.join(path.dirname(path.dirname(path.resolve(cliEntry))), "integrations", "skill", "SKILL.md");
33
+ if (code === "CONNECT_BUILD_REQUIRED") {
34
+ return {
35
+ reasonCode: "CONNECTION_BUILD_REQUIRED",
36
+ paths: [path.resolve(cliEntry)],
37
+ nextAction: "Run `pnpm build`, invoke the generated dist/cli.js, then rerun setup.",
38
+ };
39
+ }
40
+ if (code === "CONNECT_SKILL_REQUIRED") {
41
+ return {
42
+ reasonCode: "CONNECTION_SKILL_REQUIRED",
43
+ paths: [skillPath],
44
+ nextAction: "Restore integrations/skill/SKILL.md from the installed package, then rerun setup.",
45
+ };
46
+ }
47
+ if (code === "CONNECT_SKILL_PATH_UNSAFE") {
48
+ return {
49
+ reasonCode: "CONNECTION_SKILL_PATH_UNSAFE",
50
+ paths: [skillPath],
51
+ nextAction: "Replace the packaged skill path with a regular file, then rerun setup.",
52
+ };
53
+ }
54
+ return {
55
+ reasonCode: "CONNECTION_PREFLIGHT_FAILED",
56
+ paths: [],
57
+ nextAction: "Inspect the installed package and client configuration paths, then rerun setup.",
58
+ };
59
+ }
60
+ function initArtifactState(result, file) {
61
+ if (result.status === "CONFLICT")
62
+ return "CONFLICT";
63
+ return result.actions.some((action) => action.path === file) ? "WOULD_CREATE" : "UNCHANGED";
64
+ }
65
+ async function rollbackCreatedInitFiles(root, plan, ownedPaths, changedUnownedPaths = []) {
66
+ const removed = [];
67
+ const unresolved = changedUnownedPaths.map((changedPath) => path.relative(root, changedPath).split(path.sep).join("/"));
68
+ for (const ownedPath of ownedPaths) {
69
+ const relative = path.relative(root, ownedPath).split(path.sep).join("/");
70
+ const plannedFile = plan.files.find((file) => file.path === relative);
71
+ if (plannedFile === undefined) {
72
+ unresolved.push(relative);
73
+ continue;
74
+ }
75
+ try {
76
+ const metadata = await lstat(ownedPath);
77
+ if (!metadata.isFile() ||
78
+ metadata.isSymbolicLink() ||
79
+ !(await readFile(ownedPath)).equals(Buffer.from(plannedFile.content, "utf8"))) {
80
+ unresolved.push(relative);
81
+ continue;
82
+ }
83
+ await unlink(ownedPath);
84
+ removed.push(relative);
85
+ }
86
+ catch (error) {
87
+ if (error.code === "ENOENT")
88
+ removed.push(relative);
89
+ else
90
+ unresolved.push(relative);
91
+ }
92
+ }
93
+ removed.sort((left, right) => left.localeCompare(right));
94
+ unresolved.sort((left, right) => left.localeCompare(right));
95
+ return {
96
+ status: unresolved.length === 0 ? "COMPLETE" : "PARTIAL",
97
+ removed,
98
+ unresolved,
99
+ };
100
+ }
101
+ function rollbackArtifactState(root, artifact, rollback) {
102
+ const relative = path.relative(root, artifact.path).split(path.sep).join("/");
103
+ if (rollback.removed.includes(relative))
104
+ return "ROLLED_BACK";
105
+ if (rollback.unresolved.includes(relative))
106
+ return "PARTIAL";
107
+ return artifact.state;
108
+ }
109
+ function mergeRollback(root, init, connection) {
110
+ const relative = (file) => path.relative(root, file).split(path.sep).join("/");
111
+ const removed = [...init.removed, ...connection.removed.map(relative)].sort((left, right) => left.localeCompare(right));
112
+ const unresolved = [...init.unresolved, ...connection.unresolved.map(relative)].sort((left, right) => left.localeCompare(right));
113
+ return { status: unresolved.length === 0 ? "COMPLETE" : "PARTIAL", removed, unresolved };
114
+ }
115
+ export async function setupRepository(root, cliEntry, client, write, dependencies = {}) {
116
+ const requestedRoot = path.resolve(root);
117
+ let initPlan;
118
+ try {
119
+ initPlan = await (dependencies.planInit?.(root) ??
120
+ initializeRepository(root, { dryRun: true }));
121
+ }
122
+ catch {
123
+ return {
124
+ status: "CONFLICT",
125
+ client,
126
+ mode: write ? "write" : "dry-run",
127
+ init: failedInitPreflight(),
128
+ connection: { client, status: "CONFLICT", artifacts: [] },
129
+ artifacts: [],
130
+ rollback: { status: "NOT_REQUIRED", removed: [], unresolved: [] },
131
+ limitations: [...SETUP_LIMITATIONS],
132
+ reasonCodes: ["INIT_PREFLIGHT_FAILED"],
133
+ nextActions: ["Inspect repository readability and permissions, then rerun setup."],
134
+ diagnosticPaths: [requestedRoot],
135
+ };
136
+ }
137
+ if (initPlan.status === "CONFLICT" && initPlan.reasonCodes.includes("REPOSITORY_ROOT_INVALID")) {
138
+ return {
139
+ status: "CONFLICT",
140
+ client,
141
+ mode: write ? "write" : "dry-run",
142
+ init: initPlan,
143
+ connection: { client, status: "CONFLICT", artifacts: [] },
144
+ artifacts: [],
145
+ rollback: { status: "NOT_REQUIRED", removed: [], unresolved: [] },
146
+ limitations: [...SETUP_LIMITATIONS],
147
+ reasonCodes: [...initPlan.reasonCodes],
148
+ nextActions: ["Provide an existing readable repository directory, then rerun setup."],
149
+ diagnosticPaths: [requestedRoot],
150
+ };
151
+ }
152
+ try {
153
+ root = await realpath(root);
154
+ }
155
+ catch {
156
+ return {
157
+ status: "CONFLICT",
158
+ client,
159
+ mode: write ? "write" : "dry-run",
160
+ init: initPlan,
161
+ connection: { client, status: "CONFLICT", artifacts: [] },
162
+ artifacts: [],
163
+ rollback: { status: "NOT_REQUIRED", removed: [], unresolved: [] },
164
+ limitations: [...SETUP_LIMITATIONS],
165
+ reasonCodes: ["SETUP_ROOT_RESOLUTION_FAILED"],
166
+ nextActions: ["Restore the repository directory, then rerun setup."],
167
+ diagnosticPaths: [requestedRoot],
168
+ };
169
+ }
170
+ const initArtifacts = initPlan.files.map((file) => ({
171
+ owner: "init",
172
+ path: path.join(root, file.path),
173
+ state: initArtifactState(initPlan, file.path),
174
+ }));
175
+ let connectionPlan;
176
+ try {
177
+ connectionPlan = await (dependencies.planConnection?.(root, cliEntry, client) ??
178
+ planClientConnection(root, cliEntry, client));
179
+ }
180
+ catch (error) {
181
+ const diagnostic = connectionPreflightDiagnostic(error, cliEntry);
182
+ return {
183
+ status: "CONFLICT",
184
+ client,
185
+ mode: write ? "write" : "dry-run",
186
+ init: initPlan,
187
+ connection: { client, status: "CONFLICT", artifacts: [] },
188
+ artifacts: initArtifacts,
189
+ rollback: { status: "NOT_REQUIRED", removed: [], unresolved: [] },
190
+ limitations: [...SETUP_LIMITATIONS],
191
+ reasonCodes: [diagnostic.reasonCode],
192
+ nextActions: [diagnostic.nextAction],
193
+ diagnosticPaths: diagnostic.paths,
194
+ };
195
+ }
196
+ const connectionArtifacts = connectionPlan.result.artifacts.flatMap((artifact, index) => {
197
+ if (artifact.path === null)
198
+ return [];
199
+ const state = connectionPlan.states[index];
200
+ if (state === undefined)
201
+ throw new Error("CONNECT_PLAN_INCONSISTENT");
202
+ return [
203
+ {
204
+ owner: "connection",
205
+ path: artifact.path,
206
+ state: state === "ABSENT" ? "WOULD_CREATE" : state,
207
+ },
208
+ ];
209
+ });
210
+ const artifacts = [...initArtifacts, ...connectionArtifacts];
211
+ const connectionPlanReasonCodes = connectionPlan.reasonCodes;
212
+ const initPlanReasonCodes = initPlan.status === "CONFLICT" || initPlan.status === "BLOCKED" ? initPlan.reasonCodes : [];
213
+ const reasonCodes = [...new Set([...initPlanReasonCodes, ...(connectionPlanReasonCodes ?? [])])];
214
+ const nextActions = [
215
+ ...(initPlanReasonCodes.length === 0
216
+ ? []
217
+ : ["Resolve the repository initialization reason codes, then rerun setup."]),
218
+ ...(connectionPlanReasonCodes?.includes("CONNECTION_TARGET_PATH_UNSAFE")
219
+ ? ["Replace unsafe client target paths with regular local paths, then rerun setup."]
220
+ : []),
221
+ ...(connectionPlanReasonCodes?.includes("CONNECTION_CONTENT_CONFLICT")
222
+ ? ["Inspect and resolve conflicting client artifact contents, then rerun setup."]
223
+ : []),
224
+ ];
225
+ const diagnosticPaths = [
226
+ ...(initPlanReasonCodes.length === 0 ? [] : [root]),
227
+ ...(connectionPlan.diagnosticPaths ?? []),
228
+ ];
229
+ const base = {
230
+ client,
231
+ mode: write ? "write" : "dry-run",
232
+ init: initPlan,
233
+ connection: connectionPlan.result,
234
+ artifacts,
235
+ rollback: { status: "NOT_REQUIRED", removed: [], unresolved: [] },
236
+ limitations: [...SETUP_LIMITATIONS],
237
+ ...(reasonCodes.length === 0
238
+ ? {}
239
+ : {
240
+ reasonCodes,
241
+ nextActions,
242
+ diagnosticPaths,
243
+ }),
244
+ };
245
+ if (initPlan.status === "CONFLICT" || connectionPlan.result.status === "CONFLICT") {
246
+ return { status: "CONFLICT", ...base };
247
+ }
248
+ if (initPlan.status === "BLOCKED")
249
+ return { status: "BLOCKED", ...base };
250
+ const unchanged = artifacts.every((artifact) => artifact.state === "UNCHANGED");
251
+ if (!write)
252
+ return { status: unchanged ? "UNCHANGED" : "WOULD_CREATE", ...base };
253
+ let appliedInit;
254
+ try {
255
+ appliedInit = await (dependencies.applyInit?.(root) ?? initializeRepository(root));
256
+ }
257
+ catch (error) {
258
+ const ownedPaths = error instanceof RepositoryInitWriteError ? error.installedPaths : [];
259
+ const initRollback = await rollbackCreatedInitFiles(root, initPlan, ownedPaths);
260
+ const temporaryArtifact = error instanceof RepositoryInitWriteError && error.temporaryCleanup !== "NOT_OWNED"
261
+ ? {
262
+ relative: path.relative(root, error.temporaryPath).split(path.sep).join("/"),
263
+ absolute: error.temporaryPath,
264
+ cleanup: error.temporaryCleanup,
265
+ }
266
+ : undefined;
267
+ const rollback = temporaryArtifact
268
+ ? {
269
+ status: initRollback.status === "PARTIAL" || temporaryArtifact.cleanup === "UNRESOLVED"
270
+ ? "PARTIAL"
271
+ : "COMPLETE",
272
+ removed: [
273
+ ...initRollback.removed,
274
+ ...(temporaryArtifact.cleanup === "REMOVED" ? [temporaryArtifact.relative] : []),
275
+ ].sort((left, right) => left.localeCompare(right)),
276
+ unresolved: [
277
+ ...initRollback.unresolved,
278
+ ...(temporaryArtifact.cleanup === "UNRESOLVED" ? [temporaryArtifact.relative] : []),
279
+ ].sort((left, right) => left.localeCompare(right)),
280
+ }
281
+ : initRollback;
282
+ const failedArtifacts = temporaryArtifact === undefined
283
+ ? artifacts
284
+ : [
285
+ ...artifacts,
286
+ {
287
+ owner: "init",
288
+ path: temporaryArtifact.absolute,
289
+ state: temporaryArtifact.cleanup === "UNRESOLVED"
290
+ ? "PARTIAL"
291
+ : "ROLLED_BACK",
292
+ },
293
+ ];
294
+ return {
295
+ status: "PARTIAL_FAILURE",
296
+ ...base,
297
+ artifacts: failedArtifacts.map((artifact) => ({
298
+ ...artifact,
299
+ state: artifact.path === temporaryArtifact?.absolute
300
+ ? artifact.state
301
+ : rollbackArtifactState(root, artifact, rollback),
302
+ })),
303
+ rollback,
304
+ reasonCodes: [
305
+ error instanceof RepositoryInitWriteError ? "INIT_APPLY_WRITE_FAILED" : "INIT_APPLY_FAILED",
306
+ ],
307
+ nextActions: ["Inspect rollback details, resolve unresolved paths, then rerun setup."],
308
+ diagnosticPaths: rollback.unresolved.map((relative) => path.join(root, relative)),
309
+ };
310
+ }
311
+ if (appliedInit.status === "CONFLICT" || appliedInit.status === "BLOCKED") {
312
+ return {
313
+ status: appliedInit.status,
314
+ ...base,
315
+ init: appliedInit,
316
+ };
317
+ }
318
+ let appliedConnection;
319
+ try {
320
+ await dependencies.afterInitApplied?.();
321
+ appliedConnection = await (dependencies.applyConnection?.() ??
322
+ connectClient(root, cliEntry, client, true));
323
+ }
324
+ catch (error) {
325
+ const initRollback = await rollbackCreatedInitFiles(root, appliedInit, appliedInit.actions
326
+ .filter((action) => action.kind === "CREATE")
327
+ .map((action) => path.join(root, action.path)), appliedInit.actions
328
+ .filter((action) => action.kind !== "CREATE")
329
+ .map((action) => path.join(root, action.path)));
330
+ if (!(error instanceof ClientConnectionApplyError)) {
331
+ return {
332
+ status: "PARTIAL_FAILURE",
333
+ ...base,
334
+ init: appliedInit,
335
+ artifacts: artifacts.map((artifact) => ({
336
+ ...artifact,
337
+ state: rollbackArtifactState(root, artifact, initRollback),
338
+ })),
339
+ rollback: initRollback,
340
+ reasonCodes: ["CONNECTION_APPLY_FAILED"],
341
+ nextActions: ["Inspect rollback details, resolve unresolved paths, then rerun setup."],
342
+ diagnosticPaths: initRollback.unresolved.map((relative) => path.join(root, relative)),
343
+ };
344
+ }
345
+ const rollback = mergeRollback(root, initRollback, error.rollback);
346
+ return {
347
+ status: "PARTIAL_FAILURE",
348
+ ...base,
349
+ init: appliedInit,
350
+ artifacts: artifacts.map((artifact) => ({
351
+ ...artifact,
352
+ state: rollbackArtifactState(root, artifact, rollback),
353
+ })),
354
+ rollback,
355
+ reasonCodes: ["CONNECTION_APPLY_FAILED"],
356
+ nextActions: ["Inspect rollback details, resolve unresolved paths, then rerun setup."],
357
+ diagnosticPaths: rollback.unresolved.map((relative) => path.join(root, relative)),
358
+ };
359
+ }
360
+ if (appliedConnection.status === "CONFLICT") {
361
+ const rollback = await rollbackCreatedInitFiles(root, appliedInit, appliedInit.actions
362
+ .filter((action) => action.kind === "CREATE")
363
+ .map((action) => path.join(root, action.path)), appliedInit.actions
364
+ .filter((action) => action.kind !== "CREATE")
365
+ .map((action) => path.join(root, action.path)));
366
+ const appliedReasonCodes = appliedConnection.reasonCodes ?? ["CONNECTION_APPLY_CONFLICT"];
367
+ const appliedDiagnosticPaths = appliedConnection.diagnosticPaths ??
368
+ appliedConnection.artifacts.flatMap((artifact) => artifact.path === null ? [] : [artifact.path]);
369
+ const appliedNextActions = [
370
+ ...(appliedReasonCodes.includes("CONNECTION_TARGET_PATH_UNSAFE")
371
+ ? ["Replace unsafe client target paths with regular local paths, then rerun setup."]
372
+ : []),
373
+ ...(appliedReasonCodes.includes("CONNECTION_CONTENT_CONFLICT")
374
+ ? ["Inspect and resolve conflicting client artifact contents, then rerun setup."]
375
+ : []),
376
+ ...(appliedReasonCodes.includes("CONNECTION_APPLY_CONFLICT")
377
+ ? ["Inspect conflicting client artifacts, then rerun setup."]
378
+ : []),
379
+ ];
380
+ return {
381
+ status: rollback.status === "COMPLETE" ? "CONFLICT" : "PARTIAL_FAILURE",
382
+ ...base,
383
+ init: appliedInit,
384
+ connection: appliedConnection,
385
+ artifacts: artifacts.map((artifact) => ({
386
+ ...artifact,
387
+ state: artifact.owner === "connection"
388
+ ? "CONFLICT"
389
+ : rollbackArtifactState(root, artifact, rollback),
390
+ })),
391
+ rollback,
392
+ reasonCodes: appliedReasonCodes,
393
+ nextActions: appliedNextActions,
394
+ diagnosticPaths: appliedDiagnosticPaths,
395
+ };
396
+ }
397
+ const appliedArtifacts = artifacts.map((artifact) => ({
398
+ ...artifact,
399
+ state: artifact.state === "WOULD_CREATE" ? "CREATED" : "UNCHANGED",
400
+ }));
401
+ return {
402
+ status: appliedInit.status === "UNCHANGED" && appliedConnection.status === "UNCHANGED"
403
+ ? "UNCHANGED"
404
+ : "CREATED",
405
+ ...base,
406
+ init: appliedInit,
407
+ connection: appliedConnection,
408
+ artifacts: appliedArtifacts,
409
+ };
410
+ }
411
+ //# sourceMappingURL=setup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/engine/setup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AACrE,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EACL,yBAAyB,GAG1B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,0BAA0B,EAG1B,aAAa,EACb,oBAAoB,GACrB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,oBAAoB,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AAyD5E,MAAM,iBAAiB,GAAG;IACxB,gFAAgF;IAChF,+FAA+F;IAC/F,qNAAqN;CACtN,CAAC;AAEF,SAAS,mBAAmB;IAC1B,OAAO,yBAAyB,CAAC;QAC/B,aAAa,EAAE,OAAO;QACtB,MAAM,EAAE,UAAU;QAClB,WAAW,EAAE,CAAC,uBAAuB,CAAC;QACtC,UAAU,EAAE;YACV,cAAc,EAAE,IAAI;YACpB,SAAS,EAAE,IAAI;YACf,WAAW,EAAE,IAAI;YACjB,WAAW,EAAE,EAAE;YACf,qBAAqB,EAAE,aAAa;YACpC,WAAW,EAAE,CAAC,uBAAuB,CAAC;SACvC;QACD,OAAO,EAAE,EAAE;QACX,KAAK,EAAE,EAAE;QACT,sBAAsB,EAAE,CAAC,QAAQ,EAAE,YAAY,CAAC;QAChD,YAAY,EAAE,CAAC,EAAE,UAAU,EAAE,cAAc,EAAE,SAAS,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,QAAQ,CAAC,EAAE,CAAC;KACpF,CAAC,CAAC;AACL,CAAC;AAED,SAAS,6BAA6B,CACpC,KAAc,EACd,QAAgB;IAEhB,MAAM,IAAI,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;IACzD,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CACzB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,EAClD,cAAc,EACd,OAAO,EACP,UAAU,CACX,CAAC;IACF,IAAI,IAAI,KAAK,wBAAwB,EAAE,CAAC;QACtC,OAAO;YACL,UAAU,EAAE,2BAA2B;YACvC,KAAK,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YAC/B,UAAU,EAAE,uEAAuE;SACpF,CAAC;IACJ,CAAC;IACD,IAAI,IAAI,KAAK,wBAAwB,EAAE,CAAC;QACtC,OAAO;YACL,UAAU,EAAE,2BAA2B;YACvC,KAAK,EAAE,CAAC,SAAS,CAAC;YAClB,UAAU,EACR,mFAAmF;SACtF,CAAC;IACJ,CAAC;IACD,IAAI,IAAI,KAAK,2BAA2B,EAAE,CAAC;QACzC,OAAO;YACL,UAAU,EAAE,8BAA8B;YAC1C,KAAK,EAAE,CAAC,SAAS,CAAC;YAClB,UAAU,EAAE,wEAAwE;SACrF,CAAC;IACJ,CAAC;IACD,OAAO;QACL,UAAU,EAAE,6BAA6B;QACzC,KAAK,EAAE,EAAE;QACT,UAAU,EAAE,iFAAiF;KAC9F,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CACxB,MAA+B,EAC/B,IAAY;IAEZ,IAAI,MAAM,CAAC,MAAM,KAAK,UAAU;QAAE,OAAO,UAAU,CAAC;IACpD,OAAO,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,WAAW,CAAC;AAC9F,CAAC;AAED,KAAK,UAAU,wBAAwB,CACrC,IAAY,EACZ,IAA6B,EAC7B,UAA6B,EAC7B,mBAAmB,GAAsB,EAAE;IAE3C,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,MAAM,UAAU,GAAG,mBAAmB,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE,CACzD,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAC3D,CAAC;IACF,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC1E,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC;QACtE,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;YAC9B,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC1B,SAAS;QACX,CAAC;QACD,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,SAAS,CAAC,CAAC;YACxC,IACE,CAAC,QAAQ,CAAC,MAAM,EAAE;gBAClB,QAAQ,CAAC,cAAc,EAAE;gBACzB,CAAC,CAAC,MAAM,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,EAC7E,CAAC;gBACD,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBAC1B,SAAS;YACX,CAAC;YACD,MAAM,MAAM,CAAC,SAAS,CAAC,CAAC;YACxB,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACzB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ;gBAAE,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;;gBAC1E,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACjC,CAAC;IACH,CAAC;IACD,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;IACzD,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;IAC5D,OAAO;QACL,MAAM,EAAE,UAAU,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS;QACxD,OAAO;QACP,UAAU;KACX,CAAC;AACJ,CAAC;AAED,SAAS,qBAAqB,CAC5B,IAAY,EACZ,QAAiC,EACjC,QAAiC;IAEjC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC9E,IAAI,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAAE,OAAO,aAAa,CAAC;IAC9D,IAAI,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAAE,OAAO,SAAS,CAAC;IAC7D,OAAO,QAAQ,CAAC,KAAK,CAAC;AACxB,CAAC;AAED,SAAS,aAAa,CACpB,IAAY,EACZ,IAA6B,EAC7B,UAAuD;IAEvD,MAAM,QAAQ,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACvF,MAAM,OAAO,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,EAAE,GAAG,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAC1F,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAC1B,CAAC;IACF,MAAM,UAAU,GAAG,CAAC,GAAG,IAAI,CAAC,UAAU,EAAE,GAAG,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAClF,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAC3C,CAAC;IACF,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC;AAC3F,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,IAAY,EACZ,QAAgB,EAChB,MAAmB,EACnB,KAAc,EACd,YAAY,GAAgC,EAAE;IAE9C,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACzC,IAAI,QAAiC,CAAC;IACtC,IAAI,CAAC;QACH,QAAQ,GAAG,MAAM,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC;YAC7C,oBAAoB,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAClD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO;YACL,MAAM,EAAE,UAAU;YAClB,MAAM;YACN,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS;YACjC,IAAI,EAAE,mBAAmB,EAAE;YAC3B,UAAU,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,EAAE,EAAE;YACzD,SAAS,EAAE,EAAE;YACb,QAAQ,EAAE,EAAE,MAAM,EAAE,cAAc,EAAE,OAAO,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE;YACjE,WAAW,EAAE,CAAC,GAAG,iBAAiB,CAAC;YACnC,WAAW,EAAE,CAAC,uBAAuB,CAAC;YACtC,WAAW,EAAE,CAAC,mEAAmE,CAAC;YAClF,eAAe,EAAE,CAAC,aAAa,CAAC;SACjC,CAAC;IACJ,CAAC;IACD,IAAI,QAAQ,CAAC,MAAM,KAAK,UAAU,IAAI,QAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC,yBAAyB,CAAC,EAAE,CAAC;QAC/F,OAAO;YACL,MAAM,EAAE,UAAU;YAClB,MAAM;YACN,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS;YACjC,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,EAAE,EAAE;YACzD,SAAS,EAAE,EAAE;YACb,QAAQ,EAAE,EAAE,MAAM,EAAE,cAAc,EAAE,OAAO,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE;YACjE,WAAW,EAAE,CAAC,GAAG,iBAAiB,CAAC;YACnC,WAAW,EAAE,CAAC,GAAG,QAAQ,CAAC,WAAW,CAAC;YACtC,WAAW,EAAE,CAAC,sEAAsE,CAAC;YACrF,eAAe,EAAE,CAAC,aAAa,CAAC;SACjC,CAAC;IACJ,CAAC;IACD,IAAI,CAAC;QACH,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO;YACL,MAAM,EAAE,UAAU;YAClB,MAAM;YACN,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS;YACjC,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,EAAE,EAAE;YACzD,SAAS,EAAE,EAAE;YACb,QAAQ,EAAE,EAAE,MAAM,EAAE,cAAc,EAAE,OAAO,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE;YACjE,WAAW,EAAE,CAAC,GAAG,iBAAiB,CAAC;YACnC,WAAW,EAAE,CAAC,8BAA8B,CAAC;YAC7C,WAAW,EAAE,CAAC,qDAAqD,CAAC;YACpE,eAAe,EAAE,CAAC,aAAa,CAAC;SACjC,CAAC;IACJ,CAAC;IACD,MAAM,aAAa,GAA8B,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAC7E,KAAK,EAAE,MAAM;QACb,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC;QAChC,KAAK,EAAE,iBAAiB,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC;KAC9C,CAAC,CAAC,CAAC;IACJ,IAAI,cAAoC,CAAC;IACzC,IAAI,CAAC;QACH,cAAc,GAAG,MAAM,CAAC,YAAY,CAAC,cAAc,EAAE,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC;YAC3E,oBAAoB,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;IAClD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,UAAU,GAAG,6BAA6B,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QAClE,OAAO;YACL,MAAM,EAAE,UAAU;YAClB,MAAM;YACN,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS;YACjC,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,EAAE,EAAE;YACzD,SAAS,EAAE,aAAa;YACxB,QAAQ,EAAE,EAAE,MAAM,EAAE,cAAc,EAAE,OAAO,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE;YACjE,WAAW,EAAE,CAAC,GAAG,iBAAiB,CAAC;YACnC,WAAW,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC;YACpC,WAAW,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC;YACpC,eAAe,EAAE,UAAU,CAAC,KAAK;SAClC,CAAC;IACJ,CAAC;IACD,MAAM,mBAAmB,GAA8B,cAAc,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAC5F,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE;QAClB,IAAI,QAAQ,CAAC,IAAI,KAAK,IAAI;YAAE,OAAO,EAAE,CAAC;QACtC,MAAM,KAAK,GAAG,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC3C,IAAI,KAAK,KAAK,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;QACtE,OAAO;YACL;gBACE,KAAK,EAAE,YAAqB;gBAC5B,IAAI,EAAE,QAAQ,CAAC,IAAI;gBACnB,KAAK,EAAE,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAE,cAAwB,CAAC,CAAC,CAAC,KAAK;aAC9D;SACF,CAAC;IACJ,CAAC,CACF,CAAC;IACF,MAAM,SAAS,GAAG,CAAC,GAAG,aAAa,EAAE,GAAG,mBAAmB,CAAC,CAAC;IAC7D,MAAM,yBAAyB,GAAG,cAAc,CAAC,WAAW,CAAC;IAC7D,MAAM,mBAAmB,GACvB,QAAQ,CAAC,MAAM,KAAK,UAAU,IAAI,QAAQ,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;IAC9F,MAAM,WAAW,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,mBAAmB,EAAE,GAAG,CAAC,yBAAyB,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACjG,MAAM,WAAW,GAAG;QAClB,GAAG,CAAC,mBAAmB,CAAC,MAAM,KAAK,CAAC;YAClC,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,CAAC,uEAAuE,CAAC,CAAC;QAC9E,GAAG,CAAC,yBAAyB,EAAE,QAAQ,CAAC,+BAA+B,CAAC;YACtE,CAAC,CAAC,CAAC,gFAAgF,CAAC;YACpF,CAAC,CAAC,EAAE,CAAC;QACP,GAAG,CAAC,yBAAyB,EAAE,QAAQ,CAAC,6BAA6B,CAAC;YACpE,CAAC,CAAC,CAAC,6EAA6E,CAAC;YACjF,CAAC,CAAC,EAAE,CAAC;KACR,CAAC;IACF,MAAM,eAAe,GAAG;QACtB,GAAG,CAAC,mBAAmB,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACnD,GAAG,CAAC,cAAc,CAAC,eAAe,IAAI,EAAE,CAAC;KAC1C,CAAC;IACF,MAAM,IAAI,GAAG;QACX,MAAM;QACN,IAAI,EAAE,KAAK,CAAC,CAAC,CAAE,OAAiB,CAAC,CAAC,CAAE,SAAmB;QACvD,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE,cAAc,CAAC,MAAM;QACjC,SAAS;QACT,QAAQ,EAAE,EAAE,MAAM,EAAE,cAAuB,EAAE,OAAO,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE;QAC1E,WAAW,EAAE,CAAC,GAAG,iBAAiB,CAAC;QACnC,GAAG,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC;YAC1B,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC;gBACE,WAAW;gBACX,WAAW;gBACX,eAAe;aAChB,CAAC;KACP,CAAC;IACF,IAAI,QAAQ,CAAC,MAAM,KAAK,UAAU,IAAI,cAAc,CAAC,MAAM,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;QAClF,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,IAAI,EAAE,CAAC;IACzC,CAAC;IACD,IAAI,QAAQ,CAAC,MAAM,KAAK,SAAS;QAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI,EAAE,CAAC;IACzE,MAAM,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,KAAK,WAAW,CAAC,CAAC;IAChF,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,cAAc,EAAE,GAAG,IAAI,EAAE,CAAC;IAEjF,IAAI,WAAoC,CAAC;IACzC,IAAI,CAAC;QACH,WAAW,GAAG,MAAM,CAAC,YAAY,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,IAAI,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAC;IACrF,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,UAAU,GAAG,KAAK,YAAY,wBAAwB,CAAC,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC;QACzF,MAAM,YAAY,GAAG,MAAM,wBAAwB,CAAC,IAAI,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;QAChF,MAAM,iBAAiB,GACrB,KAAK,YAAY,wBAAwB,IAAI,KAAK,CAAC,gBAAgB,KAAK,WAAW;YACjF,CAAC,CAAC;gBACE,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;gBAC5E,QAAQ,EAAE,KAAK,CAAC,aAAa;gBAC7B,OAAO,EAAE,KAAK,CAAC,gBAAgB;aAChC;YACH,CAAC,CAAC,SAAS,CAAC;QAChB,MAAM,QAAQ,GAA4B,iBAAiB;YACzD,CAAC,CAAC;gBACE,MAAM,EACJ,YAAY,CAAC,MAAM,KAAK,SAAS,IAAI,iBAAiB,CAAC,OAAO,KAAK,YAAY;oBAC7E,CAAC,CAAC,SAAS;oBACX,CAAC,CAAC,UAAU;gBAChB,OAAO,EAAE;oBACP,GAAG,YAAY,CAAC,OAAO;oBACvB,GAAG,CAAC,iBAAiB,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;iBACjF,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;gBAClD,UAAU,EAAE;oBACV,GAAG,YAAY,CAAC,UAAU;oBAC1B,GAAG,CAAC,iBAAiB,CAAC,OAAO,KAAK,YAAY,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;iBACpF,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;aACnD;YACH,CAAC,CAAC,YAAY,CAAC;QACjB,MAAM,eAAe,GACnB,iBAAiB,KAAK,SAAS;YAC7B,CAAC,CAAC,SAAS;YACX,CAAC,CAAC;gBACE,GAAG,SAAS;gBACZ;oBACE,KAAK,EAAE,MAAe;oBACtB,IAAI,EAAE,iBAAiB,CAAC,QAAQ;oBAChC,KAAK,EACH,iBAAiB,CAAC,OAAO,KAAK,YAAY;wBACxC,CAAC,CAAE,SAAmB;wBACtB,CAAC,CAAE,aAAuB;iBAC/B;aACF,CAAC;QACR,OAAO;YACL,MAAM,EAAE,iBAAiB;YACzB,GAAG,IAAI;YACP,SAAS,EAAE,eAAe,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;gBAC5C,GAAG,QAAQ;gBACX,KAAK,EACH,QAAQ,CAAC,IAAI,KAAK,iBAAiB,EAAE,QAAQ;oBAC3C,CAAC,CAAC,QAAQ,CAAC,KAAK;oBAChB,CAAC,CAAC,qBAAqB,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,CAAC;aACtD,CAAC,CAAC;YACH,QAAQ;YACR,WAAW,EAAE;gBACX,KAAK,YAAY,wBAAwB,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,mBAAmB;aAC5F;YACD,WAAW,EAAE,CAAC,uEAAuE,CAAC;YACtF,eAAe,EAAE,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;SAClF,CAAC;IACJ,CAAC;IACD,IAAI,WAAW,CAAC,MAAM,KAAK,UAAU,IAAI,WAAW,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAC1E,OAAO;YACL,MAAM,EAAE,WAAW,CAAC,MAAM;YAC1B,GAAG,IAAI;YACP,IAAI,EAAE,WAAW;SAClB,CAAC;IACJ,CAAC;IACD,IAAI,iBAAyC,CAAC;IAC9C,IAAI,CAAC;QACH,MAAM,YAAY,CAAC,gBAAgB,EAAE,EAAE,CAAC;QACxC,iBAAiB,GAAG,MAAM,CAAC,YAAY,CAAC,eAAe,EAAE,EAAE;YACzD,aAAa,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;IACjD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,YAAY,GAAG,MAAM,wBAAwB,CACjD,IAAI,EACJ,WAAW,EACX,WAAW,CAAC,OAAO;aAChB,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,QAAQ,CAAC;aAC5C,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,EAChD,WAAW,CAAC,OAAO;aAChB,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,QAAQ,CAAC;aAC5C,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CACjD,CAAC;QACF,IAAI,CAAC,CAAC,KAAK,YAAY,0BAA0B,CAAC,EAAE,CAAC;YACnD,OAAO;gBACL,MAAM,EAAE,iBAAiB;gBACzB,GAAG,IAAI;gBACP,IAAI,EAAE,WAAW;gBACjB,SAAS,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;oBACtC,GAAG,QAAQ;oBACX,KAAK,EAAE,qBAAqB,CAAC,IAAI,EAAE,QAAQ,EAAE,YAAY,CAAC;iBAC3D,CAAC,CAAC;gBACH,QAAQ,EAAE,YAAY;gBACtB,WAAW,EAAE,CAAC,yBAAyB,CAAC;gBACxC,WAAW,EAAE,CAAC,uEAAuE,CAAC;gBACtF,eAAe,EAAE,YAAY,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;aACtF,CAAC;QACJ,CAAC;QACD,MAAM,QAAQ,GAAG,aAAa,CAAC,IAAI,EAAE,YAAY,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;QACnE,OAAO;YACL,MAAM,EAAE,iBAAiB;YACzB,GAAG,IAAI;YACP,IAAI,EAAE,WAAW;YACjB,SAAS,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;gBACtC,GAAG,QAAQ;gBACX,KAAK,EAAE,qBAAqB,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,CAAC;aACvD,CAAC,CAAC;YACH,QAAQ;YACR,WAAW,EAAE,CAAC,yBAAyB,CAAC;YACxC,WAAW,EAAE,CAAC,uEAAuE,CAAC;YACtF,eAAe,EAAE,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;SAClF,CAAC;IACJ,CAAC;IACD,IAAI,iBAAiB,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;QAC5C,MAAM,QAAQ,GAAG,MAAM,wBAAwB,CAC7C,IAAI,EACJ,WAAW,EACX,WAAW,CAAC,OAAO;aAChB,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,QAAQ,CAAC;aAC5C,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,EAChD,WAAW,CAAC,OAAO;aAChB,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,QAAQ,CAAC;aAC5C,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CACjD,CAAC;QACF,MAAM,kBAAkB,GAAG,iBAAiB,CAAC,WAAW,IAAI,CAAC,2BAA2B,CAAC,CAAC;QAC1F,MAAM,sBAAsB,GAC1B,iBAAiB,CAAC,eAAe;YACjC,iBAAiB,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE,CAC/C,QAAQ,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAC9C,CAAC;QACJ,MAAM,kBAAkB,GAAG;YACzB,GAAG,CAAC,kBAAkB,CAAC,QAAQ,CAAC,+BAA+B,CAAC;gBAC9D,CAAC,CAAC,CAAC,gFAAgF,CAAC;gBACpF,CAAC,CAAC,EAAE,CAAC;YACP,GAAG,CAAC,kBAAkB,CAAC,QAAQ,CAAC,6BAA6B,CAAC;gBAC5D,CAAC,CAAC,CAAC,6EAA6E,CAAC;gBACjF,CAAC,CAAC,EAAE,CAAC;YACP,GAAG,CAAC,kBAAkB,CAAC,QAAQ,CAAC,2BAA2B,CAAC;gBAC1D,CAAC,CAAC,CAAC,yDAAyD,CAAC;gBAC7D,CAAC,CAAC,EAAE,CAAC;SACR,CAAC;QACF,OAAO;YACL,MAAM,EAAE,QAAQ,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,iBAAiB;YACvE,GAAG,IAAI;YACP,IAAI,EAAE,WAAW;YACjB,UAAU,EAAE,iBAAiB;YAC7B,SAAS,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;gBACtC,GAAG,QAAQ;gBACX,KAAK,EACH,QAAQ,CAAC,KAAK,KAAK,YAAY;oBAC7B,CAAC,CAAE,UAAoB;oBACvB,CAAC,CAAC,qBAAqB,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,CAAC;aACtD,CAAC,CAAC;YACH,QAAQ;YACR,WAAW,EAAE,kBAAkB;YAC/B,WAAW,EAAE,kBAAkB;YAC/B,eAAe,EAAE,sBAAsB;SACxC,CAAC;IACJ,CAAC;IACD,MAAM,gBAAgB,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QACpD,GAAG,QAAQ;QACX,KAAK,EAAE,QAAQ,CAAC,KAAK,KAAK,cAAc,CAAC,CAAC,CAAE,SAAmB,CAAC,CAAC,CAAE,WAAqB;KACzF,CAAC,CAAC,CAAC;IACJ,OAAO;QACL,MAAM,EACJ,WAAW,CAAC,MAAM,KAAK,WAAW,IAAI,iBAAiB,CAAC,MAAM,KAAK,WAAW;YAC5E,CAAC,CAAC,WAAW;YACb,CAAC,CAAC,SAAS;QACf,GAAG,IAAI;QACP,IAAI,EAAE,WAAW;QACjB,UAAU,EAAE,iBAAiB;QAC7B,SAAS,EAAE,gBAAgB;KAC5B,CAAC;AACJ,CAAC"}
@@ -11,6 +11,38 @@ The JSON form is the existing repository initialization result. `WOULD_CREATE` m
11
11
  configuration can be planned; it does not mean worlds, candidates, campaign evidence, or an MCP
12
12
  client connection are ready. `BLOCKED` exits with code 3 and `CONFLICT` with code 4.
13
13
 
14
+ For a single onboarding preflight, compose static initialization and the client connection:
15
+
16
+ ```text
17
+ assertledger setup . --client codex --dry-run --json
18
+ assertledger setup . --client codex --write --json
19
+ assertledger setup . --client claude-code --write --json
20
+ ```
21
+
22
+ `setup` previews when neither `--dry-run` nor `--write` is supplied. It checks every managed init
23
+ and connection target before writing any of them. A blocked initialization or any conflict leaves
24
+ the full managed set unchanged during preflight. If a connection conflict appears after init,
25
+ rollback removes only files created by this invocation whose bytes still match the plan. A changed
26
+ or regenerated file is preserved and yields `PARTIAL_FAILURE`, with the unresolved paths in JSON.
27
+ Exit codes are 3 for blocked readiness, 4 for a fully rolled-back conflict, 5 for partial failure or
28
+ unexpected I/O, and 64 for invalid CLI usage.
29
+
30
+ `setup --write` has no cross-process filesystem lock and requires a stable trusted repository tree.
31
+ A concurrent edit can be overwritten while an existing lock file is regenerated, or removed if it
32
+ replaces a managed file after the rollback byte check but before unlink. Stop concurrent writers
33
+ before setup; this stability requirement is a reported limitation, not a concurrency guarantee.
34
+
35
+ To confirm the installed engine can run its packaged example, execute:
36
+
37
+ ```text
38
+ assertledger demo --allow-unsafe-execution --json
39
+ ```
40
+
41
+ The authorization applies only to a copy of the shipped fixture in a disposable temporary
42
+ directory. The result is explicitly scoped to `SHIPPED_FIXTURE_ONLY`; it is not evidence about the
43
+ user repository and does not change that repository. Its `status` preserves the exact decision:
44
+ `VERIFIED`, `REJECTED`, `INCONCLUSIVE`, or `ENGINE_ERROR`. Exit codes match `verify`: 0, 2, 3, or 5.
45
+
14
46
  After installing and building AssertLedger, generate a project-local Codex MCP descriptor:
15
47
 
16
48
  ```text
package/docs/reference.md CHANGED
@@ -14,6 +14,9 @@ For a first run, use `assertledger doctor .` and the [Git qualification guide](g
14
14
  ```sh
15
15
  assertledger init . --dry-run --json
16
16
  assertledger init . --json
17
+ assertledger setup . --client codex --dry-run --json
18
+ assertledger setup . --client codex --write --json
19
+ assertledger demo --allow-unsafe-execution --json
17
20
  assertledger audit . --json
18
21
  assertledger analyze . --json
19
22
  assertledger schema verification-request --json
@@ -11,6 +11,20 @@ assertledger init . --json
11
11
  assertledger audit . --json
12
12
  ```
13
13
 
14
+ To initialize and install a project-local read-only agent connection through one preflight, use:
15
+
16
+ ```sh
17
+ assertledger setup . --client codex --dry-run --json
18
+ assertledger setup . --client codex --write --json
19
+ ```
20
+
21
+ `setup` previews by default. It composes the existing `init` and `connect` checks and refuses the
22
+ whole operation before its first managed-file write if either side is blocked or conflicting. Use
23
+ `--client claude-code` for Claude Code. It does not authorize execution, reload a client, or prove
24
+ repository behavior. If a new connection conflict appears after init, rollback removes only regular
25
+ init files created by this setup call whose bytes still equal the plan. A regenerated or changed
26
+ file is preserved and reported under `PARTIAL_FAILURE` with exit code 5.
27
+
14
28
  The dry run emits the exact canonical bytes and SHA-256 digests that a subsequent write plans to
15
29
  use. Writes use a same-directory temporary file followed by an atomic rename. A second run returns
16
30
  `UNCHANGED` without rewriting matching files. A missing lock or a stale, structurally valid lock
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "assertledger",
3
- "version": "1.2.0",
3
+ "version": "1.3.0",
4
4
  "description": "Verify that regression tests detect a declared bug, with deterministic verdicts and replayable evidence.",
5
5
  "type": "module",
6
6
  "private": false,