@msn-control/liftoff 0.11.1 → 0.11.2
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/DEVELOPER.md +28 -10
- package/README.md +11 -6
- package/dist/adapters/filesystem/project-transaction.d.ts +2 -1
- package/dist/adapters/filesystem/project-transaction.js +25 -6
- package/dist/adapters/filesystem/project-transaction.js.map +1 -1
- package/dist/adapters/filesystem/reviewed-update-transaction.d.ts +53 -0
- package/dist/adapters/filesystem/reviewed-update-transaction.js +864 -0
- package/dist/adapters/filesystem/reviewed-update-transaction.js.map +1 -0
- package/dist/adapters/filesystem/update-previews.d.ts +50 -0
- package/dist/adapters/filesystem/update-previews.js +613 -0
- package/dist/adapters/filesystem/update-previews.js.map +1 -0
- package/dist/adapters/process/shell-command.d.ts +1 -0
- package/dist/adapters/process/shell-command.js +7 -1
- package/dist/adapters/process/shell-command.js.map +1 -1
- package/dist/application/context.d.ts +5 -0
- package/dist/application/diagnose/doctor.js +9 -15
- package/dist/application/diagnose/doctor.js.map +1 -1
- package/dist/application/update/approval.d.ts +39 -0
- package/dist/application/update/approval.js +54 -0
- package/dist/application/update/approval.js.map +1 -0
- package/dist/application/update/command-guidance.d.ts +2 -0
- package/dist/application/update/command-guidance.js +14 -0
- package/dist/application/update/command-guidance.js.map +1 -0
- package/dist/application/update/inspection.d.ts +37 -0
- package/dist/application/update/inspection.js +235 -0
- package/dist/application/update/inspection.js.map +1 -0
- package/dist/application/update/migration-runtime.d.ts +14 -0
- package/dist/application/update/migration-runtime.js +178 -0
- package/dist/application/update/migration-runtime.js.map +1 -0
- package/dist/application/update/output.d.ts +134 -0
- package/dist/application/update/output.js +182 -0
- package/dist/application/update/output.js.map +1 -0
- package/dist/application/update/preview.d.ts +49 -0
- package/dist/application/update/preview.js +220 -0
- package/dist/application/update/preview.js.map +1 -0
- package/dist/application/update/protected-source.d.ts +25 -0
- package/dist/application/update/protected-source.js +81 -0
- package/dist/application/update/protected-source.js.map +1 -0
- package/dist/application/update/reporting.d.ts +4 -4
- package/dist/application/update/reporting.js +14 -13
- package/dist/application/update/reporting.js.map +1 -1
- package/dist/application/update/revalidation-plan.d.ts +22 -0
- package/dist/application/update/revalidation-plan.js +108 -0
- package/dist/application/update/revalidation-plan.js.map +1 -0
- package/dist/application/update/revalidation.d.ts +70 -0
- package/dist/application/update/revalidation.js +337 -0
- package/dist/application/update/revalidation.js.map +1 -0
- package/dist/application/update/review-plan.d.ts +25 -0
- package/dist/application/update/review-plan.js +89 -0
- package/dist/application/update/review-plan.js.map +1 -0
- package/dist/application/update/transaction-approval.d.ts +29 -0
- package/dist/application/update/transaction-approval.js +82 -0
- package/dist/application/update/transaction-approval.js.map +1 -0
- package/dist/application/update/use-case.d.ts +1 -0
- package/dist/application/update/use-case.js +240 -569
- package/dist/application/update/use-case.js.map +1 -1
- package/dist/application/update/write-plan.d.ts +15 -0
- package/dist/application/update/write-plan.js +115 -0
- package/dist/application/update/write-plan.js.map +1 -0
- package/dist/cli/args/definitions.js +5 -4
- package/dist/cli/args/definitions.js.map +1 -1
- package/dist/cli/args/help.js +13 -1
- package/dist/cli/args/help.js.map +1 -1
- package/dist/cli/args/parser.js +22 -7
- package/dist/cli/args/parser.js.map +1 -1
- package/dist/cli/commands/update.js +1 -0
- package/dist/cli/commands/update.js.map +1 -1
- package/dist/domain/governance/policy/identity.d.ts +1 -1
- package/dist/domain/governance/policy/identity.js +2 -2
- package/dist/domain/governance/policy/identity.js.map +1 -1
- package/dist/domain/project/infrastructure-layout.d.ts +1 -1
- package/dist/domain/project/infrastructure-layout.js +2 -1
- package/dist/domain/project/infrastructure-layout.js.map +1 -1
- package/dist/domain/project/reviewed-update-artifacts.d.ts +2 -0
- package/dist/domain/project/reviewed-update-artifacts.js +3 -0
- package/dist/domain/project/reviewed-update-artifacts.js.map +1 -0
- package/dist/generators/common/base.js +5 -1
- package/dist/generators/common/base.js.map +1 -1
- package/dist/governance-activation/activation-state.js +4 -1
- package/dist/governance-activation/activation-state.js.map +1 -1
- package/dist/governance-activation/commands.d.ts +5 -0
- package/dist/governance-activation/commands.js +65 -3
- package/dist/governance-activation/commands.js.map +1 -1
- package/dist/governance-activation/compatibility.d.ts +21 -4
- package/dist/governance-activation/compatibility.js +47 -8
- package/dist/governance-activation/compatibility.js.map +1 -1
- package/dist/governance-activation/doctor.js +32 -5
- package/dist/governance-activation/doctor.js.map +1 -1
- package/dist/governance-activation/historical-state.d.ts +81 -0
- package/dist/governance-activation/historical-state.js +817 -0
- package/dist/governance-activation/historical-state.js.map +1 -0
- package/dist/governance-activation/history-contracts.d.ts +109 -0
- package/dist/governance-activation/history-contracts.js +303 -0
- package/dist/governance-activation/history-contracts.js.map +1 -0
- package/dist/governance-activation/inputs.d.ts +2 -0
- package/dist/governance-activation/inputs.js +13 -1
- package/dist/governance-activation/inputs.js.map +1 -1
- package/dist/governance-activation/migration-history.d.ts +97 -0
- package/dist/governance-activation/migration-history.js +388 -0
- package/dist/governance-activation/migration-history.js.map +1 -0
- package/dist/governance-activation/migration.js +1 -1
- package/dist/governance-activation/migration.js.map +1 -1
- package/dist/governance-activation/proof-records.d.ts +3 -0
- package/dist/governance-activation/proof-records.js +78 -0
- package/dist/governance-activation/proof-records.js.map +1 -0
- package/dist/governance-activation/read-only.d.ts +4 -4
- package/dist/governance-activation/read-only.js +9 -69
- package/dist/governance-activation/read-only.js.map +1 -1
- package/dist/governance-activation/seed-lifecycle.d.ts +28 -6
- package/dist/governance-activation/seed-lifecycle.js +258 -25
- package/dist/governance-activation/seed-lifecycle.js.map +1 -1
- package/dist/governance-activation/transition-planning.d.ts +2 -0
- package/dist/governance-activation/transition-planning.js +12 -3
- package/dist/governance-activation/transition-planning.js.map +1 -1
- package/dist/governance-activation/transitions.d.ts +8 -2
- package/dist/governance-activation/transitions.js +36 -11
- package/dist/governance-activation/transitions.js.map +1 -1
- package/dist/governance-assessment/engine.js +30 -3
- package/dist/governance-assessment/engine.js.map +1 -1
- package/dist/governance-assessment/project.d.ts +7 -0
- package/dist/governance-assessment/project.js +44 -4
- package/dist/governance-assessment/project.js.map +1 -1
- package/dist/repository-governance.js +25 -12
- package/dist/repository-governance.js.map +1 -1
- package/docs/cli-reference.md +101 -28
- package/docs/configuration-and-manifests.md +27 -15
- package/docs/existing-repositories.md +19 -10
- package/docs/repository-governance.md +9 -5
- package/docs/safety-and-consent.md +27 -18
- package/docs/troubleshooting.md +9 -7
- package/docs/workloads.md +5 -4
- package/package.json +1 -1
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
import { lstat, realpath } from 'node:fs/promises';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import { captureProjectFileSnapshot } from '../../adapters/filesystem/project-transaction.js';
|
|
4
|
+
import { readProjectFile } from '../../adapters/filesystem/project-files.js';
|
|
5
|
+
import { errorCode } from '../../adapters/filesystem/errors.js';
|
|
6
|
+
import { FileSystemError } from '../../domain/project/errors.js';
|
|
7
|
+
import { manifestHadFilteredLegacyNonDurableOwnership } from '../../domain/project/manifest/reader.js';
|
|
8
|
+
import { activationStateFilePathParts } from '../../governance-activation/activation-state.js';
|
|
9
|
+
import { planHistoricalActivationStateMigration } from '../../governance-activation/migration.js';
|
|
10
|
+
import { planActivationHistoryMigration } from '../../governance-activation/migration-history.js';
|
|
11
|
+
import { migrationStateFilePathParts } from '../../governance-activation/history-contracts.js';
|
|
12
|
+
import { readActivationInputSnapshot } from '../../governance-activation/inputs.js';
|
|
13
|
+
import { phaseIds } from '../../domain/governance/activation/types.js';
|
|
14
|
+
import { inspectReviewedUpdateTransaction } from '../../adapters/filesystem/reviewed-update-transaction.js';
|
|
15
|
+
import { captureRetainedProjectInputs } from './protected-source.js';
|
|
16
|
+
import { formatUpdateCommand } from './command-guidance.js';
|
|
17
|
+
import { hasDrift, reconcileProject } from '../../reconcile.js';
|
|
18
|
+
import { compareSemver } from '../../semver.js';
|
|
19
|
+
import { buildManifest } from '../../templates.js';
|
|
20
|
+
import { liftoffVersion } from '../../version.js';
|
|
21
|
+
import { loadManifest } from '../project/manifest.js';
|
|
22
|
+
import { buildProjectPlan, loadConfigOptions } from '../project/planning.js';
|
|
23
|
+
import { buildUpdateArtifacts, captureUpdateSnapshots, inspectProvisioningGroups, planWithBlockedProvisioning, requestedProvisioningGroups, sameWorkloadIntent } from './planning.js';
|
|
24
|
+
import { activeChangeReconciliationReport, combineReconciliationReports, manifestChanges, stateMigrationReconciliation, summarizeEntries } from './reporting.js';
|
|
25
|
+
export class UpdatePlanError extends Error {
|
|
26
|
+
reasonCode;
|
|
27
|
+
remedy;
|
|
28
|
+
constructor(message, reasonCode, remedy) {
|
|
29
|
+
super(message);
|
|
30
|
+
this.reasonCode = reasonCode;
|
|
31
|
+
this.remedy = remedy;
|
|
32
|
+
this.name = 'UpdatePlanError';
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
export function preserveDiagnosticGovernanceIdentity(target, source) {
|
|
36
|
+
if (target.governance.profile === 'none' || target.governance.profile === 'unspecified' ||
|
|
37
|
+
source.governance.profile === 'none' || source.governance.profile === 'unspecified')
|
|
38
|
+
return;
|
|
39
|
+
target.governance.policyVersion = source.governance.policyVersion;
|
|
40
|
+
if (source.governance.activationIdentity) {
|
|
41
|
+
target.governance.activationIdentity = source.governance.activationIdentity;
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
delete target.governance.activationIdentity;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
export async function findUpdateRepositoryBoundary(projectRoot) {
|
|
48
|
+
let current = projectRoot;
|
|
49
|
+
while (true) {
|
|
50
|
+
try {
|
|
51
|
+
const marker = await lstat(path.join(current, '.git'));
|
|
52
|
+
if (!marker.isDirectory() && !marker.isFile()) {
|
|
53
|
+
throw new FileSystemError('The Git boundary must be a regular file or directory, not a symlink.');
|
|
54
|
+
}
|
|
55
|
+
return await realpath(current);
|
|
56
|
+
}
|
|
57
|
+
catch (error) {
|
|
58
|
+
if (errorCode(error) !== 'ENOENT')
|
|
59
|
+
throw error;
|
|
60
|
+
}
|
|
61
|
+
const parent = path.dirname(current);
|
|
62
|
+
if (parent === current)
|
|
63
|
+
return undefined;
|
|
64
|
+
current = parent;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
async function assertUpdateIntent(projectRoot, manifest, plan) {
|
|
68
|
+
const recorded = manifest.project.workload;
|
|
69
|
+
const separateMigration = 'Restore liftoff.config.json or perform a separately reviewed project migration.';
|
|
70
|
+
if (plan.projectName !== manifest.project.name) {
|
|
71
|
+
throw new UpdatePlanError(`Project name changes (${manifest.project.name} -> ${plan.projectName}) are a migration, not an update.`, 'project-identity-change', separateMigration);
|
|
72
|
+
}
|
|
73
|
+
if (plan.workload !== recorded.kind) {
|
|
74
|
+
throw new UpdatePlanError(`Project type changes (${recorded.kind} -> ${plan.workload}) are not supported by update.`, 'workload-change', separateMigration);
|
|
75
|
+
}
|
|
76
|
+
for (const [label, from, to] of [
|
|
77
|
+
['Cloud', recorded.cloud, plan.provider.id],
|
|
78
|
+
['Region', recorded.region, plan.region.slug],
|
|
79
|
+
['API stack', recorded.apiStack, plan.apiStack.id]
|
|
80
|
+
]) {
|
|
81
|
+
if (from !== to) {
|
|
82
|
+
throw new UpdatePlanError(`${label} changes (${from} -> ${to}) are a migration, not an update.`, 'workload-identity-change', separateMigration);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
const recordedPattern = recorded.kind === 'genai' ? recorded.pattern : undefined;
|
|
86
|
+
const desiredPattern = plan.workload === 'genai' ? plan.pattern.id : undefined;
|
|
87
|
+
if (recordedPattern !== desiredPattern) {
|
|
88
|
+
throw new UpdatePlanError(`Pattern changes (${recordedPattern ?? 'none'} -> ${desiredPattern ?? 'none'}) are a migration, not an update.`, 'pattern-change', separateMigration);
|
|
89
|
+
}
|
|
90
|
+
if (manifest.governance.profile !== 'none' && manifest.governance.profile !== 'unspecified' &&
|
|
91
|
+
plan.governanceProfile.id === 'none' &&
|
|
92
|
+
await readProjectFile(projectRoot, [...activationStateFilePathParts]) !== undefined) {
|
|
93
|
+
throw new UpdatePlanError('Repository governance cannot be disabled by update while governance/activation-state.json exists.', 'deactivation-required', 'Restore liftoff.config.json or use a separately supported deactivation workflow; update does not infer the absence of live enforcement.');
|
|
94
|
+
}
|
|
95
|
+
if (plan.specWorkflow.id !== manifest.project.specWorkflow) {
|
|
96
|
+
throw new UpdatePlanError(`Spec workflow changes (${manifest.project.specWorkflow} -> ${plan.specWorkflow.id}) require official framework initialization and are not supported by liftoff update.`, 'framework-change', separateMigration);
|
|
97
|
+
}
|
|
98
|
+
if (manifest.framework.state === 'initialized' && (plan.agents.length !== manifest.project.agents.length ||
|
|
99
|
+
plan.agents.some((agent, index) => agent.id !== manifest.project.agents[index]) ||
|
|
100
|
+
plan.defaultAgent?.id !== manifest.project.defaultAgent)) {
|
|
101
|
+
throw new UpdatePlanError('AI agent or default-agent changes require official framework initialization and are not supported by liftoff update.', 'agent-change', 'Restore the integrations recorded in liftoff.manifest.json.');
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
export async function inspectProjectUpdate(projectDirectory, options = {}) {
|
|
105
|
+
const projectRoot = await realpath(projectDirectory);
|
|
106
|
+
const initialSnapshots = [
|
|
107
|
+
await captureProjectFileSnapshot(projectRoot, ['liftoff.manifest.json'])
|
|
108
|
+
];
|
|
109
|
+
const manifest = await loadManifest(projectRoot);
|
|
110
|
+
const interrupted = await inspectReviewedUpdateTransaction(projectRoot);
|
|
111
|
+
if (interrupted.status !== 'absent') {
|
|
112
|
+
throw new UpdatePlanError('An existing update transaction requires recovery before a new preview.', 'transaction-recovery-required', `Review the reported transaction and run ${formatUpdateCommand(projectRoot)} for bounded recovery.`);
|
|
113
|
+
}
|
|
114
|
+
if (compareSemver(manifest.liftoffVersion, liftoffVersion) > 0) {
|
|
115
|
+
throw new UpdatePlanError(`This project was written by Liftoff ${manifest.liftoffVersion}, which is newer than this CLI (${liftoffVersion}).`, 'newer-project', 'Upgrade the CLI first.');
|
|
116
|
+
}
|
|
117
|
+
initialSnapshots.push(await captureProjectFileSnapshot(projectRoot, ['liftoff.config.json']));
|
|
118
|
+
const config = await loadConfigOptions('liftoff.config.json', projectRoot);
|
|
119
|
+
if (config.cloud !== undefined && config.cloud !== manifest.project.workload.cloud) {
|
|
120
|
+
throw new UpdatePlanError(`Cloud changes (${manifest.project.workload.cloud} -> ${config.cloud}) are a migration, not an update.`, 'workload-identity-change', 'Restore liftoff.config.json or perform a separately reviewed project migration.');
|
|
121
|
+
}
|
|
122
|
+
const plan = buildProjectPlan(config, { requireProjectName: true });
|
|
123
|
+
await assertUpdateIntent(projectRoot, manifest, plan);
|
|
124
|
+
initialSnapshots.push(await captureProjectFileSnapshot(projectRoot, [...activationStateFilePathParts]));
|
|
125
|
+
initialSnapshots.push(await captureProjectFileSnapshot(projectRoot, [...migrationStateFilePathParts]));
|
|
126
|
+
const desiredRenderPlan = manifest.framework.state === 'legacy'
|
|
127
|
+
? { ...plan, agents: [], defaultAgent: undefined }
|
|
128
|
+
: plan;
|
|
129
|
+
const stateMigration = await planHistoricalActivationStateMigration(projectRoot);
|
|
130
|
+
let historyMigration = await planActivationHistoryMigration(projectRoot);
|
|
131
|
+
if (historyMigration.status === 'blocked' &&
|
|
132
|
+
historyMigration.reasonCode === 'unreviewed-historical-records' && historyMigration.unreviewedPathParts) {
|
|
133
|
+
historyMigration = await planActivationHistoryMigration(projectRoot, {
|
|
134
|
+
reviewedUnreferencedPathParts: historyMigration.unreviewedPathParts
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
const desiredRender = buildUpdateArtifacts(desiredRenderPlan, manifest);
|
|
138
|
+
let provisioningPlans = await inspectProvisioningGroups(projectRoot, desiredRender, requestedProvisioningGroups(manifest, desiredRenderPlan));
|
|
139
|
+
if (historyMigration.status === 'eligible' || stateMigration.report.diagnosticOnly === true) {
|
|
140
|
+
provisioningPlans = provisioningPlans.map((group) => ({
|
|
141
|
+
...group, entries: [], blocked: true,
|
|
142
|
+
reason: 'Activation migration defers new component provisioning until a fresh post-migration preview.'
|
|
143
|
+
}));
|
|
144
|
+
}
|
|
145
|
+
const renderPlan = planWithBlockedProvisioning(desiredRenderPlan, manifest.project.workload, provisioningPlans);
|
|
146
|
+
const render = buildUpdateArtifacts(renderPlan, manifest);
|
|
147
|
+
const scopedRender = [
|
|
148
|
+
...render.filter((artifact) => artifact.lifecycle === 'managed-core'),
|
|
149
|
+
...desiredRender.filter((artifact) => artifact.lifecycle === 'project' &&
|
|
150
|
+
provisioningPlans.some((group) => !group.blocked && group.group === artifact.provisioningGroup))
|
|
151
|
+
];
|
|
152
|
+
const snapshots = await captureUpdateSnapshots(projectRoot, manifest, scopedRender, initialSnapshots);
|
|
153
|
+
if (historyMigration.status === 'eligible') {
|
|
154
|
+
snapshots.push(...historyMigration.preconditions);
|
|
155
|
+
}
|
|
156
|
+
else if (historyMigration.status === 'current' && historyMigration.history.status === 'committed') {
|
|
157
|
+
snapshots.push(await captureProjectFileSnapshot(projectRoot, historyMigration.history.journal.historyIndexPathParts), ...await Promise.all(historyMigration.history.index.files.map((file) => captureProjectFileSnapshot(projectRoot, file.copyPathParts))));
|
|
158
|
+
}
|
|
159
|
+
const entries = await reconcileProject(manifest, render, projectRoot);
|
|
160
|
+
const ownershipMigrationPending = manifest.artifactVersion !== 7 ||
|
|
161
|
+
manifestHadFilteredLegacyNonDurableOwnership(manifest);
|
|
162
|
+
const plannedManifest = buildManifest(renderPlan, render, {
|
|
163
|
+
frameworkState: manifest.framework.state, projectArtifacts: manifest.projectArtifacts
|
|
164
|
+
});
|
|
165
|
+
if (stateMigration.report.diagnosticOnly === true && historyMigration.status !== 'eligible') {
|
|
166
|
+
preserveDiagnosticGovernanceIdentity(plannedManifest, manifest);
|
|
167
|
+
}
|
|
168
|
+
const workloadIntentChanged = !sameWorkloadIntent(plannedManifest.project.workload, manifest.project.workload);
|
|
169
|
+
const historicalReconciliation = historyMigration.status === 'blocked' ? {
|
|
170
|
+
status: 'blocked', changedIdentityFields: [],
|
|
171
|
+
phaseImpact: { preservedPhaseIds: [], invalidPhaseIds: [] },
|
|
172
|
+
issues: historyMigration.issues,
|
|
173
|
+
remedy: 'Repair the exact historical compatibility or record issue; force cannot authorize an unsupported migration.'
|
|
174
|
+
} : historyMigration.status === 'eligible' ? {
|
|
175
|
+
status: 'reconciliation-required',
|
|
176
|
+
changedIdentityFields: [{
|
|
177
|
+
field: 'governance.activationIdentity',
|
|
178
|
+
from: historyMigration.semanticPlan.sourceIdentity,
|
|
179
|
+
to: historyMigration.semanticPlan.targetIdentity
|
|
180
|
+
}],
|
|
181
|
+
phaseImpact: { preservedPhaseIds: [], invalidPhaseIds: [...phaseIds] },
|
|
182
|
+
issues: ['Original v1 history will be preserved; current v2 proof must be established by approved local revalidation.'],
|
|
183
|
+
remedy: 'Review the history-preserving successor plan and explicitly approve the matching preview.'
|
|
184
|
+
} : stateMigrationReconciliation(stateMigration);
|
|
185
|
+
const activeChangeReport = await activeChangeReconciliationReport(projectRoot, historyMigration.status === 'eligible' ? historyMigration.inventory.state.activeChange : undefined);
|
|
186
|
+
if (historyMigration.status === 'eligible' && activeChangeReport.status !== 'not-required') {
|
|
187
|
+
activeChangeReport.status = 'blocked';
|
|
188
|
+
}
|
|
189
|
+
const reconciliation = combineReconciliationReports([historicalReconciliation, activeChangeReport]);
|
|
190
|
+
const hasMigrationHistory = historyMigration.status === 'eligible' ||
|
|
191
|
+
historyMigration.status === 'current' && historyMigration.history.status === 'committed';
|
|
192
|
+
const revalidationSource = hasMigrationHistory
|
|
193
|
+
? await readActivationInputSnapshot(projectRoot, manifest, options.runner)
|
|
194
|
+
: undefined;
|
|
195
|
+
const retainedSource = hasMigrationHistory ? await captureRetainedProjectInputs(projectRoot) : undefined;
|
|
196
|
+
return {
|
|
197
|
+
projectRoot,
|
|
198
|
+
repositoryRoot: await findUpdateRepositoryBoundary(projectRoot),
|
|
199
|
+
manifest,
|
|
200
|
+
plan,
|
|
201
|
+
renderPlan,
|
|
202
|
+
render,
|
|
203
|
+
entries,
|
|
204
|
+
oldByName: new Map(manifest.managedArtifacts.map((artifact) => [artifact.logicalName, artifact])),
|
|
205
|
+
provisioningPlans,
|
|
206
|
+
snapshots: uniqueUpdateSnapshots(snapshots, projectRoot),
|
|
207
|
+
stateMigration,
|
|
208
|
+
historyMigration,
|
|
209
|
+
revalidationSource,
|
|
210
|
+
retainedSource,
|
|
211
|
+
reconciliation,
|
|
212
|
+
ownershipMigrationPending,
|
|
213
|
+
workloadIntentChanged,
|
|
214
|
+
plannedManifestChanges: manifestChanges(manifest, plannedManifest),
|
|
215
|
+
summary: summarizeEntries(entries),
|
|
216
|
+
hasDrift: hasDrift(entries) || ownershipMigrationPending || workloadIntentChanged ||
|
|
217
|
+
provisioningPlans.length > 0 || stateMigration.status === 'migrate' ||
|
|
218
|
+
historyMigration.status === 'eligible'
|
|
219
|
+
};
|
|
220
|
+
}
|
|
221
|
+
export function uniqueUpdateSnapshots(snapshots, projectRoot) {
|
|
222
|
+
const unique = new Map();
|
|
223
|
+
for (const snapshot of snapshots) {
|
|
224
|
+
const key = snapshot.pathParts.join('\0');
|
|
225
|
+
const previous = unique.get(key);
|
|
226
|
+
if (previous && ((previous.content === undefined) !== (snapshot.content === undefined) ||
|
|
227
|
+
previous.mode !== snapshot.mode ||
|
|
228
|
+
previous.content?.equals(snapshot.content) === false)) {
|
|
229
|
+
throw new UpdatePlanError(`Project input changed during preview: ${snapshot.pathParts.join('/')}`, 'inputs-changed', `Run ${formatUpdateCommand(projectRoot, 'check')} again.`);
|
|
230
|
+
}
|
|
231
|
+
unique.set(key, snapshot);
|
|
232
|
+
}
|
|
233
|
+
return [...unique.values()];
|
|
234
|
+
}
|
|
235
|
+
//# sourceMappingURL=inspection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inspection.js","sourceRoot":"","sources":["../../../src/application/update/inspection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,0BAA0B,EAA4B,MAAM,kDAAkD,CAAC;AACxH,OAAO,EAAE,eAAe,EAAE,MAAM,4CAA4C,CAAC;AAC7E,OAAO,EAAE,SAAS,EAAE,MAAM,qCAAqC,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,EAAE,4CAA4C,EAAE,MAAM,yCAAyC,CAAC;AAEvG,OAAO,EAAE,4BAA4B,EAAE,MAAM,iDAAiD,CAAC;AAC/F,OAAO,EAAE,sCAAsC,EAAE,MAAM,0CAA0C,CAAC;AAClG,OAAO,EAAE,8BAA8B,EAAE,MAAM,kDAAkD,CAAC;AAClG,OAAO,EAAE,2BAA2B,EAAE,MAAM,kDAAkD,CAAC;AAC/F,OAAO,EAAE,2BAA2B,EAAE,MAAM,uCAAuC,CAAC;AACpF,OAAO,EAAE,QAAQ,EAAE,MAAM,6CAA6C,CAAC;AACvE,OAAO,EAAE,gCAAgC,EAAE,MAAM,0DAA0D,CAAC;AAE5G,OAAO,EAAE,4BAA4B,EAAE,MAAM,uBAAuB,CAAC;AACrE,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC7E,OAAO,EACL,oBAAoB,EACpB,sBAAsB,EACtB,yBAAyB,EACzB,2BAA2B,EAC3B,2BAA2B,EAC3B,kBAAkB,EACnB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,gCAAgC,EAChC,4BAA4B,EAC5B,eAAe,EACf,4BAA4B,EAC5B,gBAAgB,EAEjB,MAAM,gBAAgB,CAAC;AAExB,MAAM,OAAO,eAAgB,SAAQ,KAAK;IAG7B,UAAU;IACV,MAAM;IAHjB,YACE,OAAe,EACN,UAAkB,EAClB,MAAc;QAEvB,KAAK,CAAC,OAAO,CAAC,CAAC;0BAHN,UAAU;sBACV,MAAM;QAGf,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;IAChC,CAAC;CACF;AAED,MAAM,UAAU,oCAAoC,CAClD,MAAuB,EACvB,MAAuB;IAEvB,IACE,MAAM,CAAC,UAAU,CAAC,OAAO,KAAK,MAAM,IAAI,MAAM,CAAC,UAAU,CAAC,OAAO,KAAK,aAAa;QACnF,MAAM,CAAC,UAAU,CAAC,OAAO,KAAK,MAAM,IAAI,MAAM,CAAC,UAAU,CAAC,OAAO,KAAK,aAAa;QACnF,OAAO;IACT,MAAM,CAAC,UAAU,CAAC,aAAa,GAAG,MAAM,CAAC,UAAU,CAAC,aAAa,CAAC;IAClE,IAAI,MAAM,CAAC,UAAU,CAAC,kBAAkB,EAAE,CAAC;QACzC,MAAM,CAAC,UAAU,CAAC,kBAAkB,GAAG,MAAM,CAAC,UAAU,CAAC,kBAAkB,CAAC;IAC9E,CAAC;SAAM,CAAC;QACN,OAAO,MAAM,CAAC,UAAU,CAAC,kBAAkB,CAAC;IAC9C,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,4BAA4B,CAAC,WAAmB;IACpE,IAAI,OAAO,GAAG,WAAW,CAAC;IAC1B,OAAO,IAAI,EAAE,CAAC;QACZ,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;YACvD,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC;gBAC9C,MAAM,IAAI,eAAe,CAAC,sEAAsE,CAAC,CAAC;YACpG,CAAC;YACD,OAAO,MAAM,QAAQ,CAAC,OAAO,CAAC,CAAC;QACjC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,SAAS,CAAC,KAAK,CAAC,KAAK,QAAQ;gBAAE,MAAM,KAAK,CAAC;QACjD,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACrC,IAAI,MAAM,KAAK,OAAO;YAAE,OAAO,SAAS,CAAC;QACzC,OAAO,GAAG,MAAM,CAAC;IACnB,CAAC;AACH,CAAC;AAED,KAAK,UAAU,kBAAkB,CAC/B,WAAmB,EACnB,QAAyB,EACzB,IAAiB;IAEjB,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC;IAC3C,MAAM,iBAAiB,GAAG,iFAAiF,CAAC;IAC5G,IAAI,IAAI,CAAC,WAAW,KAAK,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QAC/C,MAAM,IAAI,eAAe,CACvB,yBAAyB,QAAQ,CAAC,OAAO,CAAC,IAAI,OAAO,IAAI,CAAC,WAAW,mCAAmC,EACxG,yBAAyB,EAAE,iBAAiB,CAC7C,CAAC;IACJ,CAAC;IACD,IAAI,IAAI,CAAC,QAAQ,KAAK,QAAQ,CAAC,IAAI,EAAE,CAAC;QACpC,MAAM,IAAI,eAAe,CACvB,yBAAyB,QAAQ,CAAC,IAAI,OAAO,IAAI,CAAC,QAAQ,gCAAgC,EAC1F,iBAAiB,EAAE,iBAAiB,CACrC,CAAC;IACJ,CAAC;IACD,KAAK,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI;QAC9B,CAAC,OAAO,EAAE,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC3C,CAAC,QAAQ,EAAE,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;QAC7C,CAAC,WAAW,EAAE,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;KAC1C,EAAE,CAAC;QACX,IAAI,IAAI,KAAK,EAAE,EAAE,CAAC;YAChB,MAAM,IAAI,eAAe,CACvB,GAAG,KAAK,aAAa,IAAI,OAAO,EAAE,mCAAmC,EACrE,0BAA0B,EAAE,iBAAiB,CAC9C,CAAC;QACJ,CAAC;IACH,CAAC;IACD,MAAM,eAAe,GAAG,QAAQ,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;IACjF,MAAM,cAAc,GAAG,IAAI,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IAC/E,IAAI,eAAe,KAAK,cAAc,EAAE,CAAC;QACvC,MAAM,IAAI,eAAe,CACvB,oBAAoB,eAAe,IAAI,MAAM,OAAO,cAAc,IAAI,MAAM,mCAAmC,EAC/G,gBAAgB,EAAE,iBAAiB,CACpC,CAAC;IACJ,CAAC;IACD,IACE,QAAQ,CAAC,UAAU,CAAC,OAAO,KAAK,MAAM,IAAI,QAAQ,CAAC,UAAU,CAAC,OAAO,KAAK,aAAa;QACvF,IAAI,CAAC,iBAAiB,CAAC,EAAE,KAAK,MAAM;QACpC,MAAM,eAAe,CAAC,WAAW,EAAE,CAAC,GAAG,4BAA4B,CAAC,CAAC,KAAK,SAAS,EACnF,CAAC;QACD,MAAM,IAAI,eAAe,CACvB,mGAAmG,EACnG,uBAAuB,EACvB,yIAAyI,CAC1I,CAAC;IACJ,CAAC;IACD,IAAI,IAAI,CAAC,YAAY,CAAC,EAAE,KAAK,QAAQ,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC;QAC3D,MAAM,IAAI,eAAe,CACvB,0BAA0B,QAAQ,CAAC,OAAO,CAAC,YAAY,OAAO,IAAI,CAAC,YAAY,CAAC,EAAE,sFAAsF,EACxK,kBAAkB,EAAE,iBAAiB,CACtC,CAAC;IACJ,CAAC;IACD,IACE,QAAQ,CAAC,SAAS,CAAC,KAAK,KAAK,aAAa,IAAI,CAC5C,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM;QACrD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC/E,IAAI,CAAC,YAAY,EAAE,EAAE,KAAK,QAAQ,CAAC,OAAO,CAAC,YAAY,CACxD,EACD,CAAC;QACD,MAAM,IAAI,eAAe,CACvB,sHAAsH,EACtH,cAAc,EAAE,6DAA6D,CAC9E,CAAC;IACJ,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,gBAAwB,EACxB,OAAO,GAA+B,EAAE;IAExC,MAAM,WAAW,GAAG,MAAM,QAAQ,CAAC,gBAAgB,CAAC,CAAC;IACrD,MAAM,gBAAgB,GAAG;QACvB,MAAM,0BAA0B,CAAC,WAAW,EAAE,CAAC,uBAAuB,CAAC,CAAC;KACzE,CAAC;IACF,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,WAAW,CAAC,CAAC;IACjD,MAAM,WAAW,GAAG,MAAM,gCAAgC,CAAC,WAAW,CAAC,CAAC;IACxE,IAAI,WAAW,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;QACpC,MAAM,IAAI,eAAe,CACvB,wEAAwE,EACxE,+BAA+B,EAC/B,2CAA2C,mBAAmB,CAAC,WAAW,CAAC,wBAAwB,CACpG,CAAC;IACJ,CAAC;IACD,IAAI,aAAa,CAAC,QAAQ,CAAC,cAAc,EAAE,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC;QAC/D,MAAM,IAAI,eAAe,CACvB,uCAAuC,QAAQ,CAAC,cAAc,mCAAmC,cAAc,IAAI,EACnH,eAAe,EAAE,wBAAwB,CAC1C,CAAC;IACJ,CAAC;IACD,gBAAgB,CAAC,IAAI,CAAC,MAAM,0BAA0B,CAAC,WAAW,EAAE,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;IAC9F,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,qBAAqB,EAAE,WAAW,CAAC,CAAC;IAC3E,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS,IAAI,MAAM,CAAC,KAAK,KAAK,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;QACnF,MAAM,IAAI,eAAe,CACvB,kBAAkB,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,OAAO,MAAM,CAAC,KAAK,mCAAmC,EACvG,0BAA0B,EAAE,iFAAiF,CAC9G,CAAC;IACJ,CAAC;IACD,MAAM,IAAI,GAAG,gBAAgB,CAAC,MAAM,EAAE,EAAE,kBAAkB,EAAE,IAAI,EAAE,CAAC,CAAC;IACpE,MAAM,kBAAkB,CAAC,WAAW,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;IACtD,gBAAgB,CAAC,IAAI,CAAC,MAAM,0BAA0B,CAAC,WAAW,EAAE,CAAC,GAAG,4BAA4B,CAAC,CAAC,CAAC,CAAC;IACxG,gBAAgB,CAAC,IAAI,CAAC,MAAM,0BAA0B,CAAC,WAAW,EAAE,CAAC,GAAG,2BAA2B,CAAC,CAAC,CAAC,CAAC;IACvG,MAAM,iBAAiB,GAAgB,QAAQ,CAAC,SAAS,CAAC,KAAK,KAAK,QAAQ;QAC1E,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,YAAY,EAAE,SAAS,EAAE;QAClD,CAAC,CAAC,IAAI,CAAC;IACT,MAAM,cAAc,GAAG,MAAM,sCAAsC,CAAC,WAAW,CAAC,CAAC;IACjF,IAAI,gBAAgB,GAAG,MAAM,8BAA8B,CAAC,WAAW,CAAC,CAAC;IACzE,IAAI,gBAAgB,CAAC,MAAM,KAAK,SAAS;QACvC,gBAAgB,CAAC,UAAU,KAAK,+BAA+B,IAAI,gBAAgB,CAAC,mBAAmB,EAAE,CAAC;QAC1G,gBAAgB,GAAG,MAAM,8BAA8B,CAAC,WAAW,EAAE;YACnE,6BAA6B,EAAE,gBAAgB,CAAC,mBAAmB;SACpE,CAAC,CAAC;IACL,CAAC;IACD,MAAM,aAAa,GAAG,oBAAoB,CAAC,iBAAiB,EAAE,QAAQ,CAAC,CAAC;IACxE,IAAI,iBAAiB,GAAG,MAAM,yBAAyB,CACrD,WAAW,EAAE,aAAa,EAAE,2BAA2B,CAAC,QAAQ,EAAE,iBAAiB,CAAC,CACrF,CAAC;IACF,IAAI,gBAAgB,CAAC,MAAM,KAAK,UAAU,IAAI,cAAc,CAAC,MAAM,CAAC,cAAc,KAAK,IAAI,EAAE,CAAC;QAC5F,iBAAiB,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YACpD,GAAG,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI;YACpC,MAAM,EAAE,8FAA8F;SACvG,CAAC,CAAC,CAAC;IACN,CAAC;IACD,MAAM,UAAU,GAAG,2BAA2B,CAAC,iBAAiB,EAAE,QAAQ,CAAC,OAAO,CAAC,QAAQ,EAAE,iBAAiB,CAAC,CAAC;IAChH,MAAM,MAAM,GAAG,oBAAoB,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;IAC1D,MAAM,YAAY,GAAG;QACnB,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,SAAS,KAAK,cAAc,CAAC;QACrE,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE,CACnC,QAAQ,CAAC,SAAS,KAAK,SAAS;YAChC,iBAAiB,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,KAAK,KAAK,QAAQ,CAAC,iBAAiB,CAAC,CAChG;KACF,CAAC;IACF,MAAM,SAAS,GAAG,MAAM,sBAAsB,CAAC,WAAW,EAAE,QAAQ,EAAE,YAAY,EAAE,gBAAgB,CAAC,CAAC;IACtG,IAAI,gBAAgB,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;QAC3C,SAAS,CAAC,IAAI,CAAC,GAAG,gBAAgB,CAAC,aAAa,CAAC,CAAC;IACpD,CAAC;SAAM,IAAI,gBAAgB,CAAC,MAAM,KAAK,SAAS,IAAI,gBAAgB,CAAC,OAAO,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;QACpG,SAAS,CAAC,IAAI,CACZ,MAAM,0BAA0B,CAAC,WAAW,EAAE,gBAAgB,CAAC,OAAO,CAAC,OAAO,CAAC,qBAAqB,CAAC,EACrG,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CACrE,0BAA0B,CAAC,WAAW,EAAE,IAAI,CAAC,aAAa,CAAC,CAC5D,CAAC,CACH,CAAC;IACJ,CAAC;IACD,MAAM,OAAO,GAAG,MAAM,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;IACtE,MAAM,yBAAyB,GAAG,QAAQ,CAAC,eAAe,KAAK,CAAC;QAC9D,4CAA4C,CAAC,QAAQ,CAAC,CAAC;IACzD,MAAM,eAAe,GAAG,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE;QACxD,cAAc,EAAE,QAAQ,CAAC,SAAS,CAAC,KAAK,EAAE,gBAAgB,EAAE,QAAQ,CAAC,gBAAgB;KACtF,CAAC,CAAC;IACH,IAAI,cAAc,CAAC,MAAM,CAAC,cAAc,KAAK,IAAI,IAAI,gBAAgB,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;QAC5F,oCAAoC,CAAC,eAAe,EAAE,QAAQ,CAAC,CAAC;IAClE,CAAC;IACD,MAAM,qBAAqB,GAAG,CAAC,kBAAkB,CAAC,eAAe,CAAC,OAAO,CAAC,QAAQ,EAAE,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC/G,MAAM,wBAAwB,GAC5B,gBAAgB,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC;QACtC,MAAM,EAAE,SAAS,EAAE,qBAAqB,EAAE,EAAE;QAC5C,WAAW,EAAE,EAAE,iBAAiB,EAAE,EAAE,EAAE,eAAe,EAAE,EAAE,EAAE;QAC3D,MAAM,EAAE,gBAAgB,CAAC,MAAM;QAC/B,MAAM,EAAE,6GAA6G;KACtH,CAAC,CAAC,CAAC,gBAAgB,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC;QAC3C,MAAM,EAAE,yBAAyB;QACjC,qBAAqB,EAAE,CAAC;gBACtB,KAAK,EAAE,+BAA+B;gBACtC,IAAI,EAAE,gBAAgB,CAAC,YAAY,CAAC,cAAc;gBAClD,EAAE,EAAE,gBAAgB,CAAC,YAAY,CAAC,cAAc;aACjD,CAAC;QACF,WAAW,EAAE,EAAE,iBAAiB,EAAE,EAAE,EAAE,eAAe,EAAE,CAAC,GAAG,QAAQ,CAAC,EAAE;QACtE,MAAM,EAAE,CAAC,6GAA6G,CAAC;QACvH,MAAM,EAAE,2FAA2F;KACpG,CAAC,CAAC,CAAC,4BAA4B,CAAC,cAAc,CAAC,CAAC;IACnD,MAAM,kBAAkB,GAAG,MAAM,gCAAgC,CAAC,WAAW,EAC3E,gBAAgB,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,gBAAgB,CAAC,SAAS,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IACtG,IAAI,gBAAgB,CAAC,MAAM,KAAK,UAAU,IAAI,kBAAkB,CAAC,MAAM,KAAK,cAAc,EAAE,CAAC;QAC3F,kBAAkB,CAAC,MAAM,GAAG,SAAS,CAAC;IACxC,CAAC;IACD,MAAM,cAAc,GAAG,4BAA4B,CAAC,CAAC,wBAAwB,EAAE,kBAAkB,CAAC,CAAC,CAAC;IACpG,MAAM,mBAAmB,GAAG,gBAAgB,CAAC,MAAM,KAAK,UAAU;QAChE,gBAAgB,CAAC,MAAM,KAAK,SAAS,IAAI,gBAAgB,CAAC,OAAO,CAAC,MAAM,KAAK,WAAW,CAAC;IAC3F,MAAM,kBAAkB,GAAG,mBAAmB;QAC5C,CAAC,CAAC,MAAM,2BAA2B,CAAC,WAAW,EAAE,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC;QAC1E,CAAC,CAAC,SAAS,CAAC;IACd,MAAM,cAAc,GAAG,mBAAmB,CAAC,CAAC,CAAC,MAAM,4BAA4B,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACzG,OAAO;QACL,WAAW;QACX,cAAc,EAAE,MAAM,4BAA4B,CAAC,WAAW,CAAC;QAC/D,QAAQ;QACR,IAAI;QACJ,UAAU;QACV,MAAM;QACN,OAAO;QACP,SAAS,EAAE,IAAI,GAAG,CAAC,QAAQ,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC,CAAC;QACjG,iBAAiB;QACjB,SAAS,EAAE,qBAAqB,CAAC,SAAS,EAAE,WAAW,CAAC;QACxD,cAAc;QACd,gBAAgB;QAChB,kBAAkB;QAClB,cAAc;QACd,cAAc;QACd,yBAAyB;QACzB,qBAAqB;QACrB,sBAAsB,EAAE,eAAe,CAAC,QAAQ,EAAE,eAAe,CAAC;QAClE,OAAO,EAAE,gBAAgB,CAAC,OAAO,CAAC;QAClC,QAAQ,EAAE,QAAQ,CAAC,OAAO,CAAC,IAAI,yBAAyB,IAAI,qBAAqB;YAC/E,iBAAiB,CAAC,MAAM,GAAG,CAAC,IAAI,cAAc,CAAC,MAAM,KAAK,SAAS;YACnE,gBAAgB,CAAC,MAAM,KAAK,UAAU;KACzC,CAAC;AACJ,CAAC;AAID,MAAM,UAAU,qBAAqB,CACnC,SAAyC,EACzC,WAAmB;IAEnB,MAAM,MAAM,GAAG,IAAI,GAAG,EAA+B,CAAC;IACtD,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QACjC,MAAM,GAAG,GAAG,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1C,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACjC,IAAI,QAAQ,IAAI,CACd,CAAC,QAAQ,CAAC,OAAO,KAAK,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,KAAK,SAAS,CAAC;YACrE,QAAQ,CAAC,IAAI,KAAK,QAAQ,CAAC,IAAI;YAC/B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,OAAQ,CAAC,KAAK,KAAK,CACtD,EAAE,CAAC;YACF,MAAM,IAAI,eAAe,CACvB,yCAAyC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EACvE,gBAAgB,EAAE,OAAO,mBAAmB,CAAC,WAAW,EAAE,OAAO,CAAC,SAAS,CAC5E,CAAC;QACJ,CAAC;QACD,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IAC5B,CAAC;IACD,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;AAC9B,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { type ProjectFileMutation } from '../../adapters/filesystem/project-transaction.js';
|
|
2
|
+
import { type MigrationJournal } from '../../governance-activation/history-contracts.js';
|
|
3
|
+
import type { ExecutionContext } from '../context.js';
|
|
4
|
+
import { type UpdateInspection } from './inspection.js';
|
|
5
|
+
import type { UpdateMigrationSummary, UpdateRevalidationSummary } from './output.js';
|
|
6
|
+
import type { ReviewedUpdatePlan } from './review-plan.js';
|
|
7
|
+
export declare function describeUpdateMigration(inspection: UpdateInspection): UpdateMigrationSummary;
|
|
8
|
+
export declare function describeUpdateRevalidation(review: ReviewedUpdatePlan): UpdateRevalidationSummary;
|
|
9
|
+
export declare function materializeUpdateMutations(inspection: UpdateInspection, review: ReviewedUpdatePlan, now: Date): {
|
|
10
|
+
mutations: ProjectFileMutation[];
|
|
11
|
+
journal?: MigrationJournal;
|
|
12
|
+
};
|
|
13
|
+
export declare function verifyHistoryBeforeReplacement(inspection: UpdateInspection, mutation: ProjectFileMutation): Promise<void>;
|
|
14
|
+
export declare function runUpdateRevalidation(inspection: UpdateInspection, review: ReviewedUpdatePlan, context: ExecutionContext, validateReview?: () => Promise<void>): Promise<UpdateRevalidationSummary>;
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
import { applyProjectFileTransaction, captureProjectFileSnapshot } from '../../adapters/filesystem/project-transaction.js';
|
|
2
|
+
import { withProjectMutationLock } from '../../adapters/filesystem/project-lock.js';
|
|
3
|
+
import { canonicalJson } from '../../domain/governance/activation/canonical-json.js';
|
|
4
|
+
import { manifestDisplayPath } from '../../domain/project/paths.js';
|
|
5
|
+
import { activationHistoryIndexPathParts, historicalActivationStatePathParts, migrationStateFilePathParts, parseHistoryJson, rawHistoryDigest, validateMigrationJournal } from '../../governance-activation/history-contracts.js';
|
|
6
|
+
import { finalizeActivationHistoryMigration } from '../../governance-activation/migration-history.js';
|
|
7
|
+
import { UpdatePlanError } from './inspection.js';
|
|
8
|
+
import { executeLocalRevalidation } from './revalidation.js';
|
|
9
|
+
import { postUpdateProtectedInputs } from './revalidation-plan.js';
|
|
10
|
+
import { formatUpdateCommand } from './command-guidance.js';
|
|
11
|
+
export function describeUpdateMigration(inspection) {
|
|
12
|
+
const history = inspection.historyMigration;
|
|
13
|
+
if (history.status === 'eligible') {
|
|
14
|
+
const indexPath = activationHistoryIndexPathParts(history.index.snapshotId);
|
|
15
|
+
return {
|
|
16
|
+
status: 'available',
|
|
17
|
+
sourceIdentity: history.semanticPlan.sourceIdentity,
|
|
18
|
+
targetIdentity: history.semanticPlan.targetIdentity,
|
|
19
|
+
snapshotId: history.index.snapshotId,
|
|
20
|
+
historyPaths: history.index.files.map((file) => manifestDisplayPath(file.originalPathParts)),
|
|
21
|
+
operations: [
|
|
22
|
+
...(history.historyDisposition === 'create'
|
|
23
|
+
? [...history.index.files.map((file) => file.copyPathParts), indexPath].map((parts) => ({
|
|
24
|
+
type: 'write', path: manifestDisplayPath(parts)
|
|
25
|
+
})) : []),
|
|
26
|
+
...history.requiredRetirements.map((entry) => ({ type: 'delete', path: manifestDisplayPath(entry.pathParts) })),
|
|
27
|
+
{ type: 'write', path: manifestDisplayPath([...historicalActivationStatePathParts]) },
|
|
28
|
+
{ type: 'write', path: manifestDisplayPath([...migrationStateFilePathParts]) }
|
|
29
|
+
],
|
|
30
|
+
issues: ['Preserve original v1 bytes, create a linked v2 successor, and establish fresh local proof.']
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
if (history.status === 'blocked') {
|
|
34
|
+
return {
|
|
35
|
+
status: 'blocked', reasonCode: history.reasonCode, sourceIdentity: null, targetIdentity: null,
|
|
36
|
+
historyPaths: [], issues: history.issues
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
if (history.status === 'current' && history.history.status === 'committed') {
|
|
40
|
+
return {
|
|
41
|
+
status: 'committed',
|
|
42
|
+
sourceIdentity: history.history.journal.sourceIdentity,
|
|
43
|
+
targetIdentity: history.history.journal.targetIdentity,
|
|
44
|
+
snapshotId: history.history.journal.snapshotId,
|
|
45
|
+
historyPaths: history.history.index.files.map((file) => manifestDisplayPath(file.originalPathParts)),
|
|
46
|
+
issues: []
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
return { status: 'not-required', sourceIdentity: null, targetIdentity: null, historyPaths: [], issues: [] };
|
|
50
|
+
}
|
|
51
|
+
export function describeUpdateRevalidation(review) {
|
|
52
|
+
if (!review.revalidation)
|
|
53
|
+
return { status: 'not-required', nextPhase: null, issues: [] };
|
|
54
|
+
const issues = review.revalidation.preview.phases.flatMap((phase) => phase.blockers.map((blocker) => `${phase.phaseId}: ${blocker}`));
|
|
55
|
+
return {
|
|
56
|
+
status: issues.length ? 'blocked' : review.needsRevalidation ? 'pending' : 'complete',
|
|
57
|
+
nextPhase: review.revalidation.preview.phases[0]?.phaseId ?? null,
|
|
58
|
+
issues,
|
|
59
|
+
preview: review.revalidation.preview
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
export function materializeUpdateMutations(inspection, review, now) {
|
|
63
|
+
if (inspection.historyMigration.status !== 'eligible') {
|
|
64
|
+
return { mutations: review.writePlan.mutations };
|
|
65
|
+
}
|
|
66
|
+
const history = inspection.historyMigration;
|
|
67
|
+
const finalized = finalizeActivationHistoryMigration(history, review.descriptor.fingerprint, now);
|
|
68
|
+
const snapshotKeys = new Set([
|
|
69
|
+
activationHistoryIndexPathParts(history.index.snapshotId).join('\0'),
|
|
70
|
+
...history.index.files.map((file) => file.copyPathParts.join('\0'))
|
|
71
|
+
]);
|
|
72
|
+
const before = finalized.mutations.filter((mutation) => snapshotKeys.has(mutation.pathParts.join('\0')));
|
|
73
|
+
const successor = finalized.mutations.filter((mutation) => !snapshotKeys.has(mutation.pathParts.join('\0')));
|
|
74
|
+
const core = review.writePlan.mutations.filter((mutation) => mutation.pathParts.join('\0') !== 'liftoff.manifest.json');
|
|
75
|
+
const manifest = review.writePlan.mutations.filter((mutation) => mutation.pathParts.join('\0') === 'liftoff.manifest.json');
|
|
76
|
+
if (manifest.length !== 1) {
|
|
77
|
+
throw new UpdatePlanError('The successor has no uniquely planned manifest write.', 'invalid-successor-plan', `Run ${formatUpdateCommand(inspection.projectRoot, 'check')} again.`);
|
|
78
|
+
}
|
|
79
|
+
return { mutations: [...before, ...core, ...successor, ...manifest], journal: finalized.journal };
|
|
80
|
+
}
|
|
81
|
+
export async function verifyHistoryBeforeReplacement(inspection, mutation) {
|
|
82
|
+
if (inspection.historyMigration.status !== 'eligible')
|
|
83
|
+
return;
|
|
84
|
+
const original = inspection.historyMigration.index.files.find((file) => file.originalPathParts.join('\0') === mutation.pathParts.join('\0'));
|
|
85
|
+
if (!original)
|
|
86
|
+
return;
|
|
87
|
+
const copy = await captureProjectFileSnapshot(inspection.projectRoot, original.copyPathParts);
|
|
88
|
+
if (!copy.content || rawHistoryDigest(copy.content) !== original.digest) {
|
|
89
|
+
throw new UpdatePlanError(`The original bytes were not safely preserved before replacement: ${manifestDisplayPath(mutation.pathParts)}`, 'history-preservation-failed', 'Preserve the original data and review the transaction recovery report.');
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
export async function runUpdateRevalidation(inspection, review, context, validateReview) {
|
|
93
|
+
if (!review.revalidation)
|
|
94
|
+
return { status: 'not-required', nextPhase: null, issues: [] };
|
|
95
|
+
const prepared = review.revalidation;
|
|
96
|
+
const now = context.updateNow ?? (() => new Date());
|
|
97
|
+
return withProjectMutationLock(inspection.projectRoot, async () => {
|
|
98
|
+
await validateReview?.();
|
|
99
|
+
let journalSnapshot = await captureProjectFileSnapshot(inspection.projectRoot, [...migrationStateFilePathParts]);
|
|
100
|
+
if (!journalSnapshot.content) {
|
|
101
|
+
throw new UpdatePlanError('The committed migration journal is missing.', 'migration-journal-missing', 'Preserve v2 and restore the declared migration history before retrying.');
|
|
102
|
+
}
|
|
103
|
+
let journal = validateMigrationJournal(parseHistoryJson(journalSnapshot.content, 'governance/migration-state.json'));
|
|
104
|
+
const snapshotId = journal.snapshotId;
|
|
105
|
+
let progressWrites = 0;
|
|
106
|
+
const maximumProgressWrites = 2 * (prepared.preview.phases.length + prepared.preview.reusedPhases.length) + 2;
|
|
107
|
+
const protectedInputs = postUpdateProtectedInputs(inspection, review.writePlan, prepared, context.runner);
|
|
108
|
+
async function recordProgress(progress) {
|
|
109
|
+
if (++progressWrites > maximumProgressWrites) {
|
|
110
|
+
throw new UpdatePlanError('Local revalidation exceeded its approved progress-write bound.', 'revalidation-scope-changed', 'Run a fresh update check before continuing.');
|
|
111
|
+
}
|
|
112
|
+
const activePhase = progress.phaseId ?? (progress.status === 'blocked'
|
|
113
|
+
? journal.revalidation.phases.find((phase) => !progress.phaseResults.some((result) => result.phaseId === phase.phaseId &&
|
|
114
|
+
(result.status === 'verified' || result.status === 'already-complete')))?.phaseId ?? journal.revalidation.phases[0]?.phaseId
|
|
115
|
+
: undefined);
|
|
116
|
+
const phases = journal.revalidation.phases.map((phase) => {
|
|
117
|
+
const result = progress.phaseResults.find((entry) => entry.phaseId === phase.phaseId);
|
|
118
|
+
const reused = prepared.preview.reusedPhases.find((entry) => entry.phaseId === phase.phaseId);
|
|
119
|
+
if (result?.status === 'verified' || result?.status === 'already-complete') {
|
|
120
|
+
const evidenceId = result.evidence?.evidenceId ?? reused?.evidenceId;
|
|
121
|
+
if (!evidenceId)
|
|
122
|
+
throw new Error(`Revalidation supplied no evidence reference for ${phase.phaseId}.`);
|
|
123
|
+
return { ...phase, status: 'complete', evidenceIds: [evidenceId], blockers: [] };
|
|
124
|
+
}
|
|
125
|
+
if (result?.status === 'blocked') {
|
|
126
|
+
return { ...phase, status: 'blocked', evidenceIds: [], blockers: [...result.blockers] };
|
|
127
|
+
}
|
|
128
|
+
if (activePhase === phase.phaseId) {
|
|
129
|
+
return {
|
|
130
|
+
...phase, status: progress.status === 'blocked' ? 'blocked' : 'running',
|
|
131
|
+
evidenceIds: [], blockers: progress.status === 'blocked' ? [...progress.blockers] : []
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
if (reused)
|
|
135
|
+
return { ...phase, status: 'complete', evidenceIds: [reused.evidenceId], blockers: [] };
|
|
136
|
+
if (prepared.preview.phases.some((entry) => entry.phaseId === phase.phaseId)) {
|
|
137
|
+
return { ...phase, status: 'pending', evidenceIds: [], blockers: [] };
|
|
138
|
+
}
|
|
139
|
+
return phase;
|
|
140
|
+
});
|
|
141
|
+
const status = progress.status === 'complete' && phases.some((phase) => phase.status !== 'complete')
|
|
142
|
+
? 'blocked' : progress.status;
|
|
143
|
+
const nextAction = status === 'complete' ? null :
|
|
144
|
+
progress.blockers.join('; ') || 'Continue only the next separately reviewed supported governance phase.';
|
|
145
|
+
const next = validateMigrationJournal({
|
|
146
|
+
...journal,
|
|
147
|
+
revalidation: { status, updatedAt: now().toISOString(), phases, nextAction }
|
|
148
|
+
});
|
|
149
|
+
if (next.snapshotId !== snapshotId)
|
|
150
|
+
throw new Error('The active migration identity changed.');
|
|
151
|
+
const content = canonicalJson(next);
|
|
152
|
+
await applyProjectFileTransaction(inspection.projectRoot, [{
|
|
153
|
+
type: 'write', pathParts: [...migrationStateFilePathParts], content
|
|
154
|
+
}], { preconditions: [journalSnapshot] });
|
|
155
|
+
journal = next;
|
|
156
|
+
journalSnapshot = {
|
|
157
|
+
pathParts: [...migrationStateFilePathParts],
|
|
158
|
+
content: Buffer.from(content),
|
|
159
|
+
mode: journalSnapshot.mode
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
const result = await executeLocalRevalidation({
|
|
163
|
+
approvedPreview: prepared.preview,
|
|
164
|
+
protectedInputs,
|
|
165
|
+
runner: context.runner,
|
|
166
|
+
clock: now,
|
|
167
|
+
onProgress: recordProgress
|
|
168
|
+
});
|
|
169
|
+
return {
|
|
170
|
+
status: result.status === 'complete' && journal.revalidation.status === 'complete' ? 'complete' : 'blocked',
|
|
171
|
+
nextPhase: result.nextIncompletePhase,
|
|
172
|
+
issues: result.blockers.length ? result.blockers : journal.revalidation.nextAction ? [journal.revalidation.nextAction] : [],
|
|
173
|
+
preview: prepared.preview,
|
|
174
|
+
phaseResults: result.phaseResults
|
|
175
|
+
};
|
|
176
|
+
});
|
|
177
|
+
}
|
|
178
|
+
//# sourceMappingURL=migration-runtime.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migration-runtime.js","sourceRoot":"","sources":["../../../src/application/update/migration-runtime.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
import type { ActivationIdentity } from '../../domain/governance/activation/types.js';
|
|
2
|
+
import type { PresentationSession } from '../../terminal.js';
|
|
3
|
+
import type { UpdateApprovalResult } from './approval.js';
|
|
4
|
+
import type { UpdateInspection } from './inspection.js';
|
|
5
|
+
import type { UpdateWritePlan } from './write-plan.js';
|
|
6
|
+
import type { LocalRevalidationPhaseResult, LocalRevalidationPreview } from './revalidation.js';
|
|
7
|
+
export declare const updateReportSchemaVersion: 3;
|
|
8
|
+
export interface UpdatePlanSummary {
|
|
9
|
+
mode: 'normal' | 'force';
|
|
10
|
+
fingerprint: string;
|
|
11
|
+
eligible: boolean;
|
|
12
|
+
writeCount: number;
|
|
13
|
+
blockers: readonly string[];
|
|
14
|
+
}
|
|
15
|
+
export interface UpdateMigrationSummary {
|
|
16
|
+
status: 'not-required' | 'available' | 'blocked' | 'committed';
|
|
17
|
+
sourceIdentity: ActivationIdentity | null;
|
|
18
|
+
targetIdentity: ActivationIdentity | null;
|
|
19
|
+
snapshotId?: string;
|
|
20
|
+
reasonCode?: string;
|
|
21
|
+
historyPaths: readonly string[];
|
|
22
|
+
operations?: readonly {
|
|
23
|
+
type: 'write' | 'delete';
|
|
24
|
+
path: string;
|
|
25
|
+
}[];
|
|
26
|
+
issues: readonly string[];
|
|
27
|
+
}
|
|
28
|
+
export interface UpdateRevalidationSummary {
|
|
29
|
+
status: 'not-required' | 'pending' | 'running' | 'blocked' | 'complete';
|
|
30
|
+
nextPhase: string | null;
|
|
31
|
+
issues: readonly string[];
|
|
32
|
+
preview?: LocalRevalidationPreview;
|
|
33
|
+
phaseResults?: readonly LocalRevalidationPhaseResult[];
|
|
34
|
+
}
|
|
35
|
+
export interface UpdateReportInput {
|
|
36
|
+
mode: 'check' | 'apply';
|
|
37
|
+
status: 'current' | 'update-available' | 'applied' | 'partial' | 'blocked' | 'failed';
|
|
38
|
+
reasonCode: string;
|
|
39
|
+
projectRoot: string;
|
|
40
|
+
plans?: readonly UpdatePlanSummary[];
|
|
41
|
+
selectedPlanFingerprint?: string;
|
|
42
|
+
receipt?: {
|
|
43
|
+
status: 'not-required' | 'issued' | 'matched' | 'missing' | 'stale' | 'consumed';
|
|
44
|
+
path?: string;
|
|
45
|
+
};
|
|
46
|
+
approval?: UpdateApprovalResult;
|
|
47
|
+
migration?: UpdateMigrationSummary;
|
|
48
|
+
revalidation?: UpdateRevalidationSummary;
|
|
49
|
+
committed?: boolean;
|
|
50
|
+
message?: string;
|
|
51
|
+
remedy?: string;
|
|
52
|
+
warnings?: readonly string[];
|
|
53
|
+
}
|
|
54
|
+
export declare function buildUpdateReport(input: UpdateReportInput, inspection?: UpdateInspection, writePlan?: UpdateWritePlan): {
|
|
55
|
+
mode: 'check' | 'apply';
|
|
56
|
+
status: 'current' | 'update-available' | 'applied' | 'partial' | 'blocked' | 'failed';
|
|
57
|
+
reasonCode: string;
|
|
58
|
+
projectRoot: string;
|
|
59
|
+
selectedPlanFingerprint?: string;
|
|
60
|
+
approval?: UpdateApprovalResult;
|
|
61
|
+
message?: string;
|
|
62
|
+
remedy?: string;
|
|
63
|
+
warnings?: readonly string[];
|
|
64
|
+
schemaVersion: 3;
|
|
65
|
+
scope: string;
|
|
66
|
+
cliVersion: string;
|
|
67
|
+
projectVersion: string | null;
|
|
68
|
+
plans: readonly UpdatePlanSummary[];
|
|
69
|
+
receipt: {
|
|
70
|
+
status: 'not-required' | 'issued' | 'matched' | 'missing' | 'stale' | 'consumed';
|
|
71
|
+
path?: string;
|
|
72
|
+
};
|
|
73
|
+
committed: boolean;
|
|
74
|
+
entries: {
|
|
75
|
+
logicalName: string;
|
|
76
|
+
status: import("../../reconcile.js").ReconcileStatus;
|
|
77
|
+
path: string;
|
|
78
|
+
previousPath?: string | undefined;
|
|
79
|
+
fileDeleted?: boolean | undefined;
|
|
80
|
+
reason: string;
|
|
81
|
+
}[];
|
|
82
|
+
written: string[];
|
|
83
|
+
removed: {
|
|
84
|
+
logicalName: string;
|
|
85
|
+
status: string;
|
|
86
|
+
path: string;
|
|
87
|
+
fileDeleted: boolean;
|
|
88
|
+
reason: string;
|
|
89
|
+
}[];
|
|
90
|
+
skipped: {
|
|
91
|
+
logicalName: string;
|
|
92
|
+
status: import("../../reconcile.js").ReconcileStatus;
|
|
93
|
+
path: string;
|
|
94
|
+
reason: string;
|
|
95
|
+
}[];
|
|
96
|
+
summary: import("./reporting.js").UpdateSummary | null;
|
|
97
|
+
managedCore: {
|
|
98
|
+
entries: {
|
|
99
|
+
logicalName: string;
|
|
100
|
+
status: import("../../reconcile.js").ReconcileStatus;
|
|
101
|
+
path: string;
|
|
102
|
+
previousPath?: string | undefined;
|
|
103
|
+
fileDeleted?: boolean | undefined;
|
|
104
|
+
reason: string;
|
|
105
|
+
}[];
|
|
106
|
+
written: string[];
|
|
107
|
+
removed: {
|
|
108
|
+
logicalName: string;
|
|
109
|
+
status: string;
|
|
110
|
+
path: string;
|
|
111
|
+
fileDeleted: boolean;
|
|
112
|
+
reason: string;
|
|
113
|
+
}[];
|
|
114
|
+
skipped: {
|
|
115
|
+
logicalName: string;
|
|
116
|
+
status: import("../../reconcile.js").ReconcileStatus;
|
|
117
|
+
path: string;
|
|
118
|
+
reason: string;
|
|
119
|
+
}[];
|
|
120
|
+
summary: import("./reporting.js").UpdateSummary | null;
|
|
121
|
+
};
|
|
122
|
+
provisioning: object[];
|
|
123
|
+
ownershipMigrationPending: boolean;
|
|
124
|
+
manifestChanges: import("./reporting.js").ManifestChange[];
|
|
125
|
+
activationIdentity: ActivationIdentity | null;
|
|
126
|
+
activationMigration: UpdateMigrationSummary;
|
|
127
|
+
activationStateMigration: UpdateMigrationSummary;
|
|
128
|
+
revalidation: UpdateRevalidationSummary;
|
|
129
|
+
reconciliation: import("./reporting.js").ManagedUpdateReconciliationReport | null;
|
|
130
|
+
projectBytesWritten?: number | undefined;
|
|
131
|
+
};
|
|
132
|
+
export declare function renderUpdatePreview(presentation: PresentationSession, inspection: UpdateInspection, plans: readonly UpdatePlanSummary[], migration: UpdateMigrationSummary, revalidation: UpdateRevalidationSummary, receiptPath?: string): void;
|
|
133
|
+
export declare function renderUpdateSkipped(presentation: PresentationSession, inspection: UpdateInspection, writePlan: UpdateWritePlan): void;
|
|
134
|
+
export declare function renderUpdateApprovalScope(presentation: PresentationSession, jsonMode: boolean, plan: UpdatePlanSummary, writePlan: UpdateWritePlan, migration: UpdateMigrationSummary, revalidation: UpdateRevalidationSummary): void;
|