





















@@ -121,6 +121,23 @@ function assertCorruptUpdate(updateJsonPath, pluginId) {
121121if (!plugins) {
122122throw new Error(`missing postUpdate.plugins in update output: ${JSON.stringify(payload)}`);
123123}
124+assertCorruptPluginTolerated(plugins, pluginId);
125+}
126+127+function assertCorruptPluginResult(pluginJsonPath, pluginId) {
128+const plugins = readJson(pluginJsonPath);
129+assertCorruptPluginTolerated(plugins, pluginId);
130+}
131+132+function assertCorruptPluginTolerated(plugins, pluginId) {
133+const evidence = collectPluginEvidence(plugins, pluginId);
134+if (plugins.status === "ok") {
135+if (isCorruptPluginDisabledAfterUpdate(evidence, pluginId)) {
136+return;
137+}
138+assertCorruptPluginCleanOrRepaired(evidence);
139+return;
140+}
124141if (plugins.status !== "warning") {
125142throw new Error(
126143`expected post-update plugin status warning, got ${JSON.stringify(plugins.status)}`,
@@ -129,33 +146,49 @@ function assertCorruptUpdate(updateJsonPath, pluginId) {
129146assertCorruptPluginDetails(plugins, pluginId);
130147}
131148132-function assertCorruptPluginResult(pluginJsonPath, pluginId) {
133-const plugins = readJson(pluginJsonPath);
134-if (plugins.status !== "warning") {
149+function isCorruptPluginDisabledAfterUpdate(evidence, pluginId) {
150+const outcome = evidence.outcome;
151+const message = typeof outcome?.message === "string" ? outcome.message : "";
152+return (
153+outcome?.status === "skipped" &&
154+message.includes(`Disabled "${pluginId}" after plugin update failure`) &&
155+message.includes("OpenClaw will continue without it")
156+);
157+}
158+159+function assertCorruptPluginCleanOrRepaired(evidence) {
160+if (evidence.outcome) {
135161throw new Error(
136-`expected post-update plugin status warning, got ${JSON.stringify(plugins.status)}`,
162+`expected clean or repaired corrupt plugin state, got ${JSON.stringify(evidence)}`,
163+);
164+}
165+if (evidence.warning || evidence.integrityDrift || evidence.syncMessages.length > 0) {
166+throw new Error(
167+`expected warning post-update status for corrupt plugin evidence, got ok: ${JSON.stringify(
168+ evidence,
169+ )}`,
137170);
138171}
139-assertCorruptPluginDetails(plugins, pluginId);
140172}
141173142174function assertCorruptPluginDetails(plugins, pluginId) {
143-const outcomes = plugins.npm?.outcomes ?? [];
144-const outcome = outcomes.find((entry) => entry?.pluginId === pluginId);
175+const evidence = collectPluginEvidence(plugins, pluginId);
176+const outcome = evidence.outcome;
145177if (!outcome || outcome.status !== "error") {
146178throw new Error(
147179`expected error outcome for ${pluginId}, got ${JSON.stringify({
148- outcomes,
180+ outcomes: plugins.npm?.outcomes ?? [],
149181 warnings: plugins.warnings ?? [],
150182 sync: plugins.sync,
151183 integrityDrifts: plugins.integrityDrifts ?? [],
152184 })}`,
153185);
154186}
155-const warnings = plugins.warnings ?? [];
156-const warning = warnings.find((entry) => entry?.pluginId === pluginId);
187+const warning = evidence.warning;
157188if (!warning) {
158-throw new Error(`expected warning for ${pluginId}, got ${JSON.stringify(warnings)}`);
189+throw new Error(
190+`expected warning for ${pluginId}, got ${JSON.stringify(plugins.warnings ?? [])}`,
191+);
159192}
160193const text = JSON.stringify({ outcome, warning });
161194for (const expected of [
@@ -169,6 +202,21 @@ function assertCorruptPluginDetails(plugins, pluginId) {
169202}
170203}
171204205+function collectPluginEvidence(plugins, pluginId) {
206+const outcomes = plugins.npm?.outcomes ?? [];
207+const warnings = plugins.warnings ?? [];
208+const integrityDrifts = plugins.integrityDrifts ?? [];
209+const syncMessages = [...(plugins.sync?.warnings ?? []), ...(plugins.sync?.errors ?? [])].filter(
210+(message) => String(message).includes(pluginId),
211+);
212+return {
213+outcome: outcomes.find((entry) => entry?.pluginId === pluginId),
214+warning: warnings.find((entry) => entry?.pluginId === pluginId),
215+integrityDrift: integrityDrifts.find((entry) => entry?.pluginId === pluginId),
216+ syncMessages,
217+};
218+}
219+172220function assertLegacyPostUpdatePluginFailure(updateJsonPath) {
173221const payload = readJson(updateJsonPath);
174222if (payload.status !== "error" || payload.reason !== "post-update-plugins") {
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。